Bret Victor یک متخصص تجربه ی کاربری و برنامه نویس حرفه ای است که مدت زمانی هم در شرکت اپل مشغول به کار بوده است اما امروزه وی را بیشتر به خاطر ایده ی Learnable Programming یا «راستش معادلی برای آن در زبان فارسی نیست!» در دنیای برنامه نویسی می شناسند به طور کلی، Bret بر این باور است که محیط های برنامه نویسی جدیدی می بایست خلق کرد که از آن طریق برنامه نویسان بتوانند با شرایط متفاوتی اقدام به برنامه نویسی کنند. پس از مطرح شدن ایده ی Learnable Programming هم یکسری اپلیکیشن های برنامه نویسی به بازار عرضه شدند که از آن جمله میتوان به Alive و Light Table اشاره کرد که به صورت کاملاً عملی، این ایده ی نوین را پیادهسازی کرده اند
گفته میشود که برای محیط های برنامه نویسی مدرن، حداقل دو شرط زیر می بایست برآورده شود که عبارتند از:
- ترغیب برنامه نویسان به روشهای فکر کردن حرفهای
- توانمندسازی برنامه نویسان در جهت مشاهده ی خروجی کدهای خود در لحظه
آنچه مسلم است اینکه مورد دوم کمک به عملی شدن گزینه ی اول خواهد کرد. در واقع، نمایش خروجی کدهایی که برنامه نویسان مینویسند در آن واحد، به ایشان کمک میکند تا روشهای فکر کردن و ایده پردازی جدید و متفاوتی را تجربه کنند. تصویری که در ادامه مشاهده می کنید، گویای نمونه ی عینی اپلیکیشنی است که در لحظه خروجی کدها را در معرض دید برنامه نویس قرار می دهد:
از جمله مزایای یک سبک جدید برنامه نویسی میتوان به موارد زیر اشاره کرد:
- برنامه نویس چیزی که مشاهده میکند را بهتر درک می کند: در واقع، برنامه نویسان به راحتی متوجه خواهند شد که تغییرات اعمال شده در کدهایشان چه نوع خروجی خواهد داشت.
- برنامه نویسان به راحتی در کدهای خود میتوانند گشت زنی کنند: این نوع برنامه نویسی افراد را قادر خواهد ساخت تا در طول زمان بتوانند به راحتی کدهای خود را بررسی کرده و به جای آنکه برای مشاهده ی خروجی یک بلوک کد به خروجی اپلیکیشن مراجعه کنند، خواهند توانست در همان ویرایشگر کد خروجی را مشاهده کنند.
برخی مشکلات 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: اگرچه این رویکرد جدید دارای مزایای بسیاری است اما این در حالی است که نقاط ضعفی هم دارد. به عنوان یکی از اصلیترین چالش های یک رویکرد نوین میتوان به این مسأله اشاره کرد که در اینجا تمرکز روی خروجی دو بعدی است. در پاسخ به این سئوال که مشکل خروجی 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 چیست؟ حال اگر کانستراکتور داشته باشیم اوضاع چگونه خواهد شد؟ اگر تابع ما به اشیاء دیگری برای اجرا نیاز داشته باشد چه؟ حال اگر این شیئ فقط از طریق دادههای دیتابیس ایجاد شود چطور؟ و بسیاری چالش دیگر …