نکاتی پیرامون فراگیری مهارت برنامه نویسی – پادکست پرسش و پاسخ

پادکست پیرامون فراگیری مهارت برنامه نویسی
نسخه نوشتاری
یکی از شایعترین سوالاتی که افراد گوناگون مطرح میکنند، پیرامون روش فراگیری مهارت برنامه نویسی است. پرسشهایی با این مفهوم به طور مکرر توسط علاقهمندان به فراگیری مهارت برنامه نویسی، دانشجویان و افراد جویای کار پرسیده میشود.
این موضوع نیازمند بحثهای گستردهای است و از این رو، در وبلاگ فرادرس طی مطالب جداگانهای به آنها پرداخته شده است. در این راستا، مطالعه مطالب زیر توصیه میشوند.
- برنامه نویسی چیست ؟ — از شروع یادگیری تا کسب درآمد
- چگونه برنامه نویس شویم ؟ — راهنمای شروع و موفقیت در برنامه نویسی
- چطور برنامهنویس شویم؟ — راهنمای عملی ورود به دنیای برنامهنویسی
- پاسخ پرسشهای رایج در خصوص برنامهنویسی
- ده زبان برنامهنویسی که باید در سال ۱۳۹۸ یاد بگیرید
- زبانهای برنامهنویسی که نباید در سال ۲۰۱۹ بیاموزید
چالشهای مهم در مسیر فراگیری مهارت برنامه نویسی
متاسفانه، در حال حاضر در کشور در آموزش چند چیز مشکل اساسی وجود دارد که این موارد از یک منظر خیلی شبیه به هم هستند. یکی از این موارد که برای بسیاری از افراد ملموس است و خیلی جنبه عمومی دارد، آموزش زبان خارجی و به ویژه زبان انگلیسی است. آموزش زبان انگلیسی در دوره راهنمایی، دبیرستان و دانشگاه تدریس میشود.
آموزشگاههای خصوصی بسیاری نیز به آموزش زبان انگلیسی میپردازند. ولی با این وجود، همچنان بسیاری از فراگیران به دانش قابل توجهی از زبان انگلیسی دست پیدا نمیکنند. متاسفانه، حتی بسیاری از دانشجویان مقاطع تحصیلات تکمیلی شامل فوق لیسانس و دکترا نیز در بحث زبان مشکل دارند.
یک مساله انکار ناپذیر پیرامون برنامهنویسی نیز همین موضوع است. مشکل مشابهی در مورد آموزش ریاضیات نیز وجود دارد. نکته جالب آن است که همه این موارد ماهیت بسیار شبیه به یکدیگری دارند. به طور خاص، آموزش برنامهنویسی و زبان خارجی شباهت بسیار زیادی به هم دارند. برای هر دو مورد مذکور، فرد باید مفهومی که در ذهن خود دارد را به زبان دیگری ترجمه کند. حال، اگر این زبان یک زبان کامپیوتری، یعنی زبانی بین انسان و کامپیوتر یا همان زبان برنامهنویسی باشد، میشود برنامهنویسی و اگر زبان خارجی باشد، نوشتار یا گفتار به زبان دیگر میشود . این موضوعی است که این موارد را خیلی به یکدیگر مرتبط میکند. جالبتر آنکه روشهای مورد استفاده برای آموزش این موارد (یعنی برنامهنویسی و زبان خارجی) نیز میتوانند مانند هم باشند.
شرایطی مفروض است که ضمن آن، فرد در محیطی قرار میگیرد که نیاز به استفاده از یک زبان خارجی داشته باشد. طبیعتا سرعت یادگیری در چنین شرایطی افزایش پیدا میکند. معمولا در مورد برنامهنویسی نمیتوان به راحتی چنین شرایطی را فراهم کرد. در واقع، برای فراگیری یک زبان خارجی مثلا میتوان فرد را در معرض شنیدن آن زبان و یا گروهی از افراد قرار داد که با هم به آن زبان صحبت میکنند. اما در مورد کامپیوترها چطور، آیا چنین چیزی امکان دارد؟ حقیقت این است که باید به عنوان یک ابزار حتما به برنامهنویسی اتکا داشته باشیم؛ حتی اگر چیزی با یک کاغذ و قلم نیز حل میشود، گاهی باید سعی کرد که برای آن برنامه نوشت؛ این یک تمرین سخت است. در واقع، این کار مانند آن است که فرد به پاهای خودش وزنه ببندد و بپرد یا بدود. یعنی کاری را که میتوان به راحتی انجام داد، با روش سختتر حل کرد. اینها تمرینات سختی هستند، اما برای مثال در مورد برنامهنویسی چون هدف ورزیده کردن مغز و این است که فرد به طور ناخودآگاه بتواند مانند کامپیوتر فکر کند، پس تمرینات مفیدی هستند و کمک میکنند تا فرد مانند کامپیوتر فکر کند.

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

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

