کد نویسی؛ مهارت زبان یا دانش ریاضی؟
بسیاری از ما با این ایده بزرگ شدیم که کد نویسی مهارت بسیار پیچیده و دشواری است که یادگیری آن برای هر کسی ممکن نیست. از نظر برخی افراد که در یادگیری زبان خارجی مشکل دارند، کد نویسی هم نوعی زبان و از توان آنها خارج است. در کنار اینها، دستهای دیگری از افراد هستند که معتقدند کد نویسی نیاز به دانش ریاضی دارد و چون در حل مسائل ریاضی ضعیف هستند، فکر میکنند نمیتوانند از پس یادگیری کد نویسی برآیند.
اما حق با کدام گروه است؟ آیا برنامهنویسی با مهارت زبانی در ارتباط است یا دانش ریاضی؟ اگر فردی مهارت کافی در یادگیری زبانهای خارجی نداشته باشد یا حل مسائل ریاضی برایش دشوار باشد، آیا نمیتواند برنامهنویس خوبی شود؟
مسئله اینجا است که بهسختی میتوان دست از مقایسهی کامپیوتر با مغز انسان کشید؛ مقایسهای که اغلب فهم بسیاری از مسائل را برایمان آسانتر میکند؛ اما گاهی با طرز کار واقعی مغز در تضاد است.
یکی از سؤالاتی هم که مدام دربارهی شباهت و تفاوت کامپیوتر با مغز انسان مطرح میشود، نحوهی پردازش و خواندن کد است. آیا مغز ما کد کامپیوتر را مانند یک زبان پردازش میکند یا با آن مثل مسئلهی ریاضی رفتار میکند؟ رسیدن به جواب این سؤال و پی بردن به طرز کار ذهن هنگام پردازش کد از منظر آموزشی اهمیت بسیاری دارد و نکات باارزشی در مورد بهترین روش آموزش کد نویسی در اختیار ما قرار میدهد.
مقالهی مرتبط:
در نظرسنجی گالوپ در سال ۲۰۱۶، مشخص شد اکثر مدارس آمریکا مایلاند آموزش کد نویسی را شروع کنند. در این بین، مدیران ۶۶ درصد مدارس پیشدبستانی تا دبیرستان معتقد بودند یادگیری علوم کامپیوتر باید در کنار درسهای دیگر به دانشآموزان ارائه شود. اکثر کشورهای اروپایی، کلاسهای کد نویسی و علوم کامپیوتر را به برنامههای درسی مدارس اضافه کردهاند (فرانسه و اسپانیا در سال ۲۰۱۵). انتظار میرود این نسل جدید کدنویسان، جمعیت توسعهدهندگان جهان را از ۲۳٫۹ میلیون نفر در سال ۲۰۱۹ به ۲۸٫۷ میلیون نفر در سال ۲۰۲۴ افزایش بدهد.
با همهی این تلاشها، هنوز در نحوهی درست آموزش کد نویسی سردرگمی وجود دارد. آیا کد نویسی بیشتر شبیه زبان است یا ریاضی؟
برخی از مدارس در دنیا به دانشآموزان اجازه میدهند زبان برنامهنویسی را بهعنوان «زبان خارجی» انتخاب کنند و آن را مشابه زبانهای دیگر مثلاً فرانسوی آموزش میدهند. این رویکرد احتمالا برای جذب بیشتر دانشآموزان به کد نویسی روش مؤثری است؛ اما اگر اتکا به تکنیکهای یادگیری زبان برای آموزش کد نویسی مناسب نباشد، آنوقت یادگیری دانشآموزان دچار اختلال میشود. به همین ترتیب تلاش برای آموزش کد نویسی مشابه آموزش ریاضی هم ممکن است به همان اندازه روش اشتباهی باشد و نتیجهی مطلوب به دست نیاید.
برای حلوفصل این موضوع، در سالهای اخیر مطالعات و آزمایشهایی انجام شده است که فعالیت مغزی برنامهنویسان را هنگام خواندن کد تجزیهوتحلیل کردهاند.
کد نویسی: زبان یا ریاضی؟
در حال حاضر دو مکتب فکری دربارهی ماهیت کد نویسی وجود دارد. نظریهی غالب، به کد نویسی بهعنوان نوعی زبان نگاه میکند که قواعد دستوری و نگارشی خاص خود دارد. مگر نه اینکه به پایتون، جاوا و C زبان برنامهنویسی میگویند؟ پس حتما برای این کار دلیلی وجود دارد. در حمایت از این ایده حتی کلمهی اختصاری مناسب هم وجود دارد: CAL، مخفف Coding as Another Language بهمعنی «کد نویسی بهعنوان زبان دیگر».
دستهی دیگری از افراد نگاه متفاوتی به کد نویسی دارند. از نظر آنها کد نویسی بیشتر شبیه یادگیری منطق ریاضی است؛ چون به فرمول و الگوریتم نیاز دارد تا از دادهی ورودی، خروجی بگیرد. حتی وبسایتی در اینترنت وجود دارد که کد نویسی و ریاضی را همزمان آموزش میدهد.
اما کدام رویکرد مؤثرتر است؟ آیا یادگیری برنامهنویسی به مهارتهای زبانی نیاز دارد یا مهارتهای ریاضی؟ اگر فردی در ریاضی ضعیف بود، آیا به این معنی است که نمیتواند برنامهنویس خوبی شود و باید بهطور کامل از این مهارت چشمپوشی کند؟
بحث سر این موضوع از همان زمانیکه آموزش کد نویسی در مدارس شروع شد، وجود داشته است و به نظر میرسد مکتب «زبان» طرفداران بیشتری دارد. قوانین مدارس در ایالات تگزاس، اوکلاهاما و جورجیا به دانشآموزان اجازه میدهد برای واحد زبان خارجی، علوم کامپیوتر را انتخاب کنند. برای مثال، در مدارس تگزاس اگر دانشآموزی از پیشرفت در کلاس زبان خارجی بازمانده است، میتواند بهجای آن کلاس کد نویسی بردارد.
این موضوع جدا از افرادی که میخواهند برنامهنویسی یاد بگیرند یا آن را آموزش بدهند، برای متخصصان علوم اعصاب هم بحث بسیار جذابی است. ازآنجاییکه از عمر برنامهنویسی کامپیوتر تنها چند دهه میگذرد، مغز هنوز برای پردازش آن، ناحیهی خاصی ایجاد نکرده است.
در نتیجه، بخشی از مغز که اکنون کد کامپیوتری را پردازش میکند، قبلاً برای پردازش کار دیگری به کار میرفته و حالا تغییر کاربری داده است. دو سیستم مغزی، کاندیداهای احتمالی پردازش کد هستند: سیستم مربوط به فعالیتهای زبانی یا سیستمی که مسئول انجام وظایف پیچیدهی شناختی مانند حل مسائل ریاضی یا جدول کلمات متقاطع است و بهعنوان «شبکهی تقاضای چندگانه» (multiple demand network) شناخته میشود.
کد نویسی نوعی زبان است
اگر جزو آن دسته افراد علاقهمند به یادگیری برنامهنویسی هستید که به خاطر نداشتن دانش ریاضی کافی، سراغ این مهارت نرفتهاید، احتمالا از نتایج مطالعهای که در سال ۲۰۲۰ در دانشگاه واشنگتن انجام شد، استقبال خواهید کرد. نتایج این مطالعه نشان داد کد نویسی آنطور که تصور میشود، رابطهی نزدیکی با ریاضی ندارد و در اهمیت داشتن سواد ریاضی برای یادگیری کد نویسی اغراق شده است.
شانتل پرات، دانشمند علوم اعصاب در دانشگاه واشنگتن و سرپرست تیم محققان این مطالعه، سالها روی نحوهی یادگیری مغز مطالعه کرده است.به تصور او، افرادی که مهارتهای زبانی قویتری دارند، احتمالا برنامهنویسان خوبی میشوند. این ایده در مطالعات دیگر نیز دنبال شده بود؛ اما برای اثبات آن داده و مدارک کافی وجود نداشت.
پرات و همکارانش سراغ گروهی ۳۶ نفره از افراد انگلیسیزبان بدون هیچ دانش برنامهنویسی رفتند تا به آنها در سطح مقدماتی پایتون یاد بدهند. تیم تحقیقاتی پیش از آموزش پایتون، از مغز شرکتکنندگان اسکن گرفت تا الگوهای امواج مغزی آنها را در حال استراحت بررسی کند.
مقالهی مرتبط:
این تیم سپس برای ارزیابی مهارت شرکتکنندگان در رشتههای مختلف از آنها آزمون کتبی گرفت و نتایج این ارزیابی را با توانایی آنها در یادگیری کد نویسی مقایسه کرد. محققان دریافتند بهجای دانش ریاضی، این مهارت بهکارگیری زبان، حافظه و استدلال است که در پیشبینی اینکه فرد چقدر در یادگیری برنامهنویسی مهارت دارد، نقش مهمی بازی میکند.
این مطالعه نشان داد سواد ریاضی (شامل چهار عمل اصلی در پایهایترین حالت و اندازهگیری، هندسه، احتمال و آمار در مراحل بالاتر) با سرعت یادگیری دارای همبستگی است؛ اما بهطور کلی ارتباط محکمی با نحوهی یادگیری پایتون ندارد؛ بلکه استعداد یادگیری زبان، حافظه و استدلال با سرعت یادگیری، دقت و یادآوری مطالب همبستگی بیشتری دارند.
البته پرات تأکید میکند نتایج این مطالعه به این معنی نیست کدنویسان هیچ نیازی به ریاضی ندارند. بلکه آن مدل دانش ریاضی که برای برنامهنویسی مورد نیاز است، بهجای آنکه به محاسبات مربوط باشد، به مهارتی نیازمند است که در رشتههای زیادی کاربرد دارد. به اعتقاد پرات، «منظور بسیاری از مردم از ریاضی در واقع حل مسئله است؛ اما کد نویسی خیلی با سواد ریاضی سروکار ندارد.»
البته این مطالعه محدودیتهایی نیز دارد و ما هنوز دربارهی نحوهی پردازش کد نویسی در مغز و اینکه چرا برخی افراد برنامهنویسان بهتری هستند، چیزهای زیادی نمیدانیم.
از طرفی، زبانهای برنامهنویسی دیگر چون جاوا، ++C و ARM که به خوانایی پایتون نیستند، ممکن است چالشهای بزرگتری برای افرادی که تازه به یادگیری کد نویسی روی آوردهاند، ایجاد کند؛ اما شواهدی که در این خصوص وجود دارد علمی نیست و فقط از نوع شواهد حکایتی است.
مشکل دیگر این است که این مطالعه فقط در سطح مقدماتی پایتون انجام شد و مشخص نیست اگر کدآموزان وارد مبحث الگوریتمهای پیچیدهتر شوند و بخواهند مسائل چالشبرانگیزتری حل کنند، آیا همین نتایج به دست خواهد آمد یا خیر.
اما برای پرات و تیمش رسیدن به همین نتیجه کافی بود که کد نویسی فقط مختص افراد مسلط به مهارتهای ریاضی نیست. درحالیکه زبانهای برنامهنویسی کاربرپسندی چون پایتون محبوبتر میشوند و افراد بیشتری به آموختن آنها روی میآورند، مدرسان فرصت دارند دریابند کد نویسی مناسب چه افرادی است و در حرفههای مختلف چه کاربردهایی میتواند داشته باشد.
کد نویسی نه کاملا زبان است نه ریاضی
در مطالعهای جدیدتر که نتایج آن چند ماه پیش منتشر شد، گروهی از محققان دانشگاه MIT و تافتس از حدود ۲۰ شرکتکنندهی بزرگسال و ماهر به کد نویسی خواستند در دستگاه fMRI قرار بگیرند تا فعالیت مغز آنها هنگام حل مسائل برنامهنویسی تجزیه و تحلیل شود.
مشاهدهی اینکه کدام بخش از مغز هنگام حل این مسائل فعال میشوند، به محققان کمک میکند نحوهی پردازش زبانهای کد نویسی را در مغز مشخص کنند. بهعنوان مثال، اگر نواحی مربوط به پردازش زبان در مغز فعال شود، میتوان گفت مغز با کد کامپیوتر مانند زبان رفتار میکند؛ اما اگر نواحی مربوط به پردازش ریاضی فعال شود، میتوان نتیجه گرفت برای مغز، حل مسائل برنامهنویسی مثل حل مسائل ریاضی است.
زبانهای کد نویسی مورد استفاده در این مطالعه پایتون و ScratchJr بود. پایتون به این خاطر که خوانایی بسیار بالایی دارد، زبان موردعلاقهی محققان در انجام مطالعات است؛ ScratchJr هم متشکل از عکسهای نمادین است که برای آموزش کد نویسی به کودکان طراحی شده. در آزمون پایتون، ۲۴ شرکتکنندهی بزرگسال (۱۵ زن) و در آزمون ScratchJr نوزده بزرگسال (۱۲ زن) شرکت کردند.
در تسک اصلی به شرکتکنندگان قد و وزن فردی بهصورت کد پایتون یا جملهی عادی داده شد تا BMI (سنجش سلامت وزن فرد متناسب با قد) او را محاسبه کنند. برای ScratchJr هم از شرکتکنندگان خواسته شد موقعیت بچهگربهای را هنگام راه رفتن و پریدن ردیابی کنند.
تسک کنترل این مطالعه شامل به خاطر سپردن توالی مربعها در یک شبکه (برای فعال کردن سیستم تقاضای چندگانه در مغز) و خواندن یک جملهی بامعنی و یک جملهی بیمعنی (برای فعال کردن سیستم زبان) بود.
در این آزمایش، سیستم زبانی مغز هنگام خواندن کد واکنش ضعیفی نشان داد و محققان به این نتیجه رسیدند که با وجود شباهتهای زبان کامپیوتر با زبانهای طبیعی، مغز با کد بهعنوان زبان رفتار نمیکند. در عوض، خواندن کد شبکهی تقاضای چندگانه را در مغز شرکتکنندگان فعال کرد.
شبکهی تقاضای چندگانه در لوبهای پیشانی و آهیانهای (بالایی) مغز گسترده شده و مسئول انجام وظایف دشوار ذهنی از جمله حل مسائل ریاضی و جدول کلمات متقاطع است. خود این شبکه به دو قسمت چپ (مسئول وظایف منطقی) و قسمت راست (مربوط به تفکر انتزاعی) تقسیم میشود. محققان MIT دریافتند خواندن کد پایتون به نظر میرسد هر دو قسمت چپ و راست این شبکه را فعال میکند، درحالیکه ScratchJr قسمت راست را کمی بیشتر از قسمت چپ به کار میگیرد.
نکتهی جالب توجهی که در این مطالعه به دست آمد، این بود که حل مسائل برنامهنویسی قسمتهایی از شبکهی تقاضای چندگانه را فعال کرد که هنگام حل مسائل ریاضی فعال نمیشوند؛ بنابراین میتوان اینطور نتیجه گرفت مغز با کد برنامهنویسی مانند زبان یا منطق ریاضی رفتار نمیکند و به نظر میرسد پای حوزهی جداگانهای در میان باشد که البته همچنان در شبکهی تقاضای چندگانه قرار دارد.
تحقیقات MIT با مقالهای از دانشگاه جانز هاپکینز همراه بود که به نتیجهی مشابهی رسیده بود. طبق این مقاله، «حل مسائل برنامهنویسی بهجای فعال کردن نواحی مربوط به زبان، شبکهی تقاضای چندگانه را فعال میکند.»
این یافته برای مدرسان برنامهنویسی پیامدهایی به همراه دارد. به قول کلایو تامپسون، نویسندهی حوزهی تکنولوژی، «یکی از دلایلی که دانشمندان دنبال پاسخی برای این سؤال ریاضی/زبان هستند این است که ما واقعا در آموزش برنامهنویسی و علوم کامپیوتر ضعیف هستیم. هیچ کس بهطور کامل نمیداند آیا باید با کد نویسی بهعنوان منطق ریاضی برخورد کرد یا زبان.»
مطالعهی MIT نتیجه گرفت برای مغز انسان، فرایند درک کد شبیه پردازش زبان نیست. به همین خاطر، تدریس کد نویسی مانند یک زبان خارجی احتمالا نمیتواند رویکرد مناسبی باشد.
نتیجهگیری
با این تفاصیل، آیا آموختن برنامهنویسی به دانش ریاضی نیاز دارد یا مهارت یادگیری زبان؟ هر دو یا هیچ کدام؟
برخی از مطالعات قدیمی به این نتیجه رسیدهاند که برنامهنویسی نوعی زبان است و بسیاری از افراد و مؤسسات هم با برنامهنویسی بهعنوان نوعی زبان برخورد میکنند؛ اما مطالعهی جدید MIT نشان داد کد نویسی برای مغز فرایندی منحصربهفرد و پیچیده است و نمیتوان آن را در یکی از این دو شاخه گنجاند.
به گفتهی آنا ایوانوا، نویسندهی اصلی مقالهی MIT، «درک کد کامپیوتر به نظر میرسد پدیدهی منحصربهفردی باشد. نه کاملا مثل زبان است و نه مثل ریاضی و منطق.»
نتایج این مطالعه نشان داد برای این سؤال که آیا بهتر است کد نویسی مانند مهارت ریاضیمحور تدریس شود یا مهارت زبانمحور، پاسخ قطعی وجود ندارد. بخشی از این امر به این دلیل است که یادگیری برنامهنویسی احتمالا هم از سیستم زبانی و هم از سیستم تقاضای چندگانه کمک میگیرد؛ اما با پیشرفت فرد در مهارت کد نویسی، پردازش کد بیشتر در ناحیهی شبکهی تقاضای چندگانه که مربوط به منطق و حل مسئله است، اتفاق میافتد و وابستگی به نواحی زبانی مغز کمرنگ میشود.
بدین ترتیب به نظر میرسد مدرسان علوم کامپیوتر لازم است رویکرد خاص خود را برای آموزش هرچه کارآمدتر کد نویسی ایجاد کنند که احتمالا شامل المانهایی از هر دو شاخهی آموزش زبان و ریاضی میشود.
از طرفی، آزمایشی که دانشمندان علوم اعصاب ژاپنی سال گذشته روی برنامهنویسان مبتدی، باتجربه و متخصص انجام دادند، نشان داد فعالیت در بخشهایی از مغز که با پردازش زبان طبیعی، بازیابی حافظهی اپیزودیک و کنترل توجه در ارتباط است، با بالا رفتن سطح مهارت برنامهنویس تقویت شد. این یافته نشان میدهد کد نویسی ممکن است آنطور که فکر میکردیم به زبان شباهت نداشته باشد؛ اما مانند زبان، شروع یادگیری آن از سنین پایین مؤثرتر خواهد بود.
***
نظر شما کاربر عزیز زومیت در این رابطه چیست؟ آیا کد نویسی برای افرادی که سواد ریاضی خوبی دارند، آسانتر است یا افرادی با مهارت بالای یادگیری زبان؟ یا شاید پای عامل دیگری در میان است؟