الگوریتم و برنامه‌نویسی

کامپیوترها زمانی بوجود اومدن که انسان‌ها در برابر انجام محاسبات بزرگ عاجز شده بودند و نیاز بود که ابزاری این محاسبات رو انجام بده. اگر چه اون‌ها موجودات بسیار کم هوش‌تر از انسان‌ها هستند اما فوق‌العاده دقیق‌ترند، بنابراین منطقیه که انجام محاسبات طولانی و وقت‌گیر رو به اون‌ها بسپاریم. همونطور که میدونید کامپیوترها با صفر و یک کار میکنن؛ بنابراین برای اینکه بخوایم برامون کاری رو انجام بدن نیازه که بتونیم با زبون خودشون باهاشون صحبت کنیم.
اما صحبت کردن با کامپیوتر با زبان صفر و یک هم کار ساده‌ای نیست پس زبان‌های برنامه‌نویسی به وجود اومدن تا با کمک تعدادی دستور که برای ما قابل درک باشن تعامل با کامپیوتر رو آسانتر کنن. یکی از زبان‌های برنامه‌نویسی که قدمت چند ده ساله داره ولی هنوزم به خاطر کاربردها و سرعت زیادش طرفداران زیادی داره ++c هست.

با رشد و پیشرفت زبان‌های برنامه‌نویسی، استفاده از کامپیوترها نیز افزایش پیدا کرد اما برای استفاده‌ی کارآمدتر از کامپیوترها نیاز به ابزاری بود که قسمت‌های مختلف کامپیوتر و ارتباط بین اجزای اون رو کنترل کنه برای همین منظور سیستم‌عامل‌ها متولد شدند و چون یک کامپیوتر به شکل‌های متفاوتی و برای کاربری‌های گوناگونی میتونست کنترل بشه سیستم‌عامل‌های متفاوتی به وجود اومدن و هر کدوم در زمینه‌ای موفق شدند مثلا گنو/لینوکس تونست بین برنامه‌نویس‌ها محبوب بشه و در دنیای سرورها و ابرکامپیوترها پادشاهی کنه. اما چرا گنو/لینوکس تونست اینقدر موفق بشه؟
شاید بشه گفت اولین و مهم‌ترین دلیل برای این موفقیت رایگان و در کنارش متن باز بودن این سیستم‌عامل بود که باعث میشد برای استفاده از اون نیاز به پرداخت پولی نباشه و همین باعث جذب میلیون‌ها کاربر شد که به کدهای نوشته شده این سیستم‌عامل دسترسی داشتن و میتونستن خطاها و مشکلات مربوط به اون رو خودشون پیدا و حتی حل کنن و به بقیه اطلاع بدن تا امنیت و پایداری این سیستم عامل بالاتر بره، این مزیت از طرف دیگه باعث شد گنو/لینوکس خیلی از زبان‌های برنامه‌نویسی رو پشتیبانی کنه و نرم‌افزارهای بسیار گوناگون و متنوعی برای اون نوشته بشه و همین نرم‌افزارها قدرت و انعطاف پذیری قابل ملاحضه‌ای رو به این سیستم عامل بده. این انعطاف پذیری در عین قدرتمندی برنامه‌نویس‌ها رو به سمت خودش جلب کرد و دنیای سرورها و ابرکامپیوترها رو گنو/لینوکسی کرد.

تصور کنید که از یک بازیگر خواسته بشه تا برای یک رو‌‌ز تمام کارهای شما رو تقلید کنه! او باید تمام کارهایی که می‌کنید رو درست مثل شما انجام بده. حالا فرض کنید شما می‌تونستید یک کتاب راهنما تهیه کنید و به او بگید چطور دقیقا مثل شما رفتار کنه، چه چیزی در اون کتاب می‌نوشتید؟ لیست کردن یک سری حقایق در مورد خودتون، برای بازیگری که از شما تقلید می‌کنه کافی نیست شما باید چگونگی انجام کارهاتون رو مرحله به مرحله بنویسید که به این ساختار مرحله به مرحله الگوریتم میگن. در نتیجه، الگوریتم مراحل انجام یک کاره که به صورت متوالی بیان شده البته تعداد مراحل باید متناهی باشه. این نکته رو در نظر داشته باشید که مراحل میتونن شرطی هم باشن.

شما می‌تونید هر چیز قابل توصیفی رو فقط با استفاده از این مفهوم توصیف کنید، مهم نیست چقدر این الگوریتم مطابق رفتارای شما عمل میکنه اما اون بازیگر فقط از دستورالعمل پیروی میکنه، پس برای اینکه بازیگر نقش خودش رو بهتر ایفا کنه نیاز به الگوریتم دقیقی داره. کامپیوتر هم دقیقا مثل این بازیگره و تک تک دستورهایی که به اون میدید رو به ترتیب انجام میده.

در نتیجه برای حل یک مسئله با کمک کامپیوتر، به صورت مرحله به مرحله فکر کنید و اون رو به مراحل کوچک‌تر بشکنید. سپس با تبدیل این مراحل کوچک شده به دستورات یک زبان برنامه‌نویسی، انجام اون‌ها را به کامپیوتر بسپارید!
وقتی قصد دارید برنامه‌ای بنویسید، معمولا ایده‌ای ندارید که از کجا باید شروع کرد. خب لازم نیست نگران باشید! همه ما همین‌طور هستیم. هیچ کدام از ما در شروع، ایده‌ای نداریم و این دقیقا دلیلیه که ما از الگوریتم و فلوچارت‌ها استفاده می‌کنیم. پس در ابتدای نوشتن یک برنامه بهتره به سراغ الگوریتم اون برید و به قول حرفه‌ای‌ها، سریع دست به کیبورد نشید!

خلاصه اینکه بیاید با هم الگوریتم رو که پایه‌ی برنامه‌نویسیه یاد بگیریم و توی سیستم‌عامل گنو/لینوکس هم شروع کنیم به برنامه‌نویسی تا هم از قابلیت‌های این سیستم‌عامل استفاده کنیم و هم کارهای طولانی و حوصله سربر رو خودمون انجام ندیم. ما سعی کردیم مفاهیم الگوریتم و برنامه نویسی رو با آموزش بخش‌هایی از درس ریاضی همراه کنیم تا بتونیم هم برنامه‌نویسی یاد بگیریم و هم از جنبه‌های دیگه‌ای به حل مسائل ریاضی بپردازیم.