دلیل این امر آن است که در نظام آموزشی موجود، فقط یک زبان برنامهنویسی شامل ساختارها، شیگرایی و دیگر مباحث آموزش داده میشود ولی به ندرت مورد استفاده قرار میگیرد. معمولا به وصل شدن به یک «پایگاه داده» (Data Base) و پر و خالی کردن چند جدول بسنده میشود. این چیزی است که از آن در اینجا به عنوان مهندسی نرمافزار یاد میشود. این درست نیست و چیزی هم نیست که فرد بخواهد به آن اتکا کند و محصولات در مرز دانشی ارائه شود. این روند، مسیر غلطی است که اگر قرار بود جوابگو باشد، ایران اکنون باید مثل هندوستان و بسیاری از دیگر کشورهای هم رده میتوانست سهم مناسبی را در بازار نرمافزار داشته باشد که ندارد. متاسفانه حتی در برآورده کردن نیاز داخلی نیز ناتوانی وجود دارد.
بسیاری از نیازها در این کشور به صورت ذاتی امکان برآورده شدن را ندارند. خیلی از شرکتها و صنایع دچار این مشکل هستند؛ برای مثال برنامهای که در بانکها مورد استفاده قرار میگیرد، چه نسخه آنلاین و چه نسخه آفلاین که در دستگاه خودپرداز و پوز وجود دارد، از نقطه ضعفهای زیادی رنج میبرند. در این زمینه مشکلات جدی وجود دارد و دلیل آن هم این است که نگاه علمی در ساخت آنها وجود ندارد. حتی جایی که نگاه علمی ضرورت داشته است نیز به روی آن چشم بسته شده است. یک جاهایی هست که اساسا اگر نگاه علمی وجود نداشته باشد، نمیتواند محصولی شکل بگیرید. نگاه ریاضی و نگاه از منظر هوش مصنوعی خیلی مهم است و باید آنها را جدی گرفت؛ به ویژه ریاضیات.
برای افراد بزرگسال نیز این موضوع صادق است. یعنی کاربر خیلی وقتها میتواند مساله را به چند مسأله ریزتر بشکند و محاسبات را به شکل بهتر و مناسبتری انجام دهد. سپس، با گذشت مدتی زمان، این مهارت را بعد از مدتی به صورت ذهنی جلو ببرد. این مهارت ریاضی واقعا خیلی اهمیت دارد و گاهی وقتها مشاهده میشود که افراد با مفاهیم برنامهنویسی یا خواندن الگوریتمها مشکل ندارند، بلکه نمیتوانند به صورت ریاضی مساله را توصیف کنند یا توصیف ریاضی یک مساله را به درستی درک کنند.
یادگیری، مسیری تا همیشه
موضوع دیگری که باید به آن توجه داشت این است که هیچ کتاب، دوره آموزشی و یا استادی برای کاملا آگاه کردن فرد کافی نیست و فرد همیشه به یادگیری نیاز خواهد داشت. پیش از این نیز بیان شده است که فرد به طور دائم به مطالعه نیاز دارد.

خواندن کد منبع برنامههای گوناگون درسهای بسیاری دارد که نمیتوان هیچ استادی برای آن یافت. با خواندن کد منبع و بررسی سایتهای پرسش و پاسخ، فرد چیزهایی را میآموزد که امکان نداشت در هیچ کتابی به آنها برسد. بنابراین، اساسا توصیه میشود که افراد زبان و ریاضیات را تقویت کرده، این سایتها را دنبال کنند و مطالعه مستمر نیز داشته باشند. پس از اینکه فرد این لوازم را در واقع درون یک قابلمه ریخت، تمرین کردن را میتوان به عنوان جوشاندن و پختن این مواد اولیه در نظر گرفت. فرد چارهای جز این ندارد که از برنامه خود نتیجه بگیرد. این موضوعی است که متاسفانه خیلی از افراد پشتکار لازم را برای آن ندارند یا موضوع را خیلی سخت میگیرند؛ فکر میکنند که نمیتوانند مسألهای را حل کنند، زود دست میکشند و ناامید میشوند. برخی افراد هم کار را خیلی سهل میگیرند.
از طرف دیگر نیز برخی از افراد فکر میکنند که با خواندن یک کتاب کار تمام است و باید برنامهنویس شده باشند و هر کاری را بتوانند انجام دهند. اما پای عمل که میآیند میببینند که دچار مشکل شدهاند. همه این مشکلات با استفاده از روش کلی گفته شده قابل رفع هستند و هیچ ارتباطی به سن و سال هم ندارند. به نظر من، فردی که پنجاه سال سن دارد نیز میتواند برنامهنویسی را به خوبی یاد بگیرید. اساسا و از نظر تئوری هر کسی که امکان صحبت کردن دارد میتواند برنامهنویس هم بشود.
حال این بدان معنا نیست که فرد الزاما برنامهنویس قهاری میشود، این را نمیتوان با اطمینان گفت؛ ولی میتواند برنامهنویسی کند و حتی اگر برنامهنویس خوبی هم نباشد ولی میتواند اصطلاحا گلیم خودش را از آب بیرون بکشد. هر انسانی که میتواند صحبت کند (صحبت کردن صرفا به معنی تکلم نیست و شامل نوشتار نیز میشود؛ یعنی کسی که میتواند خودش را توصیف و مفهوم را در قالب زبان بیان منتقل کند، میتواند به زبان کامپیوتر نیز مسلط شود. حالا خب همه میتوانند حرف بزنند ولی الزاما همه سخنوران خوب و قابلی نیستند. همانطور که شخصی نسبت به مردم عادی نویسنده قهار و دیگری سخنران خیلی خوبی است، یک برنامهنویس خوب نیز نسبت به یک برنامهنویس معمولی اینچنین است.
افراد باید به اندازه کافی مطالعه کنند، مثل نویسندهای که آثار مختلفی را میخواند و از آنها ایده میگیرد. باید به اندازه کافی تمرین و تکرار داشته باشند، مثل یک نویسنده که مطالب زیادی را مینویسد و بعد یکباره همه آنها را پاره میکند و دوباره مینویسد. این خیلی مهم است که افراد هیچ وقت فکر نکنند که این روند آموزشی تمام میشود. من خودم هم در حال یادگیری برنامهنویسی هستم؛ یعنی هیچ کس برنامهنویس کاملی نیست که از یادگیری بینیاز باشد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش اصول و مبانی برنامهنویسی
- آموزش برنامهنویسی جاوا
- مجموعه آموزشهای ریاضیات
- چطور برنامهنویس شویم؟ — راهنمای عملی ورود به دنیای برنامهنویسی
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
^^
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید













