PDA

View Full Version : مقایسه یک مهندس نرم افزار و برنامه نویس



میلاد قاضی پور
چهارشنبه 31 شهریور 1389, 19:02 عصر
سلام . اغلب وقتی اسم مهندس نرم افزار رو میشنویم خیلی ها همون برنامه نویس رو توی ذهن تجسم میکنن و من دیدم توی بعضی سایتها هم وقتی داره در مورد مهندس نرم افزار بحث میشه توی پرانتز جلو عنوان مهندس نرم افزار مینویسن (برنامه نویس) . میخوام بدونم یک مهندس نرم افزار با یک برنامه نویس چه تفاوت هایی از لحاظ سطح علمی داره . منظورم اینه که کسی که مدرک مهندسی نرم افزار رو (البته نه از دانشگاههای در پیت) میگیره چه چیزهایی بلده که یک برنامه نویس خودساخته بلد نیست . طبق بررسی هایی که کردم تاحدودی حقوق مهندسین نرم افزار بالاتر هست .

Alireza_Salehi
چهارشنبه 31 شهریور 1389, 21:03 عصر
قسمت عمده درسهای مهندسی نرم افزار تحلیل، طراحی و حل مسئله است و کدنویسی بخش کمتری از درسهاست.

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

Felony
پنج شنبه 01 مهر 1389, 15:37 عصر
مباحث طراحی و تولید نرم افزار ، طراحی الگوریتم ، ساختمان داده ، اصول مهندسی نرم افزار و ... که توی سر فصل های کتب خارجی یا تو گوگل میتونید پیداشون کنید ، یکی از مهمین ترین هاشون همون ساختمان داده هست .

FastCode
پنج شنبه 01 مهر 1389, 16:08 عصر
یعنی برنامه نویسها عملاً به درد R&D نمیخورن؟درسته؟

Salar Ashgi
پنج شنبه 01 مهر 1389, 16:12 عصر
عموما عمده کار یک برنامه نویس ، ذاتا کد نویسی است در حالیکه یک مهندس نرم افزار میتواند کد نویس
نباشد و بلکه کدنویسی یکی از زمینه های کاری یک مهندس نرم افزار است ، سایر فعالیتها :
طراحی ، تحلیل ، عیب یابی ، تست و ... سیستم های نرم افزاری از زمینه های تحقیقاتی و کاری عمده یک
مهندس نرم افزار میتواند باشد . در علم مهندسی نرم افزار مباحث زیادی مطرح میشوند که به احتمال قوی
یک کدنویس با آنها تا بحال برخورد نداشته است ، مثلا در دروس هوش مصنوعی ، یادگیری ماشین ، مباحث
طراحی سیستم ها (پروژه های نرم افزاری) هوشمند ، مباحث الگوریتم های تشخیص چهره ، طراحی
سیستم هایی که انسان گونه عمل میکنند و در دیگر دروس اصول مهندسی نرم افزار جهت مدیریت و تحلیل پروژه های
نرم افزاری و ... مطرح میشوند ./

میلاد قاضی پور
پنج شنبه 01 مهر 1389, 17:03 عصر
اما یک برنامه نویس خوب هم تقریبا از این چیزایی که میگید مثل تحلیل و طراحی و الگوریتم و ... هم سر در میاره و الا برنامه نویس رو باید همون تایپیست دونست . پس برنامه نویسا چند قدم باید مهندسین نرم افزار باشن اینطور نیست ؟

khz-web1
جمعه 02 مهر 1389, 03:14 صبح
مهندس نرم افزار(تحلیلگر) با متدهایی مثل SSADM ویا XP و یا UML کار می کنه ... در اصل کار تحلیلگر شناخت نیاز ها -زمانبدی پروژه-طراحی پایگاه داده - و رسم دیاگرام هستش....
اما مهندس نرم افزار(برنامه نویس) با زبان های برنامه نویسی که خودتون بهتر از من میشناسیدشون کار می کنه و در ابتدا دیاگرام رو از تحلیلگر می گیره و تبدیل به کد می کنه....
دوستان اگه اطلاعات بیشتری دارند در اختیار ما هم قرار بدن...

