آیا تا به حال به دنبال پیشرفت در دنیای برنامهنویسی بودهاید؟ آیا به دنبال راهی هستید تا مهارتهایتان را به سطح بالاتری برسانید و در مسیر ارتقاء شغلی خود قرار گیرید؟ اگر پاسختان بله است، حتما براتون این سوال ایجاد شده که چه چیزی رو یادبگیرم تا برنامهنویس بهتری بشم؟ یا برای پیشرفت در شغل برنامهنویسی چه مهارت هایی خیلی مهم است؟
این مقاله به شما راهنمایی کاربردی برای بهبود مهارتهای برنامهنویسی تان ارائه میدهد.
در این مقاله، به 10 مهارت کلیدی در دنیای برنامهنویسی خواهم پرداخت که به شما کمک میکند از رقبای خود جلوتر بروید و به عنوان یک برنامهنویس حرفهای شناخته شوید. و در هرکدام بهترین موارد را برای شروع یادگیری پیشنهاد می کنم، تا همین الان بتوانید شروع کنید
1- اصول اولیه توسعه نرم افزار
برنامه نویس ها و توسعه دهنده ها باید اصول اولیه توسعه نرم افزار مانند موارد زیر را درک کنند. لازم است در این مهارت ها به جایی برسید که وقتی کدی را می نویسید به طور غیر ارادی این اصول را در آنها رعایت کرده باشید. و در مرحله ی بعد عدم رعایت هرکدام از این اصول را بتوانید در کدهای دیگران هم پیدا کنید.
DRY:
مخفف شده عبارت Don't Repeat Yourself است. که این اصل با هدف کاهش تکرار الگوهای نرم افزاری است. DRY، استفاده مجدد از کد را به جای تکرار آن پیشنهاد می کند.
KISS:
مخفف شده ی عبارت Keep It Simple, Stupid است. KISS، بر اهمیت سادگی در طراحی تاکید دارد. کد پیچیده می تواند منجر به باگ های بیشتری شود و نگهداری آن دشوارتر است.
SOLID :
سرواژه ی 5 عبارت Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion است. اینها پنج اصل طراحی هستند که با هدف درک، انعطاف پذیری و نگهداری بیشتر طرح های نرم افزاری انجام می شود. SOLID یکی از مهمترین اصول در توسعه ی نرم افزار است.
2- مقیاس پذیری و عملکرد (Scalability and Performance)
وجود این قابلیت در سیستم شما، زمانی که بار زیادی روی آن هست یا ترافیک به سمت آن افزایش پیدا کرده است، بسیار مهم است. در این مورد نیاز است شما با مقیاس بندی عمودی و افقی (vertical and horizontal scaling) و معیارهای عملکرد (performance metrics) و نحوه ی بهینه سازی آنها آشنا شوید
Vertical Scaling: به معنای افزودن منابع بیشتر (CPU، RAM) به یک ماشین موجود است.
Horizontal Scaling: به معنای افزودن ماشین های بیشتری به سیستم است.
Performance Metrics: اندازه گیری زمان پاسخ سیستم، توان عملیاتی و نرخ استفاده از منابع است.
3- اصول امنیتی (Security Principles)
امنیت سایبری و مفاهیم مرتبط با آن فقط مربوط به هکرها و افرادی که در حوزه ی امنیت کار می کنند نیست. شما به عنوان یک برنامه نویس هم، اگر بخواهید به پله های بالاتری در حوزه ی کاری خودتان برسید، نیاز است با این مفاهیم آشنا شوید و جلوی آنها را در مرحله های مختلف توسعه محصول تان بگیرید.
اصولی مانند Least Privilege (کمترین امتیاز) و defense in depth (دفاع در عمق) را باید عمیقا یادبگیرید و بدانید چطور می توان خطرات امنیتی رایج مانند SQL injections (تزریق SQL) و حملات cross-site scripting (اسکریپت بین سایتی) را در برنامه کاهش بدهید.
Least Privilege: به معنای دادن حداقل مجوزهایی به کاربر یا پردازش است که برای انجام وظایف خود نیاز دارد، نه حتی یک مجوز بیشتر.
Defense In Depth: این یک استراتژی است که از یک سری مکانیسم ها برای کاهش سرعت پیشروی یک حمله با هدف دستیابی به دسترسی غیرمجاز به اطلاعات استفاده می کند.
4- مدیریت داده ها (Data Management)
کار با داده ها از جمله ذخیره سازی، به روزرسانی، خواندن و حذف کردن آنها یکی از کارهای روزمره ی برنامه نویس هاست ولی اینکه بتوانیم مدیریتی رو داده ها داشته باشیم و با چالش ها و ساختارهای مختلف برای مدیریت آنها آشنا شویم، گام مهم بعدی است که باید برداریم تا به سطحی بالاتر در دنیای برنامه نویسی قدم بزاریم.
در این مرحله مواردی همچون، درک انواع مختلف پایگاه داده (SQL، NoSQL)، انتخاب پایگاه داده مناسب برای سیستم، مدیریت سازگاری داده ها (data consistency)، درک قضیه CAP و مدیریت تراکنش های پایگاه داده مهم است.
پیشنهاد میکنم دوره ی آموزش گام به گام Elasticsearch رو در برنامه ی آموزشی خودتون قرار بدید. زیرا ضمن اینکه یکی از خفن ترین و پرکاربردترین دیتابیس ها رو یاد میگیرید، با مفاهیمی هم آشنا می شوید که برای درک همه نوع دیتابیسی به شما کمک خواهد کرد.
انواع پایگاه داده: پایگاه های داده SQL داده ها را در غالب جدول هایی منظم با تعداد ستون مشخص نظم دهی می کنند و بر اساس زبان پرس و جو ساخت یافته (SQL) به شما قابلیت خواندن و دست کاری داده ها را می دهند. پایگاه های داده NoSQL داده ها را در قالبی غیر از روابط جدولی مورد استفاده در پایگاه های داده رابطه ای ذخیره می کنند.
قضیه CAP: بیان می کند که غیرممکن است یک ذخیره داده توزیع شده به طور همزمان بیش از دو مورد از سه تضمین زیر را ارائه دهد: سازگاری، در دسترس بودن، تحمل پارتیشن.
سیستم های توزیع شده: سیستم هایی هستند که بر روی چندین ماشین کار می کنند و از طریق یک شبکه ارتباط برقرار می کنند. جنبههای کلیدی شامل درک نحوه تقسیمبندی دادهها در سراسر سیستم (sharding)، نحوه در دسترس ماندن سیستم در مواجهه با خرابیها (replication)، و نحوه حفظ ثبات در تمام گرهها است.
5- سیستم های توزیع شده (Distributed Systems)
دنیای امروز نرم افزار به شدت تحت تاثیر Cloud ها قرار گرفته است. در نتیجه برای رشد کردن در دنیای برنامه نویسی، شما هم باید تفکر و توانایی های خودتان را با مفهوم cloud-native هماهنگ کنید.
آشنایی با مفاهیمی مانند پایگاه های داده توزیع شده، Cache توزیع شده، sharding، تکثیر (replication) و مدل های سازگاری در دنیای ابری ضروری است.
6- معماری میکروسرویسها
با اینهمه سروصدایی که معماری میکروسرویس کرده است بعید میدونم تا حالا سراغش نرفته باشید یا درباره اش اطلاعاتی کسب نکرده باشید. ولی اگر هنوز سراغش نرفتید، یکی از مهمترین مهارت هایی هست که باید یاد بگیرید. و اگر هم اطلاعاتی درباره اش دارید، بدونید این نوع معماری سیستم، چالش ها، مسائل و اجزای فراوانی دارد که لازم است برای هر کدام از آنها وقت صرف کنید.
از مهمترین مواردی که باید در این موضوع بدانید می توان به موارد زیر اشاره کرد:
- دانستن زمان استفاده از میکروسرویسها
- درک مزایا و چالش های استفاده از میکروسرویس
- درک ارتباطات بین سرویسها (به عنوان مثال ارتباط از طریق AMQP)
- نحوه ی تعریف یک سرویس و مرزهای آن
- circuit breakerها
7- الگوهای طراحی (Design Pattern)
اگر تاحالا یکباره هم در یک مصاحبه ی شغلی برای موقعیت برنامه نویس شرکت کرده باشید، حتما با سوالهایی در ارتباط با دیزاین پترن ها روبرو شده اید. استفاده ی به موقع از دیزاین پترن مناسب، شما رو به برنامه نویس بهتری تبدیل می کند.
آشنایی با دیزاین پترن های رایج می تواند در ساختن سیستم های پیچیده کمک کند. برای شروع پیشنهاد می کنم با یادگیری عمیق دیزاین پترن های زیر شروع کنید:
- Repository Pattern
- Factory Pattern
- Builder Pattern
- Facade Pattern
- Strategy Pattern
8- طراحی API
به احتمال زیاد طی روزهایی که برنامه نویسی کرده اید API های زیادی رو توسعه دادید. API ها در این روزها یکی از اجزای جدا نشدنی از برنامه نویسی و نرم افزارها هستند. ولی خود API هم مفاهیم دارد که لازم است درباره ی آن مطالعه شود. پس اگر قصد دارید به عنوان یک برنامه نویس بهتر شناخته شوید، لازم است در API عمیق تر شوید.
API ها (Application Programming Interfaces) به سیستم های نرم افزاری مختلف اجازه می دهند تا با یکدیگر ارتباط برقرار کنند. لیست مهمترین مواردی که لازم است از طراحی و پیاده سازی API ها بدانید، به شرح زیر است:
- جنبههای طراحی API شامل نحوه ساختار URLها (برای RESTful API)
- درک نحوه طراحی API های RESTful (یا GraphQL، gRPC و غیره)
- نحوه مدیریت نسخههای مختلف API
- نحوه بازگرداندن اطلاعات خطای مفید
- دانستن نحوه مدیریت pagination
- ایجاد سازوکار rate limiting
- مدیریت خطا
9- آشنایی با زیرساخت (Infrastructure)
خیلی از برنامه نویس ها فکر میکنند زیرساخت برنامه شان و دیپلوی کردن کدها، به همکاران Dev-Ops شان مربوط است و لازم نیست آنها چیزی دربارهی آن بدانند. ولی این تفکر اشتباه است و ما به عنوان برنامه نویس، باید با مفاهیم زیرساخت آشنایی داشته باشیم.
در این بخش پیشنهاد من آشنایی با فناوریهای کانتینریسازی مانند داکر و ابزارهای ارکستراسیون مانند Kubernetes است. دوره ی آموزش کاربردی داکر و آموزش کوبرنتیز (kubernetes) با پروژه عملی را در سکان آکادمی بگذرانید.
فناوریهایی مانند Docker به برنامهها و وابستگیهای آنها اجازه میدهند تا در "کانتینرهای" ایزوله بستهبندی شوند که میتوانند در هر جایی اجرا شوند. به این کار Containerization برنامه گفته می شود که مهارت بسیار مهمی در رزومه ی شما به عنوان برنامه نویس به حساب می آید.
ابزارهایی مانند Kubernetes نحوه و مکان اجرای آن کانتینرها را مدیریت می کنند. که به این ابزارها که محبوب ترین و پر کاربردترین شان هم همین K8s (Kubernetes) است، ابزارهای Orchestration گفته می شود.
به عنوان یک پله بالاتر هم در این حوزه پیشنهاد می کنم با Infrastructure as Code آشنا بشوید.
10- ابزارهای System Design
ابزارهایی هستند که برای تجسم طراحی سیستم استفاده می شوند. که شامل نمودارهای UML (زبان مدلسازی یکپارچه - Unified Modeling Language) برای نشان دادن نحوه تعامل اجزای سیستم، فلوچارت هایی برای نشان دادن جریان داده ها از طریق سیستم و ابزارهای نمودار معماری برای ارائه نمای کلی بصری از ساختار سیستم هستند.
هر یک از این 10 موضوع به تنهایی می تواند مهارتی به حساب بیاید که مدتها، مسیر آموزش های حرفه ای و کاری شما را شکل دهد. من در این مقاله تلاش کردم به شما گزینه های خوب و لازمی را معرفی کنم که بتوانید برنامه ریزی کنید و در هر کدام از این موارد دانش و مهارت خودتان را ارتقا بدهید.
اگر برنامه نویسی هستید و قصد پیشرفت در کارتان را دارید یا زبان (های) برنامه نویسی را یادگرفته اید و حال دارید به گام بعدی یادگیری تان فکر می کنید، بهترین حالت این است که با هر 10 مورد بالا آشنا شوید، بعد در 7 مورد از آنها کمی بیشتر یاد بگیرد، سپس 5 مورد از آنها را به صورت عملی یاد بگیرید، و در آخر 3 مورد که بیشتر از همه برایتان جذاب بود را اینقدر عمیق یاد بگیرید که بتوانید به دیگران هم یادشان بدهید. دقت داشته باشید که شما باید حداقل 5 مورد از 10 مورد مطرح شده در بالا را بتوانید طی 6 ماه آینده، در کارتان استفاده کنید.