Cognitive Load: مقوله‌ای که آشنایی با آن منجر به تسهیل پروسهٔ کدخوانی می‌شود

Cognitive Load: مقوله‌ای که آشنایی با آن منجر به تسهیل پروسهٔ کدخوانی می‌شود

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

اولین کسی باشید که به این سؤال پاسخ می‌دهید

برنامه‌نویسان روزانه کدهای زیادی را خوانده و می‌نویسند، روی پروژه‌های جدید کار می‌کنند، کد‌ها را بررسی می‌کنند، با کدهای به‌اصطلاح Legacy کار کرده و داکیومنشن‌ها را مطالعه می‌کنند (برای آشنایی با این اصطلاح،‌ به مقالهٔ چگونه یک Legacy Codebase (سورس‌کد قدیمی) را ریفکتور کنیم؟ مراجعه نمایید.) بر اساس تجربه‌ٔ اکثر دولوپرها، برنامه‌نویس بودن در برخی موارد بیشتر شامل کدخوانی است تا کدنویسی که در عین‌ حال این‌ کار هم می‌تواند شامل کدهای خودتان باشد و هم کد‌های دیگر برنامه‌نویس‌ها.

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

در پاسخ به این سؤال بایستی گفت که در Cognitive Psychology (روانشناسی شناختی) مفهومی داریم تحت عنوان Cognitive Load به معنای بار شناختی که به تمامی سعی و تلاش ذهنی اشاره دارد که در حافظهٔ انسان‌ها صورت می‌گیرد. به عبارتی، زمانی که اقدام به یادگیری هر چیزی می‌کنیم، از ورزش کردن گرفته تا موسیقی و حتی برنامه‌نویسی، این بار شناختی وجود دارد که در ادامه قصد داریم برخی از تکنیک‌هایی را با شما به اشتراک بگذاریم که می‌توانند به کاهش بار‌ شناختی در حین کدنویسی/کدخوانی کمک کنند. به‌ عبارت دیگر، به بررسی این موضوع خواهیم پرداخت که چه‌چیزی باعث می‌شود تا کدها سخت خوانده شوند و چگونه می‌توان فرایند کدخوانی را ساده‌سازی کرد.

فونت‌ها و فاصله‌گذاری
نیاز به توضیح نیست که نوع فونت روی روحیه‌ٔ ما تأثیر می‌گذارد به طوری که در تحقیقی انجام شده توسط روانشناسی به‌ نام Kevin Larson، مشخص شد افرادی که در معرض لی‌اوت‌هایی خوش‌ساخت حاوی فونت‌های زیبا بودند، احساسی داشتند مبنی‌ بر اینکه خواندن متون زمان کمتری به خود اختصاص داده و در کل احساس بهتری داشتند؛ علاوه بر این، فونت‌هایی با طراحی خوب منجر به تمرکز بیشتر، فعالیت‌های ذهنی مؤثرتر و همچنین حس شفافیت فکری به‌ مراتب بیشتری در افراد می‌شدند.  

فونت انتخابی شما تأثیر بسزایی روی مقدار باری دارد که در ذهنتان برای پردازش کردن سورس‌کد روی صفحه به‌ وجود می‌آید؛ نه‌ تنها فونت بلکه سایز آن، ارتفاع خطوط و فاصله‌ٔ بین کلمات نیز در این مسئله نقش دارند که برای درک بهتر این موضوع توصیه می‌کنیم یک فونت خوب و یک فونت بَد را در IDE خود بارگذاری کرده و کدخوانی را با هر دو فونت مقایسه نمایید.

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

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

داک‌بلاک
در برنامه‌نویسی DocBlock به نوعی از کامنت‌ها گفته می‌شود که اطلاعات به‌ مراتب بیشتری را به نسبت کامنت‌های معمولی که توسط دولوپر نوشته می‌شوند در سورس‌کد می‌گنجاند؛ زمانی‌ که قصد استفاده از یک داک‌بلاک را داریم، بایستی این سؤال را از خود بپرسیم که آیا داک‌بلاک مد نظر حاوی اطلاعات بیشتری نسبت به اطلاعاتی که در حال‌ حاضر خود سورس‌کد ارائه می‌دهد است یا خیر؟ که اگر پاسخ خیر باشد، نباید از داک‌بلاک استفاده کرد چرا که در چنین شرایطی عدم استفاده از آن‌ها منجر به ایجاد اصطلاحاً فضای تنفس برای کدخوانی بهتر ایجاد می‌کند. به عنوان مثال داریم:

/**
 * @ORM\Entity(repositoryClass="MyProject\UserRepository")
 */

در مثال فوق، می‌بینیم که چگونه با استفاده از داک‌بلاک به معرفی کلاسی پرداخته‌ایم که یک اِنتیتی دیتابیس در Doctrine را مشخص می‌کند.

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

برای اطمینان حاصل کردن از اینکه نام‌های مناسبی انتخاب کرده‌اید، پس از اینکه چند روز از نوشتن کدها گذشت، مجدد به سورس‌کد خود مراجعه کنید و در این صورت است که اگر از نام‌های خوبی استفاده نکرده باشید، کدها را مبهم و بی‌معنی خواهید دید. روی هم رفته، بهتر است وقت بیشتری برای نام‌گذاری کلاس‌ها، فانکشن‌ها، متغیرها و ... بگذارید تا اینکه در آینده برای متوجه شدن هدف بخش‌های مختلف سورس‌کد، بارها و بارها مجبور به خواندن آن نشوید (برای روشن‌تر شدن این مسئله، چند مثال از نام‌گذاری صحیح می‌زنیم. بهتر است به‌ جای نامی همچون ()create، از ()createPage استفاده کنیم و یا به‌ جای نام متغیری همچون process$، از نامی‌ همچون accountProcess$ استفاده نماییم که به‌ مراتب گویاتر است.)

نکاتی که در این مقاله بدان‌ها اشاره شد، تقریباً هیچ ارتباطی با منطق کدنویسی یا اصطلاحاً Programming Logic ندارند اما مواردی از این دست روی بار شناختی‌ شما در حین کدنویسی تأثیر می‌گذارند و رعایت آن‌ها به شما کمک می‌کند تا از برنامه‌نویسی بیشتر لذت ببرید.

حال نوبت به نظرات شما می‌رسد. به غیر از موارد بالا، به‌ نظر شما رعایت چه نکات دیگری می‌تواند کدخوانی را لذت‌بخش‌تر و راحت‌تر سازد؟ نظرات، دیدگاه‌ها و تجربیات خود را با سایر کاربران سکان به اشتراک بگذارید.

منبع