NR_Nazifi
جمعه 02 مهر 1389, 13:55 عصر
برنامه نویسی که از تحلیل، تست و ... دیگر مسائل مربوط به تولید نرم افزار یر درنیاره عملا یک تایپیست بیشتر نیست!!!
برنامه نویس میتونه رشته های غیر از کامپیوتر باشه مثل مکانیک و برق و .... در این رشته ها هم برنامه نویسی تخصصی انجام میشه که مهندسین نرم افزار هم باید حتما برای انجام اونها دوره ببینند!

و اما مهندس نرم افزار به کسی میگن که به طور اکادمیک این رشته و زیر گرایشات اونو خونده باشه و یکسری مسائل تخصصی علم (نه فن) بیشتری نسبت به برنامه نویس (که انواعش رو گفتن) داشته باشه
در ضمن اینو هم در نظر بگیرین که خیلی ها مدرک مهندسی میگیرند (که ما به اونها میگیم مهندس نرم افزار) ولی از نرم افزار هیچی سر در نمیارند و بلعکسش هم است توانی که یک مهندس نرم افزار در تولید و مدیریت تولید یک نرم افزار داره رو هیچ کسی دیگه ای نداره :چشمک:

eshpilen
جمعه 02 مهر 1389, 16:32 عصر
آدم بخواد قدرت و کیفیت برنامه نویسیش رو بالا ببره، نیاز داره با خیلی از مسائل مهندسی نرم افزار هم آشنا بشه. اونم امثال ما که انفرادی کار میکنیم و تمام کارهای یک نیاز یا سفارش رو از ابتدا تا آخرش خودمون انجام میدیم.
اصلا یه حال برنامه نویسی به همینه که یه سیستم طراحی کنی که خودش الگوریتم باشه.

