برنامهها و زبانهای کوچک؛ زیبایی، سادگی و مفهوم پیچیدگی ذاتی — Small Programs and Languages
خلاصه
این مقاله به بررسی جذابیت برنامهها و زبانهای برنامهنویسی بسیار کوچک و مینیمال میپردازد. این ابزارهای فشرده نه تنها کنجکاوی توسعهدهندگان را برمیانگیزند، بلکه مرزهای پیچیدگی ذاتی سیستمها را روشن کرده و اثبات میکنند که ایدههای بزرگ را میتوان در حجم بسیار کمی پیادهسازی کرد.
برنامهنویسان اغلب به سمت ابزارهای بزرگ و حجیم کشیده میشوند، اما پروژههای بسیار کوچک جذابیت خاص خود را دارند. وقتی کدی را میبینید که کاری شگفتانگیز را تنها در چند خط یا چند بایت انجام میدهد، حس کنجکاویتان تحریک میشود. این مقاله نگاهی دارد به چرایی جذابیت کدهای مینیمال و زبانهایی که میتوان هسته آنها را روی یک کارت یا چند صفحه توضیح داد.
جذابیت برنامههای مینیمال
برنامههای کوچک ذاتاً قابلدسترستر هستند. خواندن کدی با حجم ۲۰۰ خط بسیار سادهتر از پروژهای با ۲۰ هزار خط است. برای نمونه، بررسی کتابخانههای DOM diffing مانند ijk که تنها در ۲۵ خط کد نوشته شدهاند، یا نمونههای فوقالعاده کوچکی از زبان Forth در حد ۴۶ بایت، نشان میدهند که چگونه حجم کم، ترسِ روبرو شدن با سورسکد را از بین میبرد.
برخی از نمونههای معروف در تاریخ نرمافزار از این هم فراتر رفتهاند:
- مفسر زبان J که توسط Arthur Whitney تنها در یک صفحه و ۱۲۸ خط زبان C نوشته شد.
- سیستمعامل
kOSکه شامل پایگاه دادهkdbو محیط گرافیکی در یک ایمج قابل بوت ۹۰ کیلوبایتی است. - مفسر معروف Lisp که ویلیام برد (William Byrd) از آن به عنوان «زیباترین برنامه نوشتهشده» یاد میکند و هسته ارزیابی آن بسیار مختصر است.
مفاهیم و پیچیدگی Kolmogorov
شاید این سوال پیش بیاید که آیا کدگلفing (Code Golfing) و نوشتن کدهای فوقالعاده فشرده صرفاً یک سرگرمی است؟ نویسنده استدلال میکند که این کار معنای عمیقی دارد. بر اساس مفهوم پیچیدگی Kolmogorov، طول کوتاهترین برنامه نشاندهنده حد فاصل و حداقل پیچیدگی ذاتی یک مسئله است. وقتی میبینیم یک Lisp کامل به همراه Garbage Collection در ۴۳۶ بایت جا میشود، یا یک بازی سهبعدی در ۲ کیلوبایت جاوااسکریپت اجرا میشود، این یعنی مفهوم اصلی آن سیستم چنان ساده است که میتواند کاملاً در ذهن انسان جای بگیرد.
زبانهای برنامهنویسی کوچک
کاهش اندازه زبانها معمولاً به قیمت از دست رفتن قابلیت بیان (Expressiveness) تمام میشود. با این حال، زبانهایی وجود دارند که با کمترین میزان دستور زبان، قدرت فوقالعادهای ارائه میدهند:
- زبان Forth: که تنها ساختار دستوری آن فاصله (Space) است و انعطافپذیری خیرهکنندهای دارد.
- زبانهای خانواده Lisp: با هستهای بسیار کوچک و در عین حال قدرتمند.
- زبان Tcl: که در آن همهچیز یک رشته (String) است و ساختار عجیبی دارد.
- زبان Lua: با مستنداتی بسیار نازک (حدود ۲۷ صفحه) که نشان میدهد یک زبان کاربردی و اسکریپتی تا چه حد میتواند جمعوجور باشد.
دیوید آنگار (David Ungar)، از خالقان زبان Self، معتقد است که سادگی معمولاً بر قدرت بیانِ بیش از حد ترجیح دارد؛ چرا که سیستمهای بیش از حد پیچیده غیرقابلدرک میشوند.
چرا برای مهندسین اهمیت دارد؟
لزومی ندارد همیشه با کدهای مبهم و بسیار فشرده سروکار داشته باشید تا از آنها بهره ببرید. وجود چنین پروژههایی به ما اثبات میکند که مفاهیم پیچیده چقدر میتوانند کوچک باشند. این مینیمدلها استانداردی از سادگی را ارائه میدهند که میتوانیم هنگام طراحی سیستمهای خود از آنها الهام بگیریم.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل