با ترجمه و اقتباس از مقاله آقای برت ویکتور - Learnable Programming
موضوع اصلی این سری از مطالب در خصوص نحوه یادگیری یک زبان برنامه نویسی و درک کد های برنامه است . اینکه با چه روشی میتوان برنامه نویسی را به دیگران آموزش داد و محیط و زبان برنامه نویسی باید دارای چه خصوصیاتی باشد . ایده اصلی Learnable programmingاز آقای برت ویکتور می باشد که این مطلب سعی میکند همراه با ترجمه ، تفکرات ذهنی نویسنده را نیز بیان کند .
موضوعات مطرح شده در این سری از مطالب ، در محیط آنلاین آموزشی آکادمی خان و براساس زبان برنامه نویسی جاوا اسکریپت ( js ) و Processing نوشته شده که دارای ویژگی مثل live coding می باشد که به محض نوشته شدن کد ، خروجی آن قابل مشاهده میباشد .
برنامه نویسی
برنامه نویسی یعنی فکر کردن ، نه فقط مهارت نوشتن کد . ما در برنامه نویسی یه پروسه فکری را ایجاد کرده و به آن می پردازیم و سعی میکنیم مشکلات را در این پروسه حل کنیم . به عنوان مثال ، صرف یادگیری حلقه for یادگیری برنامه نویسی نیست و مثل این می ماند که بخواهیم با یادگیری نحوه استفاده از مداد ، طراحی را یاد بگیریم. در برنامه نویسی سعی می کنیم با بررسی مساله یک حالت مفهومی را ایجاد کنیم تا پاسخگویی تمام ورودی ها و خروجی های کاربر قرار بگیرد .
دیدن نتایج
همه ما آنچه را بتوانیم ببینیم بهتر درک میکنیم . در برنامه نویسی نیز یادگیرنده باید بتواند نتایج برنامه ای را که مینویسد ببیند . اینجا مقصود از نتایج خروجی برنامه نیست ، بلکه امکانی است برای یادگیرنده تا بتواند یک خروجی از هر خط کدی که مینویسد ببیند و درک کند این قطعه از کد چه کاری انجام خواهد داد و الزاما نیاز نیست منتظر خروجی کل برنامه در پایان کار باشد. هدف کلی یک سیستم برنامه نویسی :
تشویق و ترغیب یادگیرنده در استفاده از روش های قدرتمند فکر کردن
ایجاد امکان دیدن و فهمیدن جزئیات برنامه به یک یادگیرنده
آلن پرلیز ( Alan Perlis ) میگوید : " برای اینکه یک برنامه را بفهمید باید خود را جای انسان و ماشین قرار دهید و مثل انها فکر کنید "
این یک اشتباه بزرگ است . دقیقا چیزی که برنامه نویسی را سخت و غیر قابل اطمینان میکند . یک انسان هرگز نمیتواند مثل یک ماشین فکر کنید ، نحوه فکر کردن یک انسان بسیار با ماشین متفاوت است و ما برای فکر کردن نیاز به تجسم داریم در حالی که ماشین از روش های موجود استفاده میکند . حال سوال این است که پس چطور باید برنامه نویسی را به دیگران آموزش دهیم . ما سیستم برنامه نویسی را طوری تغییر میدهیم تا قابل فهمیدن توسط انسان باشد .
سیستم برنامه نویسی
- کلمات را بخواند ( read the vocabulary ) - کلمات چه معنایی میدهند ؟
- جریان داده را دنبال کند ( follow the flow ) - چه اتفاقی چه موقع می افتد ؟
- وضعیت ها را مشاهده کند ( see the state ) - کامپیوتر چطور فکر میکند ؟
- با واکنش نشان داد بسازد ( create by reacting ) - از نقطه ای شروع کرده و بسازد
- بصورت مفهومی بسازد ( create by abstracting ) - ابتدا پیاده سازی کرده و سپس تعمیم دهد
- هویت و استعاره ( identity and metaphor ) - چطور باید جهان کامپیوتر را با جهان خودمان ارتباط دهیم ؟
- تجزیه ( decomposition ) - چطور باید ایده های خود را به تکه های قابل فهم تجزیه کنم ؟
- ترکیب دوباره ( recomposition ) - چطور باید تکه های ذهنی را بهم بچسبانم ؟
- قابلیت خوانایی ( readability ) - این کلمات چه معنایی میدهند ؟