SOLID Principles
اصول SOLID یکی از معروفترین و پرکاربردترین اصول مربوط به تمیزی کد است. SOLID از 5 اصل تشکیل شده و با رعایت آنها میتوان به کدی دست پیدا کرد که هم از نظر خوانایی و توسعهپذیری و هم از نظر تستپذیری به مراتب جلوتر از کدهای غیر اصولی است.
این مفهوم به همراه تمامی مفاهیم دیگری که در این قسمت آمده، در دورههای فرانتاند و مهندسی نرمافزار به صورت مشترک وجود دارند.
Unit Testing
در پروژههای کوچک معمولاً نیاز به تست احساس نمیشود؛ چراکه تعداد توسعهدهندگان محدود است و پروژهها پس از تحویل، یا پشتیبانی نمیشوند یا تنها برای مدت کوتاهی پشتیبانی میشوند؛ اما این مسئله در پروژههای بزرگ بسیار حائز اهمیت است.
همان طور که از اسمش پیداست، Unit Testing یعنی تستکردن تمام واحدهای سازندۀ برنامه؛ چه کوچک و چه بزرگ. ابزارهای زیادی در این زمینه وجود دارد که هر کدام مزایا و معایب خاص خود را دارند که ما در دورۀ فرانتاند از ابزار Karma و در دورۀ مهندسی نرمافزار از ابزار xUnit استفاده میکنیم.
Integration Testing
استفاده از Unit Testing تنها بخشی از کد را در یک محیط ایزوله تست میکند؛ اما به مرور زمان قطعاً این نیازمندی احساس میشود که قسمتهای مختلف کد و رابطهای که بین آنها برقرار است را تست کنیم.
ما از ابزار Cypress برای انجام اینگونه تستها استفاده میکنیم. Cypress یکی از معروفترین ابزارهای حوزۀ تست است که تخصص اصلی آن Integration Testing میباشد. با استفاده از این ابزار میتوان تمام عملیاتی که توسط کاربر انجام میشود را شبیهسازی و از صحت اجرای کد اطمینان حاصل کرد.
Test-Driven Development
معمولاً این تصور در بین برنامهنویسان رایج است که ابتدا کد اصلی برنامه را بنویسند و سپس به تستنویسی بپردازند. اما Test-Driven Development یا به اختصار TDD دقیقاً عکس این را ارائه میدهد؛ بهگونهای که از شما میخواهد ابتدا تمام تستهای ممکن را بسازید و سپس سعی کنید کد قسمتهای مختلف را بنویسید و تستها را پاس کنید.
مزیت این روش نسبت به روش اول در این است که برنامهنویس همیشه نسبت به کاری که باید انجام دهد آگاهی لازم را دارد؛ همچنین چون تستها از قبل نوشته شده و تمام جوانب کار را مشخص کرده، احتمال بروز خطا کمتر است و از سهلانگاری جلوگیری میشود.
Design Patterns
با افزایش کدها و بزرگترشدن حجم پروژه، معماری نرمافزار اهمیت بسیار زیادی در توسعه و نگهداری آن پیدا میکند که میتواند سرنوشت یک نرمافزار، یک تیم کوچک یا یک شرکت بزرگ را متحول کند.
الگوهای طراحی، راهکارهایی متداول برای حل مشکلات عمومی معماری نرمافزار هستند که ما در کداستار سعی میکنیم با آموزش این الگوها به ارتقاء سطح کارآموزها کمک کنیم.
Monitoring
عیبیابی نرمافزارها در زمان کدنویسی، پیچیدگی زیادی ندارد; اما پس از استقرار نرمافزار و در حین استفاده کاربران از آن، اگر با خطا مواجه شویم، نیاز به ابزار و راهکاری برای ریشهیابی خطا داریم.
در کداستار، یاد میگیریم با استفاده از استاندارد OpenTelemetry و ابزارهای مدرن، نرمافزارهای خود را مانیتور و خطایابی کنیم.
SDLC and Agile Framework
تولید نرمافزارهای بزرگ با پیچیدگیهای مختلفی همراه است. رویکردهای مختلفی برای حل این پیچیدگیها ایجاد شده که هرکدام از مزایا و معایبی برخودارند. اما نقطه مشترک تمام آنها این است که بر روی تمامی چرخه تولید نرمافزار، از طرح نیاز بوسیله مشتری تا طراحی، کدنویسی، تست و استقرار نظارت میکنند.
در کداستار با هم برخی از این رویکردها را بررسی کرده و سعی میکنیم در طول بوتکمپ از یکی از رویکردهای پرطرفدار تولید نرمافزار استفاده کنیم.
DevOps and Continuous Delivery Culture
با بزرگتر شدن هرروزه نرمافزارهای پر استفاده، نیاز به سرعت توسعه و پایداری هر روز بیشتر و بیشتر میشود. متخصصان صنعت نرمافزار بر اساس تجربه خود، برای پاسخگویی به این نیازها رویکردهایی را در پیش گرفتهاند تا فرهنگ سازمانی خاصی ایجاد کنند که در نهایت باعث سرعت و پایداری میشود.
در کداستار سعی میکنیم با هم رویکردهای این متخصصان را یاد گرفته و از آنها برای افزایش بازدهی خود و تیممان در زمان تولید نرمافزار بهره ببریم.
Code Review
قطعاً یکی از موثرترین راهها برای یادگیری مطالب جدید، استفاده از تجربۀ افراد Senior میباشد. این افراد در طی سالها، با آزمونوخطا و اشتباهاتی که مرتکب شدهاند، به مفاهیم عمیقی دست پیدا کردهاند.
در کداستار تمام کدهایی که کارآموزها مینویسند، توسط منتورها که افرادی ماهر و باتجربه در حوزۀ مهندسی نرمافزار هستند، مورد بازبینی قرار میگیرد. همچنین ما کارآموزها را تشویق میکنیم تا در جایگاه Code Reviewer قرار بگیرند و با خواندن کد دیگران، سطح علمی خود را بالاتر ببرند.
Teamwork & Pair Programming
توسعۀ نرمافزارهای بزرگ توسط تیمهای توسعهدهندهای انجام میشود که اعضای آنها از ابزارها و راهکارهای متعددی مانند Pair Programming برای افزایش راندمان کاری و بهبود تعاملات درونگروهی استفاده میکنند.
ما در مراحل آموزشی کداستار با تقسیم کارآموزها به تیمهای کوچکتر و آشناکردن آنها با نحوۀ صحیح Pair Programming تلاش میکنیم تا مطالب به شکل بهتر و در زمان کمتری به آنها منتقل شود و در مرحلۀ نهایی با شکلدادن تیمهای بزرگتر سعی میکنیم تا تجربۀ یک کار تیمی خوب، به کارآموزها منتقل شود.
Soft Skills
یکی از باورهای غلطی که درباره تیمهای موفق توسعۀ نرمافزار وجود دارد این است که اعضای این تیمها صرفاً دارای مهارتهای سخت (فنی) میباشند؛ اما در واقعیت این تیمها از افرادی تشکیل شدهاند که در کنار مهارتهای سخت، مهارت بالایی در زمینه برقراری ارتباط با سایر افراد تیم دارند تا مقصود خود را به بهترین نحو به دیگران منتقل کنند و همچنین با ایجاد یک محیط ارتباطی دلنشین، به پویاترشدن تیم کمک کنند.
در کداستار علاوه بر برنامههای آموزشی، برنامههای تفریحی و جمعی متعدد و متنوع نیز خواهیم داشت که در راستای ارتقاء مهارتهای نرم و افزایش حس مثبت کارآموزها، در طول دوره برگزار میشوند.