نقشه راه برنامه نویسی بک اند وب سایت در سال ۱۴۰۲
![نقشه راه برنامه نویسی بک اند](https://devedoping.ir/wp-content/uploads/2022/02/backend-roadmap-cover-01.jpg)
اگر قصد یادگیری بکاند وبسایت را دارید و میخواهید ببینید باید از کجا شروع کنید و چه زبانها و تکنولوژیهایی را بیاموزید، این نقشه راه برنامه نویسی بک اند را از دست ندهید. گام برداشتن با چشمانی باز میتواند باعث سرعتبخشی به موفقیت شما در مسیر برنامهنویسی بکاند شود.
فهرست مطالب
بک اند وب سایت چیست؟
پیادهسازی و کدنویسی یک وبسایت به دو بخش فرانتاند (Frontend) و بکاند (Backend) تقسیم میشود. آنچه کاربر مستقیماً میبیند و با آن در مرورگر خود تعامل دارد، فرانتاند است و کدهایی در سمت سرور (Server) قرار دارد و اجرا میشود، پایگاهدادهها و… بکاند وبسایت را تشکیل میدهد.
آیا برای یادگیری بکاند باید فرانتاند هم بلد بود؟
پاسخ این سوال هم بله هست و هم خیر. اما چطور؟
در ادامه خواهیم گفت که در نقشه راه برنامه نویسی بک اند، یادگیری ابتداییات فرانتاند لازم است و توصیه میشود. اما این به معنی تسلط کامل و حرفهای روی مباحث فرانت نیست.
شروع یادگیری بکاند با مقدمات فرانتاند
به عنوان یک برنامهنویس بکاند، نیاز دارید که خروجی کار خود را در جایی غیر از ترمینال ببینید. مثلاً شما پایگاهدادهای ایجاد کردهاید که اطلاعات یک سری کتابهایی را در خود ذخیره کردهاست. نمایش لیست کتابها همراه با جزئیات، در ترمینال IDE یا Code Editor ناخوانا و سخت است. پس نیاز اول شما نمایش درست اطلاعات سایت در مرورگر است. از طرف دیگر نیازمند این هستید که تغییراتی در پایگاهداده ایجاد کنید. مثلاً کتابی را اضافه یا حذف نموده یا اطلاعات نویسنده یا انتشارات آن را بهروزرسانی کنید. برای این کار هم نیاز به فرم و دکمه ثبتی در مرورگر دارید.
هرچند همه این کارها را میتوان به صورت فراخوانی توابع انجام داد، اما داشتن حداقل دانشی از مباحث فرانتاند، این فرآیند را برای شما سادهتر میکند. ضمن این که در آینده و در تعامل با برنامهنویسان فرانتاند، درک بهتر و همکاری نتیجهبخشتری خواهید داشت.
برنامهنویس بکاند باید چقدر فرانتاند بلد باشد؟
هدف ما حداقل دانش فرانتاند است. پس به عنوان برنامهنویس بکاند، کافیست با زبانهای HTML و CSS آشنایی اولیهای داشته باشید. آنچه که در نقشه راه برنامه نویسی بک اند با فرانتاند مشترک است، در نقشه راه برنامه نویسی فرانت اند آورده شده است. در مطلب مورد نظر، تا سر عنوان «یادگیری زبان برنامهنویسی JavaScript» را بخوانید و بعد از آن به ادامه این نوشته برگردید.
گام نخست؛ انتخاب زبان برنامهنویسی
بعد از یادگیری کلیات زبانهای HTML و CSS به دلایلی که بالاتر گفته شد، نوبت میرسد به انتخاب یک زبان برنامهنویسی سمت سرور. زبانی که به شما کمک میکند، تمام مغز و مکانیسم پشت یک وبسایت را طراحی و اجرا کنید، با دیتابیس (پایگاه داده) تعامل داشته باشید، API بنویسید، کاربران را هویتسنجی کنید و نهایتاً به گرفتن اطلاعات از سمت فرانتاند و تحویل دادهها به مرورگر کاربر (Client) بپردازید.
کدام زبان برنامهنویسی را برای بکاند وبسایت انتخاب کنیم؟
در اکثر پروژههای وب، چه سایت ساده باشد چه فروشگاهی یا حتی وباپلیکیشن، نوع زبان انتخابی شما برای کدنویسی بکاند، تفاوت زیادی ایجاد نمیکند. البته درصد پایینی از پروژهها هستند که پیچیدگیهای خاص خود را داشته یا نیازمند ویژگیهای خاصی از یک زبان برنامهنویسی خاص هستند. تنها در این موارد است که انتخاب زبان و تکنولوژی پیادهسازی، واقعاً چالش برانگیز میشود. پس اگر دنبال شروع یادگیری هستید، میتوانید هر یک از زبانهای برنامهنویسی سمت سرور زیر را انتخاب کنید:
- JavaScript (Node.js)
- Python
- Rust
- #C
- Java
- PHP
- Rust
- Go
- Ruby
گام دوم؛ یادگیری فریمورک زبان برنامهنویسی
وقتی یک زبان برنامهنویسی بکاند را به خوبی یاد گرفتید، متوجه میشوید برای انجام کارهای روتین، مثل امنیت، احراز هویت، ساخت جداول پایگاهداده، ارسال اطلاعات با فرمت درست و استاندارد به فرانتاند و… نیازمند نوشتن کدهای زیاد و تکراری هستید. فریمورکهای زبانهای برنامهنویسی به شما این امکان را میدهد تا برای ساخت کالسکه، مجبور به اختراع دوباره چرخ نباشید و همه تمرکز خود را روی محصول مورد نظر بگذارید. فریمورکها بر خلاف کتابخانههای هر زبان، به شما چارچوب ساخت و توسعه مشخصی میدهند.
یادگیری یک فریمورک از زبانی که انتخاب کردهاید، ضروری است. این تفکر که من خودم با امکانات خام یک زبان، همه چیز را شخصاً کدنویسی میکنم، از اساس اشتباه است و آینده شغلی خوبی را برای شما به ارمغان نمیآورد.
فریمورک مرتبط با هر زبان برنامهنویسی چیست؟
برای هر زبان برنامهنویسی، تعدادی فریمورک ساخته و معرفی شدهاست. در اینجا به معرفی بهترین و محبوبترین فریمورکهای هر زبان میپردازیم:
- Laravel (PHP)
- Spring (Java)
- Ruby on Rails (Ruby)
- Express (Node.js)
- Django (Python)
- Flask (Python)
- Blazor (C#)
یادگیری پایگاه داده یا Database
پایگاههای داده به دو دستهبندی کلی ۱- Relational و ۲- NoSQL/Cloud تقسیمبندی میشوند که بهتر است کار با هر دو نوع پایگاه داده را بلد باشید.
در نوع اول یعنی Relational میشود به موارد زیر اشاره کرد:
- PostgreSQL
- MySQL
- Azure Cloud SQL
- MS SQL
در نوع NoSQL و Cloud، دیتابیسهای زیر را داریم:
- MongoDB
- Airtable
- AWS
- FaunaDB
- Firebase
یادگیری API
API مخفف Application Programming Interface یا «واسط برنامهنویسی نرمافزار کاربردی» یک سری کد واسط است بین یک نرمافزار یا سیستمعامل و برنامههایی که از آن درخواست سرویسی دارند. برای شرح بهتر این موضوع فرض کنید شما یک سرویس اطلاعرسانی ساختهاید که مثلاً قیمت روز خودرو را در پایگاه داده خود به صورت روزانه، آپدیت میکنید. تعدادی سایت و اپلیکیشن نیاز دارند که به اطلاعات شما دسترسی داشته باشند. اینجا شما به عنوان یک برنامهنویس بکاند باید با کدنویسی، API هایی رو ارائه بدهید تا آن اپلیکیشنها به قیمت خودروها با فراخوانی یک آدرس اینترنتی دسترسی داشته باشند. معمولاً مشتری یا Client باید در سایت شما ثبتنام کند و با کد احراز هویت مشخصی (به صورت رایگان یا پولی) اطلاعات مورد نظر را دریافت کند.
به عنوان مثال از API میشود به آدرس زیر اشاره کرد که نیاز به احراز هویت خاصی هم ندارد و شما اگر این آدرس را به هر شکلی درخواست کنید (مثلا در مرورگر باز کنید) اطلاعات آیپی شما و موقعیت جغرافیایی درخواستدهنده را با فرمت JSON نمایش میدهد:
احراز هویت
مرحله مهم بعدی در مسیر توسعه بکاند، پیادهسازی احراز هویت است. به عنوان برنامهنویس، باید مدیریت درستی روی درخواستهایی که سمت سرور میآید داشته باشیم. هر کاربری (بدون ثبتنام و به عنوان مهمان) و با هر سطح دسترسی (مشتری یا دنبالکننده) نمیتواند به آدرسهایی دسترسی داشته باشد که مثلاً مدیر سایت یا مسئول فروشگاه به آن دسترسی دارد. اینجا بحث احراز هویت مطرح میشود.
ابزار و روشهای احراز هویت وب
یادگیری Blockchain و Crypto
یکی از مباحث جذاب و آیندهدار، قطعاً موضوع بلاکچین و کریپتو هست که میتوانید به عنوان برنامهنویس بکاند به سراغش بروید. توجه داشته باشید که این مهارت جزء نقشه راه اصلی نیست ولی اگر قصد دارید آن را یاد بگیرید باید تا اینجای راه، طبق نقشه راه برنامهنویسی بکاند پیش آمده باشید.
سیستمهای مدیریت محتوا (CMS)
همانطور که از اسم CMS یا همان Content Management System مشخص است، وظیفه این سیستم، مدیریت محتواست. سیستمهای مدیریت محتوا، نرمافزارهایی هستند که کمک میکنند بدون دانش فنی، کاربران بتوانند محتوای یک سایت را بروزرسانی و مدیریت کنند. اما این فقط انتهای ماجراست! اگر بخواهیم به عنوان برنامهنویس بکاند، در توسعه CMSها مشارکت کنیم، میتوانیم بعد از یادگیری زبان برنامهنویسی مربوط به آن، نسبت به توسعه و شخصیسازی یک سیستم مدیریت محتوا اقدام کنیم.
لیست سیستمهای مدیریت محتوا
گام آخر و پایانی: Deployment و DevOps
هر چند تخصص DevOps خودش یک دنیای مجزا و نقشه راه مختص خودش را دارد، اما حداقل چیزی که از یک برنامهنویس بکاند انتظار میرود، این است که چیزی که خودش ساخته و کدنویسی کرده را بتواند به روی سرور Deploy (مستقر) کند. بنابراین پیشنهاد میشود، موارد زیر را به صورت کلی یاد گرفته و در صورتی که علاقهمند به DevOps بود، در شاخههای مربوطه، عمیق شود.
هاستینگ
اولین چیز در زمینه دیپلوی کردن، کار با هاستها و نرمافزارهای مدیریت هاست است. علاوه بر سرویسهای هاستینگ شرکتهای معتبر و معروف، آشنایی با موارد زیر هم میتواند مفید باشد:
- Netlify
- GitHub Pages
- AWS
- Azure
- Vercel
- Heroku
- Linode
وبسرورها
وبسرورها، نرمافزارهایی برای مدیریت سرور هستند. از کانفیگ کردن سرور گرفته تا مدیریت درخواستها و پاسخها (request و response) همه بر عهده وبسرور است. اگر وبسرور روی هاست نصب نباشد، هیچ سایتی نمیتوان روی آن بالا آورد. در زیر لیست مهمترین وبسرورها را میبینید:
- Nginx
- Apache
- MS IIS
تست نرمافزار
یکی دیگر از مهارتهای ضروری، تست نرمافزار است که تا جای امکان و در گام نخست، بهتر است به صورت اتوماتیک انجام شود. یعنی اول، خود نرمافزار، خودش را تست کند و پس از پاس کردن همه تستها، اقدام به deployment شود. هرچند بعد از این مرحله، لازم است توسط کاربر واقعی و ترجیحاً تستر غیربرنامهنویس، نرمافزار ما تست شود.
انواع تست
- Unit Test
- Integration Test
- Functional Test
بدون سرور (FaaS)
Function به عنوان یک سرویس (FaaS) دستهای از خدمات رایانش ابری است که بستری را فراهم میکند که به مشتریان اجازه میدهد تا عملکردهای برنامه را بدون پیچیدگی ایجاد و نگهداری زیرساختی که معمولاً با توسعه و راهاندازی یک برنامه مرتبط است توسعه، اجرا و مدیریت کنند. (منبع: ویکیپدیا)
در این زمینه میشود به AWS Lambda و Netlify اشاره کرد.
مجازیسازی (Virtualization)
یکی از مشکلاتی که گریبان برنامهنویس را میگیرد این است که آنچه در سیستم خودش تست کرده، با چیزی که در سرور بارگذاری شده است تفاوت دارد. اروری را در سرور میگیریم که در لوکال با آن مواجه نشدیم.
مشکل دیگر در زمینه Deployment این است که مثلاً برای نصب یک سرور و نرمافزارهای مورد نیازش، معمولاً باید وقت زیادی صرف کنیم و کارهای تکراری انجام دهیم.
برای رفع این دو مشکل، باید به Virtualization روی بیاوریم. از ابزارهای این کار میشود به:
- Docker
- Kubernetes
اشاره کرد.
مباحث تکمیلی دوآپس
- Load Balancing, Monitoring, Security
- GitHub Actions
- SSL Certificate
- SSH
پسورد فایل : ندارد گزارش خرابی لینک
مطالب زیر را حتما مطالعه کنید
8 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام و عرض خسته نباشید.
میخواستیم بدونیم تو کدوم مرحله باید وارد بازار کار بشیم و کار آموزی رو شروع کنیم
سلام حسن عزیز!
سلامت باشید. این که نحوه ورودتون به بازار کار چگونه باشه (با پروژه یا کارآموزی یا استخدام مستقیم) بستگی به میزان تخصص و شرایط شما داره.
اگر قصد کارآموزی دارید، میتوانید از صفر صفر واردش بشید و در حین کار یاد بگیرید. یا بعد از این که کمی از زبانها سر در آوردید، زمان خوبی برای شروع کارآموزیست. اما اگر مهارتهای شما بیش از اینهاست، کارآموزی (بدون حقوق یا با حقوق بسیار کم) مناسب نیست. بهتر است به سطح جونیور (تازهکار) برسید و با حداقل حقوق مناسب، استخدام بشید.
با این حال، حضور در شرکتهای بزرگ و همکاری با تیمهای نرمافزاری خبره، میتونه مسیر خیلی خیلی خوبی باشه برای شما. پس در شرایط این چنینی، در صورتی که مقدور بود، حتما به هر نحوی وارد مجموعه شده و حداقل ۳ تا ۶ ماه کارآموزی کنید و بعد، تقاضای حقوق کنید.
برا تبدیل شدن به یه برنامه نویس جونیور باید اول تمامی این موارد رویاد بگیریم؟
خیر. یک زبان برنامهنویسی بکاند رو یاد بگیرید و مقدمات یک فریمورک رو. کار با یک دیتابیس رو یاد بگیرید. گیت هم بلد باشید.
سلام واسه طراحی cms چه راه هایی هست؟
سلام. راه پیجیدهای نداره 🙂 یک سیستمی که دیتابیس و بکاند مناسب و فرانتاند به همراه پنل مدیریت محتوا داشته باشه کافیه. حالا با هر زبان و تکنولوژیای. چیزی که cms رو خیلی رشد میده اوپنسورس بودن و حضور در کامیونیتی برنامهنویساست. البته باید به قدری جذابیت ایجاد کنه تا عدهای ازش استفاده کنن و رشدش بدن. مگر این که آدم بخواد شخصی و بیزینسی باهاش کار کنه.
سلام،
اگر بخوام بصورت رایگان و برای تقویت خودم پروژه بگیرم، شما کجا رو پیشنهاد میدید؟
سلام حسین عزیز. اگر دنبال تقویت خودتون هستید پروژه تمرینی در سایتهای خارجی به وفور پیدا میشه. میتونید استفاده کنید. یا در گیتهاب بگردید و پروژههای خوب و ترند رو بازنویسی کنید.