راهکارهایی برای مشتری، یا رزومه

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

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

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

متاسفانه در دنیای واقعی خیلی این اتفاق نمی افتد. تصمیمات برنامه نویس ها ممکن است بیشتر بر مبنای اثر آن موضوع خاص روی رزومه شخص گرفته شود. مثلا در انتخاب این که یک پروژه تحت وب single page باشد یا نه، قبل از این که به نیاز مشتری توجه شود ممکن است به سابقه کاری و فرصت کسب تجربه شخصی و اثر موضوع sinple page application روی روزمه شخص توجه شود.

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

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

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

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

*ایده اصلی این مطلب از یکی از بخش های کتاب ۹۷Things Every Software Architect Should Know گرفته شده است.


تصمیمات اقتصادی تصمیمات احساسی

درسی از یک نرم افزار ۱۵ دقیقه ای

مهارت های غیر فنی یک برنامه نویس

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

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

در حالت کلی موقعیت و درآمد بیشتر در برنامه نویسی الزاما از دانش فنی ناشی نمی شود. تقریبا در همه رشته های مهندسی علاوه بر دانش فنی که لازمه کار است، نیاز است فرد مهارت هایی داشته باشد. نمونه ای از این مهارت ها به صورت زیر می باشند:

۱) شرکت در جلسات و مدیریت آنها

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

۲) برقراری ارتباط

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

۳) قابلیت تحلیل انتظار مشتریان

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

۴) کار تیمی فوق العاده

برنامه نویسی و تولید نرم افزار به شدت کار تیمی ای است. شما نمی توانید به صورت انفرادی پیشرفت کنید. پیشرفت شما در گرو مهارت شما در انجام تیمی کارهاست.

۵) آموزش

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

موارد فوق چند مورد از مهارت هایی بود که می توان برای یک برنامه نویس در نظر گرفت. موارد پیشنهادی دیگری را در نظر دارید؟

خوب رزومه بنویسیم

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

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

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

  • بزرگنمایی نکنید: اگر هدف شما از ارسال رزومه تان کلاه برداری باشد که هیچ، در غیر این صورت همه چیز را عین واقعیت ذکر کنید. نه بیشتر، نه کمتر. نحوه قسم خوردن در دادگاهها خیلی به درک این موضوع کمک می کند. زمانی که کسی برای شهادت احضار می شود به سه مورد در قسم نامه خود اشاره می کند: این که واقعیت را بیان کند، همه واقعیت را بیان کند، چیزی جز واقعیت به زبان نیاورد. این روش تفکر(شاید نه به این اندازه سخت گیرانه) کمک می کند که رزومه ای سالم تنظیم کنید.
  • همه چیز را بنویسید: همان طور که در بند بالا امده، هر چیزی که حتی حس نمی کنید که نیاز است در رزومه وجود داشته باشد را هم بنویسید (البته بیشتر منظورم دستاوردها، علایق و مواردی از این دست است). نکته ها و مواردی مانند علایقتان در زمان های آزاد. تفریحات ورزشی، روش های یادگیری، زمانی که طول کشیده مورد خاصی را یاد بگیرید (البته اگر کم بوده!)، مهارت ارتباط با مشتری را هم اگر دارید حتما ذکر کنید.
  • از سطوح مهارتی قابل درکی استفاده کنید: به طور مثال همیشه در رزومه ای که تنظیم می کنید مراقب استفاده از لغاتی مانند: آشنایی با… ، مسلط به… ، مهارت در …. باشید. اگر حس می کنید لغات مورد استفاده در سطوح مهارتی تان موجب ابهام یا برداشت نادرست خواهند شد حتما تعریفی از لغات مورد استفاده تان را در بخشی از رزومه ذکر کنید. نمونه از تعریف های که خود من در رزومه هایم استفاده می کنم به صورت زیر است.
    آشنایی با: به معنی این است که در زمینه مورد بحث مطالعه داشته ام، مثلا یک برنامه hello world در آن نوشته ام. Scope تکنولوژی یا زبان مورد نظر را می دانم. ولی هیچ پروژه ی جدی با آن انجام نداده ام.
    تخصص در: به این معنی است مطالعه cover to cover در زمینه مورد بحث داشته ام و پروژه های جدی در این زمینه را مدت کوتاهی است شروع کرده ام.
    تجربه و تخصص در : به این معنی است که علاوه بر این که مطالعه cover to cover داشته ام مدت نسبتا طولانی در زمینه مورد بحث کار کرده ام.
    این ها فقط سه مورد کوچک از نحوه دسته بندی تخصص های من در تنظیم رزومه کاری برنامه نویسی، هستند. به طور قطع می توان هریک از این سطوع را بسط داد و موارد ریزتری را هم از بین این ها استنباط کرد. نکته ای که قصد بیان کردنش را داشتم موضوع مشخص کردن تعاریف در سطوح تخصصی بود. قطعا هر کسی بر اساس تجربه خود می تواند تعاریف جامع و کارامدی تهیه کند. خوشحال می شوم تعاریف خودتان را با من هم در میان بگذارید.
  • اگر جایی مقاله یا مطلبی می نویسید حتما ذکر کنید.
  • در رزومه مکان مناسبی برای ذکر تجربیات تدریس، آموزش به دیگران در نظر بگیرید.
  • خط و هدف شما در رشته برنامه نویسی باید مشخص باشد: خود من اگر فردی با ۴ سال سابقه رزومه ای برای من ارسال می کرد که در آن آمادگی فرد برای برنامه نویسی در اندروید، وب، برنامه نویسی میکرو کنترلر ذکر شده بود، خیلی به این شخص از نظر فنی و تخصصی اعتماد نمی کردم. حتی از نظر ثبات فکری نیز خیلی این فرد قابل اعتماد نمی بود. در رشته برنامه نویسی بعضی تغییر زمینه ها کم از تغییر شغل ندارند. پس اگر کسی با این اندازه سابقه امادگی خود را برای انجام کارهایی با این سطح تفاوت اعلام کند نمی توان خیلی به عمق و وسعت تخصص فرد در هر یک از این زمینه ها اعتماد کرد (مگر فرد مورد نظر توانایی خاصی داشته باشد). همین موضوع را می توان به بیشتر زمینه ها تعمیم داد. همیشه در نظر داشته باشید که برای زندگی شغلی خود عنوانی داشته باشید. مثلا من به خودم برنامه نویس وب می گویم. شاید کسی به خودش برنامه نویس موبایل بگوید، شاید کس دیگری خود را معمار ERP می نامد. رزومه همه این افراد باید گویای رابطه منطقی بین عنوانی که ارائه می کنند و تخصص هایی که ذکر می کنند باشد.

امیدوارم همیشه نگارش رزومه جدید برایتان خبر از پیشرفت شغلی بدهد.