تفاوت “مهندس نرم افزار” و ” توسعه دهنده نرم افزار”

سلام دوستان خوب بیسکولنز،

مقدمه

a picture of a chocolate computer set

تصمیم گرفتم در یک سری پست جدید به تفاوت دقیق شغل ها بپردازم، شغل های که در نگاه دور به نظر یکی می آیند ولی مطمئنم آگاه شدن از آن ها می تواند برای کسانی که قصد انتخاب مسیر شغلی، انتخاب رشته و یا تغییر شغل داشته باشند خیلی کمک کند، در واقع وقتی وارد وادی های مختلف که می شوید تازه متوجه زیبایی ها و تفاوت ها خواهید شد در این پست درباره ی فرق مهندس نرم افزار و توسعه دهنده ی نرم افزار صحبت خواهم کرد و در پست بعدی در مورد تفاوت هنرمند ( آرتیست ) و طراح (designer). برای انتخاب نوع رسانه خیلی دو دِل بودم ابتدا می خواستم از پادکست استفاده کنم اما هم فرصت سکوت و آمادگی ذهنی دست نداد و هم اینکه گفتم با نوشتن احتمالا کلید واژه ها در موتورهای جستجو وارده شده و بهتر بتواند به کسی که در آینده در این باره جستجو کند کمک کند. امیدوارم که این مطالب کمک کند گرایش به شغل ها و رشته ها معمولاً تابعی از شرایط دنیا و کشور هست مثلا در زمان سازندگی رشته ی عمران رشته ی پرخواهانی بود، بعد از آن و تب عصر الکترونیک رشته ی برق و الان هم رشته ی کامپیوتر در عصر داده ها، به طوری که الان همه ی رشته های وابسته پرخواهان شده اند مثلا زمانی رشته ی علوم کامپیوتر به دلیل اینکه جزو علوم پایه بود آنقدرها متقاضی ورود نداشت اما این روز ها پر خواهان است. با توجه به زمان محدود توضیحات کمی می توانم برای موضوع یادداشت کنم اما همین که پرونده ی این سوال ها را در ذهن افراد باز کنم برای من کافی است تا کمک کنم افراد با نگاه قبلی و با در نظر گرفتن روحیات خود در هر وادی مسیر خود را پیش بگیرند.

معرفی 

در این پست می خواهم در مورد تفاوت «مهندس نرم افزار» و «توسعه دهنده ی نرم افزار» بنویسم، ممکن است بپرسید که چه پیش زمینه ای در این باره دارم، من حدیث ملکی هست، از سال ۸۱ وارد رشته ی مهندسی کامپیوتر و سپس گرایش نرم افزار شدم در کنار آن و پس از آن در قالب پروژه ها گاهی با مهندسی نرم افزار و گاهی با توسعه ی نرم افزار سر و کار داشته ام و نداشته ام اما می توانم بگویم که ۱۵ سال است به طور پیوسته و دائم با الگوریتم ها و حل مساله سر و کار داشته ام چرا علاقه ی من بیشتر به این سمت هست خصوصا مباحث تصویر دیجیتال و الگوریتم های آن. و خصوصا بعد از گذراندن کارشناسی ارشد انیمیشن به سمت بحث “مصورسازی اطلاعات(Data Visualization)” و “طراحی اطلاعات(Information Design)” جلب شده ام.

مورد دیگه اینکه از شما خواننده می خواهم که« زبل خان» باشی، زمان کودکی من یک انیمیشن بود به اسم «زبل خان»، و شعارش هم این بود «زبل خان اینجا ، زبل خان اونجا، زبل خان همه جا»  من هم از شما می خواهم که زبل خان باشی یعنی نوشته و صحبت های من را تنها به عنوان بخشی از اطلاعات در نظر بگیری ، دقیقاً مثل همان شعر معروف فیل در تاریکی است است،من شاید گوش فیل را برای شما تعریف کنم و فردی دیگر پای اون را. شما باید به سراغ افراد مختلف بِرَوی که در زمینه های مختلف فناوری اطلاعات کار کرده اند افراد با سابقه ی کاری، برنامه نویسان،  افراد پژوهشگر، افراد آکادمیک، افرادی که با تجربه وارد کار شده اند و … تا شناخت کامل تری به دست بیاوری.

فرض ها

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

همچنین در مورد نرم افزار از عبارت «توسعه دادن» استفاده می شود و نه «ساختن»، چرا که پروژه ی نرم افزار از ابتدا تا تحویل محصول مراحل مختلف دارد و حتی بعد از آن هم تمام نمی شود و نیاز به پشتیبانی دارد، مثل یک بچه که آرام آرام بزرگ می شود.

Software engineer vs software developer: What's the difference?

بررسی تفاوت مهندس نرم افزار و توسعه دهنده ی نرم افزار

