این روزها کمتر کسی پیدا میشود که هیچ گجت الکترونیکی نداشته باشد و حتی افرادی که از فناوری روز دوری میکنند نیز حداقل یک گوشی هوشمند همراه خود دارند؛ گوشیهای هوشمند، کامپیوترهای شخصی، تبلتها و غیره ماشینهایی هستند که برای کمک به ما و به عبارت دیگر برای راحتترکردن زندگی ما طراحی شدهاند، اما این ابزارهای فیزیکی به چه شکل عمل میکنند و چگونه برای نیازهای ما طراحی میشوند؟ همهی ما میدانیم که این ابزارها و خدمات مختلفی که درون آنها وجود دارند به وسیلهی زبانهای برنامه نویسی طراحی شدهاند. با گذشت زمان افراد علاقهمند بیشتر با مفهوم این کلمه آشنا شده و تصمیم گرفتهاند که وارد این حوزه شوند؛ اگر شما هم جزو این دسته از افراد هستید به هیچ وجه این مقاله را از دست ندهید؛ ما در این مقاله به مبانی و شالوده برنامه نویسی خواهیم پرداخت تا افراد مختلف و خصوصاً کسانی که تازه قصد ورود به این حوزه را دارند بتوانند درک بهتری از این موضوع بدست آورند. همراه ما باشید.
این دو در کنار هم پیکرهی یک ماشین را تشکیل میدهند. سختافزارها بخش فیزیکی یک کامپیوتر را تشکیل میدهد و نرمافزارها خدمات و امکاناتی هستند که ما به واسطهی سختافزارها از آنها استفاده میکنیم. در واقع رابطهی میان سختافزار و نرمافزار همانند رابطهی میان روح و جسم است؛ اگر سختافزار نباشد دیگر کامپیوتری وجود نخواهد داشت و اگر نرمافزار نباشد ما چیزی جز چند قطعه فیزیکی در اختیار نخواهیم داشت. نرمافزارها به وسیلهی یک برنامه نویس طراحی شده و به کمک سخت افزار به اجرا در میآیند. اما این برنامهها و آلگوریتمهایشان چطور طراحی میشوند؟
ماشینهای مختلف از جمله کامپیوترها برای انجام وظایف مختلف طراحی میشوند. دانشمندان برای تعیین وظایف اجرایی ماشینها برای آنها زبان مخصوص به خودشان را طراحی کردهاند. همانطور که تمام انسانهای روی زمین به یک زبان صحبت نمیکنند، ماشینها نیز دارای زبانهای متفاوتی هستند؛ یکی از این زبانهای معروف، زبان صفر و یک است که اغلب کامپیوترها و دستگاههای مختلف امروزی از این زبان استفاده میکنند. در گذشته مهندسان کامپیوتر برای طراحی برنامههایی که هرکدام کارهای خاصی را انجام میدادند با استفاده از زبان ماشین اقدام به برنامه نویسی میکردند. در آن دوران برای نوشتن برنامههای ساده نیاز به نوشتن چندین هزار خط کد بود. به طور کلی در آن زمان اگر شما میخواستید کامپیوترها و غیره برای شما کار یا محاسبهای را انجام دهند باید زبان آنها را میآموختید و به کمک آن شروع به برنامه نویسی میکردید.
همانطور که گفته شد نوشتن سادهترین برنامهها نیز به زبان ماشین نیازمند وقت و نیروی انسانی زیادی بود؛ این مسئله موجب تولد زبان اسمبلی شد. در زبان اسمبلی بسیاری از قطعه کدها و دستوراتی که قبلاً توسط زبان ماشین نوشته میشدند تبدیل به کلماتی مشابه با زبان انسانها شده بودند. زبان اسمبلی توانست کمک زیادی به برنامه نویسان بکند اما با این وجود نوشتن برنامه به زبان اسمبلی همچنان سخت و زمان گیر بود.
پس از اسمبلی دورهی جدیدی در زمینه برنامه نویسی با نام زبانهای سطح بالا آغاز شد. زبانهای سطح بالا عموماً به زبانهایی گفته میشود که دستورهای آن شباهت بسیار زیادی به زبان انسانها دارد (برخلاف زبان ماشین). این دسته از زبانهای برنامه نویسی طراحی نرمافزار را برای برنامه نویسان بسیار راحت کرد؛ به این صورت که دیگر نیازی نبود برای برنامه نویسی یک برنامه از رشتههای بلند صفر و یک استفاده کرد و فقط با نوشتن کلمات کلیدی تعریف شده در آن زبان، دستور مورد نظر اجزا میشد.
دستوراتی که به وسیلهی زبانهای سطح بالا و اسمبلی نوشته میشوند برای کامپیوتر که زبان آن صفر و یک است قابل خواندن نیست؛ بنابراین در این میان نیاز به یک مترجم احساس میشود که بتواند دستورات وارد شده به زبانهای سطح بالا را به زبان ماشین تبدیل کند. کامپایلر مترجم زبانهایی مانند C ،JAVA و غیره است؛ شیوه عملکرد این مترجم به این گونه است که تمام کدهای نوشته شده توسط برنامه نویس را در انتهای کار ترجمه کرده و بصورت یک فایل درمیآورد و برای استفاده مجدد از آن برنامه، دیگر نیازی به کامپایلر نیست. اما مفسر بصورت خط به خطی به ترجمه کدها میپردازد و برای هر بار اجرای آن کد نیاز به وجود یک مفسر است. در مقایسهی این دو مترجم میتوان گفت زبانهایی که بهوسیلهی کامپایلر ترجمه میشوند بر روی هر پلتفرمی قابل اجرا نیستند اما در عوض سرعت اجرای آنها بیشتر است زیرا نیازی نیست با هر بار اجرای برنامه به ترجمه آن پرداخت؛ به این برنامهها اصطلاحاً برنامههای وابسته به سیستم عامل گفته میشود. در مقابل برنامههایی که به وسیلهی مفسر ترجمه میشوند برای هر بار اجرا نیاز به ترجمه مجدد دارند؛ این موضوع سرعت اجرای برنامه را پایین میآورد اما این برنامه در هر پلتفرمی اجرا میشود زیرا فقط وابسته به مفسرش است. زبانی مانند C از کامپایلر برای ترجمه کدهای خود استفاده میکند به همین دلیل برای برنامه نویسی بیشتر نرمافزارها از این زبان استفاده میکنند؛ اما در وب که ممکن است هر لحظه نیاز به ایجاد تغییری در وبسایت باشد از زبانهای مفسری مانند PHP استفاده میکنند که پس از هر تغییر مفسر مجدداً شروع به ترجمه خط به خط کدها میکند.
در زبانهای برنامه نویسی دستورهای متعددی وجود دارند؛ این دستورها بر اساس نیازهای ما ساخته شدهاند به عنوان مثال یکی از اصلیترین دلیلهایی که ما از کامپیوترها استفاده میکنیم این است که کامپیوترها از انجام دادن کارهای تکراری خسته نمیشوند و همچنین محاسبات و دستورهای داده شده را بر حسب توانشان به سریعترین حالت ممکن انجام میدهند. به همین دلیل در زبانهای برنامه نویسی دستوری تحت عنوان حلقه تکرار وجود دارد. نکته دیگری که در خصوص دستورها باید دانست این است که به طورکلی در زبانهای برنامه نویسی مختلف ترتیب اجرا خاصی وجود دارد (برای مثال اغلب زبانهای برنامه نویسی از خط اول شروع به خواندن کدهای نوشته شده میکند تا به خط انتهایی برسد). یکی از شناختهشدهترین دستورهای دنیای برنامه نویسی دستورهای شرطی هستند که بسیاری از افراد با آن آشنایی دارند و معمولاً این دستور جزو دستورهایی است که هر برنامه نویسی کار با آن را یاد میگیرد. از نظر ریاضیات این سه عامل در کنار هم اصلیترین عوامل تشکیل دهندهی یک زبان برنامه نویسی هستند که با نبود هر کدام دیگر زبان برنامه نویسی نخواهیم داشت.