پیش از هر چیز ما نیاز به یک سیستم عامل داریم. در سادهترین کلام، سیستم عامل یک برنامه ی خیلی بزرگ و پیچیده است که کلیه ی بخشهای یک کامپیوتر را به یکدیگر متصل میسازد لذا ما میتوانیم از کلیه سخت افزارهای سیستم خود مثل کیبورد، مانیتور، اسپیکر، ماوس و ... استفاده کنیم . سیستمی که سیستم عامل یا OS روی آن نصب نباشد، صرفاً مجموعه ای از سختافزارهایی است که به هیچ کاری نمی آیند. از معروف ترین سیستم عامل های دنیا میتوان به ویندوز، لینوکس و مکینتاش اشاره کرد.
پس از آن که ما یک زبان را از میان انواع زبانهای برنامه نویسی انتخاب کردیم، نیاز به نرم افزاری تحت عنوان Editor یا ویرایشگر کد داریم تا با استفاده از آن بتوانیم کدنویسی کنیم. یکی از ویرایشگرهای کد معروف که در سیستم عامل ویندوز به صورت پیشفرض نصب شده است، Notepad نام دارد که حتماً با آن آشنا هستید اما این در حالی است که نرم افزارهای بسیار پیشرفتهتر از آن هم وجود دارند که در ادامه، بیشتر با آنها آشنا خواهیم شد. ادیتور پیش فرض سیستم عامل گنو/لینوکس VIM نام دارد و مکینتاش اپل هم از ادیتوری تحت عنوان TextEdit برخوردار است.
در صورتی که بخواهیم یک وب اپلیکیشن طراحی کنیم، علاوه بر ویرایشگر کد، نیاز به مرورگری همچون گوگل کروم یا فایرفاکس نیز خواهیم داشت تا خروجی کدهای خود را داخل آن مشاهده کنیم.
پس از آن که کدهای خود را با استفاده از یک ویرایشگر نوشتیم، به جز برنامههایی که با استفاده از زبان ماشین نوشته می شوند، سایر برنامهها نیاز به یک اسمبلر یا کامپایلر دارند تا سورس کد شما را به زبان قابل فهم برای سیستم تبدیل کنند. پس از تبدیل سورس کد، اسمبلر یا کامپایلر این دستوراتی که به زبان ماشین هستند را در فایل جداگانه ای تحت عنوان فایل EXE ذخیره میسازند (زمانی که شما یک نرمافزار را نصب می کنید، با همین فایل اجرایی نهایی سر و کار دارید.)
حال ممکن است این سؤال برای شما پیش بیاید که اگر بخواهیم برنامه ی خود را روی پردازنده های متفاوتی اجرا کنیم چه باید کرد؟ در پاسخ به این سؤال بایستی گفت که برنامه را می بایست برای پردازنده های مختلف به زبان ماشین مبدل ساخت.
بسیاری از کامپایلرها صرفاً برای یک سیستم عامل خاص و یک نوع پردازنده سورس کد را به زبان ماشین تبدیل می کنند. لذا، یک کامپایلر ویندوزی صرفاً خواهد توانست برنامههایی که تحت سیستم عامل ویندوز اجرا میشوند را ایجاد کند (البته گفته میشود که بسیاری از برنامههای نوشته شده برای سیستم عامل مکینتاش دارای دو فایل اجرایی هستند؛ یکی برای پردازنده های PowerPC که در مک استفاده میشوند و دیگری برای پردازنده های Intel که در سایر سیستمها من جمله سیستمهای جدید مکینتاش مورد استفاده قرار می گیرند.
در گذشته کامپایلرها بسیار کند بودند. برنامه نویس می بایست سورس کدش را به نرمافزار کامپایلر وارد میکرد و بدون اغراق صبح روز بعد میآمد تا نتیجه را تحویل بگیرد. حتی اگر برنامه نویس یک اشتباه کوچک مرتکب می شد، می بایست سورس کد خود را اصلاح کرده و برنامه را از نو کامپایل کند و یک روز دیگر منتظر بماند.
با توجه به این که کامپایلرها خیلی کند بودند، دانشمندان علوم کامپیوتری چیزی جدیدی تحت عنوان Interpreter یا مفسر طراحی کردند. دقیقاً همانند مترجم یک زبان زنده که به صحبتهای فردی گوش میدهد سپس خط به خط آنها را به زبانی دیگر ترجمه می کند، Interpreter هم خیلی سریع خط به خط دستوراتی که ما نوشتهایم را به زبان ماشین تبدیل می کند. مسأله ای که در ارتباط با Interpreter ها وجود دارد این است که بر خلاف کامپایلرها، این نرم افزارهای جدید نمیتوانند دستوراتی که به زبان ماشین تبدیل شدهاند را در فایل اجرایی جداگانه ای ذخیره سازند و در عوض، دستورات تبدیل شده به زبان ماشین را در جایی در حافظه ی سیستم نگهداری می کنند. لذا اگر بخواهید برنامه ی خود را به فروش برسانید، هیچ فایل اجرایی ندارید که در اختیار مشتریان قرار دهید بلکه می بایست سورس کد ارزشمند خود را به فروش برسانید که بعداً ممکن است کسی نام آن را تغییر داده و با نامی جدید، مجدد شروع به فروش کند!
نکته البته با پیشرفت علوم کامپیوتری، دانشمندان توانسته اند کامپایلرهای به مراتب سریعتری طراحی کنند و امروزه اینترپریترها برای برخی زبانهای خاص که تحت عنوان زبانهای Scripting شناخته میشوند مورد استفاده قرار می گیرند.دیدیم که استفاده از کامپایلرها کند بود و اینترپریترها ها هم منجر به لو رفتن سورس کد می شدند، لذا نیاز به راهکار سومی میبود تا برنامه نویسان بتوانند برنامههای خود را منتشر کنند و این شد که راهکار سومی تحت عنوان Byte-code یا Pseudocode که غالباً تحت عنوان P-code شناخته میشود ابداع شد. برخلاف روش اول که برنامه نویسان میآمدند و سورس کد خود را با استفاده از کامپایلر یک سیستم عامل خاص به زبان ماشین مبدل می ساختند، در روش سوم برنامه نویس برنامه اش را به یک فایل P-code کامپایل می کرد.
حال با استفاده از این فایل P-code و یک اینترپریتر اختصاصی -نام این فایل اصطلاحاً Virtual Machine یا ماشین مجازی است- میتوان دستوارت قرار گرفته داخل این فایل را به کدهای باینری قابل فهم برای هر سیستم عاملی مبدل ساخت.
مزیت این روش این است که برنامه نویس میتواند یک نسخه از P-code برنامه اش را منتشر کرده، سپس کاربران سیستم عامل های مختلف از آن استفاده کنند. به هر حال برنامههایی که به فایل P-code کامپایل میشوند مشکلاتی هم دارند. عمده ترین مشکل آنها این است که به سریعی برنامههایی که به زبان ماشین کامپایل میشوند نمی باشند. علاوه بر این، اگر روی سیستم مد نظر ما ماشین مجازی نصب نباشد، برنامه قابل اجرا نخواهد بود!
معروف ترین زبانی که از P-code استفاده میکند زبان برنامه نویسی جاوا است. پس از آن که شما برنامهای با این زبان نوشتید، ابتدا می بایست آن را به یک فایل P-code کامپایل کنید سپس روی هر سیستمی که ماشین مجازی جاوا یا JVM نصب باشد، برنامه ی شما قابل اجرا خواهد بود.
ایده ی پشت P-code این است که برنامه نویس یک بار برنامه اش را می نویسد، سپس در هر جایی و روی هر سیستم عاملی آن را اجرا میکند (شعار زبان جاوا دقیقاً همین است؛ به عبارت دیگر، Write Once, Run Everywhere) توجه داشته باشیم که احتمال وجود دارد برنامههایی که به این روش اجرا میشوند روی یک سیستم عامل به خوبی کار کنند اما روی سیستم عامل دیگری با کمی مشکلات مواجه باشند البته این در حالی است که زبانهایی همچون جاوا توانسته اند تا حد زیادی این مشکل را رفع کنند.
آشنایی با IDEها
با گسترش نیازهای برنامه نویسان از یک سو و همچنین حرفه ای تر شدن -یا بهتر بگوییم گسترده تر شدن- زبان های برنامه نویسی، این نیاز احساس گردید تا ویرایشگرهای کد به چیزی بیش از یک ادیتور سورس کد مجهز شوند و نتیجه این شد که IDE ها توسط شرکت های نرم افزاری طراحی شده و روانه ی بازار شدند.
IDE که مخفف واژگان Integrated Development Environment به معنی محیط یکپارچه توسعه ی نرم افزار است این امکان را در اختیار برنامه نویسان زبان های برنامه نویسی مختلف قرار می دهد تا علاوه بر کدنویسی، کارهایی همچون دیباگ کردن، کامپایل کردن، ارتباط با گیت و بسیاری کارهای دیگر را انجام دهند. از معروف ترین IDEهای اپن سورس و رایگان، می توان به Eclipse اشاره کرد که از زبان های برنامه نویسی مختلف مثل سی، سی پلاس پلاس، جاوا، پی اچ پی و ... پشتیبانی می کند.