راهنمای جامع برنامه نویس شدن! به زبان ساده
برنامه نویسی از معتبرترین و پردرآمدترین شغل های دنیاست بطوری که میانگین درآمد برنامه نویسان در دنیا 29 درصد بیشتر از سایر شغل ها است. اما در دنیای امروز که کامپیوترها در زندگی شخصی و حرفه ای همه نفوذ کرده اند دیگه برنامه نویسی منحصر به یک افراد خاص نیست و یادگیری برنامه نویسی برای همه میتونه مفید باشد.
برنامه نویسی، علم صحبت کردن با کامپیوتر برای انجام دستورات شماست و در همه رشته ها کاربرد داره، از پژوهش های زیست شناسی گرفته تا تحلیل های جامعه شناسی. بنابراین افراد زیادی هستند که یادگیری مهارت برنامه نویسی میتونه براشون بسیار مفید باشه. اگر شما هم از علاقه مندان به یادگیری برنامه نویسی هستید، مقاله راهنمای جامع برنامه نویس شدن، یک نقشه راه کامل و به زبان ساده برای شما علاقه مندانی است که میخواهند به تازگی وارد دنیای برنامه نویسی شوید. پس شما رو به خوندن این مقاله از بادانش دعوت میکنم.
مرحله ی « 1- » : چرا باید برنامه نویسی را یاد بگیرید؟
«چه بخواهید از رازهای کیهان پرده افکنید و چه تنها بخواهید پیشهای را در قرن ۲۱ ام دنبال کنید، برنامهنویسی مقدّماتی رایانه، مهارتی ضروری برای یادگیریست.»
– استیون هاکینگ (از فیزیکدانان برتر قرن ۲۱)
«طی پانزده سال آینده، برنامهنویسی را همچون خواندن و نوشتن [در مدارس] یاد خواهیم داد و تعجّب خواهیم کرد که چرا اینکار را زودتر شروع نکردیم.»
– مارک زاکربرگ (بنیانگذار Facebook)
شاید همین چند نقل قول به خوبی جواب سوالتون رو بده که چرا باید برنامه نویسی رو یاد بگیرد. دقت کنید برنامه نویسی یک ابزار هست و هر برنامه نویس لزوما یک توسعه دهنده نرم افزار (Software Developer) نیست و ممکنه اصلا هیچ نقشی در صنعت نرم افزار و IT نداشته باشه. برنامه نویسی به زبان ساده، زبان حرف زدن با کامپیوترها است. شما میتونید با این مهارت به کامپیوترها حرف بزنید تا کارهایی که مد نظرتون هست رو انجام بدهند. حالا تصور کنید توی دنیای امروز که کامپیوترها همه جا هستند اگه بتونید با اونها به درستی ارتباط برقرار کنید و مهارت برنامه نویسی رو یاد بگیرد قطعا میتونید خیلی جاها ازشون استفاده کنید.
«کامپیوترها به طرز شگفتآوری سریع، دقیق و احمق هستند. انسانها به طرز ماورای تصوّری کُند، بیدقّت و نابغه هستند. عقد این دو، چالشی و فرصتی ماورای تصوّر است.»
– استوارت ولش
تفاوتی نمی کنه شما در چه زمینه ای فعالیت میکنید. چه زیستشناسی باشید که قصد داره دادههایی رو جمعآوری و تحلیل کنه، چه جامعهشناسی باشید که سعی داره یک الگوی رفتاری مشخص رو از تحقیقاتش استخراج کنه، چه حسابداری باشید که نیاز داره روی حجم عظیمی از اعداد، محاسباتی انجام بده، چه عکاسی باشید که نیاز داره تغییرات خاصی روی تعداد زیادی عکس بده و چه واقعا هدفتون تولید یک نرمافزار باشه، در هر صورت داشتن دانش برنامهنویسی برای شما یک مزیت بزرگ است؛ چرا که کامپیوتر میتونه به راحتی کارهایی رو انجام بده که انجام دستی اونها برای انسان بسیار زمانبر و وقتگیر است.
مرحلهی « 0 »: پیش نیازهای برنامه نویسی
خوشبختانه برای شروع یادگیری برنامه نویسی به هیچ پیش نیاز خاصی احتیاج ندارید. همین که بتونید با کامپیوتر کار کنید اون هم در حد روشن و خاموش کردن، شما برای شروع یادگیری برنامه نویسی آماده اید. با این حال، داشتن برخی از مهارت ها میتونه بهتون کمک کنه تا یادگیری برنامه نویسی براتون آسون تر بشه. برخی از مهم ترین آنها رو در ادامه بهشون اشاره کردیم (البته دقت کنید اصلا لزومی در داشتن این مهارت ها برای شروع یادگیری برنامه نویسی نیست):
آشنایی با زبان انگلیسی: برای شروع یادگیری برنامه نویسی، نیازی نیست به زبان انگلیسی مسلط باشید اما در دنیا منابع آموزشی زیادی برای برنامه نویسی و همچنین راه حل مشکلاتی و سوالاتی که در حین برنامه نویسی احتمالا با آنها مواجه بشید وجود داره که اکثر آنها به زبان انگلیسی هستند. جالبه بدونید طبق آمار ویکی پدیا بیش از 54 درصد محتوای وب به زبان انگلیسی و مابقی به زبان های دیگه هست که زبان فارسی سهم 2 درصد از کل محتوای وب رو داره. بنابراین اگر زبان انگلیسی تون خوب باشه میتونید به منابع بیشتری دسترسی داشته باشید. البته در چند سال اخیر محتواهای آموزش برنامه نویسی بسیار خوبی به زبان فارسی هم تولید شده.
آشنایی با ریاضیات: اگر در ریاضی ضعیف هستید اصلا جای نگرانی نیست چون برای شروع یادگیری برنامه نویسی اصلا به سطح پیچیده ای از ریاضیات نیاز نداریم. اما درک و فهم منطق ریاضی و حل مسئله کمکتون میکنه خیلی راحت تر برنامه نویسی رو یاد بگیرید. آشنایی با ریاضیات و درک مفاهیم ریاضی مثل جبر مجموعهها، نظریهی گرافها، ماتریکسها، توابع نمایی، فاکتوریل و… برای سطح متوسط و بعد از اون در سطوح تخصصی و شاخههایی مثل یادگیری ماشین، پردازش تصویر و… ریاضیات پیشرفته بهتون کمک میکنه.
جستجو کردن در اینترنت: این یکی از مهم ترین مهارت های هست که برای یادگیری برنامه نویسی باید بلد باشید، یعنی بتونید به راحتی در اینترنت سوالتون رو سرچ کنید. اصلا نیازی نیست تمام دستورات و کدهای برنامه نویسی رو حفظ کنید. کافیه هر وقت سوالی داشتید و یا با مشکلی مواجه شدید بتونید اون رو در اینترنت جستجو کنید. همون طور که قبلا اشاره کردیم علاوه بر منابع زیاد آموزش برنامه نویسی در اینترنت، جواب خیلی از مشکلاتی که باهاشون در حین برنامه نویسی برمیخورید، توسط افرادی که قبلا با اونها مواجه شدند در اینترنت گذاشته شده است. برای مثال، سایت Stack Overflow پر از جواب به سوالات مربوط به مشکلات برنامه نویسی و عملا حکم یک فرشتهی نجات رو برای برنامه نویس ها داره.
آشنایی با کامپیوتر: برای یادگیری برنامه نویسی اصلا نیازی نیست یک متخصص کامپیوتر باشید یا توی رشته مهندسی نرم افزار تحصیل کرده باشید. شما تو هر رشته ای و هر سطحی باشید میتونید برنامه نویسی رو یاد بگیرید. برای شروع یادگیری برنامه نویسی فقط کافیه بتونید با کامپیوتر کار کنید. همون طور که پیش تر اشاره شد برنامه نویسی یک ابزار است و میتونه در هرجایی کاربرد داشته باشه؛ مثل قلم و کاغذی که ابزارهایی صرفاً منحصر به نویسندگان نیستند و در همهجا کاربرد دارند.
مرحلهی « 1 »: انتخاب زبان برنامه نویسی
واقعیت اینه که هر زبانی مزایا و معایت خودش رو داره و هیچ زبان برنامه نویسی نیست که از همه نظر برتری داشته باشه. یک زبان سریع هست اون یکی انعطاف پذیر، یکی محدود هست و یکی آزاد و رایگان، یکی برای سمت وب مناسبه اون یکی برای محاسبات ریاضی. در واقع هر زبان یک ابزار هست و کاربرد خودش رو داره. درست شبیه ابزارهای نجاری. ارّه بهتره یا سنباده و یا مغار؟! ارّهی آهنبُر بهتره یا ارّه مویی؟ چیزی بنام بهتر و بدتر در میان ابزارها معنی ندارد؛ چرا که هر یک از این ابزارها کاربرد خودشون رو دارند و با توجه به پروژه و کاری که میخواهید انجام بدید از اونها استفاده میکنید.
اگر شما هدف کاملاً مشخصی از یادگیری برنامهنویسی دارید و میخواهید از آن در زمینهی خاصی استفاده کنید، با کمی تحقیق میتونید متوجه شوید که مناسبترین زبانها برای هدف شما چیه. برای مثال MATLAB (متلب) برای کسانی که قصد انجام پردازشهای محاسباتی – مخصوصاً در زمینههایی مثل هوش مصنوعی، الکترونیک، ریاضیات و… رو دارند بسیار مناسبه. یا زبان R برای آمار و کار با دادهها خیلی مناسب است. اما در کل و مخصوصاً اگه هدف چندان مشخّصی ندارید و میخواهید یادگیری برنامه نویسی رو شروع کنید خیلی خودتون رو درگیر مرحلهی انتخاب زبان نکنید. ما در مقاله «مناسب ترین زبان برای شروع یادگیری برنامه نویسی» مهم ترین فاکتورها مثل قابلیت ها، بازار کار، سهولت در یادگیری و… زبان های برنامه نویسی رو بررسی کردیم و 7 زبان مناسب برای شروع یادگیری رو بهتون پیشنهاد دادیم. خوندن این مقاله کمکتون میکنه راحت تر یک زبان رو برای شروع یادگیری برنامه نویسی انتخاب کنید.
چیزی که اهمیت داره، اینه که شما اصول مقدماتی برنامهنویسی رو یاد بگیرید. بعد از اون به راحتی میتونید سراغ هر زبانی که نیاز بود برید و اون رو فرا بگیرید. توصیه میکنیم بیشتر از 2 روز صرف تحقیق برای انتخاب زبان مناسب برای شروع یادگیری برنامه نویسی نکنید! متاسفانه بعضی ها زمان زیادی رو در جستجوی انتخاب یک زبان صرف میکنند در حالی اگه همون زمان رو صرف یادگیری کنید خیلی سریع تر به نتیجه می رسید. اگه اکنون که در حال خوندن این مطلب هستید و بیشتر از ۲ روزه که دارید راجع به انتخاب زبان تحقیق میکنید و بعد از خوندن مقاله «مناسب ترین زبان برای شروع یادگیری برنامه نویسی» هنوز نتونستید زبان مناسب خودتون رو انتخاب کنید همین الان یکی از این دوتا رو انتخاب کنید: 1. از لیست زیر یک زبان برنامه نویسی رو شانسی انتخاب کنید 2. یا پیشنهادی که در ادامه بهتون میگیم رو انتخاب کنید و همین الان آستین هاتون رو بالا بزنید و دیگه یادگیری برنامه نویسی رو شروع کنید.
C C++ C# Java Python PHP JavaScript
طبق تجربه، زبان برنامه نویسی #C (سی شارپ) که یکی از محبوب ترین زبان های برنامه نویسی دنیا و ایران است، برای شروع یادگیری برنامه نویسی افراد تازه کار گزینه بسیار مناسبیه. چون هم زبان نسبتاً سادهای است، مباحث آموزشی (متغیرها، توابع، کلاسها و…) در اون به خوبی وجود داره و هم با نصب نرمافزار Visual Studio، امکانات مختلف (کامپایلر، NET. و…) هم خود به خود نصب میشه و حتی افراد تازه کار میتونند به راحتی و در همون مراحل اولیهی یادگیری، برنامه های ساده ای رو بسازند که تاثیر فوق العاده ای در افزایش اشتیاق و انگیزهی در یادگیری برنامه نویسی داره.
«نقطه شروع یادگیری برنامه نویسی سی شارپ به زبان ساده» اطلاعات مفیدی در مورد زبان برنامه نویسی C# بهتون میده و کمکتون میکنه خیلی راحت یادگیری زبان برنامه سی شارپ رو شروع کنید.
به از غیر زبان برنامه نویسی #C، زبان برنامه نویسی Python (پایتون) یکی از بهترین گزینه ها برای شروع یادگیری برنامه نویسی است. چون کدهای پایتون بسیار ساده است و به راحتی میتونید این زبان برنامه نویسی رو یاد بگیرد. از طرفی دیگه پایتون یک زبان فوق العاده قدرتمند هست و باهاش میتونید هر کاری انجام بدید. جالبه بدونید در دنیا در حال حاضر زبان برنامه نویسی پایتون مناسب ترین گزینه برای شروع یادگیری برنامه نویسی افراد تازه کار پیشنهاد میشه.
مقاله «چگونه برنامه نویسی پایتون را یاد بگیریم؟» اطلاعات مفیدی در مورد زبان برنامه نویسی پایتون بهتون میده و کمکتون میکنه خیلی راحت یادگیری زبان برنامه پایتون رو شروع کنید.
نکته: زیاد تفاوتی نمی کنه چه زبانی رو برای شروع یادگیری برنامه نویسی انتخاب می کنید، پس انتخاب کنید و یادگیری رو شروع کنید. نگران نباشید؛ زمانی که اصول برنامهنویسی رو به یاد گرفتید، به راحتی میتونید سراغ هر زبان دیگری برید. درست شبیه یادگرفتن رانندگی، مهمتر از این که رانندگی را با چه خودرویی فرا بگیرید اینه که رانندگی رو یاد بگیرید! زمانی که به اصول پایهی رانندگی مسلط شدید، به راحتی میتونید پشت هر خودروی جدید دیگه ای هم بشینید و به راحتی، تکنیک راندن آن خودرو هم کشف کنید.
مرحلهی « 10 »: ابزارهای مورد نیاز برنامه نویسی
زبانی که سخت افزار کامپیوتر متوجه میشه 0 و 1 هست. درک این زبان برای انسان بسیار دشوار هست. اما برای اینکه بتونیم با کامپیوترها حرف بزنیم، زبان های برنامه نویسی سطح بالاتری که برای انسان قابل درک باشند (همین زبان های برنامه نویسی خودمان) به وجود اومدند. این وسط به یک مترجم نیاز داریم که بتونه کدهای برنامه نویسی ما رو به 0 و 1 ها ترجمه کنه. به این مترجم، کامپایلر (Compiler) گفته میشه. برخی زبانها هم بجای کامپایلر، از مفسر (Interpreter) استفاده میکنه (در مورد فرق این دوتا فعلا همین قدر بدونید که کامپایلر کدها رو یکجا و مفسر کدها رو خط به خط ترجمه میکنه).بعضی از زبانها هم از ابزار دیگری بهره میبرند. این ابزار با توجه به نوع زبان برنامه نویسی که انتخاب کردید و همچنین نوع سیستمعامل تون، باید روی کامپیوتر شما نصب بشه. البته ممکنه این ابزار از قبل روی سیستم شما نصب شده باشه. به هر حال اصلا جای نگران نیست، چون به راحتی میتونید با یک جستجو در اینترنت و چند کلیک، ابزارهای مورد نیاز برای زبان برنامه نویسی مورد نظرتون رو نصب و راه اندازی کنید.
ابزار مهم دیگه ای که به آن نیاز داریم، یک editor (ویرایشگر متن) یا IDE (محیط توسعه) است. هرچند از نظر فنی شما میتونید تمام کدها مربوط به هر زبانی رو توی notepad بنویسید و اجرا کنید اما editorها و IDEها، امکانات جانبی زیادی رو در اختیارتون قرار میدهند تا به سادگی هر چه بیشتر بتونید برنامهنویسی کنید. Editorهای مخصوص برنامهنویسی، معمولاً امکاناتی مثل رنگی کردن بخشهای مختلف کد برای فهم راحتتر، حدس زدن ادامهی دستورات زمان تایپ چند حرف اوّل و موارد مشابه رو انجام میدهند تا نوشتن برنامه، سادهتر بشه. از طرفی دیگه، IDEها نرمافزارهای جامعتری هستند که علاوه بر داشتن یک editor تو دل خودشون، امکانات بسیار بیشتری مثل تنظیم معماری برنامه، شبیهسازی محیطی برای اجرای برنامه و… رو در اختیار برنامهنویس قرار میدهند. این که از چه ابزاری برای نوشتن کدهاتون استفاده کنید بستگی به زبان انتخابی شما، سلیقهی شما، پروژه مدنظرتون و … داره.
چند Editor معروف برای برنامه نویسی :
Notepad++ (رایگان، متنباز، بسیار سبک و ساده)
Atom (رایگان، متنباز و بسیار پرامکانات و قدرتمند، با پلاگینهای مختلف)
VS Code (ساخت مایکروسافت، رایگان، متنباز و بسیار پرامکانات و قدرتمند، با پلاگینهای مختلف)
Sublime Text (نسبتاً سبک امّا بسیار کاربردی)
و چند IDE معروف برای برنامه نویسی:
Visual Studio (یک IDE بسیار پرامکانات و قدرتمند. ساخت شرکت مایکروسافت با امکان پشتیبانی از بسیاری زبانها مثل #C و Python و ++C و JavaScript و…)
JetBrains IDES (شرکت JetBrains محصولات بسیار خوبی در زمینهی برنامهنویسی داره و IDEهای مختلف و بسیار مناسبی برای زبانهای مختلف ارائه میکند؛ مثل IntelliJ برای Java و PyCharm برای Python)
Xcode (یک IDE از شرکت Apple و مناسب برنامهنویسی برای محصولات Apple)
Code::Blocks (یک IDE متنباز، معمولا برای C و ++C)
Netbeans (یک IDE متنباز و نسبتاً پرامکانات برای زبان Java)
مرحلهی « 11 »: یادگیری برنامه نویسی رو شروع کنید و اولین برنامه خودتون رو بنویسید
بعد از اینکه همه چیز به درستی نصب و راه اندازی شد، نوبته نوشتن اولین برنامه اجرایی (معروف به Hello World) و یادگیری اصول پایه برنامه نویسی (تعریف متغیرها، اعمال ریاضی و…) هست. برای یادگیری برنامه نویسی منابع و روش های زیادی وجود داره. ما در مقاله «بهترین روش برای یادگیری برنامه نویسی» همه این روش ها رو بررسی کردیم. حقیقت اینه هر کسی ممکنه روش خاص خودش رو برای یادگیری برنامه نویسی داشته باشه. وقتتون رو زیاد صرف جستجوی اینکه چه روشی بهتره نکنید. اگه تا اینجای کار از خوندن این مقاله لذت بردید، خیالتون راحت چون ما در بادانش بهترین محتواها و دوره های آموزشی رو به زبان ساده برای شما عزیزان آماده کردیم تا راحت تر و با لذت بیشتری یادگیری برنامه نویسی رو دنبال کنید.
معمولا مباحثی که در ابتدای یادگیری برنامه نویسی باید فرا بگیرید به این شکل هستند:
- آشنایی با محیط کدنویسی مورد نظر
- نوشتن و اجرای برنامهی Hello World
- کامنتگذاری (commenting)
- متغیّرها (variable)
- کار روی متغیّرها و انجام اعمال سادهی ریاضی
- عملگرها (operator) – مثل: + – * / % & | ^ ! = == < > << >> و…
- کار با رشتهها (string)
- دستورات شرطی ساده – مثل: if و else
- دستورات حلقهای (loop) – مثل: for و while
- ایجاد توابع
- آرایهها/لیستها
چهار مبحث آخر، مهمترین قسمت ها هستند که باید بتونید آنها رو به خوبی درک کنید.
مرحلهی « 100 »: یادگیری الگوریتم
همزمان با مرحلهی قبلی، یک چیز دیگه هم نیاز دارید: اینکه روی تفکر و نگرش خودتون کار کنید.
– استیو جابز (بنیانگذار Apple)
الگوریتم چیست؟ الگوریتم به زبان ساده، روش گام به گام و به ترتیب حل یک مسئله است. جالبه بدونید الگوریتم از اسم فیلسوف ایرانی یعنی خوارزمی گرفته شده. یادگیری الگوریتم به حدی مهمه که در آموزش برنامهنویسی به کودکان، ابتدا تلاش میشه تفکر الگوریتمیک در قالب بازی به کودکان آموزش داده بشه و بعد خود برنامهنویسی تدریس میشه؛ چون الگوریتم، قلب برنامهنویسی است. به هر حال باید کم کم تفکر الگوریتمیک رو در خودتون تقویت کنید؛ یعنی باید بتونید برای یک مسئله، الگوریتمی واضح حل اون رو ارائه بدید. برای مثال، فرض کنید از شما خواسته بشه تا فاکتوریل هر عدد دلخواهی رو محاسبه کنید (مثال: ۵×۴×۳×۲×۱ = !۵). بیان راه حل برای شما، به عنوان یک انسان، شاید آسون باشه: «از یک تا اون عدد رو در هم ضرب میکنیم.» اما برای پیادهسازی چنین چیزی در کامپیوتر، به یک الگوریتم نیاز دارید تا روش حل رو دقیق و مرحله به مرحله توضیح بده. برای مثال:
۱- عدد n را از ورودی بگیر.
۲- متغیر s و i را تعریف کن و مقادیر پیشفرض آنها را به ترتیب برابر ۱ و ۰ قرار بده.
۳- آیا i برابر n است؟
بلی: به خط ۷ برو.
خیر: به خط ۴ برو.
۴- یکی به i اضافه کن و حاصل را به عنوان مقدار جدید i ذخیره کن.
۵- مقدار i را در مقدار s ضرب کن و حاصل را به عنوان مقدار جدید s ذخیره کن.
۶- به خط ۳ برگرد.
۷- مقدار s را به عنوان حاصل مسئله نمایش بده.
۸- پایان
حالا میتونیم بر اساس این الگوریتم، برنامهای برای حل این مسئله بنویسیم که شبیه چنین چیزی میشود:
n ← input s ← 1, i ← 0 L3: (i == n)? true: goto L7 | false: goto L4 L4: i ← i + 1 s ← i × s goto L3 L7: print s
کد بالا درواقع یک شبهکد است. حال برای نمونه، پیادهسازی آن با زبان ++C به این صورت است:
#include <iostream> using namespace std; int main() { int n; cin >> n; int s = 1, i = 1; for (i; i <= n; i++) { s = s * i; } cout << s; return 0; } <
و یا با Python:
n = int(input()) s = 1 for i in range (1, n+1): s = s * i print(s)
مرحلهی « 101 »: برنامه نویسی اصولی
تا اینجا یاد گرفتیم که چجوری با یک کامپیوتر برای اجرای دستورات حرف بزنیم. اما معمولا در ابتدا نحوه نوشتن دستورات غیراصولی یا اصطلاحا «کثیف» هستند؛ به عبارت دیگر الگوریتمی که تبدیل به کدهای برنامه نویسی پشت هم شده تا کاری را انجام دهد، معمولا خوانایی بالایی ندارند. در این حالت با مشکلات متعددی روبهرو می شویم:
- ایجاد تغییر در برنامه، خیلی دشوار میشه. فقط کافیه بخواهید یک چیز کوچک رو تغییر بدید، بعضی وقتا مجبور میشید کل کدها را بازنویسی کنید!
- بسیاری از برنامهها حاصل پروژههای تیمی و چندنفره هستند. امّا در این حالت، کار تیمی بر روی یک برنامه، بسیار سخت بوده و دیگران به درستی نمیفهمند هر خط از کد شما چکار کرده و دقیقاً چه چیزی رو پیادهسازی میکنه.
- اگر خود شما هم فقط یک هفته از پروژهی خودتون فاصله بگیرید و مجدد به سراغ اون برید، به سختی یادتون میآید که چی نوشتید! حتی اگر وقفهای در پروژه نندازید هم با بزرگشدن پروژه و زیاد شدن کدها، دیگه یادتون نمیآید که چی به چی هست و چکار کردید!
زمانی که این کد را نوشتم، فقط خدا و من میدانستیم که چگونه کار میکرد… اکنون فقط خدا میداند!
بنابراین توی این مرحله لازمه مفاهیم و استانداردهایی رو یاد بگیرید که خوانایی کدهای برنامه تون رو بالا ببره و کمک کنه تا مشکلات بالا براتون کمتر به وجود بیاد. از جملهی این روش ها:
روشهای best practice: روشهای نامگذاری استاندارد متغیرها، کلاسها و پوشهها – کامنتگذاری درست – مستندسازی – …
پارادایمهای برنامهنویسی (programming paradigms): «پارادایم» به معنای «الگوواره» است. معمولاً رایجترین چیزی که در این سطح باید یاد بگیرید، برنامهنویسی شیگرا (Object-oriented Programming) است. رویکردهای دیگری مثل برنامهنویسی تابعی (Functional Programming)، برنامهنویسی سرویسگرا (Service-oriented Programming) و… هم وجود داره که ممکن است بعداً بسته به نیازتون لازم باشه اونها رو هم یاد بگیرید.
الگوهای طراحی (design patterns): خودش زیرمجموعهای از best practiceها است و درواقع روشها یا قالبهایی بهینه و استاندارد برای حل مسائل گوناگون هستند. پیروی از آنها باعث کاهش مشکلات رایج بسیاری در تولید نرمافزار میشه.
ساختمان داده (data structure): این یکی از مهمترین مباحثی است که باید به درستی درک کنید. تا اینجا به احتمال زیاد تنها روشی که برای ذخیرهسازی یک سری داده میدونستید، استفاده از یک آرایه (array) بود. اّا شیوههای دیگری هم برای ساماندهی داده وجود داره که با توجه به طبیعت مسئلهی مورد نظر شما میتونید ازش استفاده کنید. همیشه بهترین راه ساماندهی دادهها، ذخیرهی آنها در یک آرایه نیست بلکه ممکنه بسیار سادهتر و/یا بهینهتر باشد اگر برای مثال در قالب گراف، درخت، پُشته یا… ذخیره شوند. از این مبحث بسیار مهم نباید به هیچوجه غافل شد.
مرحلهی « 110 »: برنامه نویسی حرفه ای
تا مرحلهی قبل، شما به جایگاهی میرسید که اصول پایهی برنامهنویسی رو یاد گرفتید (هرچند هنوز به تجربهی زیادی نیاز دارید و باید با انجام تمرین های مختلف مهارتتون رو بالا ببرید). بعد از این مرحله حتی میتونید زبان برنامهنویسی خودتون رو عوض کنید و زبان جدیدی رو در مدت خیلی کوتاه تری یاد بگیرد؛ چرا که اصول برنامه نویسی همچنان همونه و تنها چیزی که حالا باید بیاموزید، syntax (نحوه نگارش دستورات و ساختارها) آن زبان است. حتی شاید بتونید پروژههایی هم بنویسید. اما هنوز یک برنامهنویس حرفهای نیستید!
در هنگام برنامهنویسی ممکنه به مسائل تکراری زیادی برخورد کنید. بنظرتون نیازه برای هر پروژه خودتان از ۰ تا ۱۰۰ رو دوباره بنویسید؟ مثلاً در بازیسازی برای ساخت هر بازی جدید، باید ابتدا فرمولهای فیزیک رو مجدداً پیادهسازی کرده و از صفر تعریف کنیم که اگر جسمی در بازی رها شد، شتابی تحت تاثیر گرانش بگیره؟ یا مثلا برای ساخت ۱۰۰ تا فروشگاه آنلاین متفاوت، باید ۱۰۰ بار از نو تعریف کنیم که محصولات چگونه لیست شوند و مشتری آنها رو چگونه به سبد خرید اضافه کند؟ یا برای نمایش یک صفحهی گرافیکی ساده بر روی نمایشگر، باید جزء به جزء تعریف کرد که هر پیکسل از نمایشگر در هر لحظه چگونه باشد؟ واضح است که این درست نیست. مگر هر شرکت خودروسازی مجبوره برای تولید هر خودروی جدید، ابتدا چرخ را خودش از نو اختراع کنه؟ برای جلوگیری از اختراع مجدد چرخ در برنامهنویسی، ابزار و روشهای زیادی وجود داره.
برنامهنویسان خیلی از مسائل متداول و تکراری را از پیش و یکبار برای همیشه حل کرده و آنها را در قالب کتابخانه (library) منتشر میکنند؛ مجموعهای از زیربرنامهها و توابع آماده که میشه به هر برنامهای اضافه و استفاده کرد. به عنوان مثال، برای بسیاری از زبانهای برنامهنویسی، کتابخانهایی به اسم به Math وجود داره که بسیاری از دستورات و توابع مهم ریاضی در آن پیادهسازی شده است. برای محاسبهی سینوس یک عدد در برنامهتان نیازی نیست سری تیلور را از نو پیادهسازی کنید! فقط کافیه کتابخانهی Math را به برنامهی خود افزوده و از تابع سینوس موجود در آن که قبلتر پیادهسازی شده استفاده نمایید.
گاهی مجموعهای از کتابخانهها در کنار هم قرار میگیرند و یک جعبهابزار (toolkit) رو تشکیل میدهند که شما رو برای انجام کارهای خاصی کمک میکند. برای مثال اگر قرار باشه برای برنامهی خودتون یک رابط کاربری گرافیکی (graphical user interface) طراحی کنید، اونچه که معمولاً میتونه کار شما رو ساده کنه یک widget toolkit (مثل Qt) هست که امکانات مختلفی رو در اختیار شما قرار میده.
برنامهی شما همیشه مثل یک جزیره مستقل نسبت به سایر برنامهها قرار نداره. برای مثال اگر بخواهید در برنامهی خودتون از نقشه استفاده کنید، یا باید خودتان سرویسی برای نقشه تولید کنید و یا خیلی راحتتر، از سرویسی آماده مثل Google Maps استفاده کنید. یا ممکنه پیش بیاید که بخواهید برنامهی شما از امکانات موجود در سیستمعامل هم بهره ببره (مثلاً یک notification ارسال کنه). برای ارتباط با سیستمعامل یا سایر برنامهها و سرویسها، از رابطهایی موسوم به API استفاده میشه – تعاریف، الگوها و پروتکلهایی که امکان ارتباط میان برنامهی شما با سایر برنامهها رو به صورت استاندارد و اصولی فراهم بسازد.
کتابخانهها به شما کمک میکنند تا مسائل تکراری را از نو حل نکنید. اما مشکل دیگه ای که همچنان وجود داره، ساختارهای تکراری است. در بسیاری از مواقع، قالب و ساختمان برنامهها عملاً یکی هستند. در اینجا فریمورکها (framework) بسیار کاربردی هستند و به شما کمک میکنند تا بجای درگیری با حاشیهها، روی هدف اصلی تمرکز کنید. فریمورکهای بسیار متعدد و گوناگونی برای زبانهای مختلف وجود دارند که هر یک کاربردها و ویژگیهای خاص خودشون رو دارند.
برای اینکه بتونید عملاً یک برنامهنویس حرفهای بشید و از این راه کسب درآمد کنید لازمه علاوه بر آشنایی با یک زبان برنامهنویسی، نسبت به کتابخانهها و toolkitهای رایج هم شناخت داشته باشید و ترجیحاً با استفاده از یک یا چند فریمورک و API خاص در حوزهی مورد نظرتون هم آشنایی داشته باشید. اینکه دقیقاً چی رو انتخاب کنید، کاملاً وابسته به هدف و زمینهی فعّالیت شماست.
مرحلهی « 111 »: برنامه نویسی در تخصص
ممکنه هدف اصلی شما از برنامهنویسی، توسعهی نرمافزار نباشه؛ بلکه برنامهنویسی رو به عنوان ابزاری برای استفاده از یک تخصّص یاد گرفته باشید. از این رو، این سطح حایگاهیه که باید شروع به استفاده از برنامهنویسی در تخصّص مورد نظر خودتون کنید. مثلاً ممکنه بخواهید از برنامهنویسی در هوش مصنوعی و زیرشاخههای آن، دادهکاوی، مهندسی شبکه، آمار، ریاضیات، الکترونیک، عمران، جغرافیا و… استفاده کنید. معمولاً برای هر زمینهی تخصّصی، ابزار (فریمورکها، کتابخانهها و…) مخصوصی نیز نوشته شده است.
امکان دیگر فعالیت به عنوان برنامهنویس ارشد است؛ برنامهنویسی که معموما با دانش و تجربهی بالا، آن هم نه فقط در برنامهنویسی و نرمافزار، بلکه در اخلاق تیمی، تحلیل، برآورد، مذاکره و… که تیمی از برنامهنویسان زیر نظرش کار میکنند. به غیر از برنامهنویس ارشد، عنوان های شغلی دیگه ای هم وجود دارند که هر یک به نوعی با صنعت نرمافزار در ارتباط هستند: CTO، مهندس نرمافزار، QA، مختصّص امنیت و… . به هر حال برای فعّالیت در هر یک از این شغل ها، برنامهنویسی یک نیاز است (نه لزوماً برای کدنویسی مستقیم – ممکن است مثلاً یک CTO خودش مستقیماً حتّی یک خط کد هم ننویسد – بلکه برای درک دقیق از کارها).
به هر حال در این مرحله لازم است جایگاه برنامهنویسی در تخصّص خود را کشف کنید و به ابزارهای مورد نیاز نیز مسلّط بشید.
نکات تکمیلی و مهم
فقط برنامهنویسی کافی نیست: به احتمال خیلی زیاد، برنامهنویسی تنها ابزاری نیست که به اون نیاز خواهید داشت. برای مثال در بسیاری از پروژهها نیاز به ذخیره دادهها دارید و خیلی زود متوجّه خواهید شد که ذخیره همهچیز در یک فایل متنی ساده، مشکلات بسیاری داره. در اینجا نیاز به یادگیری مفاهیم پایگاه داده و معمولاً زبان پرسوجویی مثل SQL هم نیازه؛ به علاوهی اینکه باید کار با یک پایگاهداده (این که چه و از چه نوعی باشد بسته به زمینهی فعّالیتتان داره) رو هم یاد بگیرید. این نیاز اکثراً موازی با سطوح «برنامهنویسی اصولی» یا «برنامهنویسی حرفهای» پیش میاد و باید آنها را یاد بگیرید. به غیر از این، نیاز به فراگیری مفاهیم، مهارتها، استانداردهای دیگری مثل استانداردهای XML و JSON، کار با خطّ فرمان سیستمهای عامل گوناگون، پلاگینهای مختلف و… هم برایتون پیش میاد.
کنترل نسخه: خیلی وقت ها، نه شما تنها کسی هستید که روی برنامه کار میکنید و نه قراره فقط یک نسخه (ورژن) از برنامهی شما ارائه بشه (برخلاف سختافزار که با گذشت زمان فرسودهتر میشود، نرمافزار با گذشت زمان پیشرفت میکنه). در این خصوص به ابزارهای کنترل نسخه (version control) نیازه و یکی از رایجترین اونها Git است. به محض این که وارد مرحلهی حرفهای شدن شدید، اهمّیت کنترل نسخه رو درک خواهید کرد.
طراحی صفحات وب با برنامهنویسی تحت وب یکی نیست: برخلاف تصور خیلی از تازه کارها، HTML و CSS هیچیک زبانهای برنامهنویسی نیستند. HTML زبانی برای توصیف صفحات وب و CSS زبانی برای تنظیم چیدمان و الگوبندی است. نکتهی دیگه اینکه یک صفحهی وب (web page) با یک برنامهی تحت وب (web application) هم یکی نیست. برای درک بهتر میشه Google را مثال زد. جستجوی مطالب توسط یک اپلیکیشن عظیم تحت وب انجام میشه اما نمایش حاصل جستجو، به شیوههای مختلفی میتونه انجام بشه که صفحهی وبی که با HTML و CSS تولید شده است، فقط یکی از آن روشهاست.
تست بنویسید: شیوهی سنتی تولید (نه فقط در حوزهی نرمافزار) به این صورت بود که ابتدا محصول تولید میشد و فقط پیش از توزیع، آزمایشهایی نیز بر روی آن انجام میگرفت. امّا در شیوهی مدرن، علاوه بر آزمایشهای نهایی، در مراحل تولید نیز آزمایشات و شیوههای کنترل کیفی بسیاری انجام میشه تا محصول هرچه بیشتر به بینقص بودن نزدیک بشه. دلیل این که شرکتهای بزرگی مثل BMW در حوزهی خودرو یا Apple در حوزهی تکنولوژی پیشتازند و نسبت به کیفیت محصولات خودشون اطمینان دارند هم همینه (البته با این حال هم امکان رخداد مشکلات و نقصها همچنان وجود داره). در تولید یک نرمافزار هم باوجود اینکه تیمهای QA وظیفهی تست و بررسی اشکالات را دارند، برنامهنویس هم نیاز داره با رویکرد تستمحور آشنا باشه. باید بتونید مرتب از کارکرد درست اجزای گوناگون برنامهی خودتون اطمینان حاصل کنید؛ حتی اگر قرار نباشد محصولی تجاری تحویل دهید.
از کمالگرایی پرهیز کنید: کمالگرایی در برنامهنویسی خیلی خطرناک هست و جلوی پیشرفت پروژههایتون یا حتّی خودتون رو میگیره. کمالگرایی در روند یادگیری باعث میشه تا ابد در بنبستِ «حالا من توی همینش هم موندم!» گیر کنید و هیچوقت جلو نروید. در تولید نیز باعث میشه هیچ وقت، هیچ محصولی تحویل ندهید و همیشه درگیر بینقصسازی باشید که البته این کار نیز هیچگاه به پایان نمیرسه. یاد بگیرید که ابتدا یک محصول اوّلیهی هرچند ناقص را سر هم کنید و بیرون بدید، بعد از اون به مرور زمان آن رو ارتقا بدید و ویژگیهای جدیدتری بهش اضافه کنید. گاهی در برنامهنویسی مجبور میشوید «کثیف» کار کنید و چارهای هم نیست! خودتون رو از این بابت اذیت نکنید.
به جزئیات توجه داشته باشید: در عین حال که کمالگرایی در برنامهنویسیْ خطرناک هست، دقّت و توجّه به ظرافتها و جزئیات بسیار لازمه. یک اشتباه کوچک به راحتی می تونه برنامهی شما رو دچار اشکالات اساسی کنه. در سال ۱۹۶۲ م. (۱۳۴۰ ه.ش)، ناسا یک کاوشگر فضایی بسیار گرانقیمت، موسوم به Mariner-1، رو با هدف گذر از نزدیکی سیّارهی زهره و انجام تحقیقات پرتاب کرد. امّا حدود چهار دقیقه پس از پرتاب و در مسیر قرارگیری در مدار، ناگهان راکت حامل این کاوشگر، یعنی Atlas LV-3، دچار تغییری غیرعاّدی در مسیر از پیش برنامهریزیشده شد و بجای تزریق شدن در مدار، به سمت مناطق مسکونی روی زمین تغییر جهت داد! برای جلوگیری از تلفات انسانی، مدیر پرتاب به سرعت فرمان انهدام عمدی راکت رو صادر کرد و کاوشگر گرانقیمت، به همراه کلّ موشک حاملش، در کسری از ثانیه به قطعات ریز تبدیل شدند… امّا علّت این تغییر مسیر چی بود بنظرتون؟ یک راکت فضایی، نه به صورت دستی بلکه توسّط برنامههای کامپیوتری هدایت میشه. در برنامهی سیستمی از این راکت که وظیفهی سنجش لحظهای سرعت رو داشت و به زبان فورترن نوشته شده بود، فقط یک علامت « ‾ » جا افتاده بود و باعث شده بود که منطق برنامه به کلّی تغییر کند. این خطا باعث شد که راکت در محاسبهی سرعتش دچار اشتباه بشه و سعی کنه به سرعت از پیش تعیینشده خودش با نشانهروی به سمت مناطق مسکونی دست پیدا کند!
البته از جمله نکاتی که در مهندسی نرمافزار به آن توجّه بسیاری میشه (یا اصولاً باید بشود)، تحمّل خطاست. سیستمها باید به گونهای طراحی بشوند که در برابر خطاهای انسانی، اشتباهات پیادهسازی و رخ دادن شرایط پیش بینی نشده هم مقاومت و پویایی نشان دهند.
رایگان کار کنید: یکی از فرهنگهای بسیار خوبی که در میان جامعهی برنامهنویسان جهان و حتّی ایران شکل گرفته است، انجام فعّالیتهای داوطلبانه و رایگان میباشد. کارهای بسیاری از نوشتن و توسعهی نرمافزار، کتابخانه و فریمورک، تهیهی مستندات، ترجمهی مستندات، تهیهی محتوای آموزشی، تألیف کتاب و… است که به صورت کاملاً داوطلبانه انجام میگیره و رایگان و بدون چشمداشت مالی در اختیار همگان قرار میگیرد.
انجام کار به صورت رایگان نیز لزوماً از سر دلسوزی یا مهربانی نیست! با ورود به دنیای برنامهنویسی خواهید دید خیلی وقتها پیش بیاید که نظریهی بازیها (Game Theory) به شما بگه که بهترین استراتژی، بازی به صورت برد–برد است. اگر مثلاً کتابخانهای که نوشتید رو آزادانه در اختیار جهان قرار دهید، برنامهنویس دیگر هم میتونه علاوه بر استفاده، روی آن کار کنه و آن را توسعه بده تا خود شما هم از آن بهره ببرید. سیستمعامل گنو/لینوکس به همین منوال تولید شد. پروژهای کاملاً آزاد و داوطلبانه که دسترسی هرکس به آن بلامانع است. درحالی که مثلاً ویندوز توسط تیم خاصی در مایکروسافت توسعه میکنه و کسی خبر نداره که در میان کدهای آن چه خبر است، توسعهدهندگان لینوکس رو میلیونها داوطلب از سراسر جهان تشکیل میدهند. هر شخص یا شرکتی میتوانه ویژگیهای مورد نظر خود را به لینوکس اضافه کنه، ایرادهایی که در آن پیدا میکند ره رفع کنه و دیگران هم از آنچه انجام داده بهرهمند شوند. دلیل کارایی، قدرت و امنیت فوقالعادهی این سیستمعامل در همین فلسفه نهفته است.
در ایران هم خوشبختانه این فرهنگ رشد خوبی داشته است؛ از ایجاد و توسعهی مخازن کد متنباز گرفته تا تولید محتوای آموزشی رایگان و برگزاری همایشها و دورهمیهای سالانه، ماهانه و هفتگی در بسیاری از شهرها. با ورود به دنیای برنامهنویسی، به سرعت متوجه میشید که تنها نیستید و افراد زیادی مثل تیم بادانش داوطلبند که دستان شما رو بگیرند و به شکلهای مختلف بهتون یاری بدهند.
ارزان کار نکنید: کار رایگان و داوطلبانه خوبه امّا زمانی که بحث پول و دریافت حقوق و دستمزد در میان میآید، مهارتهایتان را ارزان نفروشید! این کار یک خیانت در حقّ خودتان و یک ظلم در حقّ دیگر همکارانتون است. خیلی پیش میآید که کارفرمایانی انجام پروژههای بسیار بزرگ را با قیمتهایی بسیار کم طلب کرده و بعضی برنامهنویسان نیز از سر ناچاری و نیاز شدید به پول، آن شرایط ناعادلانه رو قبول میکنند. کارفرمایان دیگری هم عادت دارند به استخدام «آچار فرانسه». بجای باز کردن چندین فرصت شغلی برای چندین نفر، به دنبال یک نفر میگردند که با طیف گستردهای از مهارتها، وظیفهی چندین نفر با چندین عنوان شغلی را پر کند (مثلاً هم گرافیست، هم برنامهنویس سمت سرور، هم طرّاح سیستم، هم متخصص پایگاه داده و… باشد!) و البته فقط حقوق یک نفر را بگیرد! این موضوعات اکثراً به علت نبود قوانین مناسب صنفی و عدم نظارت کافی بر اجرای قوانین فعلی است. به هر حال سعی کنید در گسترش چنین وضعی سهیم نباشید.
جمعبندی و سخن نهایی
بشر میکروسکوپ، تلسکوپ، رادیوتلسکوپ و… رو اختراع کرد تا فراتر از توان چشمانش ببیند. استتوسکوپ، فراصوتسنج و… رو اختراع کرد تا فراتر از توان گوشهایش بشنود. اهرم، موتور، پیستون و… رو اختراع کرد تا فراتر از توان بازوانش نیرو وارد کند. خودرو، زیردریایی، فضاپیما و… رو اختراع کرد تا فراتر از توان پاهایش جابهجا شود. و امّا خط، چرتکه و البته کامپیوتر را اختراع کرد تا فراتر از توان مغزش فکر و محاسبات کند.
تفاوتی نداره در کدوم زمینه مشغول به فعالیت باشید. کامپیوتر میتونه شغل شما را دگرگون کنه. با برنامهنویسی هست که میتونید به کامپیوترها فرمان بدید. ساکنین قرن ۱۹ انقلاب صنعتی رو تجربه امّا شما به عنوان ساکنین قرن ۲۱، مشغول تجربهکردن انقلاب انقلاب دیجیتال هستید.
با انقلاب دیجیتال، اهمیت توانایی کار با کامپیوترها در قرن ۲۱ به همان اندازه توانایی خواندن و نوشتن در قرن ۲۰ مهم است. دونستن برنامهنویسی در بسیاری از زمینهها، به زودی نه یک انتخاب بلکه یک نیاز خواهد بود. مثل قرن ۲۰، برنامهنویسی دیگه صرفاً منحصر به آزمایشگاههای Bell یا IBM نیست. حتّی دیگر منحصر به کشورهای توسعهیافته هم نیست؛ بلکه حتّی برای کشورهای درحال توسعه هم فرصتی بالقوه جهت پیشرفت است.
چه قصد جمعآوری و تحلیل دادههایی آماری رو داشته باشید و چه حتّی خلق یک اثر هنری توسط گرافیک کامپیوتری، برنامهنویسی یک ابزار بسیار مفید برای شما خواهد بود. با علاقه، حوصله و البته سماجت کافی، به راحتی میتونید مهارت کار با این ابزار رو کسب کنید و از اون در زندگی حرفهای و حتّی شخصی تون استفاده کنید.
برگرفته شده از وبلاگ آقای پویان در ویرگول
2 نظر
سلام.مقاله شما عالی هستش فقط من طبق جستجویی که توی سایتهای حرفه ای خارجی داشتم یک نکته رو بگم که اون هم اینه که زبان پایتون اصلا زبان خوبی برای شروع نیست چون به شدت ساده است و سینتکس اون با سینتکس زبانهای پایه مثل C و ++C کاملا فرق داره و این مساله بعدا یادگیری زبانهای دیگه رو مشکل میکنه چون بقیه زبانهای مهم دنیا بیشترشون از زبان C و ++C گرفته شده اند. با تشکر
سلام
خواهش میکنم نظر لطف شماست. از اینکه نظرتون رو با ما در میون گذاشتید از شما متشکریم. دوستان دیگه هم اگه نظری نسبت به تجربه آقا فرشاد دارند خوشحال میشیم بشنویم.
بادانش | یادگیری در مسیر موفقیت