یکی بود یکی نبود! اول اول فقط کامپیوتر بود که حتی برنامه نویسی هم نمیشد! اصلا برنامه نویسی مطرح نبود و اصل کار با سخت افزار بود. ولی کم کم کارهای سپرده شده به کامپیوتر بزرگ و بزرگتر شدن و نمیشد که خود مهندسین سخت افزار برنامهها رو تولید کنن. اینجا بود که برنامهنویس به عنوان یک کار جدی مطرح شد...
برنامه نویس کسیه که ایده نرمافزار رو به واقعیت (کد) میرسونه. کسیه که با ریز مسایل درگیره. زبانها رو میشناسه، اون طوری که بتونه ازشون کار بکشه. تکنیکها و روشهای پیادهسازی رو میدونه که هم سریع باشه و هم کم خطا. و کسیه که میتونه راحت از بستههای آماده استفاده کنه و کلی کارهای انجام بده مثل اینکه شب بیدار بمونه تا یه برنامه رو راه بندازه
!
اما کم کم پروژهها بزرگتر و بزرگتر شدن و به صورت شخصی نمیشد پروژهها رو با این دانش فنی به تنهایی انجام دادو احساس شد که یه مهندسی این وسط لازم هست که بتونه پروژهها رو به ثمر برسونه. به همین دلیل هست که مهندسی نرمافزار ایجاد شد.
مهندس کارش حل مساله هست و مدیریت برای راهحلهاش. باید مدیریت بدونه تا بتونه کاری کنه که کار برنامه نویسی ساده تر بشه. پس اونه و خود مساله! برای این کار، سیستم رو اول تحلیل میکنه و میشه «تحلیلگر». پس قدم اول توی این کار اینه که پرسشگر باشه، کنجکاو و دقیق. تحلیل یعنی شناخت مهندس و تیم انجام پروژه از مساله. بعد از اینکه شناخت انجام شد، نوبت به طراحی میرسه و این یعنی «طراح». توی طراحی چیزایی که فهمیدیم رو به قالبی در میاریم که قابل برنامه نویسی باشه. اونجا
مهندس نرمافزار میتونه «برنامه نویس ارشد» باشه. بعد از پیاده سازی، نوبت به تست میرسه، مهندس نرمافزار میشه «مسئول تست». در کنار اینها هم یکی باید مدیریت کنه و «مدیر پروژه» هست که پروژه رو مدیریت میکنه. (البته کلی نقش دیگه داریم که من بیخیال شدم!
)
پس بسته به نقش، مهندس نرمافزار به حوزههای متفاوتی از دانش احتیاج داره؛ حالا میتونه توی چندتاش خبره تر باشه.
اما وقتی حرف از یه مهندس خوب نرمافزار میاد، به نظر من کسیه که قواعد بازی رو میدونه. کسی که خودش برنامهنویسی و سختیهاش رو حس نکرده باشه، به شکل طبیعی تصمیماتی که میگیره «از توی کتابهاست» و کتابها کمتر در مورد وقتی صحبت میکنن که یک صبح تا شب دنبال حل یه مشکل ساده باشی. کمتر از این میگن که اگه بخوای همه برنامهنویسها رو وادار کنی که یک IDE (محیط برنامه نویسی) خاص رو استفاده کنن، چه نکات ریزی داره. خود برنامهنویسی یک تجربه و آموزشه برای مهندسی نرمافزار هست. من خودم فکر میکنم مسیر برای تبدیل به یک مهندس نرمافزار از برنامهنویسی شروع میشه.
یه چیز دیگه هم بگم خوبه: دونستن برنامهنویسی به این معنی نیست که برای مهندس نرمافزار خوب شدن، کلی زبان برنامهنویسی رو یاد بگیره. باید
حتما و حتما یه زبان برنامهنویسی که در حد
تجاری کاربرد داشته باشه رو یاد بگیره. (++C، جاوا و یا خانواده net. اینا معروفترینها هستن. دوتای آخر پرکاربردتر هستن) این زبان رو باید به شکل تجاریش یاد بگیره. یعنی استفاده از بستههای آماده، کاربرد وب و مهمتر از همه پایگاه داده. یعنی یه زبان که همه جور (یا اکثر) برنامهها رو بشه باهاش نوشت. به همین دلیل یاد گرفتن زبانی مثل PHP به عنوان تنها زبان خوب نیست. چون یه زبانه برای کاربردهای وب.
امیدوارم به درد خورده باشه...