در ادامه سری تجربیات برنامه نویسی توی این پست میخوام به مهمترین مهارت های نرم از نظر خودم برای شغل برنامه نویسی بپردازم. این مهارت های شاید اساسی تر از خیلی از مهارت های سخت مثل تحلیل و طراحی یا کدنویسی و ... باشه. البته میتونه نسبت به شرایط هر شخص متفاوت باشه.
چیزی که خیلی توی زندگی و همچنین وجهه یک برنامه نویس موثره اینه که چه مهارت های نرمی داره و چطور داره همواره این مهارت های نرم اش رو تقویت میکنه. هاشم یک توسعه دهنده است، به دلیل ساعات کاری شناوری که اکثر شرکت های خصوصی دارن، به جای اینکه ساعت ۸ ساعت ۱۰ صبح خسته و خوابالو میاد شرکت و همیشه از ددلاین تسک هاش عقب هست و خسته است و دائما هم داره به هم تیمی اش انرژی منفی میده و به ددلاین های پروژه غر میزنه.
یک کلیشه خیلی معروف هست که میگه این مهارت های نرم هست که برنامه نویس معمولی رو از حرفه ای متمایز میکنه. طبیعی هست که اگر یک برنامه نویس منظم، متعهد و مسئولیت پذیر باشه نسبت به سایر همکارها مزیت رقابتی داره، جدا از این مسئله برای وقت خودش، کارفرما و مشتری ارزش زیادی قائله. شما جای کارفرما باشید به این توسعه دهنده حقوق و پاداش بیشتری نمی دید؟
توی این مدت کمی که به برنامه نویسی مشغولم به نظرم یک سری مهارت های نرم برای برنامه نویس ها ضروری هستند. از جمله مهارت های زیر:
راستش این مهارت ها خیلی توی آینده شغلی و کار برنامه نویس اثر گذاره.
توی این مطلب به تعریف کوتاهی از هر کدوم بسنده میکنم ولی خب برای توسعه هر کدوم مثل همیشه سایت های متمم و دوره های اساتید خوب این حوزه رو توصیه میکنم.
مهارت یادگیری مهمه، به شدت هم مهمه. واقعا چون برنامه نویس همون طور که میدونید باید در تمام مدت طول عمرش اهل یادگیری باشه. امیدوارم که شما هم مثل من از اینکه یادگیری یک مهارته، تعجب نکرده باشید! چون خودم به نظرم خیلی دیر(توی دوره لیسانس) تازه فهمیدم. ولی خب به هرحال ماهی رو هر وقت از آب بگیری میمیره عذر می خوام تازه است!!! :) (همیشه یکی از دوستان اینو میگفت)
بگذریم برنامه نویس اگه بدونه مدل یادگیری شخصی اش چیه و چطور میتونه در زمان مناسب با کیفیت مناسبی همه تکنولوژی ها و ابزارهای موردنیازش رو طبق مسیر شغلیش یاد بگیره.
بعد از همه گیری هوش مصنوعی داره این حوزه به احتمال زیاد دستخوش یک سری تغییرات اساسی میشه و خب فرایند سخت یادگیری همواره راحت تر میشه ولی فعلا من هنوز ابزار خاصی برای سرعت بخشیدن به فرایند یادگیری ندیدم که در دسترس عموم قرار گرفته باشه.
یک ویدئوی کوتاه از جادی در مورد یادگیری میتونه شروع خوبی برای این قسمت باشه. صحبت در مورد بهروز بودن و یادگیری دائم
راستش خیلی واضحه خیلی زمان عنصر کلیدی برای پروژه های تجاری محسوب میشه. زمانی که ددلاین توی بعضی از شرکت های سطح پایین میشه زدلاین (یعنی اگه به موقع تسک یا وظیفه ات رو انجام ندی اونقدرها هم اشکالی نداره فقط ضایع است! ) طبیعتا کیفیت پروژه ها بسیار افت میکنه، تیم فرسوده میشه و همچنین اعضای تیم فنی هم اهمال کاری میکنن. از طرفی نه چشم انداز یا اهداف بلند مدت شرکت به درستی برآورده میشه و نه میشه روی ددلاین تسک ها برای برنامه ریزی پروژه و کارها حساب باز کرد.
این میشه که پروژه خیلی بد توسعه داده میشه. گاهی همین موضوع به دلیل عدم انجام به موقع تعهدات بهتون بار حقوقی وارد میکنه و ... . راستش اون شرکت ها و برنامه نویس های حرفه ای که خیلی روی زمان و ددلاین پروژه ها حساسن همیشه اعتماد و اعتبار بیشتری دارن. ولی خب متاسفانه توی ایران فرهنگ این موضوع خیلی جدی گرفته نمیشه که به نظرم نباید چون همه این کار رو میکنن یک برنامه نویس هم تعهد کاری نداشته باشه و همیشه تسک ها رو با تاخیر انجام بده.
اصطلاحاتی مثل وقت خریدن از کارفرما برای انجام دیرتر پروژه، بهونه های واهی آوردن مثل تعطیلات، توسعه با باگ به صورت عامدانه و گرفتن هزینه های اضافی بابت برطرف کردن باگ ها، همچنین بهونه هایی مثل به عنوان کارمند فلان شرکت من مسئول انجام به موقع پروژه نیستم و ... نه تنها باعث لاپوشونی کیفیت افتضاح پروژه نمیشه و بی اخلاقی در انجام کار نمیشه بلکه باعث از بین رفتن کیفیت کار و همچنین پروژه میشه.
خیلی مهمه واقعا اگه شما توی زندگی تون منظم نباشید، قطعا توی کارتون هم منظم نیستید. خیلی این موضوع نیاز به باز کردن نداره ولی خب از ساعات خواب و بیداری فرد مشخص میشه. دیسیپلین برای موفقیت یک برنامه نویس به شدت اهمیت داره.
وقایع پیش بینی ناپذیر و ... وجود دارن ولی نظم موضوعی فراتر از این هاست.
مخصوصا توی فضای شرکت و کار تیمی، بازخورد صحیح به کارفرما، همکار، مدیر پروژه و ... همه و همه باعث میشه که خیلی حرفه ای تر به نظر برسید. بازخورد تعریف خاص خودش رو داره و نحوه بیان و ارتباطات در اون بسیار موثره.
در حقیقت ارتباط شما با همکارتون، مدیر شرکت، مدیرفنی حتی آبدارچی روی کارتون موثره. فرض کنید نتونید ارتباط موثری با واحد فروش بسادر واقعا انسان موجودی اجتماعی هست. متاسفانه شبانه روز پشت کامپیوتر نشستن و حرف زدن با موجودات یخی به نام کامپیوتر و شبکه های اجتماعی و مجازی باعث شده که برنامه نویس ها به لحاظ اجتماعی و ارتباطی خیلی مشکل پیدا کنن.
این موضوع وقتی که شما نتونید با بازخورد صحیح ندادن، رودربایستی، خجالت و ... نتونید ارتباط موثری ایجاد کنید باعث ایجاد مشکلات کلی حتی توی روند کلی پروژه و ... میشه. بسیار دیدم که توسعه دهنده تیم به خاطر خجالت و رودربایستی به کارفرما زمان اشتباهی رو برای ددلاین پیشنهاد میده و از طرفی چون بلد نیست که سر زمان انجام پروژه مذاکره کنه باعث میشه کارفرما ازش سوء استفاده کنه. و زمانی که شما تحت فشار دارید ددلاین ها رو انجام میدید کافیه که به یک ددلاین نرسید اون جاست که توی مذاکره برگ برنده میوفته دست کارفرما.
همکارتون بهتون میگه که فلان کار رو انجام بده ولی شما چون حواس تون پرت پروژه و تسک هاتونه از روی عادت میگید باشه و اصلا متوجه نمی شید که چی گفت، منظورش از این حرف چی بود؟! درخواست بود یا اینکه میخواست موضوع دیگهای رو مطرح کنه؟ دارید با مدیر فنی صحبت میکنید و بهتون در مورد یک موضوع گوشزد می کنه اما چون شما منظورش رو متوجه نمیشید صرفا میگید بله، حتما حواسم هست ولی اصلا منظورش رو متوجه نمیشید، شاید باید معذرت خواهی کنید، شاید نیاز به بازخورد دارید و یا ... .
باورها و عقاید متفاوت باعث میشه که هر کسی معمولا توی ایران به دلایل فرهنگی منظور اصلی اش رو از بیان موضوعات پنهان کنه؛ مثلا مدیر بخش روابط انسانی بهمون بگه که باید بیشتر با واحد فروش تعامل داشته باشید اما شما با سوال پرسیدن باید بفهمید که چرا من که توی تیم فنی هستم باید با واحد فروش تعامل بیشتری داشته باشم و پروتکل ارتباطی چیه؟
اگه یاد بگیرید که فهوای کلامش رو کشف کنید قطعا یک صفر جلوترید. سریع تر میتونید باهاش ارتباط بگیرید، زبانش رو متوجه بشید و مخصوصا توی روزهای اول کاری خیلی سریع تر کارها رو پیش ببرید.
اهمیت مذاکره با مدیر پروژه برای تقسیم بندی تسکها، کارفرما برای تخمین زمان انجام تسکها و همچنین به عنوان فریلنسر توی مذاکره با مشتری پروژه بی نهایت مهمه. خیلی از برنامهنویس هایی که دارن به شکل کارمندی کار میکنند فکر میکنند که باید هر ددلاینی که بهشون گفتن رو فوری بپذیرن. راستش بعضی از کارفرماها مخصوصا از نوع بیرحمش از خداشه که کار بیشتری در زمان کمتری انجام بشه؛ فشار کاری و فرسودگی شغلی هم اصلا براشون مهم نیست اگه شما مهارت مذاکره نداشته باشید قطعا یک روز زیر فشار کاری له میشید. نمیدونید هرچقدر بتونید بهتر مذاکره کنید کار راحت تر و البته درآمد بیشتری دارید.
اهمیتش رو زمانی متوجه میشید که بعد از انجام پروژه های دوره های آموزشی، کلاس های دانشگاهی و کلی تکلیف توی دوران مدرسه وارد فرایند توسعه تیمی یک نرم افزار بشید. این جاست که می بینید کوچک ترین اشتباه شما میتونه بزرگ ترین مشکلات رو توی تیم رغم بزنه. مثلا فرض کنید توی یک شرکت کوچک هستید و به اشتباه زمان یک تسک رو زودتر تخمین میزنید و به هر دلیلی این زمان به مشتری اعلام میشه و وقتی تسک انجام نمیشه از مدیر فنی تا تیم پشتیبانی و فروش و ... همه درگیر میشن.
به دوش کشیدن وظایف دیگری، عدم توانایی کار گروهی، عدم ارتباط موثر در تیم، ناراحتی از همکاران، نارضایتی همکاران از شما و.. فقط بخشی از مشکلات برنامه نویس ها و توسعه دهنده هایی هست که این مهارت رو ندارن. اینکه توی سال های تحصیل هم به تنهایی درس خوندیم احتمالا مزید بر علت شده که شاید عملکردمون توی تیم مخصوصا در اولین سال های کاری اصلا قابل قبول نباشه. راستی اگه توی گیت به تنهایی کار میکردید وقتی که روی پروژه ای با چند ده نفر کار کنید متوجه تفاوت کار در ابزارها هم میشید.
مهارت های نرم به همین ها خلاصه نمیشن اما به نظرم شاید این ها مهم ترین مهارت های نرمی هستن که یک برنامه نویس برای حرفه ای تر کردن خودش واجبه که اگه نداره بره یادش بگیره و اگه نداره تقویت اش کنه.
Kirsten Perry
Sed veritatis dolore
پاسخ