m.hamidreza
جمعه 02 مهر 1389, 21:13 عصر
سوال شما جوانب مختلفی داره.
یه نفر با پاس کردن 140 واحد درسی در رشته مهندسی کامپیوتر گرایش نرم افزار فارغ التحصیل میشه. از نگاه آکادمیک این بنده خدا میشه مهندس نرم افزار.
حالا محیط کار رو در نظر بگیرین. به این معنی که این فرد میخواد بره استخدام شه؛ اینجاست که که کارفرمایان نرم افزاری مجموعه شغل های یه مهندس نرم افزار آکادمیک رو تعریف میکنن. عملا یه نفر پس از فارغ التحصیلی مهارت زیادی برای کار کردن نداره یا بهتره بگم عمدتا به این صورت هست. ضمنا توجه داشته باشید که در اون 140 واحد دانشجو همه چی خونده! یعنی از گرافیک بگیر تا سیستم عامل تا برنامه نویسی سطح پایین بالا وسط، تحلیل طراحی، شبکه، ساختمان داده، طراحی الگوریتم، مهندسی نرم افزار، سخت افزار، مدیریت پروژه و .... ولی در مصاحبه استخدام این موارد به هیچ دردی نخواهد خورد! اینجوری که میشه که افراد فارغ التحصیل بر اساس همون نیاز کارفرمایان خودشون رو وفق میدن و عمدتا میشه برنامه نویس و اون هم NET. چرا که بیشترین تقاضا رو صف استخدام داره! اینجاست که اون همه استعدادی که در زمینه مثلا طراحی سیستم عامل داشته رو فراموش میکنه! چرا که نیاز یه چیز دیگه هست و با اون استعداد نمیتونه پول دربیاره و خرج زن و بچه بده...
پس بعنوان یک اصل اساسی همیشه کارفرمایان نرم افزاری مجموعه شغل یه کسی که بهش میگن مهندس نرم افزار رو تعیین میکنن. دقت کنید به استثنائات من کاری ندارم.
کلا نقش افراد در قالب تیم تولید و توسعه نرم افزار هست که تعریف میشه وگرنه نقش بدون تیم مفهومی نداره! برنامه نویسی در جامعه ما لزوما از این قاعده پیروی نمیکنه چون تعریف متفاوتی از اون تعریف اصلیش داره. در هیچ متدولوژی توسعه نرم افزاری ما نداریم که یه برنامه نویس هم UI Design کنه هم تحلیل طراحی هم تست هم Business Modeling و ... شاید یه نفر چند Role رو ایفا کنه ولی نه دیگه به این تنوعی! این میشه که اسم برنامه نویس که میاد توقع این موارد ازش میره و این کاملا غلط هست.
مهندس نرم افزار یک "عبارت" هست که ذات اجرایی و عملیاتی ای در تیم توسعه نرم افزار نداره. بعبارت دیگه نقش مطلق و وظیفه مندی نیست! حداقل در RUP من ندیدم. مثلا نقش هایی مثل مهندس فرآیند یا معمار نرم افزار وجود داره. ولی اینکه مهندس فرآیند یا معمار باید اصول مهندسی نرم افزار رو بدونه این بحثش جدا هست. من خود Role منظورمه.
نتیجتا مهندس نرم افزار با برنامه نویس قابل مقایسه نیست چون اینها لزوما نمیتونن مستقل از هم باشن. شما برای اینکه بهتر متوجه این مسائل بشین باید اینها رو در قالب تیم و نقش های اون تیم بررسی کنین.
یه مهندس نرم افزار با علم کاملی که به مفاهیم مهندسی داره Role تحلیلگر رو انتخاب میکنه، دوباره یه مهندس نرم افزار با علم کاملی که به مفاهیم مهندسی داره نقش Tester رو انتخاب میکنه و یکی هم میره در مرحله پیاده سازی و میشه برنامه نویس. مجموعه بزرگه همون مهندسی نرم افزار هست و اینا جزئی از مجموعه هستن.
بعد از این اتفاق این افراد صرفا به Role های خودشون میپردازن و تو اون زمینه کسب اطلاعات میکنن. این کاملا طبیعی هست که یه تحلیلگر بعد از 5 سال کار اطلاعات مرتبط با برنامه نویسیش به مراتب کمتر از یه برنامه نویسی میشه که 5 سال داره کد مینویسه یا بالعکس یه مدیر پروژه بعد از 5 سال به مراتب دانش مهندسی نرم افزارش از ابتدای کار بیشتر میشه در حالیکه که ممکنه دانش برنامه نویس از روز اول کمتر شه! توی این Role ها معمار نرم افزار بیشترین نردیکی رو به مهندسی نرم افزار داره و مستقیما در همین زمینه کسب اطلاعات میکنه. این Role ها همشون با مهندسی نرم افزار در تعامل هستن منتها از زوایای مختلف.
موفق باشید.

