تمدید شد! جشنواره تخفیف‌های تابستانی فقط تا پایان ۲ مرداد - کد تخفیف ۲۵% : SUMMER 

نکاتی که آرزو داشتم در زمان یادگیری کدنویسی کسی آنها را به من میگفت، و...

پنج شنبه ۱۳ دی ۹۷ توسط فاطمه بهاروند

نکاتی که آرزو داشتم در زمان یادگیری کدنویسی کسی آنها را به من میگفت، و آنچه که از آموزش دیگران آموخته‌ام

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

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

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

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

هیچ چیز مرموزی در مورد کدنویسی وجود ندارد

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

این مرد(یک مرد باهوش است که از نوشته هایش لذت می برم و اغلب با آن ها موافقم) بیان می کند که حد فاصل روشنی بین افراد با ذهنیت برنامه نویس و سایر افراد که فاقد ظرفیت فکری برای موفقیت در این زمینه هستند وجود دارد. به نظر او این حد فاصل شامل اشاره گر(pointers) و بازگشت(recursion) است(در اینجا و اینجا برای رفع کنجکاوی افرادی که قصد شروع دارند مطالبی وجود دارد).

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

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

هیچگاه بار اول کار نمی کند

و ممکن است در دفعات دوم و سوم نیز کار نکند

زمانی که شما به تازگی شروع به فراگیری کد نویسی می کنید به سرعت با این تجربه ی خاص رو به رو خواهید شد: شما فکر می کنید همه چیز را به درستی و برحسب قاعده تنظیم کرده اید آن را بررسی می کنید، بار دیگر نیز آن را مورد بررسی قرار می دهید اما برنامه همچنان کار نمی کند، شما هیچ اطلاع و سرنخی برای حل این مشکل ندارید و پیام خطا(البته اگر خیلی خوش شانس باشید و تنها یک پیام خطا داشته باشید) ممکن است باعث ناراحتی و فریاد شما شود. ممکن است وسوسه شوید و در همین جا دست از کار بکشید و با خود فکر کنید که هیچگاه نمی توانید این خطا را رفع کنید و در کل اصلا برای این کار ساخته نشده اید. زمانی که برای اولین بار شروع به کدنویسی زبان ++C کردم این حس به من دست داد اما دست آخر برنامه را اجرا کردم و تنها برای حل مشکل خود راه حل "تقسیم بندی خطا" را یافتم.

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

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

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

پرانتز باید به خط بعدی برود. پرانتز باید در همان خط باشد. از tab برای تورفتگی خطوط استفاده کنید. اما tabها زیان بار هستند. شما باید از روش های ذخیره سازی استفاده کنید اما در حقیقت نباید از آن ها استفاده کنید. شما همواره باید در کد خود توضیحات مربوط به آن را قید کنید. اما کد خوب نیازی به توضیحات ندارد.

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

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

از سوی دیگر اگر شما از جمله اشخاصی هستید که مرتکب اشتباهات قدیمی و بی معنی می شود(در قواعد نرد(nerd) است، روی صحبت من با شماست) به جای درستی آمده اید.

*(نرد(nerd):معنی اصلی کلمه nerd یعنی یک شخص غیرجذاب و آزاردهنده یا رنج آور که ممکن است با استعداد و زیرک باشد اما می خواهد که روی حرفه های غیراجتماعی تمرکز کند. در واقع شخصی است که از نظر فکری روی یک موضوع خاص تمرکز شدید دارد و از نظر اجتماعی با مشکل مواجه است در حقیقت. فرد نرد (nerd ) زمان زیادی را صرف کارهایی میکند که برای عموم مردم جذاب نیست.)

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

HTML برنامه نویسی واقعی نیست اگر شما از vi استفاده نکنید در کار خود خیلی جدی نیستیدبرنامه نویسان واقعی بر زبان C مسلط هستند: برنامه نویسان واقعی کارهای خود را با ویندوز انجام نمی دهند. برخی از مردم هیچگاه قادر به یادگیری آن نخواهند بود. شما نباید برنامه نویسی را یاد بگیرید. شما برنامه نویس کامپیوتر نیستید(اما من هستم).

"کدنویسی" نزد افراد مختلف با معانی متفاوتی همراه است و نحوه ی استفاده ی از آن نیز متفاوت است. به طرز شگفت انگیزی ابزارها، بسته ها و چارچوب هایی به وجود می آیند که کدنویسی را برای برنامه نویسان تازه کار و حتی توسعه دهندگان آموزش دیده آسانتر و سریع تر می سازد و عملا ساخت برنامه ها بیشتر شبیه ترسیم آن ها با استفاده از قلمو "نه برای برنامه نویسان واقعی" است.("بازگشت برنامه نویسان واقعی" را ببینید)

در پشت تمام این مسائل ترسی وجود دارد که اگر "هرکسی" بتواند خودش را برنامه نویس بنامد، عنوان برنامه نویس کم کم بی معنی خواهد شد. اما من فکر می کنم این موضوع همچون یک دروازه بان ویرانگر است.

از ابزارهایی استفاده کنید که ساده ترین راه ساخت چیزهای مورد نظر را به شما نشان دهد. اگر این حرف بدان معنا باشد که بازی شما به جای کدنویسی scratch با استفاده از Stencyl یا GameMaker نوشته شود بسیار هم عالی است. اگر در ابتدای کار به سراغ برنامه نویسی HTML یا Excel مایکروسافت رفته اید خوب است. با چیزهایی کار کنید که فکر می کنید با آن راحت هستید.

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

نگرانی در مورد"اعتبار گیک(Geek)" به آرامی شما را می کشد

*(گیک(Geek): گیک (Geek) کسی است که وقتی در یک مسیر اصلی قرار میگیرد یک کشش یا علاقه ی وافری را کسب میکند و در اصطلاح کسی است که با رفتار عجیب غریب اش تعریف میشود ولی معانی دیگری مانند متخصص یا علاقمند رایانه نیز دارد همچنین در بعضی مفاهیم  “رایانه باز” هم میگویند.)

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

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

هرچقدر بیشتر کار کنید از پیگیری روش ها سودمندتر است

هیچ مقاله ی کوتاهی در مورد "درست ترین" یا "بهترین" روش یادگیری کدنویسی وجود ندارد و این تنها رویکردهای بالقوه هستند. شما می توانید مفاهیم را از یک کتاب یا با تکمیل تمرین های تعاملی یا اشکال زدایی کدهایی که دیگران نوشته اند فرا بگیرید. البته زبان های زیادی برای اولین انتخاب وجود دارد که هرکدام طرفداران خاص خود را دارند.

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

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

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

اگر آجر روی آجر بگذارید ممکن است مدت زیادی طول بکشد اما در نهایت شما یک دیوار خواهید داشت. اگر باور داشته باشید که با صرف وقت و داشتن صبر و حوصله می توانید تمام کد مورد نظر خود را بنویسید درست سر وقت آن را به نتیجه ی دلخواه خواهید رساند.

همواره موفق و پیروز باشید...

 


کلیدواژه: اپلیکیشن programming language برنامه نویسی programmer برنامه نویس

منابع: medium.freecodecamp.org

دیدگاه ها:
Alireza
۶ ماه قبل
reply
زیبا و بسیار امید بخش ممنون
ارسال دیدگاه:
برای ارسال دیگاه باید به سیستم وارد شوید و یا ثبت نام کنید. ثبت نام چند لحظه بیشتر زمان شما را نمیگیرد.