برای موفقیت در دنیای برنامهنویسی به چیزی بیش از مهارتهای برنامهنویسی که تحت عنوان مهارتهای سخت (Hard Skills) به آنها اشاره میشود نیاز دارید. موفقیت در این صنعت به ترکیبی از مهارتهای نرم و دانش فنی بستگی دارد. یک برنامهنویس تنها با تکیه بر مهارتهای تفکر انتقادی میتواند کدی بنویسد که به درستی کار میکند، آن هم زمانی که پروژه پیچیدهای را قبول میکنید که چالشهای زیادی دارد و تنها به واسطه صبر و پشتکار به سرانجام میرسد.
تقریبا همه برنامهنویسان به این نکته اذعان دارند که مهارتهای خاصی در برنامهنویسی کامپیوتری وجود دارد که باید بر آنها اشراف کامل داشته باشید. به عقیده برخی، اهمیت آنها در دنیای حرفهای کمتر از مهارتهای سخت نیست.
اگر بتوانید مشکلات را حل کنید، موضوعات را به سرعت یاد بگیرید، مشکلات و راهحلها را به خوبی برای عامه مردم شرح دهید، در درازمدت موفقیت بیشتری نسبت به تسلط بر یک یا چند فناوری سخت به دست خواهید آورد.
اگر میخواهید در حرفه برنامهنویسی پیشرفت کنید، در این مقاله به مهارتهای نرم کلیدی اشاره میکنیم که توجه به آنها باعث میشود به سرعت در حوزه کاری خود پیشرفت کنید.
1. توانایی حل مسئله (Problem-Solving)
حل مسئله ابزار فوقالعاده کارآمدی است که میتوانید در جعبه ابزار مهارتهای تخصصی داشته باشید. متاسفانه بسیاری از توسعهدهندگان، تنها روی ترکیب نحوی دستورات زبانهای برنامهنویسی، تسلط بر چارچوبهای مختلف نرمافزاری و کدنویسی تمرکز میکنند، اما توجه چندانی به تکنیک حل مسئله ندارند.
اما توانایی حل مسئله چیست؟ در سادهترین تعریف ابداع راهحلهایی برای مشکلاتی است که یک کسبوکار با آن روبرو است و تاکنون راهکاری برای حل آنها ابداع نشده است. پس از نوشتن کدها و ساخت برنامههای کاربردی، برنامه نویسان هرگونه مشکلی که ممکن است ظاهر شود را پیدا کرده و برطرف میکنند.
اینکار چندان سادهای نیست، زیرا حتی کوچکترین خطاها باعث میشوند تا عملکرد یک برنامه بهطور کامل مختل شود. بهطور معمول، توانایی حل مسئله خود به پنج مرحله زیر تقسیم میشود:
شناسایی مشکل: مشکل را بهطور واضح و شفاف بیان کنید و به خاطر داشته باشید که افراد مختلف ممکن است دیدگاههای متفاوتی از مسائل یا مشکلات داشته باشند.
درک منافع همه افراد: هنگامی که قصد ساخت یک برنامه کاربردی را دارید که ممکن است بر عملکرد بخشهای مختلف یک سازمان تاثیرگذار باشد، باید علایق و نیازمندیهای بخشهای مختلف درگیر را شناسایی کنید. بهطور معمول، ما منافع واقعی را نادیده میگیریم، زیرا تمرکزمان را تنها به یک راهحل خاص معطوف میکنیم. بهترین راه این است که منافع همه در نظر گرفته شود. این زمان برای شنیدن فعال است پس اختلافات را کنار گذاشته و به قصد فهمیدن به یکدیگر گوش دهید.
فهرست کردن راهحلهای ممکن: یکی از موضوعات مهمی که مرتبط با توانایی حل مسئله است، طوفان فکری است. طوفان فکری، به دورهمی و اندیشیدن تیمی با هدف پیدا کردن راهحلی عملی اشاره دارد.
طوفان فکری افراد را به تشویق به ارائه ایدههایی میکند که شاید در ابتدا جالب به نظر نرسند. با کمی دستکاری، بعضی از همین ایدهها میتوانند به راهحلهای خلاقانه تبدیل شوند. بعضی دیگر از آنها ممکن است جرقه ایدههای بعدی را بزنند. به این صورت ذهن افراد باز میشود و از چارچوب محصور فکری خود خارج میشوند.
مکتوب کنید: تنها به حافظه خود تکیه نکنید و سعی کنید تمام جزئیات و مفاهیمی که به آنها فکر میکنید را مستندسازی کنید.
ارزیابی و انتخاب بهترین گزینه: فهرستی که آماده کردهاید را دومرتبه بازبینی کرده و منافع خود را مشخص کنید. سپس گزینههای موجود را بررسی و ارزیابی و بهترین گزینه برای دستیابی به هدف مورد نظر را انتخاب کنید.
2. حافظه دقیق (Sharp Memory)
پس از تمرکز روی مجموعهای پیچیده از دستورالعملهای برنامه نویسی در یک روز، ممکن است مغز شما کمی خسته شود. این موضوع میتواند منجر به انباشتگی اطلاعات در ذهن شما شود که ممکن است باعث شود چیزهای ساده را فراموش کنید. اگرچه این موضوع مشکل خاصی ایجاد نمیکند، اما میتواند به پیشرفت شما در زمان برنامهنویسی آسیب جدی وارد کند.
یک کار به ظاهر شگفتانگیز که ممکن است به حافظهتان آسیب برساند، انجام چند کار بهطور همزمان است که به آن Multitasking گفته میشود. است. در حالی که بسیاری از مردم توانایی انجام چند کار را یکی از کارآمدترین مهارتهای نرم میدانند، اما این موضوع همیشه برای مغز مفید نیست.
مطالعهای که به مدت یک دهه توسط دانشگاه استنفورد انجام شد نشان داد که افرادی که اغلب با چندین نوع کار مختلف در یک زمان درگیر میشوند، به شدت در انجام کارهای ساده با مشکل روبرو میشوند و به بیان دقیقتر، عملکرد مغز آنها در انجام اینکارها به شکل عجیبی کاهش پیدا میکند. محققان توصیه میکنند عادات کاری خود را تغییر دهید تا انجام چند کار را به حداقل برسانید. به این صورت ممکن است حافظه و عملکرد مغزتان بهبود پیدا کند.
اگر تصور میکنید که حافظه شما به یک ریکاوری جدی نیاز دارد، تکنیکهای مختلفی در این زمینه وجود دارد. برخی از راههای آسان برای کمک به حافظه عبارتند از خوردن غذاهایی که عملکرد مغز را تقویت میکنند، ورزش کردن، خواب کافی، یادگیری یک سرگرمی جدید یا انجام بازیهای مغزی.
3. تنبلی کارآمد (Efficient Laziness)
این پاراگراف دقیقا برعکس آن چیزی است که همواره والدین به فرزندان خود گوشزد میکنند. با این حال، برخی از افراد موفق، مانند بیل گیتس، با یک شعار ساده زندگی میکنند: اگر می خواهید یک کار دشوار به سرعت و به بهترین شکل انجام شود، از یک فرد تنبل بپرسید تا بهترین راهحل را به شما پیشنهاد دهند.
افرادی که تنبل هستند، احتمالاً سریعترین راه را برای انجام کارآمد یک کار پیدا خواهند کرد. در این حوزه تنبلی رویکردی منفعلانه ندارد، بلکه کارآمد است. برای اینکه تنبلی را به یک مهارت نرم مثبت تبدیل کنید، باید وظایف را به موقع انجام دهید، اما در طول انجام پروژه از انجام کارهای غیرضروری صرفنظر کنید.
هدف برنامهنویسی اساسا سادهتر و کارآمد کردن فرآیندها برای شرکتها با هدف صرفهجویی در زمان و هزینه است. به عبارت دیگر، یک کسبوکار به افراد «تنبل» نیاز دارد تا فرآیندهای پیچیدهای را خودکار کنند که به دیگران اجازه میدهد کمی تنبلتر باشند! جالب آنکه اگر بتوانید از این تکنیک در ارتباط با زبانهای برنامهنویسی مثل سی، سیپلاسپلاس، جاوا، پایتون؛ جاوااسکریپت و HTML استفاده کنید، انجام کارها به شکل عجیبی سریعتر میشود.
4. خودانگیزشی و استقلال (Self-Motivation and Independence)
به نظر می رسد خودانگیزشی در نقطه مقابل پاراگراف قبل یعنی تنبلی است. با این حال، اگر کمی بیشتر روی این مفهوم متمرکز شوید، مشاهده میکنید که این دو مهارت نرم مکمل هم هستند و ممکن است در رسیدگی به کارهای پیچیده و رعایت ضربالاجلها به شما کمک کنند.
خودانگیزشی، به معنای انگیزه بخشی به خود برای ادامه حرکت به سمت جلو در مسیر زندگی یا کاری است. اگر به یک کودک بگوئیم، اگر اسباببازیهای پخش شدهاش را جمع کند، پاداشی میگیرد و اگر اینکار را انجام ندهد تنبیه میشود، در کودک انگیزهای به نام مسئولیتپذیری ایجاد میشود تا اینکار را انجام دهد.
این انگیزه از درون کودک سرچشمه نگرفته است و عاملی بیرونی این انگیزه را ایجاد کرده است. اگر این عامل بیرونی وجود نداشته باشد، احتمالا کودک به سراغ اسباب بازیهایش نرفته و آنها را جمع نمیکند. کودکان عموما خود انگیزشی ندارند، اما برای افراد بالغ این موضوع کاملا متفاوت است.
ضربالاجلها در حرفه برنامهنویسی مهم هستند، زیرا اغلب به معنای مؤثرتر کردن و به احتمال زیاد کارآمدتر کردن مشاغل هستند. برنامهنویسان اغلب به تنهایی روی پروژهها یا ماژولها کار میکنند. این موضوع به ویژه در ارتباط با برنامهنویسانی که آزادکار هستند صدق میکند.
اگر از راه دور کار میکنید، ممکن است حضور یک سرپرست که پیشرفت کارها را کنترل میکند و شما را در مسیر درست نگه دارد کمتر محسوس باشد، به این معنی که مسئولیت شما این است که انگیزه خود را حفظ کنید و ضربالاجلها را رعایت کنید.
از اینرو مهم است که بتوانید ابتکار عمل را حفظ کنید و در مسیر ضربالاجل گام بردارید. توانایی خودانگیزشی به شما این امکان را میدهد که مستقل باشید و با تدبیر کار کنید، حتی اگر از تکنیک تنبلی موثر استفاده کنید.
5. پشتکار (Perseverance)
به ندرت پیش میآید که کد یا برنامهای در همان مراحل اولیه به درستی کار کند. در اولین تلاش برنامهنویسان زمان زیادی را صرف کدنویسی میکنند تا یک برنامه یا صفحه وب به خوبی اجرا شود. برای برنامهنویسان غیرمعمول نیست که ساعتها کار را کنار بگذارند و رویکردی کاملا متفاوت را بیازمایند. به همین دلیل است که اگر میخواهید یک برنامهنویس خوب باشید، باید با شکستها کنار بیایید و نگاهی رو به جلو داشته باشید.
یکی از راههای غلبه بر شکست این است که به آن بهعنوان یک چالش بهجای نشانهای از شکست نگاه کنید. خطاها و مشکلات برنامهنویسی مانند پازلهای پیچیدهای هستند که باید حل شوند، ممکن است در طول مسیر خستهکننده باشند و ممکن است چندین بار تلاش کنید تا سرانجام به پاسخ موردنظر برسید. با این حال، هنگامی که در نهایت آنها را حل کنید، احساس موفقیت میکنید.
6. همدلی (Empathy)
اینکه بتوانید با تیم خود همدلی کنید به شما این امکان را میدهد که بهطور کامل مشکلاتی که خود یا سایر اعضا تیم با آنها روبرو هستند را درک کنید و راهی بیابید که فرآیند به سرانجام رساندن پروژه برای همه ساده شود.
وقتی بین اعضای یک تیم تفاهم وجود داشته باشد که هیچ بازخورد منفی یا تمسخری وجود نخواهد داشت، مطرح کردن پیشنهاد جدید بسیار آسانتر است، صرفنظر از اینکه شخص نسبت به یک ایده چه احساسی دارد.
همدلی به ما امکان میدهد پیشبینی کنیم که دیگران چه واکنشی نسبت به آنچه ما میگوییم نشان میدهند، به این معنی که میتوانیم نحوه صحبت خود را با مخاطبان خود هماهنگ کنیم.
اگر ایده کسی را دوست ندارید، از خود بپرسید چرا. در ادامه، وقتی بازخورد میدهید، ابتدا به نکات مثبت اشاره کنید و در ادامه آنچه را که دوست ندارید، مطرح کنید و با مثبت دیگری جملهتان را به پایان برسانید. این رویکرد به مدل ساندویچی معروف است، به این معنی است که شخصی که به او بازخورد میدهید روی نکات منفی تمرکز نمیکند، بلکه مزایا و معایب ایدهاش را درک میکند.
در عین حال، همدلی با تیم به شما این امکان را میدهد که موضوعات را از دید آنها مشاهده کنید. از اینرو، شما باید همیشه و همیشه سعی کنید چیزها را از دیدگاه دیگران قبل از دیدگاه خودتان مشاهده کنید. فقط به این دلیل که شما ظاهر/کارکرد چیزی را دوست دارید، به این معنی نیست که همه با شما هم عقیده باشند.
7. ارتباطات (Communication)
ارتباط موثر هم در محل کار و هم در زندگی شخصی کلید موفقیت است. توسعهدهندگان بخش کلیدی سازمانها و بهویژه شرکتهای نرمافزاری هستند و همیشه مایلند در جلسات صحبت کنند، چه با کارکنان باشند و چه مشتریان.
برای برقراری ارتباط موثر باید به چند نکته توجه داشت:
واضح و با قاطعیت صحبت کنید تا مردم با دقت بیشتری به صحبتهای شما گوش دهند.
گوش کنید. به همان دقتی که صحبت میکنید به همان دقت نیز باید به صحبتهای افراد گوش دهید.
صحبت شخصی را قطع نکنید. اجازه دهید آنچه را که میخواهند بازگو کنند و در ادامه افکار خود را به زبان بیاورید.
8. کار تیمی (Teamwork)
مهم نیست که چه کاری انجام میدهید، زمانی وجود دارد که باید به عنوان بخشی از یک تیم کار کنید. چه تیمی از توسعهدهندگان، طراحان یا یک تیم پروژه باشد، توسعهدهندگان برای موفقیت باید با دیگران به خوبی کار کنند.
خوب کار کردن با دیگران باعث میشود تا انجام کارها به یک سرگرمی تبدیل شود و افراد در آینده به شما کمک کنند. ممکن است همیشه با افراد تیم خود موافق نباشید، اما داشتن دیدگاههای متفاوت باعث کارآمدتر شدن یک تیم میشود.
9. در دسترس و مفید بودن (Approachability and Helpfulness)
در برخی موارد، فردی از شما سوال دارد. این سوال میتواند در مورد وظایف روزانه شما، در مورد یک مشکل یا یک اشکال یا فقط در مورد برنامههای شما برای آخر هفته باشد. در تمامی این موارد فرد باید به شما نزدیک باشد.
اگر مردم احساس کنند که نمیتوانند به شما نزدیک شوند و چیزی از شما بخواهند، وقتی مشکلی پیش میآید، کمتر از شما کمک میخواهند. این میتواند به این معنی باشد که یک مشکل کوچک به زودی به یک مشکل بزرگ تبدیل میشود.
علاوه بر این، نزدیک یا مفید نبودن به این معنی است که در صورت نیاز دیگران کمتر به شما کمک میکنند. اگر بتوانید با مردم ارتباط صمیمانهای برقرار کنید، به احتمال زیاد با شما کار خواهند کرد و بر علیه شما نخواهند بود.
10. صبر (Patience)
گاهی اوقات شما بخشی از یک تیم یا جلسهای خواهید بود که فقط از توسعهدهندگان یا برنامهنویسان تشکیل نمیشود. این بدان معناست که شما باید دلایل تصمیمات خود را توضیح دهید و اینکار را به روشی غیر فنی انجام دهید. برخی از افراد بلافاصله همه صحبتهای شما را درک میکنند، در حالیکه برخی دیگر به زمان بیشتری نیاز دارند. صبور بودن با افراد در چنین لحظاتی به پیشرفت انجام کارها کمک فراوانی میکند.
همه مردم از این موضوع مطلع نیستند که برنامهنویسی چه فرآیند دشواری است یا نوشتن کدها چقدر زمانبر است. آنها ممکن است از شما بخواهند کاری را انجام دهید بدون اینکه متوجه درخواست خود باشند. این موضوع حس منفی در برخی برنامهنویسان ایجاد میکند. به همین دلیل بهتر است بخشی از وقت خود را صرف توضیح این موضوع کنید که چرا آنطور که آنها فکر میکنند کار ساده نیست و به هر سؤالی که دارند پاسخ دهید. هنگامیکه برای انجام اینکار وقت گذاشتید، جلسات آینده سادهتر برگزار میشوند.
11. ذهن باز (Open-mindedness)
وقتی ذهن شما باز است، تمایل بیشتری به پذیرش ایدههای جدید دارید، چه از جانب خودتان باشد و چه از جانب دیگران. حتی بدترین ایدهها هم میتوانند الهامبخش چیزهای عالی باشند، به شرطی که قبل از رد کردنشان، به خوبی به آنها فکر کنید.
هرچه ایدههای بیشتری داشته باشید، پروژههای بیشتری برای کار کردن خواهید داشت. هر ایدهای که دارید، مادامی که عمیق به آن فکر نکنید به یک پروژه بزرگ تبدیل نمیشود.
ذهن خود را برای ایدههای جدید نه تنها از سوی تیم خود، بلکه از سوی سایر اعضای شرکت و حتی مشتریان باز نگه دارید. مشتریان افرادی هستند که از محصول شما استفاده میکنند، بنابراین آنها بهترین افرادی هستند که به شما میگویند چه چیزی کار می ند و به چه چیزی نیاز دارند.
12. مسئوليت (Accountability)
مسئولیت پذیری به معنای مالکیت اشتباهات است. اعتراف به اینکه تصمیمی که گرفتید نتیجه نامطلوبی به همراه داشت دشوار است، اما در دراز مدت، هم شما و هم کارفرمایتان دید مثبتی از شما به دست میآورند.
وقتی اشتباهات خود را قبول نکنید، این احتمال وجود دارد که شما یا یکی از همکارانتان در آینده اشتباه مشابهی را مرتکب شوید. به جای فرار از اتفاقی که افتاده، دست خود را بالا ببرید و مسئولیت را بپذیرید. از این فرصت برای تجزیه و تحلیل اشتباه استفاده کنید و سعی کنید خود و همکارانتان در آینده همان اشتباه را مرتکب نشوند.
13. خلاقیت (Creativity)
بهترین ایدهها و راهحلها اغلب زمانی به سراغ ما میآیند که از زاویهای متفاوت و کمتر آشکار به مسائل نگاه میکنیم. این همان چیزی است که خلاقترین افراد از برنامهنویسان گرفته تا کارآفرینان و نویسندگان را از یکدیگر متمایز میکند.
علیرغم دیدگاه عمومی، خلاقیت را میتوان آموخت، اما با تمرین نیز به دست میآید. خواندن داستان، نوشتن، انجام کارهای هنری، صنایع دستی و حتی آشپزی راههایی برای کشف خلاقیت هستند. هرچه راههای خلاقیت بیشتری را کشف کنید، پیدا کردن راههای مختلف برای غلبه بر یک مشکل آسانتر میشود.
14. مدیریت زمان (Time management)
وقتی کارهای زیادی برای انجام دادن دارید، دانستن اینکه چگونه زمان خود را مدیریت کنید بسیار مهم است.
چقدر برای برنامهریزی وقت میگذارید؟
چقدر برای کدنویسی وقت میگذارید؟
با تیم خود برای ارائه ایدههای جدید در تعامل هستید؟
مدیریت کارآمد زمان به شما این امکان را میدهد که بر روی مهمترین چیزها تمرکز کنید و کارها را به نحو احسن انجام دهید.
تکنیکهایی مانند تکنیک پومودورو (Pomodoro) که در آن برای مدت زمان مشخصی روی یک فعالیت کار میکنید، استراحت میکنید، سپس به آن برمیگردید، یا کانبان (Kanban)، جایی که وظایف خود را تجسم میکنید، راههای عالی برای ایجاد یک روال یا یادگیری نحوه تمرکز هستند.
در حالی که گاهی اوقات نیاز به انجام چندوظیفهای ضروری به نظر میرسد و ممکن است احساس کنید که انجام همزمان چند کار اثرات خوبی دارد، اما همانگونه که اشاره کردیم مطالعات نشان دادهاند که این کار به شدت بهرهوری را کاهش میدهد. عدم توجه کامل به چیزی به این معنی است که انجام کارها بیشتر طول میکشد و احتمال اشتباه شما بیشتر میشود.
اگر اغلب چند کار را انجام میدهید، لیست کارهای خود را اولویت بندی کنید، سپس از یکی از تکنیکهای ذکر شده در بالا برای تمرکز کردن استفاده کنید. به سرعت متعجب میشوید که وقتی تمام تمرکز خود را معطوف به کاری کنید، انجام کارها چقدر سریعتر میشود.