khz-web1
شنبه 03 مهر 1389, 13:28 عصر
یه نفر با پاس کردن 140 واحد درسی در رشته مهندسی کامپیوتر گرایش نرم افزار فارغ التحصیل میشه. از نگاه آکادمیک این بنده خدا میشه مهندس نرم افزار.
حالا محیط کار رو در نظر بگیرین. به این معنی که این فرد میخواد بره استخدام شه؛ اینجاست که که کارفرمایان نرم افزاری مجموعه شغل های یه مهندس نرم افزار آکادمیک رو تعریف میکنن. عملا یه نفر پس از فارغ التحصیلی مهارت زیادی برای کار کردن نداره یا بهتره بگم عمدتا به این صورت هست. ضمنا توجه داشته باشید که در اون 140 واحد دانشجو همه چی خونده! یعنی از گرافیک بگیر تا سیستم عامل تا برنامه نویسی سطح پایین بالا وسط، تحلیل طراحی، شبکه، ساختمان داده، طراحی الگوریتم، مهندسی نرم افزار، سخت افزار، مدیریت پروژه و .... ولی در مصاحبه استخدام این موارد به هیچ دردی نخواهد خورد! اینجوری که میشه که افراد فارغ التحصیل بر اساس همون نیاز کارفرمایان خودشون رو وفق میدن و عمدتا میشه برنامه نویس و اون هم NET. چرا که بیشترین تقاضا رو صف استخدام داره! اینجاست که اون همه استعدادی که در زمینه مثلا طراحی سیستم عامل داشته رو فراموش میکنه! چرا که نیاز یه چیز دیگه هست و با اون استعداد نمیتونه پول دربیاره و خرج زن و بچه بده...
پس بعنوان یک اصل اساسی همیشه کارفرمایان نرم افزاری مجموعه شغل یه کسی که بهش میگن مهندس نرم افزار رو تعیین میکنن. دقت کنید به استثنائات من کاری ندارم.
کلا نقش افراد در قالب تیم تولید و توسعه نرم افزار هست که تعریف میشه وگرنه نقش بدون تیم مفهومی نداره! برنامه نویسی در جامعه ما لزوما از این قاعده پیروی نمیکنه چون تعریف متفاوتی از اون تعریف اصلیش داره. در هیچ متدولوژی توسعه نرم افزاری ما نداریم که یه برنامه نویس هم UI Design کنه هم تحلیل طراحی هم تست هم Business Modeling و ... شاید یه نفر چند Role رو ایفا کنه ولی نه دیگه به این تنوعی! این میشه که اسم برنامه نویس که میاد توقع این موارد ازش میره و این کاملا غلط هست.
مهندس نرم افزار یک "عبارت" هست که ذات اجرایی و عملیاتی ای در تیم توسعه نرم افزار نداره. بعبارت دیگه نقش مطلق و وظیفه مندی نیست! حداقل در RUP من ندیدم. مثلا نقش هایی مثل مهندس فرآیند یا معمار نرم افزار وجود داره. ولی اینکه مهندس فرآیند یا معمار باید اصول مهندسی نرم افزار رو بدونه این بحثش جدا هست. من خود Role منظورمه.
نتیجتا مهندس نرم افزار با برنامه نویس قابل مقایسه نیست چون اینها لزوما نمیتونن مستقل از هم باشن. شما برای اینکه بهتر متوجه این مسائل بشین باید اینها رو در قالب تیم و نقش های اون تیم بررسی کنین.
یه مهندس نرم افزار با علم کاملی که به مفاهیم مهندسی داره Role تحلیلگر رو انتخاب میکنه، دوباره یه مهندس نرم افزار با علم کاملی که به مفاهیم مهندسی داره نقش Tester رو انتخاب میکنه و یکی هم میره در مرحله پیاده سازی و میشه برنامه نویس. مجموعه بزرگه همون مهندسی نرم افزار هست و اینا جزئی از مجموعه هستن.
بعد از این اتفاق این افراد صرفا به Role های خودشون میپردازن و تو اون زمینه کسب اطلاعات میکنن. این کاملا طبیعی هست که یه تحلیلگر بعد از 5 سال کار اطلاعات مرتبط با برنامه نویسیش به مراتب کمتر از یه برنامه نویسی میشه که 5 سال داره کد مینویسه یا بالعکس یه مدیر پروژه بعد از 5 سال به مراتب دانش مهندسی نرم افزارش از ابتدای کار بیشتر میشه در حالیکه که ممکنه دانش برنامه نویس از روز اول کمتر شه! توی این Role ها معمار نرم افزار بیشترین نردیکی رو به مهندسی نرم افزار داره و مستقیما در همین زمینه کسب اطلاعات میکنه. این Role ها همشون با مهندسی نرم افزار در تعامل هستن منتها از زوایای مختلف.
موفق باشید.

با نظر شما کاملا موافق هستم


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

و اما مهندس نرم افزار به کسی میگن که به طور اکادمیک این رشته و زیر گرایشات اونو خونده باشه و یکسری مسائل تخصصی علم (نه فن) بیشتری نسبت به برنامه نویس (که انواعش رو گفتن) داشته باشه
در ضمن اینو هم در نظر بگیرین که خیلی ها مدرک مهندسی میگیرند (که ما به اونها میگیم مهندس نرم افزار) ولی از نرم افزار هیچی سر در نمیارند و بلعکسش هم است توانی که یک مهندس نرم افزار در تولید و مدیریت تولید یک نرم افزار داره رو هیچ کسی دیگه ای نداره

