یکی از مشاغل پر درآمد و البته بسیار پر طرفدار در میان فارغ التحصیلان رشته های مرتبط با فناوری و البته سایر رشته ها، برنامه نویسی هست. تمام این فراد قبل از ورود به دنیای برنامه نویسی، سوالات زیادی در ذهن خود دارند، سوالاتی مانند اینکه برنامه نویسی رو از کجا شروع کنم؟ بهترین زبان برنامه نویسی چه زبانی هست؟ چقدر باید برای یادگیری برنامه نویسی زمان بزاریم و سوالاتی از این قبیل. خیلی از دوستان و اطرافیان این سوال رو از من میپرسن که کار تو دقیقاً چی هست یا برای برنامه نویس شدن از کجا باید شروع کنیم؟ در این مطلب قصد دارم تا تجربه های شخصی خودم رو که در طول 12 سال کار برنامه نویسی با اون ها روبرو بودم رو در اختیار دوستان قرار بدم تا شاید به خیلی از این سوالات جواب داده شود. البته سوالات و ابهامات در این زمینه بسیار هست، اما سعی می کنم که به مهمترین اون ها در این زمینه اشاره ای داشته باشم.
داشتن علاقه = صبور بودن
در اولین قدم باید مشخص کنیم که با چه هدفی قصد داریم وارد دنیای برنامه نویسی شویم؟ معمولاً افراد با دو هدف وارد این حرفه می شوند، یکی بحث علاقه ای هست که به موضوع برنامه نویسی دارند و دیگری بحث مالی. همانطور که در ابتدا گفتم، برنامه نویسی یکی از مشاغل پردرآمد به حساب می آید (البته نه به اندازه یک سوپر استار سینما یا یک فوتبالیست) و شخصی که به صورت حرفه ای وارد این شغل می شود بعد گذشت مدتی می تواند به سطح درآمدی بالایی برسد. اما صرفاً داشتن هدف مالی کافی نیست. طبیعی هست که هر شخصی برای پیشرفت در هر کاری، قبل از هر چیز باید نسبت به اون کار علاقه داشته باشد. مخصوصاً کار برنامه نویسی که نیازمند صبر و حوصله زیادی است و شما به عنوان یک برنامه نویس گاهی باید چندین ساعت از وقت گرانبهاتون رو برای حل یک مسئله یا نوشتن یک الگوریتم اختصاص بدید. برنامه نویسی شب و روز نداره، اکثر برنامه نویس ها شب زنده دار هستن (به قول معروف که من مرد تنهایی شبم :دی). موقعیت هایی پیش میاد که شاید تو 48 ساعت بیشتر از 5 ساعت نتونید بخوابید. پس یادتون باشه، مهمترین موضوع اینه که به برنامه نویسی علاقه مند باشید و این علاقه هست که توی کار به شما صبر میده و کمک میکنه تا بتونید با بی خوابی ها و مشکلات یک برنامه نویس کنار بیایید.
انتخاب راه
شما در ابتدا باید مشخص کنید که در چه حوزه ای قصد فعالیت دارید، شغل برنامه نویسی به شاخه های گوناگونی تقسیم میشه، از طراحی برنامه های سیستمی تا طراحی وب و نوشتن برنامه های موبایل، همگی زیر شاخه برنامه نویسی قرار دارند. روحیات شما تاثیر زیادی در راهی که انتخاب می کنید دارد. اجازه بدید مثالی بزنم، اگر شما به طبیعت و هنر علاقه زیادی دارید، مطمئن باشید تو زمینه طراحی وب و همینطور طراحی واسط کاربری برنامه ها می تونید موفق بشید. کد نویسی Back-End (نوشتن کدهای مربوط به یک برنامه که توسط کاربر نهایی قابل دیدن نیست)، صبر و حوصله میخواد، برعکس کار طراحی واسط کاربری و طراحی وب که بیشتر خلاقیت و هنر در اون حرف اول رو میزنه. برای مثال، افرادی که علاقه زیادی به حل مسائل پیچیده دارند تو زمینه برنامه نویسی Back-End و البته برنامه نویسی سیستمی میتونن موفق باشند، همچنین این دسته از افراد تو زمینه نوشتن Framework های نرم افزاری موفق خواهند بود.
مطالعه
شک نکنید که باید مطالعه داشته باشید. دنیای برنامه نویسی دائماً در حال تغییر است و سالانه تکنولوژی ها و نسخه های جدید از زبان های برنامه نویسی به بازار عرضه می شوند. برای مثال، برای زبان برنامه نویسی سی شارپ تا این لحظه 6 نسخه عرضه شده و هر نسخه شامل قابلیت های جدید است. باید زمانی رو برای مطالعه کتاب ها اختصاص بدید و این زمان همیشگی است. مطالعه دائمی شرط موفقیت شما است. باید بتوانید از منابع موجود در اینترنت به بهترین شکل استفاده کنید. بالا بردن توانایی جستجو در اینترنت کمک زیادی به پیشرفت شما می کند. خیلی وقت ها به مشکلاتی برخورد می کنید که تنها راه حل این مشکلات مراجعه به منابع موجود در اینترنت هست. مقالات زیادی در وب سایت های مختلف منتشر می شوند که باید به صورت مکمل در کنار کتاب ها آن ها را مطالعه کنید. شخصی که مطالعه نمی کند مثل آب داخل یک برکه است که جریان ندارد. سعی کنید تا حد امکان از منابع به زبان انگلیسی استفاده کنید. (البته ITPRO رو از این مورد فاکتور بگیرید :دی) خیلی افراد با مطالعه کتاب ها با زبان انگلیسی مشکل دارند، اما در صورت اتمام یک کتاب، مطالعه کتاب های بعدی برای شما خیلی راحت می شود. اکثر منابعی که به زبان فارسی وجود دارند به دلیل وجود اشتباه در ترجمه یا حتی زیاده روی در ترجمه تنها باعث سردرگمی شما می شوند.
انتخاب زبان برنامه نویسی
خیلی از افراد در انتخاب زبان برنامه نویسی دچار مشکل می شوند. اینکه چه زبانی را انتخاب کنید که مبتنی بر علایق شما باشد بسیار مهم است. همانطور که گفتیم شاخه برنامه نویسی به زیر شاخه های بسیاری تقسیم می شود، مانند Desktop Application و Web Application یا برنامه های موبایل و همچنین برنامه های تحت وب. هر یک از این شاخه ها نیازمند یادگیری یک یا چند زبان برنامه نویسی هستند.
1. برنامه نویسی موبایل
برنامه های موبایل مبتنی بر چندین پلاتفرم مختلف نوشته می شوند. برای مثال برای Android شما می بایست حتماً زبان برنامه نویسی جاوا را یاد بگیرید. نوشتن برنامه های Android شدیداً وابسته به زبان جاوا هستند. البته فرم ورک های دیگری نیز وجود دارند مانند Ionic یا Apache Cordova و همینطور Xamarin که بوسیله آن ها می توانید برنامه هایی برای Android بنویسید. اما برنامه های Android به صورت مستقیم با زبان جاوا نوشته می شوند که اصطلاحاً به آن ها برنامه های Native می گویند. برای برنامه های IOS، شما باید با Swift که رابطه مستقیمی با زبان Objective-C دارد آشنا باشد. یا برای برنامه های Windows Phone امکان نوشتن برنامه ها با زبان سی شارپ یا HTML و CSS و JavaScript وجود دارد.
2. برنامه نویسی وب
اگر قصد دارید کار برنامه نویسی وب انجام دهید ابتدا باید مشخص کنید که از چه تکنولوژی می خواهید استفاده کنید. معروف ترین ها در حوزه برنامه نویسی وب PHP و ASP.NET هستند، البته تکنولوژی های دیگری مانند JSP نیز وجود دارند، اما به انداه PHP و ASP.NET بازار کار ندارند. خیلی ها سر اینکه PHP بهتر است یا ASP.NET دائماً در حال بحث کردن هستند. اما این نکته رو بگم که شما چه ASP.NET و چه PHP رو به صورت حرفه ای یاد بگیرید، می توانید هر سایتی را طراحی کنید. در حال حاضر سایت های بزرگی وجود دارند که با PHP نوشته شدند، برای مثال Facebook کاملاً مبتنی بر PHP و MySQL می باشد یا سایت هایی مانند ITPRO و StackOverflow با ASP.NET نوشته شده اند. به نظر شخص خود من، مزیتی که یادگیری ASP.NET نسبت به PHP دارد این است که دست شما برای نوشتن برنامه های دیگر مانند Desktop Application باز خواهد بود، زیرا با یادگیری ASP.NET می بایست زبان سی شارپ را نیز فرا بگیرید. هم PHP و ASP.NET ریشه در زبان سی دارند. در کنار PHP و ASP.NET نیز باید با HTML و CSS و JavaScript نیز آشنایی داشته باشید. همچنین شما باید با بانک های اطلاعاتی نیز آشنا شوید، معمولاً برنامه نویسان PHP از بانک MySQL و برنامه نویسان ASP.NET از بانک SQL Server استفاده می کنند. البته شما در ASP.NET می توانید از بانک MySQL استفاده کنید و بالعکس.
تکنولوژی جدید دیگری نیز که معرفی شده NodeJS می باشد که کاملاً مبتنی بر JavaScript است و خیلی از برنامه نویسان، NodeJS را انتخاب خود برای برنامه نویسی وب قرار می دهند و بسیار هم محبوب است.
3. طراحی وب
خیلی از افرادی که تازه وارد دنیای برنامه نویسی وب می شوند، تفاوت طراحی وب و برنامه نویسی وب را نمی دانند. طراح وب کسی است که پوسته یا قالب یک سایت را طراحی می کند، یعنی ظاهر سایت که کاربر نهایی با آن سر و کار دارد، اما برنامه نویس وب، شخصی است که کد مربوط به یک سایت را می نویسید، کدهایی مانند ارتباط با بانک اطلاعاتی، اعتبار سنجی کاربران و ... یک طراح وب علاوه بر داشتن خلاقیت و زوق هنری باید با موارد زیر آشنایی داشته باشد:
- زبان HTML برای ایجاد صفحات وب
- زبان CSS برای استایل دهی به صفحات وب
- JavaScript برای نوشتن کدهای سمت کاربر
- jQuery که یک کتابخانه مبتنی بر javaScript است
- Bootstrap برای راحتی کار در ایجاد صفحات وب
- Photoshop برای ایجاد طرح اولیه وب سایت
مواردی که گفته شد از الزمات اولیه برای یک طراح وب سایت، در کنار این موارد آشنایی با تئوری رنگ ها، مفاهیم گرافیک نیز بسیار مهم بوده و به ایجاد طرح های جذاب کمک می کنند.
4. برنامه نویسی Desktop Application
اکثر ما با این مدل برنامه ها هر روز سر و کار داریم، برنامه هایی مثل Word یا Excel. این ها برنامه های Desktop هستند. یک برنامه نویس Desktop برای ایجاد این برنامه ها می توانند از بین Java و NET. یکی را انتخاب کند. البته تکنولوژی های دیگری نیز وجود دارند مانند C++ MFC یا C++ QT، اما برای راحتی و سرعت کار Java یا NET. توصیه می شود. هر دو زبان بازار کار خوبی دارند، اگر شما Java را انتخاب کنید، یادگیری زبان جاوا باید اولویت شما باشد. اما در صورت انتخاب NET.، می توانید بین Visual Basic و C# یکی را انتخاب کنید. پیشنهاد من به شما انتخاب C# است، زیرا بازار کار بهتری دارد و منابع و کتاب هایی که در اینترنت وجود دارند اکثراً بر اساس زبان سی شارپ ارائه شده اند. شاید بتوان مزیتی که جاوا نسبت به NET. دارد را قابلیت اجرای برنامه های جاوا بر روی پلاتفرم های مختلف مانند لینوکس، ویندوز و ... ذکر کرد. البته NET. نیز از این قابلیت پشتیبانی می کند، اما نه به صورت کامل! در کنار یادگیری زبان های برنامه نویسی، یادگیری بانک های اطلاعاتی مانند SQL Server یا Oracle را نیز جزو برنامه خود قرار دهید.
ذهن شرطی شده برای الگوریتم ها
یادگیری یک زبان برنامه نویسی به تنهایی از شما یک برنامه نویسی حرفه ای نخواهد ساخت. تبدیل شدن به یک برنامه نویس حرفه ای نیازمند تلاش بسیار است. مثالی میزنم، شما اگر در کشور خودتان زبان انگلیسی را بسیار خوب هم یاد بگیرید، زمانی که به یک کشور انگلیسی زبان سفر کنید، در ارتباط بر قرار کردن مشکل خواهید داشت. این مشکل تنها در صورتی برطرف خواهد شد که در مدتی در آن کشور زندگی کرده و به مرور با گویش و اصطلاحات آن کشور آشنا شوید. برنامه نویسی نیز به همین صورت است، یک زبان برنامه نویسی چیزی بیشتر از چند کلمه کلیدی نیست. اما یادگیری این کلمات کلیدی به تنهایی کمکی به شما نمی کند. شما باید بتوانید یک مشکل را با کد نویسی حل کنید که لازمه آن آشنایی با الگوریتم های برنامه نویسی است. ذهن شما باید به ذهنی تبدیل شود که با مشاهده مشکل به سرعت راهکاری را برای آن تولید کند. به این ذهن، ذهن شرطی شده برای الگوریتم ها یا ذهن تولید کننده الگوریتم گفته می شود. این ذهن، تنها با تمرین و نوشتن ده ها برنامه مختلف برای شما حاصل می شود. یکی دو سال اول، شما به شدت در مورد الگوریتم ها با چالش روبرو خواهید شد. اما پس از گذشت مدتی، ذهن شما برای نوشتن الگوریتم ها شرطی می شود و حتی برای مشکلاتی که برای شما جدید است، به راحتی و به سرعت می توانید راهکار ایجاد کنید.
برای خودمان کار کنیم یا در جایی استخدام شویم؟
خیلی ها این سوال در ذهنشان شکل میگیرد که بهتر است برای خودمان کار کنیم یا در جایی استخدام شویم؟ شک نکنید که برای شروع بهتر است در یک سازمان استخدام شوید. حتی پیشنهاد می کنیم در صورتی که تازه شروع کردید به عنوان کار آموز برای یک شرکت کار کنید تا راه و چاه کار را یاد بگیرید. بودن در کنار افراد با تجربه کمک زیادی به شما می کند. در قسمت قبلی گفتم که مطالعه در پیشرفت شما تاثیر زیادی دارد، اما مطالعه به تنهایی کافی نیست و خیلی از دانسته های شما در صورتی که کاری را به صورت عملی انجام ندهید به سرعت از ذهنتان پاک خواهد شد. باید خودتان را درگیر کار کنید تا مواردی که یاد میگیرید را بتوانید استفاده کنید. یک برنامه نویس موفق، به دلیل تجربه موفق است، نه به خاطر چیزهایی که با مطالعه فراگرفته. مطالعه و تجربه در این کار مکمل هم هستند. زمانی که در یک سازمان استخدام می شوید، تازه یاد میگیرید که چگونه از دانسته های خود در پروژه های واقعی استفاده کنید. به مرور تمام این ها تبدیل به تجربیات می شود و از شما یک برنامه نویس موفق خواهد ساخت. به مرور زمان و با کسب تجربه می توانید برای خودتان کار کنید. در این مرحله باید از خودتان یک برند بسازید. شاید نیاز باشد در ابتدای این مرحله، چند پروژه را با قیمت های خیلی پائین تر انجام دهید تا دیگران شما را بشناسند. زمانی که قصد دارید برای خودتان کار کنید، حتماً یک وب سایت شخصی داشته باشید و تخصص های خود را در آن قرار دهید. می توانید با فعالیت در سایت هایی که در زمینه فعالیت شما وجود دارند برند سازی کنید.
از دیگران یاد بگیرید
مطالعه کدهای دیگران تاثیر زیادی در پیشرفت شما دارد. سعی کنید نمونه کدهای دیگران را از اینترنت دانلود کرده و مطالعه کنید. حتی می توانید با کدها بازی کنید. هر چقدر که جلوتر بروید، دانسته های شما بیشتر می شود، این دانسته از طریق مطالعه و یادگیری از دیگران است. در جمع هایی که سایر برنامه نویسان نیز حضور دارند شرکت کنید و با آن ها به بحث و گفتگو بپردازید. از تجربیات آن ها استفاده کنید. در وب سایت های تخصصی سوالات خود را مطرح کنید و جواب بگیرید. ایجاد ارتباط با سایر برنامه نویسان سرعت پیشرفت شما را چندین برابر می کند.
تمرین کردن
اگر می خواهید تبدیل به یک برنامه نویس حرفه ای شوید، دائماً برای خودتان پروژه تعریف کنید. نیازی نیست که حتماً پروژه ها از جانب دیگران به سمت شما سرازیر شوند. زمان هایی که وقت آزاد دارید را به تمرین و نوشتن برنامه های مختلف اختصاصی دهید. فکر می کنید می توانید یک بانک اطلاعاتی بنویسید، پروژه ای برای همین موضوع برای خودتان تعریف کنید و شروع به کار کنید. نیازی نیست که حتماً پروژه ای که تعریف می کنید به عنوان محصول ارائه شود، به چشم تمرین و یادگیری به آن نگاه کنید. خود من بارها همچین پروژه هایی رو برای خودم تعریف می کنم و برای خودم کدنویسی می کنم، موضوعات مختلف هستند، برای مثال چند وقت پیش تصمیم به نوشتن یک ORM گرفتم، ORM های زیادی وجود دارند، مانند Entity Framework و NHibernate که بسیار هم قدرتمند هستند، اما پروژه رو تعریف و شروع به کد نویسی کردم. مهمترین مزیت این کار برای من یادگیری مسائلی بود که قبلاً با آن ها آشنایی نداشتم و تو چندین پروژه همین مسائل به کمک من آمدند. ایده پردازی کنید و بر روی ایده هاتون کار کنید، جمله ای هست که میگه چرخ رو نباید دوباره اختراع کرد، اما خیلی از افرادی که می خوان وارد یک حرفه بشن، برای حرفه ای شدن تو اون حرفه شاید از ابتدا شروع به خلق کردن یک ارزش بکنند. شاید شما چیز بهتری ایجاد کردید. به خودتون اطمینان داشته باشید و شروع کنید، بعد از مدتی تغییر رو احساس خواهید کرد.
با تکنیک ها و ابزارهای مختلف آشنا شوید
زمانی که در یک زبان به سطح متوسط رسیدید، به سراغ یادگیری تکنیک های برنامه نویسی و همچنین استفاده از ابزارهای جانبی بروید. برای مثال، یکی از مباحثی که یک برنامه نویس باید با آن آشنا باشد، الگوهای طراحی (Design Pattern) است. یادگیری تکنیک ها به شما کمک می کند که بتوانید مشکلات خود را در زمان کمتری حل کنید و البته کدهای بهتری بنویسید. همچنین از ابزارهای مختلف استفاده کنید، ابزارهای زیادی هستند که به عنوان مکمل به شما و کار شما کمک می کنند.
در انتها مروری میکنم بر مواردی که در این مطلب به آن ها اشاره کردم:
- در صورتی وارد کار برنامه نویسی شوید که به آن علاقه دارید
- راه خود را بر اساس علاقه مندی های خود انتخاب کنید
- هر روز، زمانی را به مطالعه و تحقیق اختصاص دهید
- زبان برنامه نویسی خود را بر اساس کاری که می خواهید انجام دهید انتخاب کنید
- ذهن خود را برای الگوریتم ها شرطی کنید
- اگر تصمیم دارید برای خودتان کار کنید، در ابتدا حتماً به عنوان کارآموز یا نیرو در شرکتی استخدام شوید.
- از تجربیات دیگران استفاده کنید
- تمرین کردن زیاد از شما یک انسان حرفه ای می سازد
- با تکنیک ها و ابزارهای مختلف در برنامه نویسی آشنا شوید