Learnable Programming چیست و چه مزایایی برای دولوپرها دارد؟

Learnable Programming چیست و چه مزایایی برای دولوپرها دارد؟

Bret Victor یک متخصص تجربهٔ کاربری و برنامه‌نویس است که از تجربیات حرفه‌ای وی به کار در شرکت اپل می توان اشاره کرد اما امروزه وی را بیشتر به خاطر ایدهٔ Learnable Programming در دنیای توسعهٔ نرم‌افزار می‌شناسند. به طور کلی، وی بر این باور است که محیط‌های برنامه‌نویسی جدیدی می‌بایست خلق کرد که از آن طریق دولوپرها بتوانند با شرایط متفاوتی اقدام به کدنویسی کنند. 

پس از مطرح شدن ایدهٔ Learnable Programming هم یکسری اپلیکیشن‌های برنامه‌نویسی به بازار عرضه شدند که از آن جمله می‌توان به Alive و Light Table اشاره کرد که به صورت کاملاً عملی، این ایدهٔ نوین را پیاده‌سازی کرده‌اند (برای آشنایی بیشتر با ابزار Alive، به مقالهٔ کدنویسی زنده با استفاده از افزونهٔ Alive برای ویژوال استودیو و جهت آشنایی با Light Table، به مقالهٔ آشنایی با Light Table نسل جدیدی از ادیتورهای کد مراجعه نمایید). گفته می‌شود که برای محیط‌های برنامه‌نویسی مدرن، حداقل دو شرط زیر می‌بایست برآورده شود که عبارتند از:

- ترغیب برنامه‌نویسان به روش‌های فکر کردن حرفه‌ای
- توانمندسازی برنامه‌نویسان در جهت مشاهدهٔ خروجی کدهای خود به صورت لحظه‌ای (Real-time)

آنچه مسلم است اینکه مورد دوم کمک به عملی شدن گزینهٔ اول خواهد کرد. در واقع، نمایش خروجی کدهایی که دولوپرها می‌نویسند در آن واحد، به ایشان کمک می‌کند تا روش‌های فکر کردن و ایده‌پردازی جدید و متفاوتی را تجربه کنند. به طور کلی، از جمله مزایای یک سبک جدید برنامه‌نویسی می‌توان به موارد زیر اشاره کرد:

- برنامه‌نویس چیزی که مشاهده می‌کند را بهتر درک می‌کند: در واقع، برنامه‌نویسان به راحتی متوجه خواهند شد که تغییرات اعمال شده در کدهایشان چه نوع خروجی خواهد داشت.

- برنامه‌نویس می‌تواند به راحتی در کدهای خود گشت‌زنی کند: این نوع برنامه‌نویسی افراد را قادر خواهد ساخت تا در طول زمان بتوانند به راحتی کدهای خود را بررسی کرده و به جای آنکه برای مشاهدهٔ خروجی یک بلوک کد به خروجی اپلیکیشن مراجعه کنند، خواهند توانست در همان ویرایشگر کد خروجی را مشاهده کنند.

برخی مشکلات Learnable Programming
اگرچه این رویکرد جدید دارای مزایای بسیاری است اما این در حالی است که نقاط ضعفی هم دارا است. به عنوان یکی از اصلی‌ترین چالش‌های این رویکرد نوین در کدنویسی می‌توان به این مسأله اشاره کرد که در اینجا تمرکز روی خروجی دوبعدی است. در پاسخ به این سئوال که مشکل خروجی دوبعدی (2D) چیست؟ بایستی گفت که «همه چیز را خیلی ساده جلوه می‌دهد!» و این در حالی است که خیلی از نرم‌افزارها به این سادگی که ما فکر می‌کنیم نیستند.

برای روشن‌تر شدن این مسأله مثالی می‌زنیم. این رویکرد چگونه خواهد توانست اپلیکیشن‌های تجاری، دیتابیس‌ها، بک‌اندهای مالی و بسیاری از نرم‌افزارهای پیچیدهٔ دیگر را پشتیبانی کند؟ واقعیت امر این است که بسیاری از پروژه‌های برنامه‌نویسی حال حاضر در قالب یک خروجی دوبعدی نمی‌گنجند و بسیار پیچیده‌تر از آن هستند که به ذهن می‌رسند.

چالش دیگر، توابعی است که آرگومان‌های ورودی پیچیده‌ای برای اجرا نیاز دارند و در اینجا است که Learnable Programming باز هم به اصطلاح کم می‌آورد. به عنوان مثال داریم:

function myFunction() {
    var person = Person();
    person.Name = "Josh Varty"
    person.Address = "123 Code Connect Street, Waterloo ON"
    var result = DoTaxes(person);
}

در قطعه کد بالا، این رویکرد جدید برنامه‌نویسی از کجا متوجه خواهد شد که person چیست؟ حال اگر کانستراکتور داشته باشیم، اوضاع چگونه خواهد شد؟ اگر تابع ما به اشیاء دیگری برای اجرا نیاز داشته باشد چه‌طور؟ حال اگر این شیئ فقط از طریق داده‌های دیتابیس ایجاد شود چه‌طور؟ و بسیاری چالش دیگر. اینها سؤالاتی هستند که تحقیقات صورت گرفته در حوزهٔ Learnable Programming آنها را نادیده گرفته‌اند اما امیدواریم که به زودی پاسخی برای این چالش‌ها پیدا شود.

نظر شما چیست؟ آیا شما هم با این سبک برنامه‌نویسی بهتر یاد می‌گیرید یا ترجیح می‌دهید که به روش سنتی به یادگیری این حرفه بپردازید؟ نظرات خود را با ما و دیگر کاربران سکان آکادمی به اشتراک بگذارید.

منبع