ممکن است شما هم جزو مهندسین نرم افزار جوان و کم تجربه باشید؛ این گونه افراد معمولاً در مورد مسیر شغلی آینده‌شان نگرانی‌های زیادی دارند و همیشه مردد هستند که آیا شغل مناسبی را برای خود انتخاب کرده‌اند یا خیر. به علاوه همیشه در مورد موقعیت‌های مختلف کاری تردید دارند چرا که به درستی نمی‌دانند کدام کارها برایشان مناسب است و کدام کارها را باید قبول کنند. در کل سؤالات زیادی هست که معمولاً یک مهندس نرم افزار کم تجربه را گیج و ذهنش را آشفته می‌کند. در این مقاله با سکان آکادمی همراه باشید تا راه کارهایی به منظور انتخاب یک فضای کاری حرفه یی در حوزه ی مهندسی نرم افزار را با شما به اشتراک بگذاریم.





معمولاً با گذشت زمان و پیدا کردن فاکتورهای مهم شخصی برای انتخاب و رتبه بندی کارهای مختلفی که وجود دارند، این مشکلات تا حد زیادی برطرف می‌شوند. مطمئناً خواندن تجربه دیگران و صحبت و مشاوره با بقیه هم نقشی مؤثر در افزایش سرعت این روند دارد. مثلاً می‌شود از همکاران دیگر سؤال کرد و یا در اینترنت، پست‌های وبلاگ و ... این گونه اطلاعات را به دست آورد (پیش از این در مقاله یی تحت عنوان تأثیر اولین شغل در شکل‌گیری DNA شما. دقت کنید! در قالب داستانی کوتاه، به مقایسه یی مابین فضای کاری شرکت های مختلف ایرانی که در حوزه ی توسعه ی نرم افزار فعال هستند پرداختیم که در صورت علاقمندی، پیش از مطالعه ی این مقاله می توانید به این داستان نیز رجوع کنید.)

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

به علاوه این که هر عاملی به اندازه ی خودش می تواند تاثیرگذار باشد؛ یعنی درجه اهمیت عوامل مختلف لزوماً باهم برابر نیست. به هر حال اولویت‌ها بسته به این که شما از شغلتان چه انتظاری دارید و در کل چه نگاهی به زندگی حرفه‌ای‌تان دارید، می‌تواند بسیار متفاوت باشد.

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

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

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

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

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

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

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

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

بنابراین اگر قرار است از یک زمینه به یک زمینه جدید وارد شوید بهتر است اول از همه در مورد مهارت جدیدی که قرار است یاد بگیرید کمی تحقیق کنید. باید مطمئن شوید این مهارت جدید با شغلی و مهارتی که در حال حاضر دارید سازگاری دارد و در آینده به همدیگر کمک خواهند کرد. مثلاً در حال حاضر رفتن سراغ زبانی مثل ویژوال‌ بیسیک اصلاً توصیه نمی‌شود! چرا که این زبان برنامه نویسی که روزگاری از اهمیت قابل توجهی برخوردار بوده است امروزه مخاطب چندانی ندارد.

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

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

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

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

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

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

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

لازم نیست از صحبت کردن در مورد هزینه و پولی که قرار است دریافت کنید خجالت بکشید. بهتر است پیش از قبول کردن کار در مورد همه جزئیات صحبت کنید و از این کار هیچ ترسی نداشته باشید. در مورد حقوق پایه، مزایا، افزایش حقوق، سهم از سود، اضافه کاری، رفت و آمد و خلاصه هر چیزی که فکر می‌کنید، سؤال کنید.

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

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

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

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

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

شرکت
شهرت شرکت، اندازه، سلسله مراتب و ثبات آن را باید در نظر داشته باشید. مثلاً این که شرکتی که می‌خواهید با آن همکاری کنید یک شرکت نرم افزاری است یا این که بخش آی تی یک شرکت دیگر است؟ به علاوه این که این شرکت چقدر بر محصولات نرم افزاری‌اش اهمیت قائل می‌شود و برای آن وقت و هزینه صرف می‌کند؟

یا مثلاً این که داشتن بلاگ فنی می‌تواند یکی از عوامل مهم دیگر باشد. شرکت در کنفرانس‌های فنی و رویدادها هم از موارد دیگری است که بزرگی و حضور مؤثر شرکت را مشخص می‌کند. داشتن پروژه‌های اپن سورس هم می‌تواند یکی از نشانه‌های دیگر در همین بحث باشد.

مزیت‌های دیگر
مزیت‌های دیگر مثلاً می‌تواند بیمه درمانی، تعطیلی‌ها، فضای کاری، ماشین‌ها و ابزارها، محل کار، وعده‌ها یا میان وعده‌های غذایی رایگان و ... باشد که می‌توانید به آن هم نیم نگاهی داشته باشید.

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

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