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

مقدمه ای بر روانشناسی برنامه نویسی

"تیم متسون"

ترجمه و برگردان: آرمین زارعی

تا آنجا که می دانیم، همه برنامه نویسان کامپیوتر انسان هستند. از این رو، برای درک برنامه نویسان، باید روانشناسی انسانی پشت فعالیت برنامه نویسی را درک کنید.

با توجه به اهمیت برنامه نویسی کامپیوتری و نیاز به بهره وری بیشتر برنامه نویسان، می توان انتظار داشت که تحقیقات زیادی در زمینه روانشناسی برنامه نویسی انجام شود. با این حال، این موضوع تنها توسط تعدادی از گروه های تحقیقاتی مورد توجه قرار می گیرد. ادبیات پراکنده است و حفره های زیادی در درک ما از این مشکل حیاتی وجود دارد.

 

مقدمه ای بر روانشناسی برنامه نویسی

"تیم متسون"

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

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

محاسبات موازی و روانشناسی برنامه نویسی

ادبیات روانشناسی برنامه ریزی موازی کم است. در واقع، این اساسا یک مجموعه تهی است. پایان نامه ای وجود دارد که به موضوع [Kann] می پردازد، اما خود نویسنده آن را بی نتیجه و کم استفاده توصیف کرده است. تنها چیزی که من توانستم پیدا کنم گزارش منتشر نشده ای از کان در مورد تجربیات او در آموزش برنامه نویسی همزمان با آدا [Kann] است. این گزارش جالب بود، اما نه واقعاً در مورد روانشناسی برنامه نویسی موازی.

نتیجه این است که ما از نظر روانشناسی برنامه ریزی موازی تنها هستیم.

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

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

 

مشکلات درک ما از روانشناسی برنامه نویسی

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

بنابراین آزمایش ها سخت هستند و در نتیجه دانش ما ناقص است. مشکل دیگری در بسیاری از تحقیقات در مورد روانشناسی برنامه نویسی وجود دارد. این موضوع در مقاله مهمی با عنوان "آیا کسی برنامه نویس واقعی را مطالعه کرده است؟" از [کرتیس]. بر اساس این مقاله، تحقیقات روانشناسی و برنامه نویسی تحت سلطه مطالعات دانشجویان است. به عنوان مثال، یک نوع معمول از مطالعه به رفتار متخصص در مقابل تازه کار نگاه می کند. مشکل این است که در بیشتر موارد، افراد تازه کار به عنوان دانشجویان مبتدی در مقطع کارشناسی و کارشناسان به عنوان دانشجویان کارشناسی ارشد تعریف می شوند. من مخالفتی با دانشجویان فارغ التحصیل ندارم، اما آنها هنوز برنامه نویسانی آموزش دیده آکادمیک با تجربه صنعتی کم یا بدون تجربه هستند. آنها واقعاً کارشناسانی نیستند که ما به آنها علاقه مندیم.

بنابراین، در حالی که می توانیم از ادبیات روانشناسی برنامه نویسی چیزهای زیادی به دست آوریم، دوز سالمی از شک و تردید لازم است. اگر نتیجه ای واقعاً عجیب یا با تجربه شما متناقض به نظر می رسد، ممکن است ناقص باشد.

ابعاد شناختی

یکی از تأثیرگذارترین محققان در این زمینه، توماس گرین، استاد دانشگاه لیدز در بریتانیا است. کارهای اخیر او از مدل‌های شناختی و نظریه‌های تخیلی دور شده و بیشتر به سمت روش‌هایی برای حمایت از بحث‌های غیررسمی به روش‌های سازنده حرکت کرده است. به قول خودش [توماس گرین]:

    "راه پیش رو این نیست که ادعاهای قوی و ساده ای در مورد نحوه عملکرد فرآیندهای شناختی داشته باشیم. راه پیش رو مطالعه جزئیات نحوه انتقال اطلاعات توسط نشانه ها است."

 

[توماس گرین] چارچوبی برای تسهیل بحث در مورد محیط های برنامه نویسی ایجاد کرده است. او این چارچوب را «چارچوب ابعاد شناختی» می نامد. این چارچوب شامل 14 ویژگی نسبتاً مستقل است که محیط های برنامه نویسی را مشخص می کند:

1- مقاومت ویسکوزیته در برابر تغییر. ایجاد تغییرات کوچک در برنامه چقدر سخت است؟

2- وابستگی های پنهان پیوندهای مهم بین موجودیت ها قابل مشاهده نیستند. یک وابستگی پنهان زمانی حاصل می شود که بخشی از یک برنامه، قسمت دیگری را به گونه ای تغییر دهد که آشکارا در متن برنامه مشخص نباشد.

3- قابلیت دید و کنار هم قرار گرفتن برای مشاهده آسان اجزا. آیا مطالب مورد نیاز مستقیماً بدون کار شناختی قابل دسترسی است؟

4- محدودیت‌های پیش‌بینی تحمیلی در ترتیب انجام کارها. آیا محیط برنامه نویسی کاربر را مجبور به تصمیم گیری قبل از در دسترس بودن اطلاعات می کند؟

5- علامت گذاری ثانویه اطلاعات اضافی در وسایلی غیر از نحو برنامه. آیا می توان عبارات یا عناصر اولیه را گروه بندی کرد یا به گونه ای دیگر مشخص کرد تا اطلاعات اضافی به برنامه نویس ارائه شود؟ به عنوان مثال، فضای خالی اطراف بلوک های کد می تواند عبارات مرتبط را نشان دهد.

6- نزدیکی نقشه های نمایش نقشه برداری به دامنه. نگاشت بین دامنه مشکل قابل مشاهده کاربر نهایی و دامنه برنامه نویسی چقدر نزدیک است؟

7- توانایی ارزیابی پیشرو برای بررسی در حالی که ناقص است. آیا می توان قسمت هایی از برنامه را قبل از نوشتن کل برنامه تست کرد؟

8- عملیات ذهنی سخت: عملیاتی که بر حافظه فعال مالیات می‌دهد. آیا زبان برنامه‌نویسی فرد را به ترکیب‌های شکنجه‌ای از عملیات‌های بدوی می‌رساند که از بین بردن آن دردناک است؟

9- پراکندگی / کوتاهی موجز بودن زبان

 Abstraction Gradient-10مقدار انتزاع مورد نیاز، مقدار ممکن

- 11هدف بیان نقش یک جزء به آسانی استنباط می شود

-12نحو مستعد خطا باعث لغزش می شود. آیا ایجاد لغزش های شناختی و وارد کردن خطا به کد آسان است؟

13-نگاشت ادراکی معانی مهمی که توسط موقعیت، اندازه، رنگ و غیره منتقل می شود.

14-سازگاری: معنایی مشابه که در نحو مشابه بیان می شود. آیا می توانید بخشی از یک زبان را از قسمت دیگر استنباط کنید؟

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

سخن پایانی

اسناد زیر آنچه را که من در طول مطالعه خود در مورد روانشناسی برنامه نویسی دریافته ام خلاصه می کند:

مدل شناختی مقدماتی: این تصویری است از نحوه تعریف مدل شناختی مورد استفاده برنامه نویسان هنگام نوشتن کد.

قوانین طراحی: این یک سری قوانین برای طراحان زبان است که برگرفته از ادبیات روانشناسی است. این قوانین همراه با چارچوب ابعاد شناختی گرین به ما کمک می کند تا راه حل های نامزد پروژه تحقیقاتی PAL را ارزیابی کنیم.

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

با تشکر از همراهی شما - گروه آموزش برنامه نویسی صعود