از اونجا که کامپیوتر با 0 و 1 کار میکنه و درک، تحلیل و بررسی ۰ و ۱ برای انسان پیچیده است، زبانهای برنامهنویسی (Programming Languages) که یکی از اساسیترین قسمتهای دنیای کامپیوتر هستن برای تعامل سادهتر با سیستمها و سختافزار کامپیوتر به وجود اومدن. یک زبان برنامهنویسی صرفا یک قرارداد برای ارتباط با کامپیوتر هستش و کدی که با زبان فرضی Y نوشته شده، به واسطه نرمافزارهایی تحت عنوان کامپایلر (compiler) یا مفسر (interpreter) و محیطهای اجرایی (runtime environment)، به زبان ماشین (صفر و یک) تبدیل و اجرا میشه.
مفاهیم اولیهای که تو این مطلب بررسی میشه:
- کدنویسی؛ دستوراتی که به صورت متنی جهت اجرا تو کامپیوتر مینویسیم
- سطح زبان برنامهنویسی؛ یکی از ویژگیهای هر زبان برنامهنویسی
کدنویسی
ما با استفاده از زبانهای برنامهنویسی، دستورات متنی رو مینویسیم و کامپیوتر اون دستورات رو اجرا میکنه. حالا با استفاده از هر زبان برنامهنویسی، به وسیله ابزارها و سینتکس (نحو، syntax) یک زبان، این دستورات و کدها رو مینویسیم.
برای نوشتن کد از انواع ویرایشگرها (text-editor) مثل Notepad یا Sublime و نرمافزارهای "محیط یکپارچه توسعه" (Integrated Development Environment یا به اختصار IDE) استفاده میشه. این نرمافزارها سرعت و دقت تو کدنویسی رو افزایش و تا حدی امکان مدیریت، اجرا و خطایابی کد رو به ما میدن. اگر تا به حال کد دیده باشید متوجه رنگی بودنش شدید مثل کد پایین:
export default const example: () => void = function() {
let sum = 3 + 5;
// do something
return;
};
این رنگها در واقع دارن قسمتهای کوچکی از کد تحت عنوان توکن (token) رو به ما نشون میدن و صرفا برای ظاهر و دید بهتر نسبت به کد رنگ دارن.
یکی از بهترین IDEها برای شروع و حتی توسعه برخی از نرمافزارها، Visual Studio Code محصول مایکروسافت هستش که رایگانه و میتونید از سایت خودش دانلود کنید: صفحه دانلود VS Code
سطح زبان برنامهنویسی
زبانها از نظر نزدیک بودن به زبان ماشین (Machine، کامپیوتر) به ۳ سطح تقسیم میشن:
- سطح بالا (High level)؛ نزدیک به زبان انسان (معمولا انگلیسی)
- سطح پایین (Low level)؛ نزدیک به زبان ماشین (0 و 1)
- سطح متوسط (Mid level)؛ مابین زبانهای سطح بالا و پایین (دارای ویژگی از هر دو سطح)
توجه کنید که سطحبندی زبانها لزوما ارتباطی با سادگی یا راحت و سخت بودن یک زبان نداره بلکه صرفا از نظر نزدیک بودن به زبان انسان یا ماشین و دسترسی به سختافزار تعیین کننده است. اما به طور کلی کارهای پیچیده رو با زبانهای سطح بالا راحتتر میشه انجام داد.
زبانهای برنامهنویسی سطح بالا
این دسته از زبانها برای سهولت برنامهنویسها طراحی شدن و از ساختار و کلماتی شبیه به زبان انسان استفاده میکنن. زبانهایی مثل: Python, Java, C#, JavaScript
به طور کلی خوانایی خوبی دارن و بدون نیاز به جزئیات فنی سختافزار، امکان توسعه سریع رو به ما میدن و فرآیند توسعه و نگهداری رو راحتتر میکنن.
ویژگیها (به طور تقریبی):
- خوانایی بالا
- توسعه سریع
- عدم نیاز به دانش سختافزار
- وابسته نبودن به معماری سختافزار (اجرا در محیطهای مختلف)
- سرعت کمتر و عملکرد ضعیفتر نسبت به زبانهای سطح پایین
- محدودیت در دسترسی به سختافزار (به عنوان مثال حافظه RAM)
قطعه کدی از پایتون جهت دریافت شعاع دایره، محاسبه مساحت دایره (به طور تقریبی) و نمایش مساحت در خروجی:
radius = float(input("Enter the radius of the circle: "))
pi = 3.14159
area = pi * radius ** 2
print("The area of the circle is:", area)
زبانهای برنامهنویسی سطح پایین
زبانهای برنامهنویسی سطح پایین به برنامهنویس جزئیات زیاد و امکان تعامل مستقیم با سختافزار رو میدن. معمولا قسمتهای پایهای و جزئی یک سیستم رو با این زبانها مینویسن و بخاطر زمانبر بودن طراحی و پیچیدگی در جنبههای مختلف مثل مدیریت منابع، کمتر پیش میاد یه نرمافزار کامل یا روزمره (مثلا سایت فروشگاهی) رو با این زبانها طراحی کنن. مثلا خود نرمافزاری که قراره کد سطح بالاتر رو اجرا کنه با یه زبان سطح پایینتر مینویسن، همچنین یه زبان سطح پایین چون بدون واسطه به سختافزار دستور میده به طور کلی سرعت بالایی داره و برای ساخت سیستمعامل و بازیهای کامپیوتری از این زبانها استفاده میشه.
ویژگیها:
- سرعت اجرای بالا و عملکرد بهتر
- سرعت پایین توسعه
- دسترسی مستقیم به سختافزار و امکان تغییر مقادیر در حافظه RAM
- وابسته و محدود به معماری سختافزار (معمولا برای معماریهای مشخصی طراحی میشن)
- تا حدودی نیازمند دانش سختافزار و توجه به محدودیتها
قطعه کد زبان اسمبلی x86 برای جمع ۲ عدد و نمایش مجموع در خروجی:
section .data
number1 dw 5
number2 dw 3
result dw 0
section .text
global _start
_start:
; جمع دو عدد
mov ax, [number1]
add ax, [number2]
mov [result], ax
; نمایش نتیجه
mov ax, 4
mov bx, 1
mov cx, result
mov dx, 2
int 0x80
; اتمام برنامه
mov eax, 1
xor ebx, ebx
int 0x80
قطعه کدی از زبان Zig برای جمع ۲ عدد و نمایش مجموع در خروجی:
const std = @import("std");
pub fn main() !void {
const number1: i32 = 10;
const number2: i32 = 5;
const total = number1 + number2;
std.debug.print("Total: {}\n", .{total});
}
زبانهای برنامهنویسی سطح متوسط
این دسته از زبانهای برنامهنویسی ویژگیهایی از هر دو سطح دیگه رو دارن و خیلی نمیشه حد و مرزی رو براش مشخص کرد. اما معمولا زبانهای سطح بالایی که تا حدی امکان تعامل با سختافزار، مدیریت و تغییر مستقیم حافظه رو در اختیارمون قرار میدن سطح متوسط محسوب میشن.
قطعه کدی از C برای دریافت شعاع دایره، محاسبه مساحت و نمایش مساحت در خروجی:
#include <stdio.h>
#define PI 3.14159
float calculateArea(float radius) {
return PI * radius * radius;
}
int main() {
float radius;
printf("Enter the radius of the circle: ");
scanf("%f", &radius);
float area = calculateArea(radius);
printf("The area of the circle is: %.2f\n", area);
return 0;
}
به این ترتیب با کدنویسی و یکی از مهمترین ویژگیهای زبانهای برنامهنویسی آشنا شدیم که قبل از یادگیری هر زبان باید به این ویژگی و کاربردهای هر گروه فکر کرد. به عنوان مثال نرمافزارهای پیچیده و بزرگ یا پروژههای یک شرکت نوپا باید با زبانهای سطح بالا نوشته بشن. چون مدیریت بهتر، توسعه سریعتر و جامعه بزرگتری دارن؛ ولی اگر نرمافزار ساده باشه یا مثلا یک قسمت کوچکی از نرمافزار بزرگتر باشه، استفاده از زبانهای سطح پایین میتونه از نظر سرعت، عملکرد و امنیت بهتر باشه.