مهم ترین مهارت های نرم برای توسعه دهندگان

مهم ترین مهارت های نرم برای توسعه دهندگان

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

مهارت نرم چیست؟ 

در فرهنگ لغت آکسفورد مهارت های نرم به این صورت توضیح داده شده است: 

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

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

تعریف ما از مهارت نرم این است: 

مهارت های غیر فنی + آداب معاشرت = مهارت نرم

مهارت های نرم موارد زیادی را شامل می شود، از نحوه ی لباس پوشیدن ابتدایی تا پیام دادن به همکار و مدیر، از آداب معاشرت در محیط کار تا نحوه ی ارتباط برقرار کردن با دیگران، همه ی این موارد جز مهارت های نرم هستند. 

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

اهمیت مهارت نرم 

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

می دانید چرا؟ 

اجازه دهید برایتان مثالی بیاورم. 

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

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

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

مهم ترین مهارت های نرم برای توسعه دهندگان 

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

قبل از این که بخواهم در مورد این مهارت ها صحبت کنم، لازم است نکته هایی را بگویم. 

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

بسیار خب، بهتر است با هم نگاهی به مهم ترین مهارت های نرم بیاندازیم. اگر بخواهیم بخش آداب معاشرت را فاکتور بگیریم (با این که بسیار مهم است)، مهارت های نرم به شرح زیر هستند: 

مهارت حل مسئله 

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

مهارت حل مساله

تفکر انتقادی

اگر می خواهید یک تیم مهندسی جمع کنید، به دنبال توسعه‌دهندگانی باشید که می توانند برای حل یک مشکل پیچیده، خودشان را به چالش بکشند. افرادی که به خودشان انگیزه می دهند تا بتوانند خلاقانه فکر کنند و رویکردهای غیرمتعارفی ارائه دهند. 

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

مهارت های ارتباطی

هیچ فرقی ندارد که شما یک توسعه دهنده ی تمام وقت، پاره وقت، پروژه ای یا دورکار باشید، نیاز است که توانایی ارتباط برقرار کردن با دیگران را داشته باشید. منظور از دیگران، کاربرهای پروژه، مدیرها و اعضای تیم هستند. 

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

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

برای نمونه بگویید: "بر اساس تجربه های مختلفی که در این زمینه کسب شده، فکر می کنم بتوانیم ایده شما را به شکلی بسیار بهتر اجرا کنیم". 

نکته مهمی که در مهارت های ارتباطی وجود دارد این است که، فکر نکنید که فقط باید مهارت های ارتباط گفتاری خوبی داشته باشید. در حال حاضر خیلی از ارتباط های از راه دور، به وسیله ی نرم افزار های مختلف انجام می شود مانند  Slack، ایمیل و واتس اپ، اسکایپ، گوگل میت و موارد دیگر. 

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

پس مهارت های ارتباطی آنلاین هم باید قوی باشد.

برای برقراری ارتباط موثر باید به چند نکته توجه داشت:

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

مهارت های بین فردی

در انتهای یک روز کاری، ممکن است یک توسعه دهنده، بهترین کدنویسی را انجام داده باشد اما نتوانسته باشد با سایر هم تیمی های خودش به خوبی کار کند، که به نظرم نتیجه ی کار آن توسعه دهنده را خراب می کند. یعنی به عنوان یک توسعه دهنده ی نرم افزار باید مهارت های بین فردی داشته باشید. 

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

مهارت های بین فردی

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

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

خودآگاهی

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

وقتی بدانید در چه زمینه ای نیاز به بهبود دارید، یعنی یک نوع اعتماد به نفس واقعی است که خودآگاهی را به یکی از مهارت های نرم حیاتی توسعه دهندگان نرم افزار، تبدیل می کند. 

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

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

یادگیری و خودآموزی

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

می خواهم این را بگویم که داشتن مهارت خودآموزی برای یک توسعه دهنده، بسیار مفید است. خودآموزی کمک می کند که توانایی شناسایی مشکل ها را داشته باشیم و تفکر حل مسئله را گسترش دهیم. 

هزاران توسعه دهنده هستند که بدون مدرک رسمی کامپیوتر وارد دنیای فناوری شدند، اما مهارت های نرم مهندسی کامپیوتر را دارند و توانسته اند موفق باشند. 

مسئوليت پذیری 

فرقی نمی کند در چه جایگاهی هستید، تازه کارید یا یک مدیر فنی متبحر. هر کاری هر چند کوچک و بی اهمیت به شما واگذار شود، شما مسئول آن هستید و باید آن را با دقت انجام دهید. 

اگر در کاری دچار اشتباه می شوید، باید اشتباهتان را بپذیرید و بدانید که پذیرفتن اشتباه، یک مهارت نرم است. در ضمن یادتان باشد هر کسی ممکن است اشتباه کند، اما توسعه دهندگان باید از آن به عنوان فرصتی برای یادگیری  استفاده کنند و مهم تر این که دوباره آن اشتباه را تکرار نکنند. 

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

مدیریت زمان

به عنوان یک توسعه دهنده باید عرض کنم که مدیریت زمان در انجام پروژه ها و تسک ها بسیار مهم است. حتی گاهی وقت ها، چند ساعت به کارهایی که باید انجام دهم فکر می کنم تا بتوانم برای آن ها زمان بندی مناسبی تعیین کنم. 

مدیریت زمان

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

هوش هیجانی

بیشتر مسئول های استخدامی، برای  هوش عاطفی (EQ مخفف emotional quotient) بیشتر از بهره ی هوشی (IQ مخفف Intelligence Quantity)، ارزش قائل هستند. هوش هیجانی یک مهارت ارزشمند است که نه تنها در مدیر ها بلکه در توسعه دهندگان نیز به شدت به دنبال آن هستند. هوش هیجانی مهارتی است که تصور می شود به بهبود ارتباط ها، مدیریت و حل مسئله کمک می کند. 

به عنوان مثال، کارمند ها با EQ  بالا می توانند تحت فشار، خونسردی خود را حفظ کنند، در حالی که آن هایی که EQ  پایینی دارند، به طور معمول، سبک های ارتباطی منفعل یا تهاجمی خواهند داشت. 

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

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

همدلی

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

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

در دادن بازخورد به همکاران، مثبت خواهیم گفت و حتی اگر مخالف ایده ای باشیم، با نکته های مثبت صحبت کرده و مزایا و معایب کار یا ایده را برایش توضیح خواهیم داد. در ضمن همدلی باعث می شود همه چیز را از دید همکارتان ببینید و او را قضاوت نکنید. 

کار تیمی

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

قرار نیست همیشه موافق با همه ی افراد تیم باشیم اما باید بدانیم که همین دیدگاه های متفاوت است که باعث ساخت شرکت های موفق تر می شود. 

کار تیمی

مدیریت استرس و کنترل خشم 

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

مدیریت استرس و کنترل خشم

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

تصمیم گیری 

داشتن قدرت تصمصم گیری برای هر شخص در هر جایگاهی، نشان از اعتماد به نفسی است که از دانش و آگاهی او می آید. کاری به اعتماد به نفس کاذب ندارم. در این جا می خوام بگویم اگر در جایگاه خود (هر بخشی که هستید)، در هر زمینه ای که به شما سپرده شده است، قدرت تصمصم گیری نداشته باشید، از انجام آن کار هم ناتوان می شوید. 

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

ناگفته نماند قدرت تصمیم گیری شما باید بر اساس اختیار ها و مسئولیت هایی باشد که به شما داده شده و با دانش مناسب، می توان تصمیم درست و مناسبی گرفت. 

حرف پایانی 

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

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

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

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

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

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

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

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس