Backend
Backend توسعه دهنده ی مدرن در سال 2018 ، توسعه ی وب امروزه کاملا متفاوت از چند سال گذشته است؛موارد مختلف بسیاری وجود دارد که میتواند به سادگی هر فردی که وارد توسعه ی وب میشود را متحیر کند.
این یکی از دلایلی بود که ما تصمیم گرفتیم این راهنماهای تصویری گام به گام که تصویری بزرگتر را نشان داده و برای اینکه به هر فرد ذهنیتی روشن در رابطه با اینکه چه چیزهایی را برای حضور در نقش هایی مشخص در توسعه ی وب باید دنبال کنند تهیه کنیم.
Backend کیست؟
Backend به طور کلی به عمق برنامه ای که در سرور اجرا میشود اشاره میکند که بعضی از افراد آن از آن به عنوان سرور-ساید یا همان “server-side” یاد میکنند. Backend بیشتر روی ارسال اطلاعات صحیح به مرورگر تمرکز میکند . آن تکه ای از یک توده ی یخ شناوری است که زیر سطح آب قرار دارد . چیز های زیادی نیاز دارند که به صورت صحیح ارسال شوند تا front end بتواند آن را نمایش دهد .
ممکن است که از نظر ما گوگل یک موتور جستجوی سر راست باشد . اما آن ها یک ارتش از مهندسین را استخدام کرده اند که مطمئن شوند تمامی قطعاتی که شما آنها را نمیبینید به صورت صحیح کار میکنند با خیر .
میتوانید نقشه ی دقیق و با جزئیات را در تصویر زیر بیابید، با این حال هر مرحله در تصویر زیر را توضیح خواهم داد.
Backend
مرحله 1- یک زبان را یاد بگیرید.
هنگامیکه به انتخاب یک زبان میرسیم، هزاران گزینه وجود دارد.
من آنها را به دسته هایی تقسیم کرده ام تا تصمیم گیری را برای شما آسان تر کنم.
برای افراد مبتدی که به تازگی در حال ورود به توسعه ی backend هستند، پیشنهاد میکنم که هر یک از زبان های اسکریپت نویسی را انتخاب کنید.
چراکه تقاضای بسیاری داشته و به شما این امکان را میدهند که به سرعت رشد کنید.
اگر مقداری دانش frontend دارید، احتمالا Node.js را ساده تر خواهید یافت بعلاوه اینکه بازار کار بزرگی برای آن وجود دارد.
اگر از قبل توسعه ی backend کار میکردید و برخی زبان های اسکریپت نویسی را میشناسید، به شما پیشنهاد میدهم زبان اسکریپت نویسی دیگری انتخاب نکرده و یکی از موارد بخش “تابعی” یا “چند پارادایمی” را انتخاب کنید.
برای مثال، اگر از قبل PHP یا Node.js کار میکردید، سراغ Python یا Ruby نروید، در عوض Erlang یا Golang را امتحان کنید.
قطعا کمک خواهد کرد که تفکر خود را گسترش داده و ذهن خود را رو به افق جدیدی باز کنید.
مرحله 2- آموخته های خود را تمرین کنید
هیچ روش بهتری از تمرین برای یادگیری وجود ندارد.
هنگامیکه زبان خود را انتخاب کردید و درک پایه از مفاهیم را پیدا کردید، آنها را به کار ببندید.
هر چقدر میتوانید برنامه های کوچک بسازید. در اینجا چند ایده برای شروع شما آورده شده است.
- تعدادی فرمان که خود را در حال استفاده از آنها در بش (bash) مییابید را پیاده سازی کنید، برای مثال سعی کنید کارکرد ls را پیاده سازی کنید
- فرمانی بنویسید که پست های ردیت (reddit) را واکشی و در /r/programming به شکل یک فایل JSON ذخیره کند
- فرمانی بنویسید که یک ساختار دایرکتوری به فرمت JSON به شما بدهد، برای مثال jsonify dir-name برای دادن یک فایل JSON به همراه ساختار در dir-name
- فرمانی بنویسید که JSON را از مرحله ی بالا خوانده و ساختار دایرکتوری ایجاد کند
- به چند مورد از کارها و وظایفی که هر روزه انجام میدهید فکر کرده و سعی کنید آنها را ماشینی (اتومات/خودکار) کنید.
مرحله 3- Package Manager (مدیریت پکیج ها) را یاد بگیرید.
هنگامی که مبانی زبان را درک کرده و چند برنامه ی نمونه ساختید، یاد بگیرید که چگونه از package manager برای زبانی که انتخاب کردید استفاده کنید.
package managerها به شما کمک میکنند تا از کتابخانه های خارجی در برنامه های خود استفاده کنید و کتابخانه های خود را برای استفاده ی دیگران توزیع کنید.
اگر PHP انتخاب کردید باید Composer را یاد بگیرید، NPM یا Yarn برای Node.js، Pip برای Python و RubyGems برای Ruby وجود دارند.
انتخاب شما هرچه که بوده، بروید و یاد بگیرید چگونه از package manager مربوط به آن استفاده کنید.
مرحله 4- استانداردها و بهترین روشها
هر زبان استانداردها و بهترین روشهای انجام کارهای خود را دارد.
آنها را برای زبان انتخابی خود مطالعه کنید.
برای مثال، PHP-FIG و PSRها برای PHP. برای Node.js راهنماهای جامعه محور بسیاری وجود دارد و برای زبان های دیگر نیز به همین صورت است.
مرحله 5- امنیت
حتما در رابطه با بهترین روش ها برای امنیت مطالعه کنید.
راهنماهای OWASP را خوانده و مسائل امنیتی مختلف و نحوه ی اجتناب از آنها در زبان انتخابی خود را درک کنید.
مرحله 6- تمرین
حال که مبانی زبان، استانداردها و بهترین روشها، امنیت و نحوه ی استفاده از package manager را میدانید، بروید و یک پکیج ایجاد کرده و برای استفاده ی دیگران آن را توزیع کنید، و اطمینان حاصل کنید که از استانداردها و بهترین روش هایی که تا به اینجا یاد گرفته اید استفاده کنید.
برای مثال اگر PHP را انتخاب کرده اید، باید آن را در Packagist منتشر کنید، اگر Node.js را انتخاب کرده اید، باید آن را در بایگانی Npm (Npm registry) منتشر کنید و برای دیگر زبان ها نیز به همین ترتیب.
هنگامیکه آن را انجام دادید، تعدادی پروژه در Github جستجو کرده و تعدادی درخواست (pull request) در برخی پروژه ها باز کنید.
چند ایده برای این کار:
- بهترین روشهایی که یاد گرفته اید را بازسازی و پیاده سازی کنید.
- نگاهی به مسائل باز انداخته و سعی کنید آنها را حل کنید.
- هر کارکرد اضافی که میتوانید بیفزایید.
مرحله 7- در رابطه با آزمون بیاموزید
انواع بسیار مختلفی از آزمون برای آزمایش وجود دارد.
به درکی از اینکه اهداف این انواع چیست برسید.
اما در حال حاضر نحوه ی نوشتن آزمون های واحد (Unit) و آزمون های تلفیق (Integration) را در برنامه ی خود بیاموزید.
همچنین، اصطلاحات مختلف آزمایش مانند mocks، stubs و … را درک کنید.
مرحله 8- کاربردی و عملی
برای تمرین، بروید و آزمون های واحد را برای وظایف عملی و کاربردی که تا به اینجا انجام داده اید، به خصوص آنچه در مرحله 6 ساختید بنویسید.
همچنین پوشش آزمون هایی که نوشته اید را یاد آموخته و محاسبه کنید.
مرحله 9- در رابطه با پایگاه دادهه ای رابطه ای (Relational Databases) بیاموزید.
بیاموزید که چگونه داده های خود را در پایگاه داده ی رابط ها حفظ کنید.
پیش از اینکه بروید و ابزاری را برای یادگیری انتخاب کنید، اصطلاحات مختلف پایگاه داده را درک کنید، برای مثال کلیدها، اندیس ها، نرمال سازی، المان های چندتایی و … .
در اینجا گزینه های بسیاری وجود دارد.
با این حال اگر یکی را یاد بگیرید، دیگر گزینه ها نسبتا آسان خواهند بود.
آنهایی که ممکن است بخواهید یاد بگیرید MySQL، MariaDB ( که تقریبا همان است و شاخهی MySQL است) و PostgresSQL هستند. برای شروع MySQL را انتخاب کنید.
مرحله 10- زمان عملی
زمان آن رسیده که تمام مواردی که تا به اینجا یاد گرفته اید را به کار ببندید.
یک برنامه ی ساده با استفاده از تمام چیزهایی که تا به حال یاد گرفته اید ایجاد کنید.
هر ایده ای را انتخاب کنید، شاید یک برنامه ی وبلاگ نویسی ساده و ویژگی های زیر را در آن پیاده سازی کنید.
- حسابهای کاربری- ثبت نام و ورود
- کاربر ثبت شده میتواند بلاگ پست هایی ایجاد کند
- کاربر باید بتواند تمام بلاگ پست هایی را که ایجاد کرده مشاهده کند
- باید بتوانند بلا گپست هایشان را حذف کنند
- اطمینان حاصل کنید که کاربر تنها بتواند بلاگ پست های خود و نه دیگران را مشاهده کند
- آزمون های واحد/تلفیق را برای برنامه بنویسید
- باید اندی سها را برای کوئری ها (جستارها) اعمال کنید. کوئریها را تجزیه و تحلیل کرده تا اطمینان حاصل کنید که اندیس ها در حال استفاده هستند.
مرحله 11- یک فریمورک را بیاموزید
بسته به پروژه و زبانی که انتخاب کردید، ممکن است به یک فریمورک نیاز داشته یا نداشته باشید.
هر زبان گزینه های مختلف بسیاری دارد، بروید و ببینید چه گزینه هایی برای زبان انتخابی شما موجود هستند و گزینه ی مربوطه را انتخاب کنید.
اگر PHP انتخاب کردید، به شما پیشنهاد میدهم با Laravel یا Symfony پیش بروید و برای ریز فریمورک ها (micro-frameworks)، با Lumen یا Slim پیش بروید.
اگر Node.js را انتخاب کردید، گزینه های مختلف بسیاری وجود دارد اما معروفترین و بارزترین آنها Express.js است.
مرحله 12- زمان عملی
برای بخش عملی این مرحله، برنامه ای که در مرحله 10 ساختید را تبدیل کنید، تا از فریمورکی که انتخاب کردید استفاده کند.
همچنین حتما تمام موارد از جمله آزمون ها را تطابق (port) دهید.
مرحله 13- یک پایگاه داده ی NoSQL (NoSQL Database) یاد بگیرید.
ابتدا اینکه چیستند، چگونه از پایگاه داده های رابطه ای متفاوتند و چرا مورد نیاز هستند را درک کنید.
گزینه های متفاوت بسیاری وجود دارد، کمی تحقیق کرده و نگاهی بیندازید و آنها را به لحاظ ویژگی ها و تفاوت ها مقایسه کنید.
برخی از گزینه های معمول که میتوانید از بین آنها انتخاب کنید MongoDB، Cassandra، RethinkDB و Couchbase هستند.
اگر باید یکی را انتخاب کنید، با MongoDB پیش بروید.
مرحله 14- ذخیره سازی در حافظه ی نهانی/کَش (Caching)
نحوه ی پیاده سازی caching سطح برنامه در برنامه ی خود را یاد بگیرید.
نحوه ی بکارگیری Redis یا Memcached را درک کرده و caching را در برنامه ای که در مرحله 12 ساختید پیاده سازی کنید.
مرحله 15- ایجاد APIهای RESTful
REST را درک کرده و نحوه ی ساخت APIهای RESTful را یاد بگیرید و اطمینان حاصل کنید که قادرید با فردی مشاجره کنید اگر بگوید که REST تنها برای APIهای HTTP است.
مرحله 16- در رابطه با روشهای مختلف احراز هویت و صدور مجوز بیاموزید.
در رابطه با اصول مختلف احراز هویت و صدور مجوز بیاموزید.
باید بدانید که چه هستند، تفاوت آنها چگونه است و چه هنگام یکی را بر دیگری ترجیح دارد.
- OAuth – Open Authentication (احراز هویت باز)
- Basic Authentication (احراز هویت پایه)
- Token Authentication (احراز هویت نشانه ای)
- JWT – JSON Web Tokens (نشانه های وب JSON)
- OpenID
مرحله 17- کارگزاران پیام (Message Brokers)
در رابطه با کارگزاران پیام آموخته و اینکه چه زمان و چرا از آنها استفاده شود را درک کنید.
چندین گزینه وجود دارد اما معروف ترینها RabbitMQ و Kafka هستند.
اگر میخواهید یکی را انتخاب کنید، برای این زمان بیاموزید که چگونه از RabbitMQ استفاده کنید.
مرحله 18- موتورهای جستجو
در حالیکه برنامه رشد میکند، کوئری های ساده در پایگاه داده ی رابطه ای یا NoSQL باز نخواهند ایستاد و نیاز خواهد بود که از یک موتور جستجو یاری بگیرید.
چندین گزینه وجود دارد، که هر یک تفاوت های خود را دارد.
مرحله 19- نحوه ی استفاده از میانبر (Docker) را بیاموزید.
Docker میتواند تا حد زیادی درتوسعه به شما کمک کند، خواه کپی و بازسازی محیط یکسانی مانند محصول باشد، یا تمیز نگه داشتن سیستم عامل خود یا تسریع کدنویسی، آزمودن یا استقرار خود.
پاسخ این سوال که “چگونه به من کمک خواهد کرد” را برای جستجو به شما واگذار خواهم کرد. در این مرحله، بروید و نحوه ی استفاده از Docker را یاد بگیرید.
مرحله 20- شناخت و دانش وب سرورها
اگر تا به اینجا پیش آمده اید، احتمالا باید با سرورها در مراحل قبلی دست و پنجه نرم میکردید.
این مرحله عمدتا در رابطه با یافتن تفاوت های بین وب سرورهای مختلف، شناخت محدودیت ها و گزینه های مختلف پیکربندی موجود و نحوه ی نوشتن برنامه هایی که با بکارگیری این محدودیت ها به بهترین نحو است.
مرحله 21- نحوه ی استفاده از وب سوکتها (Web Sockets) را بیاموزید
با این حال که احتیاجی نیست، اما داشتن این شناخت و دانش در کمربند ابزار خود سودمند است.
نحوه ی نوشتن برنامه های وب بلادرنگ (real-time) با وب سوکتها را آموخته و چند برنامه ی نمونه با آن بسازید.
میتوانید آن را در اپلیکیشن وبلاگی که در بالا ساختید برای پیاده سازی بروز رسانی های بلادرنگ در فهرست بلاگ پست ها استفاده کنید.
مرحله 22- GraphQL را بیاموزید
نحوه ی ساخت APIها با GraphQL را بیاموزید. اینکه چگونه از REST متفاوت است و چرا آن را REST 2.0 مینامند را درک کنید.
مرحله 23- پایگاه داده های گراف (Graph Databases) را بررسی کنید.
مدل های گراف روشی بسیار انعطاف پذیر برای مدیریت روابط در داده هایتان را نشان میدهد، و پایگاه داده های گراف ذخیره سازی سریع و کارآمد، بازیابی و کوئری گرفتن برای آن را فراهم میکنند.
نحوه ی استفاده از Neo4j یا OrientDB را یاد بگیرید.
مرحله 24- به جستجو ادامه دهید
هنگامیکه یادگیری و تمرین را شروع کردید، قطعا با مواردی مواجه خواهید شد که در این نقشه پوشش ندادیم.
فقط ذهنی باز و اشتیاق و اشتهایی سالم برای یادگیری موارد جدید داشته باشید.
به خاطر داشته باشید که کلید و شرط لازم تمرین کردن تا جایی است که میتوانید.
در ابتدا ترسناک تر به نظر خواهد رسید و ممکن است احساس کنید چیزی متوجه نمیشوید اما این امری طبیعی است و با گذشت زمان احساس خواهید کرد که در حال بهتر شدن هستید.و با این حرف، این پست به پایان میرسد.