هیچ دوره ای در سبد آموزش شما وجود ندارد
آموزش دیزاین پترن ها
الگوهای طراحی یا دیزاین پترن ها ، یکسری راه حل برای مشکلات و چالش های متدوال در دنیای توسعه نرم افزار هستند که توسط بهترین برنامه نویس ها پیش از ما روی این مشکلات فکر شده و راه حل هایی را برای این مشکلات متدوال پیشنهاد کرده اند. در سال 1994 گروهی با عنوان فارسی دارودسته چهارتایی ها یا Gan of Four که اعضای آن Erich Gamma, John Vlissides, Ralph Johnson, Richard Helm بودند 23 تا الگوهای طراحی را بصورت کاربردی در کتاب الگوهای طراحی معروفشان معرفی و آموزش دادند که معروف به کتاب الگوهای طراحی GOF است.
معماری نرم افزار چیست؟
تفاوت بین یک کدنویس با یک برنامه نویس در چه مواردی است؟ تفاوت بین یک برنامه نویس جونیور با یک برنامه نویس میدلول یا سنیور و یا یک مهندس نرم افزار در چه چیزی است؟ بدون شک تا الان این سوال ها برای شما پیش آمده است. مهم ترین تفاوت یک برنامه نویس حرفه ای با افرادی که صرفا کد بازی میکنند و فقط برنامه های روتین مینویسند در آشنایی با معماری نرم افزار ، الگوهای طراحی و اصول مهندسی نرم افزار است. آشنایی با این موارد است که سطح شما را در دنیای برنامه نویسی مشخص میکند.
یک برنامه نویس حرفه ای معماری های مختلف نرم افزار را میشناسد و میتواند مساله حل کند و به اصطلاح خودمان problem solver است؛ نه فقط کد نویس. هدف ما در این دوره دقیقا همین است که شما پس از مشاهده این آموزش اگر در سطح مقدماتی یا جونیور در برنامه نویسی هستید، با مبانی الگوهای طراحی، معماری نرم افزار، آنتی پترن ها، شیوه مدیریت تیم های نرم افزاری، شیوه همکاری در یک تیم نرم افزاری با متدلوژی های مختلفی مثل agile و ایده های اسکرام و کنبان و موارد مهم دیگر آشنا شوید.
آنچه در دوره آموزش مهندسی نرم افزار میآموزیم
پس از مشاهده این آموزش تبدیل به یک برنامه نویس با دانش عمیق تر نسبت به فیلد کاری خود شوید. این دوره در دانشگاه ها بعنوان درس مهندسی نرم افزار در مقطع کارشناسی و درس مهندسی نرم افزار پیشرفته در مقطع ارشد به دانشجویان مهندسی کامپیوتر و گرایش نرم افزار آموزش داده میشود ولی هدف ما آموزش یک درس دانشگاهی نیست. هدف ما این است که از این مواردی که در دانشگاه تدریس میشود و در بازار کار به شدت اهمیت دارد با رویکرد بازار کار و دنیای برنامه نویسی نگاه کنیم. تفاوت یک کدر با یک برنامه نویس و یک برنامه نویس با یک مهندس نرم افزار و دولوپر دقیقا مطالبی است که شما با همراهی این آموزش و درسنامه ها در یک مدت زمان خیلی سریع و بصورت فشرده فرامیگیرید.
موارد آموزش داده شده در دوره
- آشنایی با اصول SOLID در مهندسی نرم افزار و شی گرایی
- آشنایی با مفهوم تمامی الگوهای طراحی یا دیزاین پترن ها: این الگوها در سه دسته زیر قرار میگیرند.
- آشنایی با مفهوم تمامی الگوهای Creational
- آشنایی با مفهوم تمامی الگوهای Structural
- آشنایی با مفهوم تمامی الگوهای Behavioral
- آشنایی با آنتی پترن ها و پادالگوهای نرم افزاری: کارهایی که در دنیای برنامه نویسی و نرم افزار باید از آن اجتناب کنیم وگرنه فاجعه در کمین ما ، تیم ما و کل پروژه است.
- آنتی پترن های معماری نرم افزار
- آنتی پترن های برنامه نویسی
- آنتی پترن های مدیریت پروژه
- مدیریت تیم نرم افزاری با متدلوژی agile : بعنوان برنامه نویسی که قصد دارید در یک تیم نرم افزاری کار کنید باید با متدلوژی اجایل حتما آشنا باشید. این متدلوژی پیاده سازی های مختلفی نظیر اسکرام (Scrum) و کنبان (Kanban) دارد که شیوه همکاری اعضای تیم و روند توسعه یک پروژه را مشخص میکنند ، در این بخش با مفاهیمی چون مانیفست اجایل ، جلسات اسپرینت (که در تیم های نرم افزاری معمولا دو هفته یکبار برگزار میشود) ، جلسات استدآپ هر روزه در تیم های نرم افزاری و مواردی از این دست آشنا میشوید.
- الگوهای معماری در توسعه وب : در این بخش فیلد توسعه وب را بعنوان یک case study انتخاب کردیم تا با معماری های مهم در دنیای نرم افزاری امروز آشنا شویم. در این بخش معماری های یکپارچه یا Monolith را میبینیم و دیزاین پترن ترکیبی MVC (یا Model View Controller) را که نوعی از معماری های یکپارچه در دنیای توسعه محسوب میشود بررسی کردیم. پس از آن رسیدیم به یکی از داغ ترین و مسائل روز فیلد معماری نرم افزار یعنی معماری Microservices که بسیار در توسعه وب مورد استفاده قرار میگیرد. و در این بخش ضمن معرفی و بررسی مفهومی معماری میکروسرویس مفاهیم دیگری نظیر پروتکل Restful API را نیز بررسی کردیم.
اثر این آموزش بر موفقیت شما در بازار کار
تفاوت یک کد نویس با یک مهندس نرم افزار یا توسعه دهنده در عمیق شدن دانش فنی در مباحثی مثل معماری نرم افزار ، الگوهای طراحی و تجربه کردن پروژه های دنیای واقعی و برخورد کردن به چالش های مختلف است. برای استخدام در بازار کار و تیم های خوب یکی از معیار های سنجش مهارت یک برنامه نویس دانش عمیق در مواردی این چنینی است. اینکه آیا سعی میکنید best practice ها را رعایت کنید یا خیر ، با اصولی مثل اصول SOLID در برنامه نویسی آشنا هستید یا خیر.
آشنایی شما بعنوان برنامه نویس با معماری های جدیدی نظیر میکروسرویس ، آشنایی با الگوهای طراحی و دیزاین پترن ها ، آشنایی با متدلوژی agile ، آشنایی با شیوه همکاری در یک تیم نرم افزاری با رویکرد اسکرام یا کنبان و موارد دیگری که در این آموزش فرا میگیرید ، همگی در زمان استخدام شما ، سطح شما در تیم ، جایگاه شغلی شما در تیم و در نهایت حقوق و پیشرفت شما بعنوان یک برنامه نویس اثر مثبت و به شدت مهمی خواهد داشت ، در زمان مصاحبه های شغلی اگر با این مفاهیم حداقل آشنا هم باشید، در تصمیم گیری استخدام شما توسط خیلی از مصاحبهکنندگان فنی ، شما بعنوان یک شخص متخصص تر و عمیق تر نسبت به سایر برنامه نویس ها جلوه خواهید کرد و احتمال استخدام شما بسیار افزایش پیدا میکند.
دوره آموزش دیزاین پترن ها مناسب چه افرادی است؟
این آموزش مناسب برنامه نویسانی است که با مبانی برنامه نویسی آشنا هستند و تجربه ای مقدماتی در دنیای برنامه نویسی ، به ویژه برنامه نویسی به سبک شی گرا دارند و حل مساله میکنند ولی الان به این سوال مهم برخوردند که بهترین راه حل برای حل یک مساله چیست؟ چطور میشود بهترین پرفورمنس را در معماری و طراحی یک پروژه داشت؟ دیزاین پترن ها چگونه به ما برای مشکلات متداول نرم افزاری کمک میکنند؟ و سوالات این چنینی…
عملا برنامه نویسانی که به یک سطح اولیه در دنیای برنامه نویسی رسیده اند و قصد دارند در این مسیر level up شوند و سطح دانش فنی خود را افزایش دهند از مخاطبین این دوره هستند. علاوه بر این برای برنامه نویسان تازه کار که تازه شروع کردند هم ، آشنایی با این مفاهیم ، حتی اگر خیلی عمیق مطالب را درک نکنند در آینده شغلی و آینده مهارتشان بسیار اثر مثبت خواهد داشت.
سبک آموزش در دوره مهندسی نرم افزار پیشرفته
شیوه دوره مبانی مهندسی نرم افزار پیشرفته و دیزاین پترن ها بصورت مفهومی و مستقل از هر زبان برنامه نویسی است ، دلیل این شیوه از آموزش دیزاین پترن ها در این است که مخاطبین این دوره برنامه نویسان تازه کار نیستند و برنامه نویسان تازه کار نسبت به مسائلی چون معماری نرم افزار ، دیزاین پترن ها و مطالبی نظیر این نیازی هم نیست که در شروع مسیر دغدغه ای داشته باشند. بنابراین شیوه آموزش به سبک مفهومی در قالب مثال های دنیای واقعی جلو میرود تا تمامی برنامه نویسانی که با هر زبان برنامه نویسی کار میکنند بتوانند با این مفاهیم آشنا شده و در زبان برنامه نویسی خود از آن استفاده کنند.
همانطور که پیش از این گفتیم ، الگوهای طراحی و اصول مهندسی نرم افزار ، یکسری راه حل یا solution برای مشکلات متداول بین برنامه نویس ها و توسعه دهندگان هستند که این مشکلات و این راه حل ها از زبان ها و تکنولوژی های برنامه نویسی کاملا مستقل هستند. بنابراین سبک این دوره سبکی کاملا مفهومی است.
پیش نیاز های دوره مهندسی نرم افزار پیشرفته چیست؟
- آشنایی با مفاهیم برنامه نویسی (این دوره ویژه برنامه نویسان سطح مقدماتی به بالا است).
- آشنایی با مفاهیم برنامه نویسی شی گرا
- آشنایی با اصول شی گرایی (Abstraction و Encapsulation و Polymorphism و Inheritance)
سرفصل های آموزش دیزاین پترن ها
فصل اول : مقدمه ای بر دیزاین پترن ها
- مقدمه دوره و نقشه راه
- الگوهای طراحی یا دیزاین پترن ها در دنیای برنامه نویسی
فصل دوم : اصول SOLID در برنامه نویسی شی گرا
- اصل Single responsibility
- اصل Open closed
- اصل Liskov substitution
- اصل Interface segregation
- اصل Dependency inversion
فصل سوم : الگوهای طراحی Creational
- الگوی طراحی Singleton
- الگوی طراحی Factory Method
- الگوی طراحی Abstract Factory
- الگوی طراحی Builder
- الگوی طراحی Prototype
فصل چهارم : الگوهای طراحی Structural
- الگوی طراحی Adapter
- الگوی طراحی Bridge
- الگوی طراحی Composite
- الگوی طراحی Decorator
- الگوی طراحی Facade
- الگوی طراحی Flyweight
- الگوی طراحی Proxy
فصل پنجم : الگوهای طراحی Behavioral
- الگوی طراحی Chain of Responsibility
- الگوی طراحی Command
- الگوی طراحی Iterator
- الگوی طراحی Mediator
- الگوی طراحی Memento
- الگوی طراحی Observer
- الگوی طراحی State
- الگوی طراحی Strategy
- الگوی طراحی Template Method
- الگوی طراحی Visitor
فصل ششم : آنتی پترن های مهندسی نرم افزار
- آنتی پترن های برنامه نویسی
- آنتی پترن اسپاگتی کد یا Spaghetti Code
- آنتی پترن چکش طلایی برنامه نویس یا Golden hammer
- آنتی پترن برنامه نویسی با کپی پیست کردن یا Copy paste programming
- آنتی پترن مدیریت قارچی برنامه نویس ها
- آنتی پترن های معماری نرم افزار
- آنتی پترن اختراع دوباره چرخ یا Reinvent the wheel
- آنتی پترن چاقوی سوئیسی یا Swiss army knife
- آنتی پترن های مدیریت پروژه
- آنتی پترن Death by planning
- آنتی پترن Viewgraph engineering
فصل هفتم : متدلوژی Agile در مهندسی نرم افزار
- معرفی کامل متدلوژی Agile
- متدلوژی چابک یا Agile در مقابل Waterfall
- مانیفست متدلوژی Agile
- نرم افزار واقعا چیست؟ چالش های درک نرم افزار
- User Story در متدلوژی Agile
- نقش Product Owner و اسکرام مستر در متدلوژی Agile
- Backlog چیست؟
- معرفی روش کار اسکرام یا Scrum
- چگونه زمان اجرای یک تسک را در اجایل تخمین بزنیم؟
- روش Planning poker
- جلسات روزانه استندآپ یا Daily Scrum در تیم
- جلسات دو هفته ای Show Case یا Sprint Review در مدیریت تیم با اسکرام
- جلسات Retrospective در مدیریت تیم اسکرام
- معرفی روش کار کنبان یا Kanban
- تابلوی مدیریت تیم یا Board در روش کنبان
- تفاوت روش اسکرام و کنبان
- مزیت های Kanban در مدیریت پروژه
فصل هشتم (پیوست دوره) : معماری های نرم افزاری در توسعه وب و بک اند
- معماری نرم افزار چیست؟
- تفاوت الگوهای طراحی (دیزاین پترن ها) در مقابل الگوهای معماری
- معماری سه لایه یا Three Tier و چند لایه
- معماری Client Server
- الگوی طراحی و معماری ترکیبی MVC یا Model View Controller
- MVC در چه وب فریمورک هایی استفاده میشود؟
- مثال از یک صفحه Login در معماری MVC
- URL Routing چیست؟
- معرفی best practice مهم در معماری MVC با عنوان : Fat model skinny controller
- مثال معماری MVC در وبفریمورک جنگو و معماری MVT
- معماری Microservices یا میکروسرویس
- چالش های معماری مترکز MVC چیست؟
- مزیت ها و چالش های معماری میکروسرویس
- الگوی طراحی Bulk head pattern در میکروسرویس