Bret Victor یک متخصص تجربهٔ کاربری و برنامهنویس است که از تجربیات حرفهای وی میتوان به کار در شرکت اپل اشاره کرد اما وی را بیشتر به خاطر ایدهٔ Learnable Programming یا به اختصار LP در دنیای توسعهٔ نرمافزار میشناسند بدین صورت که وی بر این باور است محیطهای برنامهنویسی جدیدی باید خلق کرد که از آن طریق دولوپرها بتوانند به شکلی شهودی اقدام به کدنویسی کنند.
پس از مطرح شدن ایدهٔ LP هم یکسری اپلیکیشنهای برنامهنویسی به بازار عرضه شدند که از آن جمله میتوان به Alive و Light Table اشاره کرد که به صورت کاملاً عملی، این ایدهٔ نوین را پیادهسازی کردهاند. به طور کلی، این قبیل محیطهای توسعهٔ نرمافزار باید حداقل دو شرط زیر را داشته باشند:
- ترغیب برنامهنویسان به روشهای فکر کردن حرفهای
- توانمندسازی برنامهنویسان در جهت مشاهدهٔ خروجی کدهای خود به صورت بلادرنگ
آنچه مسلم است اینکه مورد دوم کمک به عملی شدن گزینهٔ اول خواهد کرد. در واقع، نمایش خروجی کدهایی که دولوپرها مینویسند به صورت اصطلاحاً Real-time (بلادرنگ)، به ایشان کمک میکند تا روشهای فکر کردن و ایدهپردازی جدید و متفاوتی را تجربه کنند. به طور کلی، از جمله مزایای LP میتوان به موارد زیر اشاره کرد:
- برنامهنویس چیزی که مشاهده میکند را بهتر درک خواهد کرد: برنامهنویسان به راحتی متوجه خواهند شد که تغییرات اِعمال شده در کدهایشان چه نوع خروجی خواهد داشت.
- برنامهنویس میتواند به راحتی در کدهای خود گشتزنی کند: این نوع برنامهنویسی افراد را قادر خواهد ساخت تا در طول زمان بتوانند به راحتی کدهای خود را بررسی کرده و به جای آنکه برای مشاهدهٔ خروجی یک بلوک کد به خروجی اپلیکیشن مراجعه کنند، خواهند توانست در ادیتور خود خروجی را مشاهده کنند.
برخی مشکلات مرتبط با LP
اگرچه این رویکرد جدید دارای مزایای بسیاری است اما در عین حال یکسری نقاط ضعفی هم دارا است. به عنوان یکی از اصلیترین چالشهای LP میتوان به این مسأله اشاره کرد که در اینجا تمرکز روی خروجی دوبُعدی است. در پاسخ به این سئوال که مشکل خروجی دوبُعدی (2D) چیست هم میتوان گفت که همه چیز را خیلی ساده جلوه میدهد و این در حالی است که خیلی از پروژههای نرمافزاری به این سادگی که ما فکر میکنیم نیستند که برای روشنتر شدن این مسأله مثالی میزنیم.
LP چگونه خواهد توانست اپلیکیشنهای تجاری، دیتابیسها و بسیاری از نرمافزارهای پیچیدهٔ دیگر را پشتیبانی کند؟ واقعیت امر این است که بسیاری از پروژههای برنامهنویسی حال حاضر در قالب یک خروجی دوبُعدی نمیگنجند و بسیار پیچیدهتر از آن هستند که به ذهن میرسد.
چالش دیگر، توابعی است که آرگومانهای ورودی پیچیدهای برای اجرا نیاز دارند و در اینجا است که LP باز هم به اصطلاح کم میآورد. به عنوان مثال داریم:
function myFunction() {
var person = Person();
person.Name = "Josh Varty"
person.Address = "123 Code Connect Street, Waterloo ON"
var result = DoTaxes(person);
}
در قطعه کد بالا، این رویکرد جدید برنامهنویسی از کجا متوجه خواهد شد که ()Person
چیست؟ حال اگر یک کانستراکتور داشته باشیم، اوضاع چگونه خواهد شد یا اگر تابع ما به آبجکتهای دیگری برای اجرا نیاز داشته باشد چهطور و اگر این شیئ فقط از طریق دادههای دیتابیس ایجاد شود چه خواهد شد؟ که اینها سؤالاتی هستند که تحقیقات صورت گرفته در حوزهٔ LP آنها را نادیده گرفته است!