دانشجوی کامپیوتر-علاقه مند به برنامه نویسی-گنو/لینوکس و نرم افزار های آزاد
شما هم به برنامه نویسی علاقه دارین؟ این پست برای شماست
تعداد علاقه مندان به برنامه نویسی کم نیست و خوب تعجبی هم نداره!
دلایل زیادی ممکنه وجود داشته باشه که یه نفر بخواد برنامه نویس بشه:
- درآمد بالای برنامه نویس ها
- وجود فرصت های شغلی بسیار زیاد
- آزادی عمل بیشتر نسبت به بقیه شغل ها
- رفع نیاز های فردی(بعدا بیشتر توضیح میدم)
- و ...
اما اصولا کسی نیست که در این زمینه گیج نشه من میخوام به عنوان کسی که از سنین کم به کامپیوتر و برنامه نویسی علاقه داشته و الآن هم داره با فریمورک جنگو کار میکنه یکمی شما رو از ابهام در بیارم و بهتون کمک کنم یه مسیر درست رو انتخاب کنید!
بزرگ ترین مشکل تازه کار ها و جنگ ابدی برنامه نویس ها <<انتخاب زبان>>
به احتما خیلی زیاد اولین سوال برای همه اینه که چه زبانی رو انتخاب کنیم؟
جواب های متعددی برای این سوال وجود داره خیلیا میگن python خیلیای دیگه میگن باید نگاه کنی ببینی میخوای چیکار کنی و جواب های دیگه!
اما پاسخ من به این سوال اینه که برای شروع خیلی هم فرقی نمیکنه با چی شروع میکنید!
برای این که یه برنامه نویس بشین باید اصول و قواعد کلی رو یاد بگیرین قواعد ابتدایی میشه:
- آشنایی به انواع داده
- دستور شرطی if و else
- دستور switch
- حلقه for و while
- آرایه ها
بعد از این که موارد بالا رو یاد گرفتین باید تابع و مفهموم برنامه نویسی functional رو درک کنید و در نهایت شئ گرایی یا همون OOP (Object Oriented Programming)
قواعد ابتدایی که گفتم تقریبا توی همه زبان ها به شیوه ای بسیار شبیه به هم یا حتی در بعضی زبان ها کاملا شبیه هم نوشته میشه مثلا حلقه for در جاوا c و c# دقیقا مثل هم نوشته میشه و اصطلاحا برنامه نویسا میگن syntax اش یکیه
حتی اگه توی بعضی از زبان ها کمی هم فرق کنه بازم مفهومش یکیه پس با توجه به توضیحاتی که دادم اگه تازه کار هستین یه زبان رو انتخاب کنید تا مفهوم برنامه نویسی رو درک کنید خیلی هم سخت نگیرین توصیه من به شما c++ هست به سادگی میتونید باهاش شروع کنید و یه برنامه ساده بنویسید و یواش یواش برنامه های پیچیده تر.
یه مزیتی که c++ داره برای تازه کار ها اینه که شما رو مجبور میکنه همه کار هارو خودتون انجام بدین و نه با توابع آماده و این باعث میشه در ابتدای برنامه نویسی پیشرفت بیشتری داشته باشین
هر زبان برای چه کاریه و بعد از درک مفاهیم باید سراغ چه زبانی برم؟
همیشه حواستون به این موضوع باشه که هر زبانی برای یه کاری ساخته شده و ما چیزی به اسم زبان خوب و بد نداریم بلکه میگم این زبان خوبه برای فلان کار یا این زبان برای این کار بده ولی در نهایت هر زبان کارکرد های منحصر به فرد خودشو داره!
جاوا اسکریپت (JavaScript)
یادتونه گفتم زبان خوب و بد نداریم؟ جاوا اسکریپت یه استثنا به حساب میاد! (شوخی :) )
زبان پیچیده و بسیار تو در تو با سینتکس نه چندان زیبا اما به هر حال یه زبان بسیار پر کاربرد هستش و نمیشه نادیده گرفتش!
اگر قرار باشه یه وبسایت راه اندازی کنید به 3 چیز نیاز دارین:
- برای طراحی HTML و CSS
- یه زبان برنامه نویسی سمت سرور(back end) مثل php, python و ...
- زبان برنامه نویسی front end
یه توضیح کوتاه درمورد اینکه front end و back end چیه
در واقع back end به کدی گفته میشه که سمت سرور اجرا میشه و سایت شما اجرا میکنه وظیفه این بخش اجرای درخواست ها مدیریت کاربر ها و ذخیره اطلاعات از دیتابیس و لود کردنشونه. میشه گفت وقتی که شما توی همین سایت ویرگول لاگین میکنید این back end هست که شما رو وارد سایت میکنه و تشخیص میده آیا شما کاربر این سایت هستین یا نه
و اما front end هر کدی میشه که روی سیستم شما و در مرورگرتون اجرا میشه که متاسفانه فقط باید با زبان js نوشته بشه
به خاطر اینکه برنامه نویسان وب هیچ چاره دیگه ای بجر js ندارن و مجبورن یاد بگیرنش شرکت های بزرگ کلی برنامه نویس js دارن و همین باعث شده برای صرف هزینه کم تر به ساخت برنامه های دیگه با js روی بیارن مثلا atom که یه ادیتور مناسب برای کد زنیه با js نوشته شده حتی خیلی از برنامه های موبایل مثل اینستاگرام یا فیسبوک با React-native نوشته شدن که ابزاریه برای پیاده سازی اپ های موبایل با js
تا اینجای کار فهمیدیم هرچند از js خوشمون نیاد ولی انقدر کاربرد داره که مجبوریم یاد بگیریمش اما یه راه گریز هست و اون هم استفاده از زبان هاییه که به js کامپایل میشن!
شما میتونید با یه زبان دیگه کد بزنید و اون رو تبدیل به js کنید و با توجه به کاربرد زیاد js این فوق العادست
اگه بخوام معروف ترین زبان هایی که به js تبدیل میشن رو نام ببرم میشه به موارد زیر اشاره کرد:
- TypeScript (توسعه دهنده: مایکروسافت)
- ClojureScript
- Elm
- CoffeScript
پایتون (Python)
یک زبان خوانا بدون پیچیدگی و با کاربرد بسیار زیاد!
یکی از مزیت های بزرگ پایتون برای تازه کارها اینه که شما رو مجبور میکنه تمیز کد بزنید! توی پایتون تمام space ها و tab ها مهمه و اگه جایی اشتباه tab بزنید ممکنه برنامتون اجرا نشه یا اشتباه اجرا بشه
من به شخصه برای نیاز های فردی ای که اول این متن گفتم از پایتون استفاده میکنم مثلا یه بار نیاز داشتم تعداد زیادی عکس رو از یه سایت دانلود کنم کاری که یه کاربر عادی انجام میده میره به سایت مورد نظر یکی یکی رو عکس ها کلیک راست میکنه و save میکنه ولی من یه crawler نوشتم و اجراش کردم تا 30 صفحه از اون سایت رو برای من crawl کنه و یکی یکی عکس هارو دانلود کنه! این کار بدون برنامه نویسی میتونست چند ساعت طول بکشه.
همچنین پایتون یه فریم ورک بسیار قوی داره که من در حال حاظر دارم باهاش کار میکنم django و با تمام چیزایی که گفتم یاد گیری پایتون میتونه خیلی مفید باشه
توی کتاب Two Scoops of django یه نقل قول نوشته بود از یکی که قبلا توی ناسا قرار بوده با جاوا برای ناسا Back end یه سایت رو بزنه. ایشون میگن که با یه تیم هفته ها در حال کار با جاوا بودن و شرکت اصرار به انجام پروژه با این زبان داشته تا این که یه روز خودش به تنهایی تو 90 دقیقه با جنگو سایت رو مینویسه!
جاوا (Java)
یه نکته خیلی خیلی مهم! یه وقت جاوا رو با جاوا اسکریپت قاطی نکنیداااا!!!
این دوتا زبان هیچ ربطی بهم ندارن چیزی که من شنیدم درمورد شباهت اسمی اینه که جاوا زمانی که میاد با توجه به CrossPlatform بودنش (توانایی اجرا بر روی پلتفرم های مختلف) و چند تا ویژگی دیگه خیلی محبوب میشه و جاوا اسکریپت برای این که بتونه به شهرتی برسه این اسم رو انتخاب میکنه و میگن قبلا جاوا اسکریپت یه اسم دیگه داشته!
و اما بریم سراغ خود جاوا یکی دیگه از زبان های مورد علاقه من :)
شعار جاوا WORA هست مخفف Write Once Run Anywhere به معنی این که یک بار بنویس و همه جا اجرا کن! قبلا خیلی چیز خفنی بوده ولی الآن تو اکثر زبان های تفسیری مثل پایتون چنین چیزی رو میبینیم.
جاوا معمولا برای کارهای Enterprise استفاده میشه و البته برنامه نویسی اندروید. خودم به شخصه قبل از این که شروع کنم به کار با جنگو با اندروید استودیو کار میکردم و طبیعتا زبانش که جاوا هست اما از وقتی با React-native آشنا شدم و فهمیدم میشه با جاوا اسکریپت یه برنامه موبایل نوشت که هم رو اندروید کار کنه هم روی iOS به این نتیجه رسیدم که شاید دیگه کار با جاوا رو ادامه ندم(هرچند از js خوشم نمیاد) ضمنا برای یادگیری شئ گرایی جاوا میتونه زبان خوبی باشه.
سی شارپ (C#)
یک زبان برنامه نویسی که با الگو برداری از Java در سال 2000 توسط مایکروسافت به وجود اومده
تمام زبان های قبلی ای که گفتم OpenSource بودن ولی C# خیر البته بعضی از کتابخونه هاش OpenSource هست اما کل زبان اینطور نیست.
من خیلی میونه خوبی با این زبان ندارم به خاطر OpenSource نبودن و انحصار گرایی مایکروسافت اما چیزی که هست میگن برنامه های کوچیک اداری رو با صرف هزینه و زمان کمتر میشه با C# نوشت (به جای استفاده از Java)
بهترین روش برای یادگیری چیه؟
طبق تجربه من یه روش واحد کارساز نیست! یکی از اشتباه ترین تفکراتی که برای برنامه نویسی وجود داره اینه که اگه فلان مجموعه آموزشی رو بخرین و ببینین دیگه از فردا برنامه نویس حرفه ای میشین در صورتی که اصلا اینطور نیست.
داکیومنت های فریمورک جنگو 1900 صفحه هستش! حالا به نظرتون چند ساعت فیلم آموزشی میتونه همشو به شما آموزش بده؟ تازه این رو هم در نظر بگیرید که شما باید اول خود زبان پایتون رو هم یاد بگیرین.
هر زبان برنامه نویسی ده ها شاخه مختلف داره و شما نهایتا بعد از سالها کار بتونین تو یه شاخه استاد بشین پس از همین الآن حواستون باشه که یه مجموعه آموزشی برای شما معجزه نمیکنه اما برای شروع یه علاقه مند به برنامه نویسی که مفاهیم پایه رو نمیدونه بسیار میتونه مفید باشه ولی بعدا شما باید سرچ کنید داکیومنت هارو بخونید و ...
خودم به شخصه کاری که میکنم اینه که به هر زبان یا فریمورکی که میخوام وارد بشم اول یه دوره نسبتا کوتاه تو یوتیوب پیدا میکنم که یکمی منو راه بندازه بعد میرم سراغ کد زدن و به هرچی نیاز داشتم سرچ میکنم داکیومنت هارو میخونم و جلو میرم.
چه پیش نیاز هایی لازمه؟
چند مورد هست که حتما باید داشته باشین با این که مستیقما شاید ربطی به برنامه نویسی نداشته باشه اما لازمه برنامه نویسی هست.
زبان انگلیسی:
در حال حاظر سرعت پیشرفت تکنولوژی و به خصوص زبان های برنامه نویسی کتابخونه ها و فریمورک ها بسیار بسیار بالاست برای همین اگر قرار باشه صبر کنید تا منابع فارسی (که اکثرا هم ناقص ترجمه میشه) به وجود بیاد و با اونا یاد بگیرید خیلی عقب میمونید! برای جاوا یه کتاب از کتابخونه دانشگاه گرفتم داشت نحوه اجرای کدهای جاوا روی ویندوز 97 رو توضیح میداد!!! به علاوه این که کلی ویدیو آموزشی مفید و مختصر روی یوتیوب هست که خوب طبیعتا به زبان انگلیسی هست.
نمیتونم بهتون راه حل بدم برای زبان من خودم چون مدت خیلی زیادی رو پشت کامپیوتر بودم اصطلاحات تخصصی رو نسبتا خوب متوجه میشم و البته یه مدت فیلم زبان اصلی هم زیاد میدیدم که بی تاثیر نیست اما به هر حال اگر زبانتون خوب نیست هرچه زود تر یه فکری به حالش بکنید!
گیت (git):
در اوایل کارتون اشکال نداره ندونید گیت چیه ولی یکم که پیش رفتین حتما باید یاد بگیرین.
گیت در واقع یک سیستم برای کنترل ورژن های مختلف برای برنامه هستش فرض کنید شما یه برنامه نوشتین که کار اصلی رو انجام میده اسم پوشه برنامه رو میزارین Final و بعد متوجه یه باگ میشین و میخواین درستش کنین؛ عقل سلیم میگه یه نسخه دیگه درست کنم و روی اون کار کنم که اگه مشکلی پیش اومد نسخه قبلی رو داشته باشم حالا سوال اینجاست اسم نسخه جدیدی که کپی کردین از رو Final رو چی میخواین بزارین؟ Final 2 ؟؟ خوب اینجوری خیلی خنده داره ممکنه 20 تا Final داشته باشین =))
راه حل گیت هستش! گیت میتونه تغییراتی که شما روی فایل هاتون میدین رو ذخیره کنه و هر موقع که خواستین برگردین مثلا به دیروز و روی اون نسخه کار کنید
گیت بسیار گسترده هست و اگه دقیقا بخوام بگم چیه و چی شد که به وجود اومد و دقیقا چه کار هایی میتونه بکنه باید همین قدری که تا الآن نوشتم رو بنویسم اما فقط یادتون باشه که بعد کمی پیشرفت باید به سراغ گیت بیاین
لینوکس:
این مورد ضروری نیست ولی یاد داشتنش برای یه برنامه نویس یه مزیت بسیار بزرگ محسوب میشه
لینوکس درواقع یه کرنل هست که با سخت افزار ارتباط برقرار میکنه و آزاد هستش و با این کرنل صد ها توزیع رایگان و آزاد به وجود اومده که در واقع اینترنت رو دارن میچرخونن!
منظور از آزاد فقط رایگان و یا OpenSource بودن نیست!
ممکنه یه نرم افزار OpenSource باشه ولی نتونید این حق رو نداشته باشید که نرم افزار رو تغییر بدید یا منتشر کنید. یا اینکه رایگان باشه اما OpenSource نباشه.
در اینجا منظور از نرم افزار آزاد نرم افزاریه که به شما 4 آزادی زیر رو بده.
آزادی 0: استفاده به هر منظوری
آزادی 1: مطالعه و بررسی اینکه نرم افزار چگونه کار میکنه و تغییر اون بر اساس نیاز هاتون
آزادی 2:انتشار نرم افزار برای استفاده دیگران
آزادی 3: انتشار نسخه ویرایش شده نرم افزار با تغییراتی که شما اعمال کردین
اطلاعات بیشتر
در واقع اگه یه سایتی با زبانی به جز Asp که مال مایکروسافت هست نوشته شده احتمالا سرورش لینوکس هست مثل همین سایت ویرگول
در مورد لینوکس هم اگه بخوام توضیح بدم خیلی خیلی این پست طولانی میشه و بعدا سر فرصت یه پست جامع و کامل براش مینویسم فعلا فقط تو ذهنتون داشته باشینش.
سخن آخر
هیچ زبان برنامه نویسی ای خوب یا بد نیست اگر دیدین در مورد js نوشتم یه استثنا به حساب میاد صرفا یه شوخی بود و اگه میگم این زبان این بدی هارو داره به این معنی نیست که به درد نمیخوره یا نباید ازش استفاده کرد. برای مثال js با تمام مشکلاتی که گفتم در حال حاظر بسیار کاربرد داره هم برای Front end هم برای Back end یعنی node js و هم برای نوشتن انواع و اقسام اپ های موبایل و دسکتاپ و با توجه به این موضوعات من اصلا نمیتونم به یکی که میخواد js یادبگیره بگم اینکار اشتباهه (هرچند شاید زبانی مثل python سینتکس بهتر و مزایایی داشته باشه)
سعی کنید زیاد سرچ کنید و مشکلات رو یکی یکی حل کنید
توصیه آخر من به شما ویدیو های جادی (اسم کامل: جادی میرمیرانی) رو حتما ببینید و کارهاش رو دنبال کنید. از وقتی من این آدم رو شناختم زندگی کاریم متحول شد!
مطلبی دیگر از این انتشارات
بهینهاش با ما
مطلبی دیگر از این انتشارات
چرا شما نیازی به مدرک دانشگاهی برای شروع کار حرفهای در برنامهنویسی ندارید؟
مطلبی دیگر از این انتشارات
HTML زبان برنامه نویسی نیست!!!!