مسیر مطالعه و مصاحبه برنامه نویسی

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

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

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

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

اصولا برای قرار گیری در یک تیم فنی سه موضوع مطرح می گردد:

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

تیپ شخصیتی:

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

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

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

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

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

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

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

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

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

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

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

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

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

توضیح شاخه های پیشنهادی:

زبان برنامه نویسی، ابزارهای اصلی:

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

فریم ورک، کتابخانه ها:

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

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

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

شی گرایی. اصول و الگوهای طراحی

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

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

همچنین مسائل مربوط به مهندسی نرم افزار نیز در این بخش قابل بررسی است.

قدرت تحلیل و حل مسئله

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

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

کار با داده ها و پایگاه داده

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

معماری نرم افزار

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

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

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

امنیت

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