تعریف ۱- معماری نرم افزار ۲- الگوی معماری نرم افزار و ۳- الگوی طراحی نرم افزار .. و مصاحبه های جذب برنامه نویس!

جاهایی که میرفتم مصاحبه معمولا سوالاتی رو میپرسن که یسریهاش با مفاهیم اشتباه منتقل میشه! و اصلا یسریش برای شغلی که میری مصاحبه نیاز نیست پرسیده بشه!یا حتی با دوستان هم رشته ای راجبشون صحبت میکنیم یا میبینم یه مدرس برنامه نویسی یجایی این مواردی که میخوام توضیح بدم رو درست نمیگه برای شاگردهاش!ولی بهرحال همه ش پرسیده و گفته میشن پس بخونیم ببینیم چخبره! مثل پرسیدن تعریف معماری نرم افزار از کسی که میخواد بعنوان یه برنامه نویس معمولی کد بزنه! و .. از نظر من تفاوت و تقسیم بندی معماری و الگوها بطور کلی بصورت زیر میشه، که در خیلی مواردی که مصاحبه رفتم حتی شده اینقد بحث کنیم که خودمم با جا انداختن یه کلمه از عنوانشون تعریف هام بهم بریزه:1- Software Architecture (big picture & stacks, Microservices, dockers,..... )بطور کلی معماری نرم افزار شامل شناخت و تعریف تصویر کلی سامانه و سیستم، ارتباطاتش با سایر اپلیکیشن های خارجی، دیتابیس، نحوه چینش سرورهای سامانه، دلایل انتخاب مواردی همچون استفاده از معماری میکروسرویس، استفاده از فلان زبان برنامه نویسی برای توسعه سمت سرور، فرانت و...میشه.*که کار فردی همچون CTOیا افراد با قابلیت تصمیم گیری و اطلاعات و تجربه ی بالا باشه بهتره.2- Software Architecture Pattern (MVVM, MVC, MVP, ..)-پترن( الگوهای) معماری نرم افزار، که شامل مواردی همچون معماری سه لایه، چند لایه و..مثل الگو( پترن های) MVVM, MVP,..می شود، جهت قابل استفاده بودن پروژه و قابلیت نگهداری و جدا کردن منطق لایه های مختلف اون، کد ها و ساختارهای برنامه طراحی شدن و استفاده می شن، که توسط اونها میتونیم منطق لایه های مختلف برنامه مثل رابط کاربری(یو آی)، لایه کار با دیتا، لایه بیزینس و.. رو از هم دیگه جدا کرد و پروتکل های ارتباطی بین اون ها رو تعیین کرد.-انتخاب این نوع الگوهای معماری نرم افزار توسط برنامه نویس های ارشد یا با تجربه جهت پیاده سازی برنامه ها انجام بشه بهتره ( که معمولا طبق تجربیاتی که از قبل دارن که کدوم رو استفاده کردن، یا الان کدوم الگوی معماری رو بورس هست و همه جا راجبش حرف میزنن و.. انتخاب میشه، که البته باید خیلی موارد دیگه رو توش ببینیم قبل انتخاب).*معمولا خیلی ها هر دو موارد ۱ و ۲ رو یکی میدونن! که دید درستی نیست از نظر من.*3-Software Design pattern (Some known sub-categories: Singleton, Facade,.. ) - الگوهای( پترن های) طراحی نرم افزار، ریز میشن توی نحوه ی کد نویسی و چگونگی انتخاب نوع کلاس ها و کدها و نحوه تعامل بین آبجکت های درون برنامه و اینکه چرا اصلا کد نویس باید مثلا نوع یه کلاس رو استاتیک تعریف کنه! و تاکید زیادی رو Reusability دارن.-اینکه کلاس قابل ارث بری باشه یا نه؟ چرا از DI استفاده کنه و ..شامل یسری دسته بندی کلی میشه که تو این لینک میتونین بیشتر راجبش بخونین. که موارد ی همچون Singleton که همیشه اسمشو شنیدیم و میشناسیم توی زیر مجموعه هایی از دسته بندی های این مورد میاد.-از مزایاش میشه به نوشتن کدهای قابل استفاده و قابل نگهداری، ایجاد منطق کاری خوب جهت انتقال برنامه به سایر برنامه نویس ها و.. نام برد* همه ی کسانی که دارن کد میزنن عالی میشه اگه توی این بخش سوم حسابی کسب تخصص کنن با مطالعه و پیاده سازی عملی و دیدن نمونه کدهای واقعی. * البته اینو بگم که هرکسی که داره کد میزنه حتی اگه هیچ کدوم از این مفاهیم رو ندونه! بصورت ناخوداگاه ممکنه یسریش رو بکار ببره ولی نسبت بهش اطلاعات و آگهی نداشته باشه!* و اینکه میشه تعریف هیچکدومش رو ندونیم ولی باز هم کد بزنیم و برنامه تولید کنیم. * یا با داشتن چندین سال سابقه برنامه نویسی نتونیم فرق بین معماری نرم افزار و الگوی طراحی نرم افزار رو‌ بصورت درست توضیح بدیم* نظرتون چیه؟ اگه در این زمینه تجربیات یا اطلاعاتی دارین، یا جایی رو نظر دیگه ای دارین؟ ممنون میشم به اشتراک بذارین و بگین