سلام به همه دوستان،

واقعا سر در گم شدم وظیفه یک برنامه نویس دات نت در ایران چیه؟ باید چه مباحثی رو یاد داشته باشه؟

طرف نوشته مسلط به C#‎‎‎, SQL Server و مسلط به دات نت.

آیا یک فرد مسلط به سی شارپ باید با همه مباحث زیر آشنا باشه:

دات نت فریم ورک به صورت کامل تا سطح بررسی کد IL اسمبلی ها و کالبد شکافی فایل های PE
Socket Programming
Ado.net
Linq
Entity Framework
NHibernate
Wpf
Wcf
Crystal report
.Net Security
Xml Serialization
Registry Managment
Graphic 2D & 3D in some case
آشنایی با امکانات مختلف IDE به عنوان مثال Dotfuscator و ...
و خیلی از موارد دیگه


حالا همه اینها به کنار، به عنوان یک برنامه نویس باید آیا اینها رو هم بلد باشیم؟
مباحث مهندسی نرم افزار مثل:
آشنایی با مباحث تست نرم افزار مشابه تست آزمایش واحد، آزمایش جامعیت و ...
روش نسخه گذاری برنامه.
روش مدیریت فایل های پروژه
آشنایی با نرم افزارهای کنترل نسخه شبیه subversion
آشنایی با متد های Agile مثلا اسکرام در توسعه کار به صورت تیمی
آشنایی با مباحث مدیریت پروژه برای برنامه نویسان
آشنایی با Design Pattern ها
آشنایی با معماری نرم افزار
استانداردهای کد نویسی
آشنایی با مباحث طراحی واسط کاربری (و جدیدا تجربه کاربری یا UX)
و هزار و یک چیز دیگه.

اگه لازم نیست همه اینها رو بلد باشیم؟ پس این چه تسلطیه؟
اگه باید بلد باشیم؟ پس چه طوری باید این همه مطلب رو بگیریم؟ خدایی وقت نمیشه، بعضی از اونها چندین کتاب داره و کلی ریزه کاری!

واقعا نمیشه استاندارد کد نویسی رو رعایت نکرد و گفت کد من مرتبه.
واقعا نمیشه گفت بدون آشنایی با الگوهای طراحی برنامه نوشتن ، از شی گرایی استفاده میکنیم.
واقعا نمیشه بدون آشنایی با اصول طراحی تجربه کاربری، کار چشم گیری ارائه داد.
بدون wpf نمیشه بعضی زیبایی سازیها رو انجام داد.
بدون unit testing گسترش برنامه و تغییر های احتمالی آینده خیلی ریسک زیادی داره و با کوچکترین تغییر کلی ممکنه مشکل به وجود بیاد که نتونیم حتی ظرف ماه ها مشکل رو پیدا کنیم.
بدون استفاده از نرم افزارهای کنترل نسخه ، ممکنه کل اطلاعاتمون بپره!
بدون آشنایی با مباحث مدیریتی نمی تونیم پروژه امون رو به خوبی مدیریت کنیم و یا در تیم کار کنیم.
بدون آشنایی با Entity Framework و یا ado.net نمی تونیم برنامه های پایگاه داده ی کارا و پربازدهی بنویسیم.

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

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

دوستان واقعا قضیه چیه؟ تا کجا باید یاد بگیریم؟
آیا برنامه نویس مسلط که میگن یعنی همین؟ آیا نیازی نیست که همه این ها رو بلد باشیم؟ اگه نه خیلی از مشکلات که در بالا ذکر شد به وجود می آد ، اگه آره چه جوری یاد بگیریم؟

ما باید به چی قانع باشیم؟ چی یاد بگیریم؟ و وظیفه اصلی ما به عنوان یک برنامه نویس چیه؟

دوستان با تجربه ، پاسخ های شما واقعا دلگرم کننده خواهد بود. (پاسخ هایی که واقعا در خور قانع کردن دغدغه های این تاپیک باشه).

با این حساب بیشتر ترجیح می دم اصلا برنامه نویس نباشم تا اینکه برنامه نویس شلخته و غیر مسلطی باشم.

با سپاس/.