طراح و معمار نرم‌افزار کیست و چه تفاوت‌هایی دارد؟

Image for post
Image for post

همانند بسیاری از موقعیت‌های شغلی در توسعه نرم‌افزار، وظایف طراح نرم‌افزار یا معمار نرم‌افزار می‌تواند از یک شرکت به شرکتی دیگر متفاوت باشد. بطور کلی اندازه شرکت، پیچیدگی یک پروژه، تجربه تیم توسعه، ساختار سازمان و عمر شرکت می‌تواند بر روی نقش طراح و معمار نرم‌افزار تاثیرگذار باشند  

اما بطور مشخص کار یک طراح نرم‌افزار (software designer) فرایند تبدیل نیازمند‌ی‌های (requirements) یک مشتری به قطعه کدی پایدار است که می‌تواند در بلند‌مدت تکامل پیدا کرده و بخشی از یک سیستم بزرگتر باشد.

همچنین می‌توان گفت یک معمار نرم‌افزار (software architect) مسئول کل سیستم و انتخاب راه‌حل‌های مناسب با توجه به هر مساله (مانند انتخاب فریم‌ورک و پایگاه داده مناسب)، و همچنین تعریف نحوه تعامل اجزا با یکدیگر است.

به طور خلاصه، طراح نرم افزار جنبه‌های سطح پایین یک سیستم را در نظر دارد، در حالی که معمار نرم افزار تصویر بزرگتر و جنبه‌های سطح بالاتری از یک سیستم را بررسی می‌کند.


چرا طراحی و معماری نرم‌افزار اهمیت دارد؟

اگر می خواهید یک سیستم پایدار و با عمر طولانی داشته باشید، آنوقت طراحی و معماری اهمیت پیدا خواهند کرد. هر کسی می‌تواند سیستمی بسازد که یک هفته یا یک ماه یا یک سال دوام بیاورد، اما اگر می‌خواهید چیزی بسازید که اساس کار و مشارکت دیگران در طول سال‌های آتی باشد، شما باید کسی را داشته باشید که وظیفه‌اش این باشد که با نگاهی آینده‌نگر مراقب سیستم شما باشد و مطمئن شود که تصمیمات کوتاه مدت نابهینه نمی گیرید.

چالش‌های کلیدی در طراحی و معماری نرم‌افزار چیست؟

یکی از مسائل اصلی ایجاد تعادل بین سرعت و کیفیت است. به طور معمول، مشتری و صاحب  کسب و کار تمایل دارد که نتایج خود را در سریع‌ترین زمان ممکن ببینید. و تیم مهندسی تمایل به ساخت قوی‌ترین و کامل‌ترین طراحی و پیاده‌سازی ممکن دارد. در نتیجه، ما بایستی دائماً بین سرعت و کیفیت تعادل برقرار کنیم.
موضوع مهم دیگر درک مساله مشتری است. زیرا در بسیاری از موارد، مشتری نیز نمی داند که چه کاری می خواهد انجام دهد. آنها معمولا با یک درک جزئی از مشکل خود و نوعی احساس مبهم که می توانند کارها را بهتر انجام دهند،‌ به شما مراجعه می‌کنند. اغلب، یکی از اولین کارها این است که به آنها کمک کنیم تا با دقت بیشتری بفهمند مساله آنها دقیقا چیست.

یک معمار نرم افزار چه کاری انجام می‌دهد؟

کار یک معمار نرم افزار این است که رابط بین محصول و مشتری و تیم های مهندسی باشد. هنگامی که مشتریان تقاضا یا نیاز خود را برای نرم افزار بیان می کنند، این مسئولیت معمار است که با مشتریان و مدیران محصول همکاری کند تا مشخصات فنی را در مورد چگونگی حل مشکل ارائه دهد.
سپس آن‌ها این نیازها را به تیم‌های مهندسی می‌برند و با آن‌ها همکاری می‌کنند تا چگونه آن‌ها را به‌گونه‌ای تحقق بخشند که اهداف مشتری را برآورده کنند و در عین حال با بهترین شیوه‌های فنی و معیارهای غیرعملکردی که باید در محصول رعایت شوند، همسو باشند.
معمار نرم افزار مانند یک معمار ساختمان است. آنها مسئول یکپارچگی کلی پروژه هستند.

یک طراح نرم افزار چه کاری انجام می دهد؟

طراح نرم افزار بر ساخت، نگهداری و گسترش سیستم‌های نرم‌افزاری یک کسب و کار یا سازمان نظارت دارد. آنها خواسته‌های هر بخش را مدیریت می‌کنند.
برای آموزش، آزمایش و اشکال‌زدایی نرم افزار به محصول نهایی، مهندسان نرم افزار باید مهارت‌های  فردی و ارتباطی موثری نیز داشته باشند و بتوانند با مصرف‌کنندگان ارتباط برقرار کنند. آنها اغلب در مراحل اولیه برنامه‌ریزی نرم افزار از طریق آزمایش، توسعه، آموزش و پشتیبانی درگیر هستند.

مسیر شغلی برای معماری نرم افزار چیست؟

اکثر معماران به عنوان مهندسین نرم افزار معمولاً به عنوان یک کارآموز شروع به کار کردند. آنها به تدریج بر روی بخش‌های بزرگتر نرم افزاری که مسئولیت آنها را بر عهده دارند کار می‌کنند.
و آنچه اتفاق می‌افتد این است که، آن مهندسان به سطحی از اطمینان می‌رسند که مسئولیت برنامه‌ نوشته شده را می‌پذیرند و شروع به درگیر کردن خود در بحث‌هایی پیرامون سیستم کاری که در حال انجام است، می‌کنند.
این یک مهارت تدریجی است که باعث می شود کسی به یک معمار نرم افزار تبدیل شود.

چه مهارت‌هایی برای یک طراح یا معمار نرم افزار لازم است؟

یک معمار باید چندین مهارت مهم را داشته باشد. شما باید یک سطح معین دانش فنی داشته باشید. علاوه بر آن، شما باید بتوانید با افراد در سطحی مشخصی ارتباط برقرار کنید. بنابراین اگر با صاحب کسب و کار صحبت می کنید، آنها نمی‌خواهند در مورد کد شما بشنوند. آنها می‌خواهند در مورد مشکلات تجاری خود بشنوند و این که چگونه مشکلات تجاری آنها را حل می‌کنید.
همچنین اگر با یک توسعه‌دهنده نرم‌افزار صحبت می‌کنید، آنها نمی‌خواهند در مورد پیچیدگی‌های کسب‌وکار را بدانند، با آنها باید در مورد کد صحبت کنید.

بنابراین، داشتن این توانایی برای درک اینکه چگونه شخصی که با او صحبت می‌کنید می‌خواهد با او ارتباط برقرار کنید، واقعاً مهم است.
علاوه بر این، برخی از مهارت‌های عملکردی اولیه مانند کمی برنامه‌ریزی پروژه و مهارت‌های سازمانی، توانایی نگهداری از کارهای عقب افتاده بطوری که چیزها را فراموش نکنید. اینکه بتوانید همزمان با بسیاری از دغدغه‌های مختلف رقابت کنید نیز مهارت بسیار مهمی است.