برنامهنویسی بکاند یعنی نوشتن بخشی از نرمافزار که کاربر مستقیم نمیبیند: کدی که روی سرور اجرا میشود، درخواستها را میگیرد، داده را در پایگاهداده ذخیره و بازیابی میکند، قوانین کسبوکار را اجرا میکند و نتیجه را برمیگرداند. وقتی در یک فروشگاه اینترنتی دکمهی «پرداخت» را میزنید، ظاهر دکمه کار فرانتاند است؛ بررسی موجودی، ثبت سفارش و ارتباط با درگاه پرداخت کار بکاند.
اگر میپرسید «برنامهنویسی را از کجا شروع کنم»، جواب کوتاه برای مسیر بکاند این است: یک زبان (PHP یا Python) را انتخاب کنید، مفهوم HTTP را بفهمید، با SQL و یک پایگاهداده کار کنید، سپس یک فریمورک یاد بگیرید و در کنارش git و کمی لینوکس. در ادامه همین مسیر را مرحلهبهمرحله، با یک پروژهی کوچک برای هر مرحله، باز میکنیم.
بکاند و فرانتاند؛ تفاوت به زبان ساده
یک رستوران را در نظر بگیرید. سالن، منو و گارسون همان چیزی است که مشتری میبیند؛ این فرانتاند است. آشپزخانه، انبار و صندوق جایی است که کار اصلی انجام میشود؛ این بکاند است. گارسون سفارش را به آشپزخانه میبرد و غذا را برمیگرداند؛ این همان API است که فرانت و بک را به هم وصل میکند.
| فرانتاند | بکاند | |
|---|---|---|
| کجا اجرا میشود | مرورگر یا اپ موبایل | سرور |
| ابزار رایج | HTML، CSS، JavaScript | PHP، Python، Go، Node.js و SQL |
| دغدغهی اصلی | ظاهر، تجربهی کاربری، سرعت صفحه | درستی داده، امنیت، کارایی، پایداری |
| خطای رایج | دکمهای که کج نمایش داده میشود | سفارشی که دو بار ثبت میشود |
یک نکتهی مهم: بکاند فقط «کد سرور» نیست. بخش بزرگی از کار، فکر کردن دربارهی داده است: چه چیزی ذخیره شود، چه کسی اجازهی دیدنش را دارد و اگر دو درخواست همزمان برسد چه اتفاقی میافتد.
مسیر برنامهنویسی بکاند در هفت مرحله
ترتیب این مراحل مهم است، ولی لازم نیست هر مرحله را «کامل» کنید تا سراغ بعدی بروید. کافی است آنقدر بلد باشید که پروژهی تمرینی همان مرحله را بسازید.
۱. یک زبان، فقط یکی
بزرگترین وقتتلفکن مبتدیها جابهجا شدن بین زبانهاست. PHP و Python هر دو برای شروع بکاند انتخاب خوبیاند؛ مقایسهی دقیقشان را در مقالهی PHP یا Python برای بکاند نوشتهایم. یکی را انتخاب کنید و دستکم چند ماه پایش بمانید.
در این مرحله اینها را یاد بگیرید: متغیر و نوع داده، شرط و حلقه، تابع، آرایه یا لیست و دیکشنری، کار با فایل، مدیریت خطا و مفهوم کلاس و شیء.
پروژهی تمرینی: یک برنامهی خط فرمان برای مدیریت کارهای روزانه که کارها را در یک فایل JSON ذخیره میکند؛ افزودن، علامت زدن و حذف.
۲. HTTP و وب از نگاه سرور
هر بکاندی در نهایت به درخواست HTTP پاسخ میدهد. باید بدانید متدهای GET و POST و PUT و DELETE چه فرقی دارند، کدهای وضعیت مثل 200 و 404 و 500 یعنی چه، هدر و کوکی چیست و JSON چطور رد و بدل میشود. مقالهی API چیست نقطهی شروع خوبی است.
پروژهی تمرینی: بدون فریمورک، یک صفحهی ساده بسازید که فرمی را بگیرد و پیام «سلام، فلانی» برگرداند. بعد همان را طوری تغییر دهید که JSON برگرداند و با curl تستش کنید.
۳. پایگاهداده و SQL
اینجا جایی است که بکاند جدی میشود. با یک پایگاهدادهی رابطهای مثل MySQL یا PostgreSQL شروع کنید و SQL را خودتان بنویسید، حتی اگر بعداً ORM کار را برایتان انجام دهد. SELECT و JOIN و GROUP BY، کلید اصلی و خارجی، ایندکس و تراکنش حداقلهایی است که باید بلد باشید. برای انتخاب پایگاهداده، مقالهی کدام پایگاهداده را انتخاب کنیم را ببینید.
پروژهی تمرینی: کتابخانهی شخصی؛ جدول کتاب، نویسنده و امانت. گزارش بگیرید: «کتابهایی که بیش از دو هفته امانت ماندهاند».
۴. یک فریمورک
حالا که میدانید زیر کاپوت چه خبر است، فریمورک را یاد بگیرید: Laravel برای PHP، یا Django و FastAPI برای Python. فریمورک مسیریابی، اعتبارسنجی، احراز هویت، مهاجرت پایگاهداده و خیلی چیزهای دیگر را آماده میدهد. چون مرحلههای قبل را رد کردهاید، میفهمید هر کدام چه مشکلی را حل میکند.
پروژهی تمرینی: یک وبلاگ ساده با ثبتنام و ورود، نوشتن و ویرایش پست و صفحهبندی. بعد یک API برای همان پستها اضافه کنید.
۵. git از روز اول
git را نگذارید برای آخر. از همان پروژهی اول هر تغییر را commit کنید و کدتان را روی GitHub بگذارید. دستورهای ضروری را در مقالهی دستورهای اصلی git جمع کردهایم. وقتی تست نوشتید، اجرای خودکارشان با CI/CD و GitHub Actions قدم بعدی است.
۶. مقدمات لینوکس
تقریباً همهی سرورها لینوکساند. لازم نیست مدیر سیستم شوید، ولی باید بتوانید با ترمینال کار کنید، فایل ویرایش کنید، لاگ بخوانید و سرویس را ریاستارت کنید. دستورهای پرکاربرد لینوکس برای سرور و اتصال به سرور با کلید SSH همین حداقلها را پوشش میدهند.
پروژهی تمرینی: یک ماشین مجازی Ubuntu روی سیستم خودتان بالا بیاورید و پروژهی وبلاگ را رویش اجرا کنید.
۷. استقرار (deployment)
پروژهای که فقط روی لپتاپ شما اجرا میشود هنوز تمام نشده است. یک VPS ارزان بگیرید (فرقش با هاست اشتراکی را در این مقاله ببینید)، طبق چکلیست ساعت اول سرور لینوکس امنش کنید، دامنه را وصل کنید و SSL رایگان بگیرید. اگر خواستید، اجرای برنامه با Docker را هم امتحان کنید.
پروژهی تمرینی: همان وبلاگ را روی اینترنت ببرید، با دامنه و HTTPS، و یک پشتیبانگیری خودکار از پایگاهداده برایش بگذارید.
بعد از هفت مرحله چه؟
وقتی این مسیر را یک بار رفتید، موضوعهای بعدی خودشان را نشان میدهند، معمولاً به این ترتیب:
- تستنویسی: تست خودکار برای منطق اصلی برنامه.
- کش و صف: وقتی برنامه کند شد، سراغ Redis، کش در لاراول و صف برای کارهای کند میروید.
- امنیت: SQL injection، XSS، CSRF، نگهداری درست رمز عبور و مدیریت دسترسی.
- طراحی سیستم: وقتی یک سرور کافی نیست، چه باید کرد.
تلههای رایج مبتدیها
- آموزشبازی بیپایان: دیدن ده دورهی ویدیویی بدون ساختن چیزی. قاعدهی سرانگشتی: هر ساعت آموزش، دستکم دو ساعت کد زدن.
- پریدن به فریمورک بدون پایه: کسی که SQL بلد نیست، با ORM هم کوئریهای کند و پرتعداد مینویسد و نمیفهمد چرا.
- عوض کردن زبان با هر ویدیوی جدید: مفاهیم بکاند بین زبانها مشترک است. زبان دوم را بعد از یک پروژهی واقعی یاد بگیرید، نه قبلش.
- ترس از خطا: پیام خطا را کامل بخوانید. بیشتر وقتها دقیقاً میگوید مشکل کجاست.
- کپی کردن کد بدون فهم: چه از Stack Overflow و چه از هوش مصنوعی. ابزارهای هوش مصنوعی کمک بزرگیاند، ولی کدی که نمیفهمید را نمیتوانید عیبیابی کنید.
- شروع با پروژهی خیلی بزرگ: «یک دیجیکالای کامل» پروژهی اول نیست. پروژهای انتخاب کنید که در دو هفته تمام شود. پیش از کد زدن، مسئله را بنویسید؛ این مقاله دلیلش را توضیح میدهد.
- نادیده گرفتن git و استقرار: نمونهکاری که فقط روی سیستم خودتان اجرا میشود، برای کسی قابل دیدن نیست.
چکلیست خودارزیابی
اگر بتوانید این کارها را بدون کمک انجام دهید، پایهی بکاند را دارید:
- یک API بنویسید که داده را از پایگاهداده بخواند، اعتبارسنجی کند و JSON برگرداند.
- یک کوئری با
JOINوGROUP BYبنویسید و بگویید کدام ستون ایندکس میخواهد. - ثبتنام و ورود امن پیاده کنید، با رمز عبور هششده.
- پروژه را روی GitHub بگذارید، با تاریخچهی commit معنادار.
- برنامه را روی یک سرور لینوکس با دامنه و HTTPS اجرا کنید.
- وقتی برنامه خطای 500 میدهد، لاگ را پیدا کنید و علت را بفهمید.
جمعبندی
بکاند یعنی منطق، داده و سرور؛ بخشی که دیده نمیشود ولی همهچیز به آن تکیه دارد. برای شروع، یک زبان انتخاب کنید و بمانید، HTTP و SQL را جدی بگیرید، بعد فریمورک یاد بگیرید و از روز اول git را کنار کارتان داشته باشید. هر مرحله را با یک پروژهی کوچک و تمامشده ببندید و آخر کار، دستکم یک پروژه را واقعاً روی اینترنت ببرید. این مسیر سریع نیست، ولی هر قدمش روی قدم قبلی ساخته میشود.