مدتی پیش، یکی از دوستانم در مکاتبهای برایم نوشت که شما در جلسات خود اشاره میکنید که دانشگاهها نتوانستهاند مهندس نرمافزار کارآمد به بازار تحویل دهند، به نظر شما مهندس نرمافزار کارآمد کیست؟
بد ندیدم پاسخی را که به ایشان دادم، اینجا منتشر کنم … شاید برای دوستان جوانم در این رشته خالی از لطف نباشد:
به نظر من مهندس نرمافزار کسی است که:
– مدرک دانشگاهی در رشته مهندسی کامپیوتر داشته باشه.
– به سادگی راهحل مناسب و سادهای را برای حل مسائل در طراحی و توسعه نرمافزار پیدا کنه.
– تمرین زیاد داشته باشه و عاشق برنامه نویسی باشه … طوری که تا یک ماژول تمام نشده نتونه از پای دستگاه بلندشه …
– با دقّت زیاد کد بزنه، به طوری که با یکی دو بار تست و debug، نرمافزار کاری که باید رو انجام بده.
– با زبانهای برنامهسازی متنوعی بتونه کار کنه، هر چند در یکی دو تا از آنها تبحّر بیشتری داشته باشه.
– مسائل را زیادی بزرگ و هیجانانگیز نکنه … و البته هیجانزده نشه و از مسائل نرمافزاری برای خودش غول نسازه.
– پول برای او کمتر از درست کارکردن نرمافزاری که نوشته مهم باشه …
– ساعت کار برای او کمتر از درست کارکردن نرمافزاری که نوشته مهم باشه …
– توان کار تیمی داشته باشه و بودنش در تیم مسائل رو سادهتر کنه و نه پیچیدهتر …
– اصلا حتی یک مرتبه نق نزنه و غرغر نکنه … فقط مسائلی رو که باید حل کنه، حل کنه و تحویل بده …
– حتما به شدّت منظّم باشه … چه در کارکرد، چه در تفکر و چه در اخلاق حرفهای …
– صبر داشته باشه و در صورتی که مسئلهای پیش آمد فقط مسئله رو حل کنه …
– توجه زیادی به جزئیات داشته باشه … و جزئیات براش خیلی مهم باشه … خیلی زیاد …
– با سلیقه باشه و چه در UI و چه در back-end بشه کاری رو که خودش طراحی کرده تحویل گرفت.
– به اندازه کافی برای خودش و نرمافزاری که نوشته احترام قائل باشه به طوری که اون رو جزئی از خودش بدونه …
– دانش کافی در زمینه علوم کامپیوتر، طراحی الگوریتم و معماری نرمافزار داشته باشه … در واقع بشه روی راهحلهایی که میده حساب کرد …
– قبل از اینکه حرف بزنه، عقلش رو به کار بندازه و وقتی حرفی میزنه، چیزی بگه که مسئلهای رو حل میکنه … نه هیچ چیز دیگه …
– بتونه Re-usability رو درک کنه … و همیشه همه کارهاش رو بر اساس ماژولهایی که تا حالا نوشته پیش ببره … بنابراین روز به روز سرعت کارکردش بیشتر میشه …
– براش مهم باشه نرمافزاری که نوشته کجا، چطور و چه کاری میکنه.
– مسئولیت پذیر باشه …
– هیچوقت، حتی یک غلط املائی در نوشتههاش (به هر زبانی) نداشته باشه …
– حرف و عملش معتبر باشه و بشه روش حساب کرد که وقتی مسئلهای رو برای حل کردن تحویل میگیره، حل شده تحویل بده (نه اینکه دوباره ۵ نفر لازم باشه که ببینن چه کرده)
– نسبت به کاری که میکنه حس داشته باشه … اصولا مهندسی نرمافزار زیاد با منطق مطلق سازگار نیست و حتما لازمه مهندس نرمافزار با شهود و حسّش خیلی از مسائل رو حل کنه …
.
البته این رو هم بگم … این موارد فقط خلاصهای برای یک مهندس نرمافزار هست و در مورد IT man موضوع کاملا متفاوته …
اشتباهی که جا افتاده اینه که جوونترها فکر میکنند چون لیسانس و فوق لیسانس و دکترا گرفتن تو این رشته، میتونن توش موفق بشن … که اصلا اینطوری نیست … حداقل در سالهای کاری من، این اصلا دلیل خوبی نبوده …
.
و اما برای طراح نرمافزار مهارتهای تکمیلی نسبت به برنامهنویس به ذهنم میرسه که میتونم در عبارات زیر خلاصهشون کنم:
– به نظر من، کسی در حوزه طراحی نرمافزار موفق میشه که هیچ مانعی در ذهنش در هیچ زمینهای نداشته باشه … هیچ چیزی رو ترمز تجربه کردن خودش ندونه …
– به نظرم مجموعهای از خلاقیت، شجاعت، تهوّر و جسارت حرف اول رو در طراحی نرمافزار میزنه … که خود به خود تجربه زیاد رو به دنبال خودش میاره و بعد سلیقه رو و بعد ظرافت دیدگاه رو …
– به نظرم کسی که بخواد طراح نرمافزار خوبی باشه، اول باید بتونه زندگی خودش رو طوری طراحی کنه که سراسر شادی و تنوع و تجربه باشه … تنوع در جزئیات … بعد میتونه قدم به دنیای طراحی نرمافزار بگذاره … دنیایی که وقتی واردش میشی هیچی توش نیست … اما وقتی میایی بیرون مردم دارن کاری رو میکنن که تو توی رویاهات میدیدی … سر مسائلی بحث میکنن که تو خالقش بودی … بخاطر چیزهایی خوشحالن که تو خواستی … اونطوری هستن که تو خواستی باشن …
– شرطش به نظر من اینه که اون فرد … از هر چارچوبی هر چند عمیق یا سطحی، رها باشه …
– با ادبیّات در حد زیادی آشنا باشه … بتونه شعر بخونه … متون ادبی مثل اشعار حافظ و سعدی رو بدون غلط بخونه … کمی تاریخ و کمی جغرافیا بدونه … غیر از زبان انگلیسی یک زبان دیگه رو بدونه و بتونه صحبت کنه … از هنر سررشته داشته باشه … تفریح رو بشناسه … موزیک رو خوب بدونه … سالم باشه … خوشحال باشه … طبیعت رو لمس کرده باشه … تو تکنولوژی غوطهور باشه …
.
و اگر در هر کدوم از موارد غیر از اینا باشه واقعا فکر نمیکنم بتونه چیزی رو طراحی کنه …
نهایتا شاید بتونه کپی کنه …