شناخت زبانهای برنامهنویسی و انواع آنها میتواند به انتخاب یک زبان خوب کمک کند. همچنین با درک بهتر سطوح زبانهای برنامهنویسی کدهای بهتری مینویسیم. در این آموزش ۳ دستهبندی رایجی که برای زبانهای برنامه نویسی وجود دارد را بررسی میکنیم. به ویژه در مورد سطوح زبانها صحبت کرده و سطحهای برنامهنویسی را یاد میگیریم.
برنامهنویسها به کمک زبان های برنامه نویسی دستورالعملهای یک برنامه کامپیوتری را مینویسند. این دستورها در نهایت باید روی سختافزار کامپیوتر اجرا شود. از آنجا که سختافزار فقط 0 و 1 را متوجه میشود، یک دستهبندی جامع برای زبان ها تعریف شده است.
البته ممکن است دستهبندیهای مختلفی را از دیدگاههای متفاوت ببینید؛ مثلاً زبان برنامهنویسی کودکان یا زبانهای آموزشی. در ابتدای آموزش درباره دو دستهبندی کاربر و حوزه توضیح کوتاهی میدهیم و در ادامه درباره سطوح زبانهای برنامهنویسی صحبت میکنیم.
فهرست محتوای آموزش
زبانهای برنامهنویسی
دستهبندیهای مختلفی برای زبانهای برنامهنویسی میتوان در نظر گرفت. سه دستهبندی رایج عبارتاند از:
- دستهبندی بر اساس کاربرد هر زبان
- دستهبندی بر اساس حوزه استفاده
- دستهبندی بر اساس سطح زبان برنامهنویسی
ابتدا به دو مورد اول اشارهای میکنیم تا متوجه مفهوم آنها شوید. ولی از آنجا که ممکن است هر کدام از این دو نیازمند بررسیهای جداگانهای باشد، پس از توضیح مختصرشان، در مورد دستهبندی سوم یعنی انواع سطحهای زبانهای برنامهنویسی صحبت میکنیم.
انواع کاربرد زبانهای برنامه نویسی
منظور از کاربرد استفاده و محل استفاده از کدهایی است که مینویسیم. ممکن است برخی زبانها مخصوص برنامههای ویندوزی یا لینوکسی باشند. برخی از آنها صرفاً برای توسعه نرمافزارهای موبایل بوده و برخی دیگر هم فقط برای توسعه وب هستند.
البته با پیشرفتهایی زیاد و خوبی که در حوزه فناوری اطلاعات به وجود آمده، زبانهای برنامهنویسیای که دارای چند کاربرد باشند هم وجود دارند. برای مثال با برنامهنویسی چند سکویی (Cross Platform) خواهید توانست برنامه خود را برای سیستم عاملهای مختلف خروجی بگیرید.
در یک حالت کلی، چهار کاربرد زیر را برای زبانهای برنامهنویسی میتوان در نظر گرفت:
- زبانهای برنامهنویسی تحت دسکتاپ برای توسعه نرمافزارهایی تحت سیستم عاملهای کامپیوتری مثل ویندوز، لینوکس یا مک استفاده میشود.
- زبانهای برنامهنویسی تحت وب برای توسعه وب و پیادهسازی سیستمهای آنلاین استفاده میشود. این نوع زبانها خود به دو دسته سمت کاربر (front end) و سمت سرور (back end) تقسیم میشوند.
- زبانهای برنامهنویسی موبایل برای توسعه اپلیکیشنهای موبایل استفاده میشود.
- زبانهای چند کاربردی که ممکن است برای دو یا هر سه کاربرد قبلی قابل استفاده باشند.
زبانهای خاص منظوره و همه منظوره
دستهبندی دیگر از نظر حوزه اجرا یا استفاده از زبانهای برنامهنویسی است. برخی زبانها فقط برای یک کار خاص استفاده میشوند. مثلاً از زبان HTML فقط برای ایجاد ساختار صفحات وب استفاده میشود. اما از برخی زبانهای دیگر میتوانیم به اهدا مختلفی استفاده کنیم. مثلاً از پایتون میتوان برای تحلیل داده، توسعه سمت سرور و … استفاده کرد.
زبانهایی که فقط برای یک هدف ایجاد شده و استفاده میشوند را زبانهای برنامهنویسی خاص منظوره یا خاص دامنه (Domain Specific) میگویند. زبانهایی مثل HTML برای ایجاد ساختار صفحات وب، SQL برای کار با پایگاه داده رابطهای و VHDL برای توصیف سختافزار از جمله این زبانها هستند.
زبانهایی که برای نوشتن نرمافزار در زمینههای متنوع به کار میروند را زبانهای عام منظوره یا همه منظوره (General Purpose) میگویند. زبانهای پرکاربرد معمولاً در این گروه قرار میگیرند؛ نظیر C ، PHP ، پایتون و جاوا.
در مجموع، زبانهای برنامهنویسی همه منظوره ساختار خاصی برای زمینه نرمافزاری خاصی ندارند ولی زبانهای خاص منظوره برای استفاده در حوزه خاصی به کار میروند.
سطوح زبانهای برنامه نویسی
اگر بخواهیم با یک دید دیگر به دستهبندی زبانهای برنامهنویسی نگاه کنیم، میتوان آنها را به دو سطح اصلی تقسیم کرد:
- زبانهای سطح پایین (Low Level)
- زبانهای سطح بالا (High Level)
زبان برنامه نویسی سطح پایین
زبانهای برنامهنویسی سطح پایین یا Low-Level Programming Languages زبانهایی هستند که به سطح ماشین خیلی نزدیک هستند. کدنویسی به این زبانها به صورت رشتههای صفر و یک یا کدهایی با درک پایین برای انسان انجام میشود.
به دلیل اینکه این زبانها نزدیک به سختافزار اجرا میشوند، در نوشتن الگوریتم برنامه در آنها، باید به جزئیات سختافزاری نیز توجه کنیم. برای مثال نحوه مدیریت حافظه، فراخوانی اطلاعات از حافظه روی پردازنده و نحوه کار با مقادیر بر روی رجیسترها (خانههای ذخیرهسازی در CPU) بر عهده برنامهنویس است.
ویژگیهای زبانهای سطح پایین
به دلیل اینکه در زبانهای سطح پایین باید شبیه ماشینها فکر کنیم، برنامهنویسی و درک الگوریتم یک برنامه سختتر است. همچنین اگر نیازی به تغییر روند مدیریت حافظه و پردازش آنها نداشته باشیم، استفاده از زبانهای سطح پایین میتواند دشواری مضاعفی در اجرای برنامهها ایجاد کند.
از طرف دیگر، به دلیل اینکه تقریباً به طور مستقیم با کامپیوتر صحبت میکنیم و فرآیندهای مدیریت و پردازشی را خودمان برنامهریزی میکنیم، سرعت اجرای چنین برنامههایی به مراتب بالاتر از زبانهای سطح بالاست که در ادامه با آنها آشنا میشویم.
در مجموع سه ویژگی مهم زبانهای برنامهنویسی سطح پایین عبارتاند از:
- نداشتن قابلیت انتزاع (abstraction) در تحلیل و نوشتن برنامه
- به زبان ماشین نزدیک است و درک آنها برای انسان سخت است.
- در زبان سطح پایین نیاز به مدیریت حافظه و مدیریت مستقیم پردازنده داریم.
زبان برنامهنویسی سطح بالا
در زبانهای برنامهنویسی سطح بالا یا High-Level Programming Languages به کمک کلمات و علائم خواناتری برای انسان کدنویسی میکنیم. زبانهای سطح بالا مشابه تفکر انسان نوشته میشوند. حتی در برخی زبانهایی که در این سطح وجود دارند، اگر جمله به جلمه کد را بخوانیم، مشابه آن است که داریم با یک انسان دیگر صحبت میکنیم.
قاعدتاً این زبانها به طور مستقیم توسط ماشین درک نمیشود. این کدها باید به کدهای سطح پایین تبدیل شده و سپس روی ماشین اجرا شود. به این کار ترجمه کد گفته میشود که در آموزش بعدی به آن میپردازیم.
ویژگیهای زبانهای سطح بالا
در اکثر زبانهای سطح بالا نیازی به مدیریت حافظه نداریم. صرفاً الگوریتم و منطق برنامه را نوشته و کاری به چگونگی اجرای کدها نداریم. در حقیقت زمانی که با یک زبان برنامهنویسی سطح بالا کد میزنیم، هدمان پیادهسازی یک نرمافزار است و چگونگی پردازش و نحوه مدیریت آن برایمان اهمیت کمتری دارد.
سادگی درک کدهای نوشته شده به صورت سطح بالا، یکی از ویژگیهای اصلی این زبانهاست. در بسیاری از موارد که نیاز به چگونگی مدیریت حافظه نداریم، زبانهای سطح بالا میتوانند سرعت کد نویسی ما را افزایش دهند. در این حالت بدون توجه به جزئیات غیر ضروری، میتوانیم الگوریتم خود را پیادهسازی کنیم.
اما به دلیل اینکه باید یک بار فرآیند ترجمه روی این کدها انجام شود و ممکن است نحوه مدیریت حافظه یا پردازشها در آن زبان برای الگوریتمی که ما نوشتهایم مناسب نباشد، معمولاً برنامههایی که با زبانهای برنامهنویسی سطح بالا نوشته میشوند، نسبت به زبانهای سطح پایین از سرعت کمتری برخوردارند.
سه ویژگی مهم زبانهای سطح بالا عبارتاند از:
- قابلیت انتزاع یا تجرید بسیار بیشتری دارند.
- به زبان انسان نزدیک است و توسط ماشین به طور مستقیم پردازش نمیشود.
- معمولاً در زبان سطح بالا نیازی به مدیریت حافظه و مدیریت مستقیم پردازنده نداریم.
انواع زبانهای برنامهنویسی از نظر سطح اجرا
تا به اینجا یاد گرفتیم زبانهای برنامهنویسی در دو سطح اصلی بالا و پایین قرار میگیرند. اگر بخواهیم دید دقیقتری نسبت به سطوح زبانهای برنامه نویسی داشته باشیم، سه سطح اجرا داریم.
همانطور که در تصویر زیر میبینید، کدهای سطح بالا به زبان اسمبلی تبدیل شده و کدهای اسمبلی به کد ماشین تبدیل میشود. در نهایت کدهای ماشین که به صورت صفر و یک هستند روی سختافزار کامپیوتر اجرا خواهند شد.
کد ماشین یا زبان صفر و یک
گفتیم که کامپیوتر فقط 0 و 1 یا کد باینری را میفهمد. کد ماشین رشتههای طولانی باینری (binary) است که توسط کامپیوتر اجرا میشوند. این کدها به طور مستقیم توسط انسان قابل درک نیست مگر اینکه یک متخصص باینری کد باشید!
با اینکه کدهای ماشین به صورت باینری (صفر و یک) است اما معمولاً آنها را بر مبنای 16 مینویسند. کد زیر یک کد ماشین است:
10110000 01100001
این دستور برای یک پردازنده x86 است. کد دستور (10110
) به معنای این است که باید مقدار بایت بعدی را درون یک ثبات (رجسیتر) که پس از کد مشخص میشود قرار دهد. سه بیت بعدی (000
) ثبات را مشخص میکند که در این پردازنده به نام AL شناخته میشود. 8 بیت دوم هم مقداری است که باید در رجیستر قرار بگیرد. (معادل عدد 97 در مبنای 2؛ بیشتر بخوانید درباره مبناهای متداول)
این کد باینری را در مبنای 16 مینویسیم تا خوانایی آن بهتر شود:
در این دستور، B0
به معنی انتقال عدد بعدی به ثبات AL است. 61
نیز معادل عدد 97 در نمایش مبنای 16 است.
زبان برنامه نویسی اسمبلی
زبانهای اسمبلی یک سطح بالاتر از زبان ماشین قرار میگیرند. البته همچنان به عنوان زبان سطح پایین شناخته میشود. دستورالعملهای زبان اسمبلی توسط انسان قابل خواندن است اما درک روند اجرای برنامه دشوار است.
اگر بخواهیم دستوری که در بالا به صورت کد ماشین نوشتیم را به زبان اسمبلی بنویسیم، دستور برنامهنویسی زیر را خواهیم داشت:
کلمه MOV
دستور و مقدار AL همان نام رجسیتر پردازنده است. مقدار 61h
هم مشخص میکند عدد 61 در مبنای هگزادسیمال (hex) باید درون این ثبات قرار بگیرد.
همانطور که میبینید کد اسمبلی نسبت به کد ماشین خوانایی بسیار بیشتری دارد. ولی اگر یک برنامه چند هزار خطی داشته باشیم، درک و تحلیل کدها کار سختی خواهد بود.
تفاوت کد ماشین و کد اسمبلی در این است که کد ماشین مستقیماً توسط CPU اجرا میشود و فقط حاوی مقادیر باینری 0 و 1 است. هر سری از پردازندهها مجموعه دستورالعمل کدهای ماشین خود را دارد و تمام برنامهها (چه اسمبلی چه سطح بالا) باید برای اجرا به این دستورالعملها تبدیل شوند.
زبان برنامهنویسی سطح بالا
زبانهای سطح بالا بسیار متنوع هستند. در این زبانها معمولاً شبیه به مکالمات انسانی کدنویسی میکنیم؛ البته با کمی تفاوت و علائم مخصوص.
برای مثال در اکثر زبانهای برنامهنویسی سطح بالا بخواهیم یک متغیر با مقدار 97 را تعریف کنیم، کافی است دستور زیر را بنویسیم:
x = 97
به همین سادگی! البته این تعریف از نظر عملکردی با کد اسمبلی بالا تفاوتهایی دارد که خارج از بحث ماست.
زبانهای سطح بالا روز به روز در حال پیشرفت هستند. اگر در تصویر ترتیب سطوح دقت کنید، خواهید دید که زبانهای برنامهنویسی High Level که با رنگ سبز مشخص شدهاند، خودشان به بخشهای مختلفی تقسیم شدهاند.
چند زبان سطح بالا (High Level)
بیشمار زبان سطح بالا با قابلیتها و کاربردهای متفاوت داریم! کافی است یک جستجو در حوزه مورد علاقه خود داشته باشید تا متوجه شوید چند زبان برنامه نویسی مختلف در زمینه مورد علاقهتان وجود دارد.
زبان C را مادر بسیاری از زبانهای برنامهنویسی میدانند چون زبانهای سطح بالای زیادی از C الگو گرفتهاند. زبانهای پایتون، PHP، جاوا، جاوا اسکریپت، سیشارپ، R، روبی، بیسیک (Basic و VB) از جمله زبانهای سطح بالای محبوب و نسبتاً پرطرفدار هستند.
میتوانید لیست تعداد زیادی از زبانهای برنامهنویسی را با دستهبندیهای مختلف در این صفحه از ویکیپدیا بررسی کنید.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش برنامه نویسی
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام ربع قرن قبل (سال۱۹۹۹) که کتاب آموزشی ++C میخوندم، زبان سطح میانی را هم مطرح میکردند و مثلا زبان C در رده زبانهای سطح میانی قرار میگرفت.
با سلام
بسیار مطالب ارزشمندی ارایه شد و بخصوص دوستانه که در ابتدای راه هستند حتما این مطالب را بدقت مطالعه نمایند.
استفاده کردیم و ممنون از شما
سلام
خوشحالیم که براتون مفید بوده غلامرضای عزیز. ممنون بابت لطفتون 🙂
عالی
دمتون گرم. تشکر
سلام وقتتون بخیر
امکان استفاده از مطالب این مقاله با ذکر منبع برای تهیه یک آموزش هست؟ ممنون میشم پاسخ بدید.
سلام
بله حتماً؛ اگر سایت هست، میتونید بهمون لینک بدید در غیراینصورت خوشحال میشیم با قرار دادن آدرس سایت یا نام مجموعه بهمون اشاره کنید.
با سلام
ممنون که چنین اجازه ای را می دهید. با ذکر منبع و درج لینک از مطالب ارزشمند سایت شما در آموزش استفاده می کنم.
سلام
خواهش میکنیم. لذت میبرم که با همکاری در فضای آموزش و ارجاع به آموزشهای مشابه بتونیم یادگیرنده رو با منابع بیشتر و طرز تفکرهای مختلف آشنا کنیم. ممنون از شما که کپی رایت رو رعایت میکنین 🙂
ممنون. عکس سطح ها که گذاشتین عالی بود
خیلی خوشحالم که این آموزش برات کاربردی بوده محمد عزیز 🙂