چرا و چگونه برنامهنویس شویم؟
منبع: http://peivast.com/solution/%D9%87%D9%86%D8%B1-%D9%87%D8%B4%D8%AA%D9%85/
اولینبار که شنیدم میخواهد برنامهنویسی یاد بگیرد تعجب کردم. به عنوان یک مدیر وقتش به اندازه کافی پر بود و بعید به نظر میرسید فرصت رسیدگی به کارهای جانبی را داشته باشد. اما اصرارش برای یادگرفتن برنامهنویسی تمامی نداشت. دوست داشت خودش با دستانش برنامه بنویسد. او هم مانند دیگران عاشق خلق کردن بود. اما یک مشکل بزرگ داشت. نمیدانست چگونه شروع کند، چه زبانی را یاد بگیرد و از کجا مهارتهایش را تقویت کند.
چرا برنامهنویسی یاد بگیریم؟
ممکن است در ابتدا فکر کنید چون کسب و کار خود را دارید هیچ لزومی ندارد سمت برنامهنویسی بروید. شاید معتقد هستید یاد گرفتن برنامهنویسی مختص کسانی است که میخواهند از این راه پول دربیاورند. کسب درآمد تنها یکی از اهداف یادگیری برنامهنویسی است، بسیاری از اهداف دیگر والاتر از پول هستند.
اول؛ برنامهنویسی و الگوریتم درست مانند ریاضی به نوعی نحوه فکر کردن را به شما میآموزند. یاد میگیرید که چطور در یک چارچوب مشخص به جهان اطرافتان و مسائل آن جهان نگاه کنید.
دوم؛ برنامهنویسی یک سرگرمی است. هر زبان برنامهنویسی مانند یک بازی میماند که قواعد خاص خودش را دارد. کافی است آن قواعد را یاد بگیرید تا بتوانید بازی را شروع کنید و البته تعداد بازیها بینهایت است یعنی میتواند شامل تمام مسائل روی زمین شود. شما یک جهان جدید دارید با قواعد مربوط به خودش و میتوانید در این جهان هرچه را که میخواهید خلق کنید.
سوم؛ بخش بسیار زیادی از امکانات عصر ما بر پایه تکنولوژیهایی بنا شده که پایه آنها برنامهنویسی است. اگر همیشه یک مصرفکننده صرف باقی بمانید هرگز نمیفهمید در پس سادهترین تکنولوژیها چه خوابیده است. با دانستن برنامهنویسی حس بهتری درباره آن چیزی که استفاده میکنید، خواهید داشت.
چهارم؛ زمانی که با سیستمهای مدیریت محتوا مانند وردپرس کار میکنید و حتی اساساً محتوایی را روی اینترنت منتشر میکنید، دانستن مقداری HTML و CSS به شدت به شما کمک میکند تا به هدفی که میخواهید برسید. گاهی برای تغییر یک پاراگراف دست به دامن یک برنامهنویس میشوید.
پنجم؛ شاید احتیاج نداشته باشید یک برنامهنویس حرفهای شوید اما اگر در یک شرکت نرمافزاری به عنوان مدیر یکی از بخشها کار میکنید، آشنایی با دانش برنامهنویسی کمک میکند تا بهتر با برنامهنویسها تعامل کنید. آنها را راحتتر درک میکنید و هنگامی که درباره زمان تحویل پروژه یا دشواریهای آن صحبت میکنند دست خالی نگاهشان نمیکنید. همینطور درک بهتری از دلیل وجود باگها و وقوع اشکالات خواهید داشت. از آن سو نیز برنامهنویسها همیشه با کسانی که حرفهایشان را میفهمند بهتر ارتباط برقرار میکنند.
ششم؛ اگر سفارش ساخت یک لندینگ پیج را به کسی دادهاید دانستن مقدمات HTML و CSS به شما کمک میکند تا آن را متناسب با نیازهای خود بهبود دهید. به ما اعتماد کنید. هیچ کس بهتر از خودتان نمیداند در ذهنتان چه میگذرد.
هفتم؛ آیا میخواهید یک صفحه شخصی برای خودتان بسازید؟ مطمئن باشید فقط خودتان از پس این کار برمیآیید.
چه زبانی یاد بگیریم؟
برای رسیدن به این سوال ابتدا باید به این جواب دهید که برای چه هدفی میخواهید برنامهنویسی یاد بگیرید؟ اگر دنبال خلق یک صفحه وب شخصی هستید مسیرتان با کسی که دنبال خلق یک اپلیکیشن اندروید است، تفاوت دارد. آیا میخواهید از برنامهنویسی لذت ببرید و خود را سرگرم مفاهیم حل مساله آن کنید یا میخواهید هرچه سریعتر آنچه را دنبالش هستید (از اپلیکیشن گرفته تا سایت) پیادهسازی و آماده نمایش کنید؟ آیا میخواهید الگوریتمهای برنامهنویسی را یاد بگیرید یا دنبال نوشتن اپ اندروید هستید؟
اگر در پی یاد گرفتن زبانهای تحت وب هستید (چه سمت سرور و چه سمت کلاینت) کار شما بسیار راحتتر است. جدا از اینکه بسیاری از مطالب استاندارد شده است میتوانید از تعداد زیادی وبسایت تعاملی بهره ببرید که برنامهنویسی را به صورت لذتبخشی با مساله و تمرین به شما یاد میدهند.
HTML و CSS که حتی زبان برنامهنویسی هم به حساب نمیآیند و تنها یکسری علامات نشانهگذاری هستند. بنابراین نه الگوریتمی در کار است نه پیچیدگیای دارد. روی تمام دستگاهها تا حدود زیادی یکسان به نمایش درمیآید و مطمئن هستید که به کتابخانه و فایلهای متفرقه وابستگی ندارد.
اما اگر میخواهید مفهوم برنامهنویسی و الگوریتم را از پایه بیاموزید و به برنامهنویسی مانند یک تفریح نگاه میکنید، پیشنهاد ما شروع بازیهای الگوریتممحور مانند scratch است. مهم نیست چه سنی دارید؛ اگر به شناخت طرز حل مساله رایانهای علاقهمند هستید بهتر است کار را از اینجا شروع کنید. بعد از اینکه چند هفتهای با این محیط کار کردید بهتر است سراغ یکی از زبانهای برنامهنویسی ساده بروید. معمولاً در دانشگاهها از زبان C شروع میکنند اما پیشنهاد ما زبانهای جدیدتری مانند python است. این زبان برنامهنویسی جدا از سادهتر بودن کاربرد وسیعی -هم در نوشتن برنامههای تحت وب و هم تحت میز کار- دارد.
اما اگر هم به دنبال این هستید که خیلی سریع یک محصول نهایی آماده کنید و علاقهای به یادگیری پایه برنامهنویسی ندارید، بهتر است مستقیماً به سمت یادگیری یکی از مهارتها بروید. اگر شما هم با توجه به جو به راه افتاده دوست دارید برنامهنویسی موبایل یاد بگیرید و هرچه سریعتر یک اپلیکیشن بنویسید، پیشنهاد ما این است که بدون نیاز به یادگیری الگوریتم یا کار کردن با یک زبان برنامهنویسی پایه هم میتوانید به سراغ اندروید بروید. معمولاً خیلیها گمان میکنند برای اینکه یک اپلیکیشن بنویسند باید برنامهنویسی را طبق مراحلی که بالاتر ذکر شد یاد بگیرند اما حقیقت این است که یادگیری الگوریتم و زبانهای ساده کمک اندکی در نوشتن یک اپ موبایل میکند. اپلیکیشنها معمولاً منطق پیچیدهای ندارند بلکه از اتصال و کنار هم گذاشتن تعداد زیادی کتابخانه و فراخوانی متدهای آن کتابخانه تشکیل شدهاند. بیشتر شبیه یک بازی لگو میماند؛ تکههای از پیش ساختهشده را دارید و تنها کافی است آنها را کنار هم بگذارید تا شکل نهایی ساخته شود.
از کجا شروع کنیم
منایع مختلفی برای یادگیری برنامهنویسی در وب وجود دارد. اگر میخواهید تکنولوژیهای تحت وب را بیاموزید کارتان راحت است چون میتوانید آنها را در محیطهای شبیهسازیشده روی مرورگر خود امتحان کنید. اما اگر میخواهید تکنولوژیهای وابسته و پیچیدهای مانند اندروید یاد بگیرید، کارتان دشوار میشود چون تنها میتوانید از طریق ویدئو آموزش ببینید و مثالها را باید روی سیستم خودتان و تنها با ابزارهای مخصوصی انجام دهید.
codecademy
کدکادمی قطعاً مشهورترین و بهترین وبسایتی است که به شما به صورت تعاملی برنامهنویسی یاد میدهد. باید از رابط کاربری روان و ساختار خوب درسها ممنون باشید. درسها تمامی رایگان هستند و به دو دسته مهارتهای توسعه وب و مهارتهای زبانی تقسیم میشود. در اولی میتوانید به صورت هدفمحور چند زبان را یاد بگیرید و در دومی مفهوم و سینتکس معروفترین زبانهای برنامهنویسی دنیا را یاد بگیرید. همینطور در بخشی دیگر میتوانید بر اساس پروژه به یادگیری بپردازید، به این صورت که برای رسیدن به یک هدف خاص شروع به آموزش مهارتهای مورد نیاز شما میکنند؛ حتی زبانها در بستههای مختلف .
طراحی سایت ساده است، کنار هر درس یک پنل وجود دارد که دستورالعملها و کدهای مورد نیاز را شرح میدهد. پنل دیگر به شما اجازه میدهد دستانتان را به کد آغشته کنید و مطمئن شوید که در حال انجام کار درست هستید. از نکات جالب این سایت این است که حتی برای یادگیری APIهای معروف دیگر هم دوره آموزشی دارد. یعنی به عنوان مثال میتوانید یاد بگیرید چگونه برای ارتباط با دراپباکس برنامه بنویسید. هنگامی که یک درس را انتخاب میکنید، تعداد دانشجوهایی که این دوره را گذراندهاند، زمانی که طول میکشد تا دوره را بگذرانید و سطح درس، نوشته شده است.
محتوای سایت تنها شامل دستور راهنما به صورت نوشته است و این برای اینترنت حال حاضر یک برگ برنده بزرگ به شمار میرود زیرا هزینه زیادی بابت تماشای فیلم نمیپردازید و همه چیز با مطالعه و تمرین حاصل میشود.
یکی از برگهای برنده این سایت بخش فارسیزبان آن است. قسمتی از محتویات سایت به فارسی ترجمه شده البته این مقدار بسیار اندک است اما همین هم انگیزه کافی را میدهد تا اگر خود را صاحب مهارت میدانید و فکر میکنید احتیاجی به طی کردن دورههای آموزشی کدکادمی ندارید، حداقل به فارسیسازی بیشتر دروس کمک کنید. همچنین با نشانهایی که به افراد داده میشود فرآیند یادگیری هیجانانگیزتر شده است. علاوه بر زبانهای برنامهنویسی، میتوانید دورههای دیگری مانند کار با git و کامندلاین لینوکس و مک را هم در این سیستم تعاملی بگذرانید.
Code school
دومین سایتی که بدون دریافت هزینه درسهای زیادی را در اختیار شما میگذارد کدسکول است. رابط کاربری هیچ کدام از سایتهایی که معرفی شده و میشود به اندازه کدسکول خلاقانه نیست. زیرا برای هر دوره آموزشی، رابط کاربریای با شکل و شمایل خاصی طراحی کرده است. کدسکول علاوه بر دورهها یکسری path هم تعریف کرده که ترکیبی از مهارتهای مختلف است و شما را تا سطح استادی در آن مهارت خاص راهنمایی میکند. محتوای کدسکول هم اکثراً به صورت متنی و تعاملی است، بنابراین به راحتی با اینترنت کمسرعت هم میتوانید از آن بهره ببرید.
تنوع موضوعات یکی از برتریهای کدسکول است. حتی ممکن است دورههایی برای یادگیری API گوگل درایو، کار با Regular Expressions و آشنایی با DevTools کروم نیز پیدا کنید. کدسکول هم شامل محتوای پولی میشود اما محتویات رایگان آن به حدی هست که روزها شما را سرگرم کند و به مهارتتان بیفزاید.
codeavengers.com
«چرا فقط از فناوری استفاده میکنید وقتی میتوانید آن را بسازید؟» این شعار سایت است که در ابتدای ورود مشاهده میکنید. کد اونجر شامل بیش از ۱۵۰ ساعت درس درباره چگونگی کدنویسی است.
محتوا در سه بخش ساخت صفحه وب با HTML و CSS، ساخت اپ با جاوا اسکریپت و ساخت بازی با جاوا اسکریپت تقسیم شده است. روند کاملاً حالت بازیگونه دارد و شما را قدم به قدم با برنامهنویسی تحت وب آشنا میکند. ابتدا با مقدمات HTML و CSS آشنا میشوید، امتیاز میگیرید و سپس سراغ زبانهای سمت سرور میروید. از ویژگیهای جالب این سایت این است که میتوانید نوع آموزشها را بین ویدئو و نوشته انتخاب کنید. بنابراین اگر اینترنت خوبی هم دارید میتوانید ویدئوها را مشاهده کنید و در غیر این صورت با انتخاب گزینه text only در ابتدای شروع دوره تنها متنها را بخوانید. ظاهر این سایت بسیار شبیه کدکادمی است. کافی است دستورات را بخوانید، کد را تایپ کنید و نتیجه را در قالب صفحه یک تلفن همراه مشاهده کنید.
میتوانید با قابلیتی که سایت در اختیارتان میگذارد، نوتبرداری هم بکنید. از مزایای این سایت ترکیبی بودن دروسش است به این صورت که در همان ابتدا علاوه بر HTML کمی هم جاوااسکریپت یاد میگیرید. با این حال تنها بخش کمی از این آموزشها رایگان است و برای استفاده از اکثر بخشها باید هزینه کنید.
Treehouse
آموزشهای تریهاوس به جای زبانمحوری پروژهمحوری هستند، پس اگر دوست دارید برای یادگیری بیشتر تلاش کنید و زمان زیادی را به فکر کردن بگذرانید، حتماً تریهاوس گزینه بهتری برای شماست. زیرا اگر هدفتان از یادگیری برنامهنویسی ساخت یک محصول است سر و کله زدن با یک پروژه کمک بیشتری به شما میکند. با این حال از جمله مشکلات این سایت این است که تمام امکاناتش نیاز به خرید اشتراک دارد. برای طرح عادی ماهانه ۲۵ دلار و برای پلن حرفهای (که شامل دیدن توصیههای متخصصان صنعت، دانلود ویدئوها و مشاهده آفلاین و استفاده از محتوای ویژه میشود) باید ماهانه ۴۹ دلار بپردازید. دورهها بر اساس موضوع، پروژه و مهارت دستهبندی شدهاند و شما میتوانید انتخاب کنید که بر چه اساسی دورهها را بگذرانید.
Udacity
گل سرسبد آموزشهای مبتنی بر ویدئو در حوزه برنامهنویسی و مهارت کامپیوتر سایت یودسیتی است. مخصوصاً اگر به دنبال یادگیری اندروید هستید پیشنهاد میکنیم به جز این سایت به منبع دیگری اعتماد نکنید. نوشتن برنامه برای اندروید روشهای مختلف و پیچیدهای دارد و شدیداً به کتابخانههای مختلف وابسته است. استفاده اشتباه از این کتابخانهها یا فراخوانی غیراستاندارد آنها هرچند شما را به مقصد میرساند، اما در انتها یک برنامه حجیم و کثیف را نتیجه میدهد. پیشنهاد ما این است که اگر میخواهید برنامهنویسی اندروید یاد بگیرید بدون طی کردن دوره الگوریتم و زبانهای سادهتر مستقیم به سراغ دوره مقدماتی یادگیری اندروید در این سایت بروید.
در این دوره نحوه برنامهنویسی اندروید و نحوه نگاه به مساله در قالب اکوسیستم اندروید از پایه ذکر شده و آموزش داده میشود. نکته جالب توجه اینجاست که دورههای این سایت توسط شرکتهای مطرح طراحی شده است. برای همین تمام دورههای اندروید آن توسط افرادی از شرکت گوگل طراحی و اجرا شده و دائماً هم بهروزرسانی میشود، پس مطمئن هستید که اپلیکیشن خود را طبق آخرین استانداردهای برنامهنویسی و طراحی گوگل مینویسید.
w3schools
بهترین مرجع برای آموزش برنامهنویسی و طراحی وب این سایت است. هر وقت جایی به مشکل برخوردید، اول به این سایت مراجعه کنید. همیشه میتوانید مطمئن باشید که اطلاعاتش طبق آخرین استانداردهای تدوینشده است و مطلب قدیمی تحویلتان نمیدهد. محیط سایت بسیار ساده و اطلاعات موجود در آن کاملاً دستهبندی شده و مرتب است. همچنین محیطی دارد که میتوانید نمونه کدهای یاد دادهشده را در آن اجرا کنید و نتیجه را همانجا ببینید.
udemy
یودمی هم یکی دیگر از سایتهایی است که محیط تعاملی ندارد و تنها مبتنی بر ویدئو است. این سایت دورههای بسیار زیادی مربوط به کامپیوتر دارد و از این لحاظ بسیار غنی است اما اکثر دورهها یا قدیمی هستند یا توسط افراد متفرقه تدوین شدهاند. پس اگر دورهای را مد نظر داشتید که در سایتهای دیگر پیدا نشد، حتماً در انتها یودمی را هم بگردید. بیش از ۳۲ هزار دوره در این سایت وجود دارد که بالغ بر هشت میلیون دانشآموز در آن درس
میخوانند.
sql zoo
زبانهای ارتباط با پایگاهداده یکی از مهمترین مهارتهایی است که هنگام نوشتن اکثر برنامهها به آن برمیخورید. سایت sql zoo یکی از قدیمیترین منابع یادگیری دستورات اسکیوال است. میتوانید در موتورهای mysql oracle, sql server, postgreSQL, ingres, DB2 کوئری بزنید. رابط کاربری سایت مشابه ویکیپدیا و بسیار ساده است برای همین شاید در ابتدا پیش پا افتاده به نظر برسد اما به شدت در کارکردن با سایت کمک میکند.
دادههای آماده و دیتابیس طراحی شده معمولاً چیزی است که مانع یادگیری مناسب پایگاه داده میشود زیرا برای اینکه بتوانید روی دادهها کوئری بزنید باید همه چیز از پیش طراحی شده باشد. سایت اسکیوال زو با مثالهای آماده و دادههای واقعیای که دارد این مشکل را نیز حل کرده است. در انتهای هر درس هم یک کوئیز تعیین شده که میزان آموختههای شما را میسنجد.
Coursera
اگر به دنبال یاد گرفتن علوم کامپیوتر بهخصوص برنامهنویسی به صورت آکادمیک و توسط استادان دانشگاههای مطرح دنیا هستید، بهتر است سراغ کورسرا بروید. شاید برگ برنده این سایت نه در دورههای آموزش برنامهنویسی بلکه در دورههایی است که حتی برای اولین بار درس داده میشود. کافی است غرق دنیای درسهای کورسرا شوید تا دیگر از آن بیروننیایید.
بعد از آن چهکار کنیم؟
بعد از اینکه یکی از زبانهای برنامهنویسی را یاد گرفتید اگر میخواهید از این توانایی جدیدتان استفاده کنید چند راه پیش روی شماست. درست است که مسیری که طی کردهاید خودش لذتبخش بوده اما میتوانید به صورت موثری از آنچه آموختهاید در مکانها و روشهای مختلفی استفاده کنید.
پروژه خودتان را بنویسید
حالا که برنامهنویسی یاد گرفتهاید میتوانید هر ایدهای را که در ذهن دارید، خلق کنید. البته به این سادگیها هم نیست. پیشزمینه رسیدن به چنین هدفی داشتن وقت کافی است. یک پروژه حتی کوچک ممکن است هفتهها وقت شما را بگیرد. همچنین بلد بودن یک زبان برنامهنویسی برای ساخت یک محصول کامل کافی نیست. دائماً باید با تکنولوژیها و آخرین تغییرات و کتابخانههای آن زبان آشنا شوید و بهروز باشید.
از دیگران سفارش کار بگیرید
اگر ایدهای در سر ندارید نگران نباشید، میتوانید ایدههای دیگران را پیادهسازی کنید. پیشنهاد ما سایتهایی مانند «پونیشا» و «انجام میدم» است. در این سایتها افراد مختلفی پروژههای متفاوتی تعیین کردهاند و کسانی که از پس انجامشان برمیآیند، آنها را برایشان درست میکنند. ممکن است پروژه دانشجویی یا تمرین کلاسی یک نفر را با پیشنهاد هزینهای پایین به راحتی تصاحب کنید و از مهارت برنامهنویسیتان هم لذت ببرید.
به نرمافزارهای آزاد کمک کنید
بهترین کاری که میتوانید بعد از یادگیری یک زبان برنامهنویسی انجام دهید این است که به پروژههای آزاد و متنباز کمک کنید. این کار وقت کمی از شما میگیرد و در عین اینکه مسئولیتی روی شانهتان نیست تاثیر بزرگی در جامعه نرمافزارهای آزاد دارد. اگر پروژهای را میشناسید و میخواهید به آن کمک کنید، کافی است به سایت آن مراجعه و مراحل کار را دنبال کنید. حتی به توسعه نرمافزارهای بزرگی مانند فایرفاکس، لیبرهآفیس، لینوکس و وردپرس هم میتوانید کمک کنید. هرچند شاید تسلط بر کلیت این پروژههای بزرگ ماهها و حتی سالها طول بکشد اما همیشه اشکالات کوچکی هم هستند که از دید برنامهنویسان بزرگ دور میمانند. اگر هم کمک کردن به پروژههای معروف را در تواناییهای خود نمیبینید، میتوانید برای یافتن نرمافزارهای آزاد از سایتهایی مانند sourceforge.net و http://github.com کمک بگیرید. این سایتها حتی پروژههای کوچک را به تفکیک ابعاد، تکنولوژیها و زبان برنامهنویسی بهکاررفته در آنها دستهبندی کردهاند؛ حتی اگر یک خط هم به یک پروژه کوچک کمک کنید افراد زیادی از آن بهره میبرند