با نظرشما مخالف هستم ...
چرا که برنامه نویسی سطح پیاده سازی هستش و تجزیه تحلیل سطح ابتدائی پروژه....
من خیلی از وب سایت هائی که طراحی کردم از هیچ یک از متد های تجزیه و تحلیل استفاده نکردم!... آیا من تاپیستی بیش نیستم؟
درست است که تحلیل ذهنی کوچکی انجام دادم... ولی در عمل اونی که تحلیل آخر رو از مهندس نرم افزار میگره باز هم همین محاسبات رو می کنه....

Programmer 1
شنبه 03 مهر 1389, 22:41 عصر
ضمن تاييد گفته هاي آقاي m.hamidreza اضافه مي كنم :
جواب اين سوال هم سخته هم آسون ! ولي سوال جالبيه ( از لحاظ پاسخ دادن به سوال ) ،

خيلي ساده براي اينكه تفاوت اين دو را درك كنيد اين سناريو رو مجسم كنيد و يا حتي اجرا كنيد :
شما به عنوان يك مهندس نرم افزار ( مهندس نرم افزار قلابي به قول بعضي ها برنامه نويس! ) سعي كنيد يك سيستم عامل رو از پايه طراحي كنيد ، ببينيد چه چيزهايي رو بلد نيستيد ، اون چيزها رو در حالت كلي يك مهندس نرم افزار آكادميك ( مهندس نرم افزار واقعي! ) مي دونه ولي صرفا يك مهندس نرم افزار غير آكادميك ( همون برنامه نويس بهتره ) نمي دونه و فقط مي تونه جزئي از كار رو پيش ببره ، شما اگه متودولوژي RUP رو مطالعه اي داشته باشيد متوجه مي شيد كه هر نقشي كه در يك تيم توسعه وجود داره در واقع يك مهندس نرم افزار رشد يافته در شاخه اي خاصه . در واقع اگه مهندسي نرم افزار را به مخزني از اطلاعات تشبيه كنيم ،‌ هر نقشي از اطلاعات خاصي از اين مخزن استفاده مي كنه و البته باقي اطلاعات مخزن نيز در فهم همان اطلاعات خاص كمك كننده است يعني : يك مهندس نرم افزار ميشه برنامه نويس ، يكي ديگه ميشه مدير پروژه ، يك ديگه ميشه تحليلگر و ... ، حتي بر طبق نياز هاي زماني خاص ،‌ همان مهندس نرم افزاري كه نقش برنامه نويس رو ايفا مي كنه ،‌ ميشه مثلا برنامه نويس تحت وب ( اون هم مثلا فقط ASP.NET ) و ... .

همه اين نقش ها در كنار هم هستند كه مثلا يك سيستم عامل به عرصه ظهور در مي آد و ما هيچ وقت نمي تونيم مثلا بگيم سيستم عامل فلان توسط فلان فرد توسعه پيدا كرده است .
اميدوارم كه تفاوت رو درك كرده باشيد ، باز هم اگر جايي ابهام داشتيد بيان كنيد ،

اين گونه مباحث بهتره با سوال هاي گوناگون از طرف سوال كننده باز بشه چون گسترده است و معلوم نيست كه بايد از كجا شروع كرد و به كجا رسيد .

با تشكر /.

NR_Nazifi
دوشنبه 05 مهر 1389, 10:11 صبح
من با نظر شما مخالف نیستم
بله یک در طراحی سیستم هرکس یک نقشی دارد ولی برای اینکه یک گروه تولید نرم افزار بتونی بخوبی کار کنه همه افراد گروه باید یک درک حداقلی از دیگر بخش ها داشته باشند
یک برنامه نویس نمی تونه ساختاری را که یک تحلیل گر ایجاد کرده را پیاده سازی کنه مگر اینکه با مباحث تحلیل یک نرم افزار اشنایی داشته باشه
اگر جز اینه بگید!