هنگامی که در حال یادگیری اصول کدنویسی هستید، با گذر زمان و افزایش دانشتان، اگر خوب پیشرفت کنید با موقعیتی روبهرو خواهید شد که همه چیز به یک باره در نظر شما تغییر میکند که این اتفاق را میتوان یک Inflection Point (نقطهٔ عطف) نامید که پس از گذر از این نقطه، مَنش شما به عنوان یک دولوپر کاملاً دگرگون خواهد شد. نقطهٔ عطف شما در برنامهنویسی در واقع همان لحظهای است که دیگر خودکفا شده و دیگر نیازی به ساپورت دیگران ندارید. هرچند رسیدن به این نقطه کار سخت و طاقتفرسایی است اما وقتی این نقطه را پشت سر بگذارید، مهارتهای شما به طرز غیرقابلباوری افزایش خواهند یافت. حال سؤال اینجا است که چه طور میتوان به این نقطه رسید و یا به عبارت دیگر، چه طور میتوان به یک برنامهنویس خودکفا تبدیل شد که در ادامه تکنیکهایی را برای دستیابی به این مهم با شما به اشتراک خواهیم گذاشت.
یادگیری اصول کار
وقتی که شروع به یادگیری کدنویسی میکنید، اطلاعات خیلی زیادی در این حوزه وجود دارد که هنوز چیزی در مورد آنها نمیدانید به طوری که مثلاً ممکن است ندانید چهطور میشود در زبان پایتون یک لوپ ایجاد کرد یا اینکه چهطور با استفاده از فریمورک جَنگو میتوان دیتای خاصی را از دیتابیس فراخوانی نمود. بنابراین اگر میخواهید به یک دولوپر خودکفا تبدیل شوید، گام اول یادگیری مبانی زبان مد نظر خود است.
وقتی در طی فرآیند یادگیری تلاش میکنید تا نحوهٔ انجام کارهای مختلفی را یکی پس از دیگری بیاموزید، در نهایت خواهید توانست این قطعات پازل را در کنار هم قرار داده و به یک تسلط نسبی بر آن زبان، فریمورک، لایبرری یا ... دست پیدا کنید و بدین ترتیب در حین فراگیری یک زبان برنامهنویسی، در طول زمان الگوهای حاکم بر یک زبان خاص برای شما آشکار خواهند شد و چیزی که در ابتدا عجیب و ترسناک به نظر میرسید، به مهارتی تبدیل خواهد شد که در مواقع لزوم به صورت کاملاً ناخودآگاه میتوانید از آن استفاده کنید.
دقت به جزئیات را فراموش نکنید
توجه به جزئیات بسیار ضروری است به طوری که حتی کوچکترین اشتباهات تایپی نیز میتوانند به ایجاد باگها و یا خطاهایی اعصاب خُردکن منجر شوند! مواجه شدن با ارورها در دفعات اول ممکن است تجربهٔ واقعاً سختی باشد اما در عین حال هَندل کردن اِکسپشنها یکی از گامهای مهم و اساسی در فرآیند یادگیری است. درگیر شدن با ارورها در برنامهنویسی، درس بزرگی به شما میدهد و آن هم اینکه همیشه به جزئیات دقت کنید.
واقعیت امر آن است که ارورها بخش جداییناپذیر از فرایند توسعهٔ نرمافزار هستند و این در حالی است که هم برنامهنویسان مبتدی و هم برنامهنویسان باتجربه و حرفهای خواهناخواه با ارورها روبهرو میشوند اما تنها تفاوت میان ایشان آن است که دولوپرهای باتجربهتر میدانند که چهطور باید باگهای موجود را برطرف کنند و بدین ترتیب پس از مواجهه با هر اروری، زمان خیلی کمتری را برای دیباگ کردن کدها نسبت به دولوپرهای تازهکار صرف مینمایند. روی هم رفته، اگر میخواهید به یک دولوپر خودکفا تبدیل شوید، باید از ارورها استقبال کنید زیرا:
- هر چه با ارورهای بیشتری مواجه شوید، بیشتر یاد میگیرید که چگونه اطلاعات لازم را از هر ارور استخراج کنید و البته هر بار با سرعت بیشتری نیز این کار را انجام خواهید داد (اولین باری که با یک ارور مواجه میشوید، شاید به زمان زیادی نیاز داشته باشید تا فقط بتوانید مفهوم آن را درک کنید اما بعد از اینکه با صدها ارور روبهرو شوید، یاد میگیرید که چهطور سریعاً به سراغ مشکل اصلی بروید و اطلاعات لازم برای دیباگ نمودن کد را از آن ارور استخراج نمایید.)
- در حین برطرف نمودن هر ارور، میتوانید چیزهای جدیدی یاد نیز بگیرید و از همین روی هدفتان تنها برطرف کردن ارور ایجاد شده نباشد؛ بلکه سعی کنید همزمان با رفع مشکل، چیزی به دانش خود بیفزایید و در دفعات بعدی این دانش را به کار ببندید.
- با گذر زمان و مواجهه با ارورهای بیشتر، یاد میگیرید تا به جای اینکه مستقیماً از دیگران کمک بخواهید، میتوانید در مورد مشکل خود سِرچ نموده و با استفاده از راهحلهای ارائه شده در سایتهایی مثل اِستک اورفلو، گوگل و غیره، مشکل خود را به تنهایی حل کنید.
در اوایل مرحلهٔ یادگیری اصول کار برای اینکه بتوانید کد بزنید، مجبور هستید تا دستورالعملهایی را مو به مو اجرا کنید، با مشکلات و ارورهای متعددی روبهرو شوید و برای رفع آنها تلاش کنید و مجموعهٔ این کارها در نهایت شما را به دولوپر ماهرتری تبدیل میکنند به طوری که پس از آن قادر خواهید بود تا با سرعت بیشتری کد بزنید.
در واقع، با رسیدن به این سطح از توانایی، تعدادی از افراد به اعتماد به نفس بالایی دست پیدا نموده و حس میکنند که قادر هستند بدون دنبال کردن دستورالعملها و آموزشهای مختلف، کدهای مورد نظر خود را بنویسند و از این رو با خوشحالی به سراغ جنبههای مختلفی از زبان مورد نظر خود میروند که تاکنون با آنها دستوپنجه نرم نکردهاند اما برخلاف این گروه، عدهٔ دیگری نیز وجود دارند که با رسیدن به این سطح از مهارت به سراغ آموزشهای پیشرفتهتر میروند و سعی میکنند تا بیش از پیش به دانش خود بیفزایند تا شاید بدین ترتیب بتوانند به اعتماد به نفس مورد نظر خود دست یابند اما واقعیت آن است که با دنبال کردن آموزشهایی که در اینترنت یافت میشوند هرگز نمیتوان اعتماد به نفس واقعی را به دست آورد بلکه برای دستیابی به این مهم باید کد بزنید، اشتباه کنید، با ارورها درگیر شده و آنها را برطرف کنید، راهحلهای مخصوص خودتان را کشف کنید.
در حقیقت، شما به عنوان یک دولوپر هیچوقت کلیهٔ چیزهای مرتبط با مشکلاتی که با آنها روبهرو خواهید شد را نمیدانید فلذا اگر منتظر روزی هستید که همه چیز را بیاموزید و سپس شروع به کد زدن کنید، باید بدانید که متأسفانه چنین روزی هیچوقت از راه نخواهد رسید!
واقعیت امر آن است که برنامهنویسی تجربهٔ یک یادگیری مادامالعمر است و برنامهنویسان باتجربه مشتاق حل مسائل حلنشده هستند زیرا میدانند که با حل مشکلاتی که تاکنون با آن برخورد نکردهاند، چیزهایی خواهند آموخت که تاکنون هرگز نمیدانستند. پس بهطور خلاصه، هنگامی که به قدر کافی با ارورهای متنوع و متعدد روبهرو شدید و به سطحی رسیدید که دیگر ترسی از ارورهای جدید نداشتید، هنگامی که توانستید بفهمید که کجا باید دنبال مشکل بگردید و چهطور باید آن را حل کنید، هنگامی که توانستید با سرچ نمودن راهحل بخشی از مشکلات خود را بیابید و هر وقت توانستید بدون مراجعه به راهنماهای گامبهگام، الگوهای کدنویسی را در سرتاسر کدهای خود رعایت کنید، به نقطهٔ عطفی رسیدهاید که شما را آمادهٔ ورود به مرحلهٔ بعد کرده است.
نقطهٔ عطف
Inflection Point (نقطهٔ عطف) بخشی از پروسهٔ یادگیری اصول کدنویسی است که شاید بتوان برچسب سختترین مرحلهٔ یادگیری را به آن نسبت داد اما فراموش نکنید که در عین حال مهمترین مرحله نیز قلمداد میگردد و مرحلهای است که در آن پس از دریافت آموزشهای لازم و مطالعهٔ کتابها و سایر منابع، شروع به حل مسائلی میکنید که پیش از این قادر به درک آنها نبودید.
پس از ورود به این مرحله، گاهی اوقات ممکن است احساس کنید که از عهدهٔ مشکلات پیشرو برنمیآیید و حتی شاید فکر کنید که بهتر است به مرحلهٔ قبل برگشته، دانش خود را بیشتر نموده و یا برای حل مسائل از راهنماییهای گامبهگام پیروی کنید. در یک کلام، سعی کنید هرگز تحتتأثیر ذهنیتهایی از این دست قرار نگیرید و به خاطر داشته باشید که خستگی و ناامیدی شما به خاطر این است که در این نقطهٔ عطف، چندین برابر آهستهتر از مراحل قبل کد خواهید زد.
ممکن است احساس کنید که پیشرفت بسیار کُندی دارید (که البته حس کاملاً درستی است) اما علیرغم این کاهش سرعت پیشرفت، شما دارید به مهمترین دستاوردهای خود دست پیدا میکنید. هرچند دانشی که از قبل اندوختهاید بسیار ارزشمند است، اما دیگر پاسخگوی نیازهای شما نیست و در این مرحله باید با تلاش برای حل مسائل، دانش عملی و تجربی خاص خود را به دست آورید. به دست آوردن دانش عملی یعنی اینکه بتوانید در حین انجام یک کار، خود را آموزش دهید و برای مشکلات جدید و ناشناخته راهحل ارائه کنید. از سوی دیگر، هرچند هنوز هم تا حد زیادی از دانش قبلی خود استفاده میکنید، اما روش استفادهٔ شما از این دانش متحول خواهد شد. در واقع، در این مرحله باید بتوانید برای حل مشکلات جدید دانستههای قبلی خود را با هم ترکیب نموده و بفهمید که کجا بایستی به دنبال راهحل مشکل جدید خود بگردید و از همین روی برای حل مشکلات جدید، هم به دانش اولیه و هم به تجربیات جدیدی نیاز خواهید داشت.
از منطقهٔ امن خود خارج شوید
بعضی از دولوپرها همین که به سطح خوبی از مهارت رسیدند و توانستند جایگاه خود را تثبیت نمایند، دیگر به سراغ چالشهای جدید نمیروند و پا را از منطقهٔ امن خود بیرون نمیگذارند اما واقعیت این است که برنامهنویسی بدون روبهرو شدن با چالشهای جدید میتواند به کاری یکواخت، سخت و طاقتفرسا تبدیل شود. بنابراین به جای محافظهکاری بیش از حد، در کنار انجام پروژههای مطابق سطح مهارتی خود، گاهی از منطقهٔ امن خود خارج شده و به سراغ چالشهای جدید بروید.
گاهی اوقات چیزهایی از این دست میشنویم که مثلاً AnguarJS این روزها خیلی پرطرفدار است یا اینکه JavaScript امروزه اهمیت زیادی پیدا کرده است و غیره؛ علیرغم همهٔ این واقعیات، وقتی مشغول یادگیری فناوری خاصی میشوید، هدف اصلی شما باید عبور از نقطهٔ عطف باشد زیرا هنگامی که از این مرحله عبور کردید، یادگیری موارد جدید برای شما بسیار آسان خواهد شد. به عبارتی، دیگر اهمیت چندانی ندارد که مثلاً کدام فریمورک پرطرفدارتر است، زیرا به راحتی و با صرف زمان اندکی خواهید توانست به آن تسلط پیدا کنید.
چهطور در حین عبور از نقطهٔ عطف، بیشترین دستاوردها را نصیب خود کنیم؟
از آنجا که نقطهٔ عطف مهمترین مرحلهٔ یادگیری کدنویسی است، باید از همان مراحل اولیهٔ آموزش و کسب مهارت خود را برای این مرحلهٔ مهم آماده کنید و از همین روی در هر مرحله از آموزش که هستید، سعی کنید پا را اندکی از اهداف آموزش فراتر نهاده و خود را درگیر چالشهای موجود کنید. درست است که در مرحلهٔ آموزش باید از دستورالعملها پیروی کنید، اما سعی کنید علاوه بر پیروی از آموزشها، هم کدهایی که مینویسید را مستند کنید و هم مستندات کدهای دیگران را بررسی نمایید که بدین ترتیب در آینده قادر خواهید بود تا به کدهایی که قبلاً نوشتهاید برگشته و از آنها به عنوان یک رِفرنس معتبر استفاده نمایید.
چگونه متوجه شویم که از نقطهٔ عطف عبور نمودهایم؟
آخرین مرحلهٔ عبور از نقطهٔ عطف، پذیرش است بدین صورت که اولاً بپذیریم فرایند توسعهٔ نرمافزار مستلزم یادگیری مداوم و مستمر است و این فرآیند هیچوقت پایان نمییابد و ثانیاً پذیرش اینکه یادگیری هر چیز جدیدی نه به معنای پایان چالشها، بلکه به معنای روبهرو شدن با چالشهای جدیدتر و گستردهتر است.