وقتی به مردم میگویم حرفهام برنامهنویسی است، همان واکنش همیشگی از چشمانشان معلوم است؛ همان نگاههای خیره، همان لبخند مودبانه، و اینکه مشخصا میخواهند بحث را عوض کنند. اگر خوششانس باشم، ممکن است طرف صحبتم یک ایدهی جدید برای ساخت یک اپلیکیشن موبایلی انقلابی پیشنهاد کند که به نظرش بدجوری پولساز خواهد شد. اگر هم خوششانس نباشم، طرف صحبتم از من انتظار دارد تا آخر عمرم به رایگان مشاورهی فنی به او بدهم. بااینحال، گرچه بعید به نظر میرسد، اما برنامهنویسی میتواند بیشازآنچه مردم فکر میکنند سرگرمکننده باشد. آنقدر سرگرمکننده که حتی ژانری خاص برنامهنویسی در بازیهای ویدئویی وجود دارد.
اما این بازیها چقدر واقعا آموزشی هستند؟ آیا میشود با انجام آنها برنامهنویس شد؟ در همین مورد بازار استیم را شخم زدم و سه اثر که شایستهی نامزدی در این فهرست هستند را پیدا کردم. به آنها نگاهی خواهیم انداخت تا ببینیم آیا واقعا آن مهارتهای لازم را به شما میآموزانند که بتوانید اجاره بها و قبوض خانهتان را پرداخت کنید یا نه.
واضح است که کمتر بازیای میتواند به شما نحوهی کدنویسی در زبان #C را آموزش دهد، اما این بازیهای برنامهنویسیْ «مفاهیم» برنامهنویسی را به استعارههای بصری و پازلهای دسترسپذیر برگردان میکنند. بنابراین هر یک از بازیهای این فهرست را مطابق با مفاهیم برنامهنویسیای که معرفی میکنند بررسی میکنیم، تا ببینیم آیا فهم آنها بعدا وقتی برنامهنویسی را شروع کردید به کارتان میآید یا نه. فهرست را ابتدا با بازیها و مفاهیم پایهای و سادهتر شروع میکنیم و بهمرور به بازیها و مفاهیم برنامهنویسی پیچیدهتر میرسیم. اینگونه شاید یک کلاس فشرده از مفاهیم پایهای برنامهنویسی تهیه شود.
قبل از شروع باید تاکید کرد هیچیک از این بازیها ادعا نمیکنند که میتوانند کدنویسی را به شما یاد دهند؛ این صرفا نظر ماست.
میزان سختی: تازهکار — میانرده
کل هیومن ریسورس ماشین دربارهی پردازش دادههاست. یک تسمه نقاله در مقام «ورودی»/IN مربعهایی که روی آنها عدد و حروف چاپ شده تحویل میدهد، و شما باید مربعهای صحیح — آنطور که پازلْ برای شما تعریف کرده — را به تسمه نقالهی «خروجی»/OUT بفرستید. برای این کار، فهرستی از دستورها را به کارمند مشتاقتان میدهید — این کارمند اساسا استعارهای از همان برنامه است. از آنجا که این مربعها بهطور تصادفی از تسمه نقاله بیرون میآیند، برنامهی شما هم باید تمام ترکیبهای احتمالی از اعداد و حروف را حساب کند. این مسئلهای است که تمام برنامهنویسها بهخوبی با آن آشنا هستند.
هیومن ریسورس ماشین در معرفی مفاهیم به شکل ساده عالی عمل میکند، و بهتان وقت کافی میدهد تا قبل از رسیدن به مرحلهی بعدی حسابی با دستورها آشنا شوید. از این بهتر، میشود سرعت کار کارمند را کندتر کرد، تا با دقت بیشتری بتوان دید دستوراتی که دادید کجا و چطور خلاف انتظارتان عمل کرد. نظر به اینکه برنامهنویسها وقت زیادی را به باگزدایی/دیباگینگ اختصاص میدهند، توان تجزیهی خط به خط برنامهها بسیار مفید است.
بااینحال، دسترسپذیری صرفا بخشی از معادلهی برنامهنویسی است. سوال اساسی این است: آیا هیومن ریسورس ماشین میتواند به شما برنامهنویسی را آموزش دهد؟ برای جواب، میبایست به مفاهیمی که پازلهای بازی از آنها استفاده میکند رجوع کنیم.
مفهوم: متغیرهای پایهای/Basic Variables چه هستند؟
سروکله زدن با دادهی نامعلوم، چه در قالب تسمه نقالهای باشد که اعداد و حروف تصادفی تحویل میدهد یا دستورات سریعی که بازیکن حرفهای استارکرفت از طریق کیبورد ارسال میکند، از اجزای اساسی تقریبا همهی برنامههایی است که تاکنون نوشته شده. از آنجایی که برنامهها نمیتوانند آینده را پیشبینی کنند — البته فعلا — پس به یکجور محل نگهدارنده نیازمند هستند که در آن هر وقت دادهی نامعلومی به آنها ارسال شد بتوانند به آن انبار ذخیره رجوع کرده و معنیاش را درک کنند. اینجاست که متغیرها وارد میشوند. متغیر اساسا یکجور کانتینر برچسبدار است که در آن دادهها وجود دارند و میتوان این کانتینرها را به دلخواه پر یا خالی کرد.
چگونه آموزش داده میشوند؟
در هیومن ریسورس ماشین، مربعها حکم همان متغیرها را دارند. در مرکز هر اتاق، کف زمین به چندین مربع تقسیم شده که میتوانید موقتا اعداد و حروفی که از تسمه نقاله میگیرید را روی آنها ذخیره کنید. در لیست دستورات، این مربعها را با عددی که به آنها اطلاق شده میتوان فراخواند — این اعداد از ۰ شروع میشوند، چون در برنامهنویسی شمارش همیشه از ۰ شروع میشود و نه از ۱. البته میتوان بهجای عدد، اسامی دلخواه خودتان را به آنها اطلاق کنید تا راحتتر در ذهنتان بماند؛ مثلا ممکن است بهجای صفر، برچسب FirstAdder یا Tally به آنها بدهید. این تکنیک در برنامهنویسی خیلی مهم است، خصوصا اگر چندین و چند نفر روی یک کد یکسان کار کنند. وقتی متغیرها را درست نامگذاری کنید بعدا که به مشکل برخوردید راحتتر میتوانید ریشهاش را ببینید عوض آنکه ساعتها وقتتان تلف شود تا تازه یادتان بیاید کدی که نوشتید هدفش چیست و چکار میکند.
مفهوم: آرایهها/Arrays چه هستند؟
وقتی متغیرها برای تعیین یک مقدار یا آبجکت مشخص استفاده شدند، سپس نوبت آرایههاست تا آبجکتهای مشابه یکدیگر را دستهبندی کنند. مثلا تصور کنید در یک بازی میخواهید اینونتوری پیاده کنید و در این اینونتوری چندین اسلات/slot برای قرار دادن آیتمها در آن وجود دارد. عوض اینکه برای هر یک از اسلاتها یک متغیر جداگانه بنویسید، میآیید و یک آرایهی «اینونتوری» تعیین میکنید که همهی آیتمها را میتوان در آن ذخیره کرد. مزیت این روش این است که آن آیتمها را میتوان با فراخوانی آرایهی «اینونتوری» فراخواند — اینونتوری[۰]، اینونتوری[۱]، اینونتوری[۲]… اینگونه برای بررسی تمام اسلاتها در اینونتوری میتوان راحتتر کد نوشت، و از نظر سختافزاری هم، آرایهها بهمراتب سبکتر و سریعترند تا تعیین متغیرها.
چگونه آموزش داده میشوند؟
هیومن ریسورس ماشین در خصوص آرایهها سرراست و بیمحدودیت است. عوض آنکه مربعها را مستقیما با برچسبها نشان دهد، مقدار درون هر یک از مربعها را میتوان بهعنوان برچسبی در ارجاع به دیگری استفاده کرد. برای مثال، مربع ‘0’ ممکن است درون خود مقدار/عدد 7 را داشته باشد. اگر از دستور ‘0’ برای کپی استفاده کنید، عدد 7 به شما برگردانده میشود. اگر هم از دستور [0] برای کپی استفاده کنید، برنامه از عدد 7 برای یک برچسب دیگر استفاده کرده و مقدار درون مربع شماره 7 [که ممکن است عدد دیگری باشد] را برمیگرداند. اگر اینها زیادی گیجکننده است نگران نباشید؛ برای فهم آرایهها باید آنها را در عمل ببینید. خوشبختانه هیومن ریسورس ماشین هم با پازلهایش که شتاب مناسبی دارند اینها را در عمل به شما نشان میدهد.
مفهوم: جملات شرطی (یا همان جملات «اگر این… پس این…»/IF… THEN) چه هستند؟
اگر برنامهها، فارغ از اینکه چه دادهای واردشان میکردید، هر دفعه خروجی یکسانی نشان میدادند، دیگر مفید نبودند. مثل بازیای میشدند که به معنای واقعی کلمه خودشان بدون دخالت بازیکن جلو میرفتند و اهمیتی نمیدادند بازیکن [از طریق کنترلر یا کیبورد] چه ورودیای بهشان میدهد. برنامهها باید تصمیمگیری کنند، چه تصمیمات ساده مثل انتخاب بین اینکه کدام یک از دو عدد بزرگترند باشد، و چه تصمیمات پیچیدهتر مثل اینکه آیا تیری که بازیکن با تیروکمان شلیک کرده به هدف میخورد یا نه. جملات شرطی حکم مغز برنامه را دارند، معادل مجازی بخش نئوکورتکس/نوقشر در مغز ما.
چگونه آموزش داده میشوند؟
برای سادهتر کردن قضیه، هیومن ریسورس ماشین دو نوع جملهی شرطی دارد: اگر عدد صفر است پس برو، و اگر عدد منفی است پس برو. با این دستورات، مقداری که در دستهای کارمندتان هست بررسی شده و اگر شرط فراهم باشد [صفر باشد یا منفی] کارمند به بخش دیگر برنامه «میرود». مثلا اگر کارمندتان مقدار 5- در دستش باشد، دستور «اگر منفی است پس برود» اطاعت میشود و کارمند به آن نقطهای از برنامه که اشاره کردید میرود. اما اگر کارمندتان عدد 1+ در دستش باشد، برنامه از دستور پیروی نکرده و به خط بعدی میرود. در بدو امر خیلی ساده به نظر میرسد، اما برای پازلهای بعدی به کلی از این دستورات شرطی نیاز است، و این رفتوآمدها چنان درهمبرهم میشوند که گویی یک شیطان دارد یک بازی فوتبال را رهبری میکند.
مفهوم: حلقه (یا لوپها) چه هستند؟
تکرار، کار همیشگی محاسبات کامپیوتری است. ما برنامهنویسی میکنیم تا آن وظایفی که برایش وقت نداریم را اتوماتیک با کامپیوتر انجام دهیم، و برای این کار از لوپها استفاده میکنیم. در بازیها چگونه NPCها یک مسیر مشخص را همیشه رفتوآمد میکنند؟ دلیلش لوپهاست. چرا هر دفعه دشمنان آتش میگیرند burning damage نوار سلامتیشان را کم میکند؟ دلیلش لوپهاست. ماشینها چگونه تا زمان رسیدن به آخرین حد سرعتشان شتاب میگیرند؟ دلیلش لوپهاست. اینکه هر دفعه این اتفاقات بخواهد بیافتد آنها را دستی برنامهنویسی کنیم شدیدا نارکارآمد و وقتگیر است، و وقتی صحبت سر برنامهنویسی باشد، ناکارآمدی حکم گناه کبیره را دارد.
چگونه آموزش داده میشوند؟
هیومن ریسورس ماشین با ترکیب جملات شرطی با دستور «رفتن» است که پایههای لوپ در برنامهنویسی را آموزش میدهد. بازی به هر دو لوپ اصلی، یعنی لوپهای for و لوپهای while، میپردازد. لوپهای for مجموعهای از دستورات که از قبل تعیین شده چند بار تکرار شوند [چه یک بار و چه صد بار] را انجام میدهند. مثلا در بازی، مربعها گاهی شمارشگریاند که به صفر نزدیک میشوند تا زمانی که شرط لازم برای اجرای دستور «اگر عدد صفر است پس برو» فراهم شده و لوپ شکسته شود. لوپهای while هم همینطور هستند، با این تفاوت که زمان و تعداد دفعات تکرار از قبل تعیین نشده و تا زمانی که شرط لازم فراهم نباشد تا بینهایت تکرار میشوند. همینطور که پازلها سختتر میشوند، باید هر دو نوع لوپ را با آرایهها با هم ترکیب کنید تا فهرستی از دادههایی که طول نامعلومی دارند پردازش شوند. این نیز از بخشهای اساسی برنامهنویسی است، و هیومن ریسورس ماشین به نحو احسن و بهمرور آن را نمایش میدهد.
نتیجهگیری:
با کمک مفاهیم آشنا مثل مربعها و تسمه نقالهها، و با تمرکز روی چند دستور محدود، هیومن ریسورس ماشین به خوبی اصول پایهای برنامهنویسی را معرفی میکند. دستورهایی که با رنگهای مختلف کدنویسی شدهاند و نحوهی رفتوآمد کارمند در اتاق یادآور فلوچارتها هستند، و میتوان با آنها مراحلی که برای اجرای برنامه طی میشود را راحتتر دنبال کرد. استفاده از کلماتی مثل copyfrom و bump که مستقیما از برنامهنویسی برداشته شده اینطور نیست که یک به یک با زبانهای برنامهنویسی مدرن مشترک باشد، اما مفهوم و زیربنایشان با هم مشترک است. بعد از اینکه خوب پازلهای این بازی را حل کردید، برای شروع یادگیری برنامهنویسی در دنیای واقعی آمادهاید.

4 پاسخ
بسیار عالی
عالی بود
ممنون
بسیار خوب بود