چگونه برنامهنویسی حرفه ای شویم؟
سلام دوستان برنامه نویس عزیز و گرامی ، حال شما خوبه ؟ امیدوارم که سلامت و شاد باشید و با اموزش امروز ما که در مورد برنامه نویسی میباشد همراه بمانید. در این مقاله قصد داریم راهکارهای عملی برای تبدیل شدن به یک برنامهنویس حرفهای را در اختیارتان قرار بدهیم .
برای راهنمایی افرادی که دوست دارند برنامهنویسی حرفهای شوند، دستاندرکاران این حوزه دیدگاههای متفاوتی دارند و پیشنهادهای گوناگونی ارایه میدهند. در این جا شما را با مبانی و اصول لازم برای کسب تبحر در برنامهنویسی آشنا خواهیم کرد.
زبان جدیدی یاد بگیرید
یادگیری زبانی دیگر (به جز زبانهایی که هماکنون با آنها آشنایید) همواره از شما برنامهنویسی بهتر میسازد. البته بهتر است زبانی بیاموزید که به کل با زبان برنامهنویسی که هماکنون با آن کار میکنید، تفاوت داشته باشد به عبارت دیگر، اگر یک برنامهنویس C# هستید، بهتر است به جای یادگیری VB.NET یا Java به دنبال آموزش Ruby یا Groovy باشید. البته منظور این است که زبان را تا حد زیادی یاد بگیرید، نه اینکه تنها به آشنایی با کلیات آن بسنده کنید. یادگیری یک زبان شامل سه مرحله است: آشنایی با دستورها (Syntax)، عملگرها (Operators) و کتابخانهها (Libraries)، و نحوه استفاده از آنها. یادگیری دو مورد اول آسان است و یک برنامهنویس باتجربه میتواند حتی دستورهای یک زبان جدید را تنها ظرف ۳۰ دقیقه فرا گیرد. اطلاعات لازم درباره عملگرها و کتابخانهها نیز با مطالعه به دست خواهد آمد. اما مورد سوم یعنی چگونگی استفاده از آنها، تنها با ماهها تلاش و سروکله زدن با یک زبان به دست میآید. پیشنهاد میکنیم برای یادگیری زبان، پروژهای با آن بنویسید تا آن را بهتر بیاموزید.
کمک به دیگران
آموزش دیگران همواره یکی از بهترین راهها برای یادگیری بوده است. ممکن است تصور کنید نکته خاصی برای آموزش به دیگران بلد نیستید، چرا که در حوزه برنامهنویسی تازهکارید. اما اشتباه نکنید، این توجیه اصلا منطقی نیست! به خاطر داشته باشید هر آن چیزی را که اکنون میدانید، زمانی از کسی دیگر و در مکانی دیگر فرا گرفتهاید؛ بنابراین سعی کنید به دیگران نکاتی را بیاموزید. پیشنهاد میکنیم زمانی هر چند کوتاه را به این امر اختصاص دهید. برای مثال سعی کنید به سؤالات کاربران انجمن وب سایتها پاسخ دهید. به این ترتیب با خواندن جوابهای دیگر کاربران هم نکات بسیار زیادی فرا میگیرید.
صبور باشید و به تمرین ادامه دهید
تحقیقات نشان میدهد تقریباً حدود ۱۰ سال یا چیزی بین ده هزار تا بیست هزار ساعت تمرین مداوم نیاز است تا بتوانید تبدیل به یک متخصص شوید. البته منظور این نیست که یک کار خاص را باید مدت ۱۰ سال انجام دهید، بلکه باید کارهای متفاوت بسیار زیادی را بدون متمرکز شدن روی حوزهای خاص در این مدت انجام دهید تا متخصص شوید. متخصص شدن، زمان و انرژی بسیار زیادی میطلبد. مشغول کردن خود به عنوان یک برنامهنویس به مدت چند سال کافی نیست. بهتر است تا جایی که میتوانید مطلب بخوانید و در اوقات فراغت نیز تمرین کنید. توصیه میکنیم اگر موقعیت و سنتان مناسب است، از دوران دبیرستان کار را شروع کرده و وقت ثابت و زیادی را به یادگیری مهارتهای جدید اختصاص دهید. در نتیجه با این کار نسبت به همسالان خود خیلی زودتر پیشرفت کرده و موقعیتهای مالی بهتری نیز پیدا میکنید.
حذف عقاید بیپایه
تعارفات رایج را کنار بگذاریم: برنامهنویسان تازهکار تصور میکنند همیشه تنها یک راه برای انجام دادن کار به نحو احسن وجود دارد، در حالی که چنین نیست. احترام به نظرات یک دوست، یک شخص معتبر و یک فرد خبره قابل تقدیر است، اما هرگز عقاید آنها را به عنوان نظراتی درست و غیرقابل تغییر قبول نکنید. اگر خودتان از چگونگی انجام کارها مطلع نیستید، چه چیزی باعث میشود که تصور کنید فلان متخصص درست میگوید؟ بسیاری از برنامهنویسان تازه کار، به این علت که روی چند توصیه و عقیده ناآگاهانه سماجت میورزند یا از بعضی به اصطلاح متخصص پیروی میکنند، تا سالهای سال هیچ پیشرفتی در کارشان نداشته و درجا میزنند. نمونه عینی در این زمینه را میتوان برداشت نادرست از ساختمان برنامهنویسی شیگرا یا Object Oriented دانست. برای مثال، بسیاری از تازه کارها اطلاعاتی کم و بیش نسبت به برنامهنویسی شیگرا پیدا میکنند و بعد از این اگر نگاهی به متن برنامه یکی از نرمافزارهای سادهشان بیندازید، خواهید دید نمودارهای کلاس (Class Diagrams) برنامهشان همانند برج میلاد سر به فلک کشیده است!
فراگیری کامل چند تکنیک
خاص برنامهنویسی
بخش مهمی از چیزی که شما را به یک برنامهنویس ماهر تبدیل میکند، دانستن نحوه کار با چندین تکنیک و مفهوم ویژه است. برای مثال بعضیها در تکنیکهای مثل چند رشتهای (Multithreading) یا موازی سازی (Parallelism) حرفهای میشوند. میتوان با مطالعه مقالات مرتبط با تکنیکهای مورد نظـر و یا نوشتن نرمافزارهایی که از این تکنیکها استفاده میکنند،
مهارت لازم را در آنها کسب کرد. البته تکنیکی انتخاب کنید که به کار بیاید. حتی اگر در حوزه برنامهنویسی تازهکار هستید، سعی کنید روی یک تکنیک تبحر کسب کنید.
آشنایی با تئوریهای پایهای
نوشتن عبارت معروف «Hello World» یک چیز است و دانستن این موضوع که این کلمات چگونه روی صفحه به نمایش در میآیند، چیزی دیگر. با یادگیری «شالوده» یک زبان برنامهنویسی، مهارت بیشتری در آن کسب میکنید. به این ترتیب اگر چیزی به درستی عمل نکرد، امکان پیدا کردن راه حل برای آن راحتتر خواهد بود. با یادگیری نحوه رخ دادن اتفاقات سطح پایینتر (Low Level) مسلما برنامهنویس بهتری خواهید شد.
فراگیری عادتهای خوب
هیچ چیز مانند اختصاص اسامی نامناسب به متغیرها، روشهای نادرست نشانهگذاری و موارد این چنینی، نشان از تازهکار بودن و خام بودن برنامهنویس نیست. اغلب اوقات جزییات مهمی مانند شیوه صحیح نگارش کدها به شخص آموزش داده نمیشود. بیتردید با رعایت اصول صحیح کدنویسی، یک سر و گردن بالاتر از همتایان خود قرار خواهید گرفت. حتی اگر شخصی برنامهنویس حرفهای باشد، اما نتواند متغیرها را به درستی نامگذاری کند و انسجام خوبی در نوشتن کدها ایجاد نماید، این طور به نظر خواهد رسید که نمیداند در حال انجام چه کاری است. این امر موجب دشواری نگهداری از کدها در طول پروسه برنامهنویسی نیز میشود.
خوش بگذرانید!
امری که در حرفه برنامهنویسی باعث پیشرفت شما میشود، دریافت مبالغ بالا از مشتری نیست، بلکه شادی و لذت واقعی که خودتان از انجام کار میبرید، ملاک پیشرفت کار خواهد بود. اگر در حال حاضر سناریو، مسئلهای بزرگ برای افـرادی است که قصد فعالیت در این حوزه را دارند. اگر به دنبال کسب تجربه برنامهنویسی هستید، توصیههای زیر را به کار ببندید.
مجانی کار کنید یا چیزی نزدیک به آن
در حالی که شرکتها و نهادهای رسمی هرگز مشتاق پذیرش افراد بیتجربه یا کمتجربه نیستند، اما در عوض سازمانها و نهادهای غیرانتفاعی اشتیاق ویژهای برای استخدام برنامهنویسان بیتجربه یا کمتجربه دارند. همانطور که در قسمت قبل اشاره کردیم، اگر فرصت و موقعیت مناسبی دارید، بهتر است از دوران دبیرستان کار خود را شروع کنید و سعی کنید برای همان جایی که در آن مشغول به تحصیل هستید، برنامهای بنویسید یا وب سایتی طراحی کنید. انجام چنین کارهایی شاید افتخار بزرگی به حساب نیاید، اما باعث کسب تجربه و بالا رفتن معلومات میشود. بهتر است وقت خاصی در طول شبانه روز یا آخر هفتهها را به کارهای این چنینی اختصاص دهید. علاوه بر احساس رضایتی که از انجام کاری مثبت برای جامعه به دست میآورید، کارهایی را تجربه اگر از یک Code Generator استفاده میکنید، واقعا به آن کدهایی که این ابزار تولید میکند، نگاهی بیندازید.
بررسی کدهای برنامهنویسان حرفهای
هنگام کار نگاهی به کدهایی که برنامهنویسان خبره مینویسند، بیندازید و از خود بپرسید چگونه و چرا به این شکل نوشته شدهاند. اگر حوصله و وقت دارید، نگاهی به پروژههای منبع باز هم بیندازید؛ به این ترتیب نکات بسیاری در رابطه با نحوه نوشتن کدها خواهید آموخت. در این میان مواظب باشید شیوهها و روشهای نادرست و بد الگوبرداری نکنید. در حقیقت نمیگوییم کورکورانه تقلید کنید (کاری که برخی برنامهنویسان انجام میدهند)، بلکه هدف این است که متوجه شوید چه روشی منطقیتر بوده و بهتر جواب میدهد.
برنامهنویسی مبتدی و تازهکار هستید و متوجه شدهاید آن طور که تصور میکردید علاقهای به این حرفه ندارید، چه چیزی باعث میشود فکر کنید تبدیل شدن به یک برنامهنویس متوسط یا حرفهای وضع شما را دگرگون خواهد کرد؟ شغل یا حداقل حوزه کاری خود را تغییر دهید. از طرف دیگر اگر کاری را که انجام میدهید، دوست داشته باشید، تضمین میدهیم با پشتکار و تلاش مستمر، سریعتر از آنی که تصور میکنید برنامهنویس متبحر خواهید شد.
راههای کسب تجربه برنامهنویسی
یکی از مشکلات رایج برنامهنویسان تازهکار این است که اغلب شرکتهای نرمافزاری، تمایلی به استخدام افراد بیتجربه و بدون سابقهکاری ندارند و حاضر نیستند برای آموزش چنین افرادی هزینه کنند. پس افراد چگونه باید تجربه به دست آورند؟ متاسفانه این میکنید که بعدها میتوانید در رزومه خود آنها را ذکر کنید. تعداد زیادی از پروژههای منبع باز وجود دارند که میتوانید به آنها کمک کنید، یا حتی میتوانید یک پروژه منبع باز رها شده را انتخاب و آن را احیا کنید.
از جان و دل مایه بگذارید
آیا میخواهید پیشرفت کنید؟ باید بهایش را بپردازید، زحمت بکشید و بیکار ننشینید. فکر نکنید فرصتهای کاری مناسب را باید در ظرفی از طلا تقدیمتان کنند. شاید چند نفری خوشاقبال باشند و با کمک خویشاوندان و آشنایان خود، بلافاصله بعد از فارغالتحصیلی با حقوقی خوب استخدام شوند یا موفق شوند در دوره کارآموزی خود، فرصتهای خوبی به دست آورده و در جایی مشغول به کار شوند. اما برای اغلب افراد در حال تحصیل و یا فارغالتحصیل، تنها راه برای پیشرفت، کار است و کار است و کار.
در جایی که هماکنون مشغول به کار هستید و ارتباط چندانی هم با علاقه شما یعنی برنامهنویسی ندارد، حق ندارید وقت کاری خود را صرف برنامهنویسی و یا جمعآوری اطلاعات در این خصوص نمایید بلکه باید روی کار اصلیتان متمرکز شوید. بنابراین باید فرصتهای دیگری را غنیمت بشمارید تا به کسب تجربه برنامهنویسی بپردازید. فکر بدی نیست که زمانی از وقت ناهار را به برنامهنویسی اختصاص دهید، یا پس از ساعات کار، به برنامهنویسی بپردازید. زمانش مهم نیست، فقط همین حالا شروع کنید و به طور مستمر کارتان را ادامه داده و مواظب باشید سختی شرایط دلسردتان نکند.
کار در خانه
ممکن است کسی را پیدا نکنید که تمایلی به استخدام رایگان شما به عنوان برنامهنویس داشته باشد. شاید نتوانید راهی بیابید که به شما در حرفه برنامهنویسی، در کنار کاری که هماکنون مشغول هستید و ارتباطی هم با برنامهنویسی ندارد، کمک کند. در این حالت کار خود را در خانه شروع کنید. نرمافزارهایی که واقعا دوست دارید، پیدا کرده و نگارش خودتان از آنها را طراحی کرده و بنویسید. اگر هم قبلا ایده طراحی نرمافزاری خاص در ذهنتان بوده، همین الان شروع به نوشتن آن کنید.
هنگامی که در خانه کار میکنید، سعی کنید تا جایی که امکان دارد مراحل طراحی و توسعه نرمافزار را در حالتی پیشرفته انجام دهید. مثلاً برای هر بخش، تستهای مخصوصی در نظر بگیرید.
وقتی در خانه آرام و راحت باشید، نرمافزاری که طراحی میکنید کیفیت بهتری خواهد داشت. بسیار مهم است که هنگام مصاحبه استخدام، حرفی برای گفتن و یا پروژه و کاری برای ارایه داشته باشید. همین پروژهای که ساعتهای زیادی را در خانه صرف آن کردهاید، مطمئنا در این گونه مواقع به کمکتان آمده و ممکن است موقعیت شغلی بهتری برای شما رقم بزند. بنابراین تا جایی که امکان دارد از تمام توانایی و علم خود برای طراحی هر چه بهتر آن استفاده کنید.
مهارتهای لازم برنامهنویسی در چند سال آینده
اگر قصد یادگیری مهارت یا زبان برنامهنویسی جدیدی دارید، ابتدا باید از مفید بودن آن مهارت یا زیان اطمینان حاصل کنید. یعنی در نظر داشته باشید که تقاضا برای آن مهارت در حال حاضر یا در آینده وجود داشته باشد. در ادامه چند مهارتی را که اکنون باید به فکر فراگیری آنها باشید تا در چند سال آینده رزومه خوب و پرباری داشته باشید، ذکر میکنیم:
یادگیری یکی از سه شاخه اصلی Net.، Java و یا PHP
برنامهنویس در هر مرحلهای که باشد، همیشه به یادگیری یکی از سه شاخه فوق نیازمند است. البته کافی نیست که فقط زبانهای اصلی را یاد بگیرید، بلکه به دلیل فراگیری قابلیتهای جداگانه هر زبان، نیاز است Frameworkهای مرتبط و کتابخانهها را هم به خوبی فرا بگیرید.
برنامههای RIA
به طور کلی به نرمافزارهای وبی که ویژگیهایی شبیه نرمافزارهای دسکتاپی دارند، Rich Internet Application یا برنامههای غنی اینترنتی میگویند. نرمافزارهای دسکتاپی برنامههایی هستند که در محیط سیستم عامل نصب و اجرا میشوند و محیط گرافیکی و جلوههای مختلف دارند (همانند فتوشاپ). از ویژگیهای این گونه برنامهها میتوان به سرعت بالای پاسخ دهی، جلوههای مختلف، حرکتها و انیمیشنهای اشیا اشاره کرد.
در چند سال اخیر، فناوری Flash به سرعت رشد کرده و اکنون استفاده از آن تنها محدود به طراحی بنرهای تبلیغاتی و ایجاد انیمیشن نمیشود. Flash قابلیتهای جالب دیگری در ابزارهایی مثل Air و Flex به همگان معرفی کرده است. رقبایی همچون Java FX و Silverlight با قابلیتهای جدید و سرعت عملکرد خوبی که از خود نشان میدهند، به زودی فناوری Flash را پشت سر خواهند گذاشت. از همه جالبتر اینکه ۵HTML تمامی قابلیتها و امکانات RIA را با هم تلفیق کرده و در اختیار میگذارد. همه این ابزارها برای طراحی برنامههای غنی اینترنتی استفاده میشوند و از این رو نیاز است کار با آنها را به خوبی فرا گیرید تا بتوانید برنامههایی بسازید که تحت محیط اینترنت و در مرورگر اجرا شوند. البته این برنامهها، مشابه نرمافزارهای معمولی هستند.
طراحی وب
بازار طراحی وب به این زودیها از رونق و تکاپو نمیافتد. بسیاری از طراحان و برنامهنویسان، یا به طور کلی دور این حوزه را خط قرمز کشیدهاند و یا تنها به چهارچوب اصلی که نیازهای اولیه آنها را مرتفع سازد، بسنده نمودهاند. اما شرکتها تقاضای بسیار زیادی برای جذب افرادی دارند که واقعا میدانند کار طراحی وب را چگونه به بهترین نحو انجام دهند. بنابراین بهتر است مهارتهای خود را در CSS Java Script و HTML بیشتر کنید تا در چند سال آینده فرد موفقی باشید.
طراحی سرویسهای تحت وب با REST کار میکنید یا با SOAP؟ JSON را ترجیح میدهید یا XML؟
گرچه پاسخ به این سوالات بسته به پروژهای دارد که روی آن کار میکنید، اما تبدیل شدن به یک برنامهنویس حرفهای، بدون آشنایی با طراحی سرویسهای تحت وب، بسیار بعید و دور به نظر میرسد.
هم اکنون اغلب شرکتها سعی دارند امکاناتی را که فراهم میکنند، تحت وب در اختیار کاربران گذاشته تا به این ترتیب هم سرعت عمل بیشتری داشته و هم کنترل بهتری روی کار خود داشته باشند. از این رو در آیندهای نزدیک مجبور خواهید بود طراحی سرویسهای تحت وب را نیز به خوبی یاد بگیرید و در آنها متبحر شوید.
یک زبان برنامهنویسی پویا یا تابعی
زیانهایی مانند Ruby، Python، #F و Groovy هنوز به طور کامل در میان برنامهنویسان جا نیفتادهاند اما ایده نهفته شده در آنها، آن چنان کاربردی است که به زودی همگان به استفاده از آنها روی خواهند آورد. برای مثال سیستم LINQ در زبان برنامهنویسی Net. مایکروسافت یکی از نوادگان مستقیم تکنیکهای برنامهنویسی تابعی است. زبان Ruby به لطف استفاده از فریم ورک Rails و Python هم به دلیل استفاده از Silverlight، در برخی حوزهها در حال پیشرفت قابل ملاحظهای هستند. مطمئن باشید یادگیری یکی از این زبانها، نه تنها به اعتبار رزومه شما میافزاید، بلکه درهای جدیدی را به روی شما گشوده و موقعیتهای کاری بسیار مناسبی برای شما فراهم خواهد کرد.
متدولوژیهای Agile
زمانی که Agile روی کار آمد، بسیاری با بدبینی به آن نگاه کرده و موفقیتی برای آن پیشبینی نمیکردند. اما با گذشت زمان، ایدههای Agile بهتر تعریف شده و به خوبی به همگان معرفی شدند و همین امر موجب شد خیل کثیری از برنامهنویسان به استفاده از آن روی آورند و روز به روز بر تعداد این افراد افزوده شود.
برخی میگفتند Agile تنها راهی برای نجات و جلوگیری از شکست پروژه است، اما این گونه نبود و این متدولوژی جای خود را به خوبی در میان اغلب برنامهنویسان باز کرده است. مطمئنا در چند سال آینده، تقاضا برای افرادی که با این روش به خوبی آشنا بوده و تسلط کاملی روی آن داشته باشند، بسیار زیاد خواهد بود.