تفاوت مربوط به کارهایی است که در شغلشان انجام می دهند، مهندس نرم افزار ممکن است درگیر توسعه ی نرم افزار نیز بشود اما توسعه دهنده ی نرم افزار درگیر مهندسی نرم افزار نمی شود.

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

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

مهارت ها و شغل مهندسی نرم افزار 

از مهندسان نرم افزار انتظار می رود  که مهارت های فنی، تجربه و توانمندی های در کار با ابزار، و پروژه های متن باز داشته باشند. باید در طراحیِ الگو ماهر باشند، با روش های آزمون خودکار و سیستم های مقاوم در برابر ایرادات و مشکلات آشنا باشند. ساخت و نگهداری معماری فناوری اطلاعات  را بدانند.  با پایگاه های داده ی بزرگ و سیستم های ابر پایه (cloud -based ) و با چگونگی ساختِ خط تولید (pipeline) قابل تغییر از ابعاد بزرگ و کوچک و زبان های قابل تعمیم آشنا باشند و همچنین توانایی کار خوب با تیم دورکار را داشته باشند. مهندس نرم افزار ارشد، احاطه به تجزیه و تحلیل سیستم های پیچیده ی طراحی و توسعه ی نرم افزار را بداند و نقش اساسی به عنوان رهبر پروژه، مشاور و حتی شرکت کننده ی فردی در پروژه های متنوع داشته باشد.  آن ها باید پیشنهادات تحلیل گرانه ی خوبی در تعیین و پیاده سازی استفاده های جدید از IT برای کمک به مشتریان و شرکت ها، در راه رسیدن به اهداف استراتژیک ارائه بدهند.  توانایی مدیریت منابع، کنترل کارهای توسعه  و نظارت فنی طرح های پروژه را داشته باشند. و معمولا با تیم های فناوری اطلاعات، عملیات و تیم توسعه در تعامل هستند. و در نهایت باید با تعیین موارد و پیشنهاد بهبود فرآیند ها کاری کنند که فرآیند ها روند اجرایی نرم و مناسبی داشته باشند.

مهارت ها و شغل توسعه نرم افزار 

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

نتیجه گیری 

و در نهایت تفاوت عمده اینکه مهندس نرم افزار ناظر بخش مهندس است اما توسعه دهنده ی نرم افزار تمرکز روی تولید برنامه های کارا دارد.

لازم هست این مطلب را هم بنویسم که هدف از بیان این تفاوت ها این نیست که این موارد را از هم جدا کنیم یا برتری ایجاد کنیم یک تیم با همه ی اعضایش و با عنوان های شغلی متنوع است که می تواند پروژه را جلو ببرد هر کدام نقش خیلی مهم دارند. بلکه هدف انتخاب مسیر بهتر با توجه به روحیات است، مثلا با کمک مطالبی که در قبل ذکر شد مشخص است که روند زیر مجموعه ای و پلکانی وجود دارد مثلا نمی توان تصمیم گرفت که توسعه ی نرم افزار انجام داد اما اصلا برنامه نویسی ندانست یا نمی شود تصمیم گرفت ناگهان بعد از یک ماه مهندس نرم افزار بود اما قبل از آن سال های سال به عنوان اپراتور و آشنا با ابزارها ، برنامه نویس، آنالیزور، طراح مساله و … کار نکرد. روند سلسله مراتبی در ژاپن به خوبی انجام می شود. منطقی هم هست تصور کنید در هر شغلی که با پروژه سر و کار دارد مسئول هدایت از مسئول انجام کاری را بخواهد، اگر خودش آن را انجام داده باشد روی پیشبرد پروژه مسلط تر است، استادمان مثال جالبی می زد از دوستش که برای کار زمین درخواست داشت زمین را با شیب فلان درجه شخم بزنند، فرد مسئول ماشین قبول نمی کرد، خودش نشست پشت ماشین و مقدار انجام داد ” گفت ببین می شود” . یا مثل فوتبال است، اطلاعات فوتبالی من خوب نیست اما یادم می آید در خبرها بود که یکی از سرمربی های تیم ملی از بازیکنان خواسته بود به تیرک دروازه بزنند و تمرین های سختی می داد، گفتند:«نمی شود»، خودش توپ را برداشت و به تیرک زد، گفت: «ببین می شود».

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

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

در بخش هایی از این پست از این منبع استفاده کرده ام

وبلاگ بیسکولنز – حدیث ملکیاینستاگرامبیسکولنزفروشگاه – خبرنامه

 

نویسنده: حدیث

حدیث ملکی (بیسکولنز): کارگردان هنری و پژوهشگر کوچولویی که از دنیای انیمیشن به دنیای واقعی آمده، قصه ها و دانستنیها را به تصویر می کشد| کارشناس ارشد انیمیشن، کارشناس مهندسی نرم افزار http://bisculens.ir | http://hmaleki.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *