ممکن است شما هم جزو مهندسین نرمافزار جوان و کمتجربه باشید و نیاز به توضیح نیست که اینگونه افراد معمولاً در مورد مسیر شغلی آیندهٔشان نگرانیهای زیادی دارند و همیشه مُردد هستند که آیا شغل مناسبی را برای خود انتخاب خواهند کرد یا خیر! به علاوه اینکه همیشه در مورد موقعیتهای مختلف کاری تردید دارند چرا که به درستی نمیدانند کدام فرصتها برایشان مناسب است و کدام پیشنهادات کاری را باید قبول کنند. در کل، سؤالات زیادی وجود دارد که معمولاً یک مهندس نرمافزار، دولوپر یا برنامهنویس کمتجربه و تازهکار را گیج کرده و ذهنش را آشفته میکند. در این مقاله، با سکان آکادمی همراه باشید تا راهکارهایی به منظور انتخاب یک فضای کاری حرفهای در حوزهٔ صنعت توسعهٔ نرمافزار را با شما به اشتراک بگذاریم.
معمولاً با گذشت زمان و پیدا کردن فاکتورهای مهم شخصی برای انتخاب و رتبهبندی فرصتهای شغلی مختلفی که وجود دارند، این مشکلات تا حد زیادی برطرف میشوند. مطمئناً آشنایی با تجربهٔ دیگران، صحبت و مشاوره با بقیهٔ فعالان این حوزه هم نقشی مؤثر در بهبود فرایند انتخاب شغل دارد (مثلاً میشود از همکاران دیگر سؤال کرد و یا در اینترنت، پستهای وبلاگ و ... اینگونه اطلاعات را به دست آورد.)
در این مقاله سعی کردهایم تا فهرستی از فاکتورها و مسائلی که معمولاً برای یک مهندس نرمافزار مهم تلقی میشوند را مشخص کنیم و در مورد هر کدام از آنها توضیحاتی تکمیلی ارائه کنیم (البته اینها فقط برخی از مسائلی هستند که با آن روبهرو میشوید و قطعاً هر فردی اولویتبندیهای خاص خودش را دارا است.) به علاوه اینکه هر عاملی به اندازهٔ خودش میتواند تأثیرگذار باشد؛ به عبارت دیگر، درجهٔ اهمیت عوامل مختلف لزوماً باهم برابر نیست. به هر حال، اولویتها بسته به اینکه شما از شغلتان چه انتظاری دارید و در کل چه نگاهی به زندگی حرفهایتان دارید، میتواند بسیار متفاوت باشد.
همچنین پس از مطالعه، میتوانید فهرست مخصوص خودتان را ایجاد کرده و فهرستی که اینجا ارائه شده است را هم مورد ارزیابی قرار دهید و ببینید که چقدر معیارهای شما با چیزی که گفته شد تفاوت دارد. در ضمن، پیش از ادامه، توصیه میکنیم تا با مطالعهٔ مقالهٔ آیا میدانستید که مهندسین نرمافزار و برنامهنویسان چه تفاوتهایی با یکدیگر دارند؟ دید روشنتری نسبت به اصطلاح Software Engineer پیدا نمایید.
چالشهای فنی
چالش فنی از جمله مواردی است که به طور کلی تجربهای که از یک کار به دست میآورید را زیر و رو میکند. مثلاً ساخت یک وبسایت ساده برای یک مشتری کار چندان چالشبرانگیزی به نظر نمیرسد ولی قطعاً ساخت یک پلتفرم ماشین لرنینگ با معماری پیچیده میتواند تجربههای نابی برای شما فراهم کند که همیشه به دردتان خواهد خورد.
برخی شرکتها طوری کار میکنند که کارکنان شرکت در واقع باید یک محصول را مرتباً و به صورت تکراری کدنویسی کنند؛ ولی برخی شرکتهای دیگر ریسک کرده و سعی میکنند آخرین فناوریهای روز را به کار گیرند یا فناوری و طرحها و ایدههای خاص خود را پیاده کنند. بهتر است شرکتی را پیدا کنید که با شخصیت شما سازگاری داشته باشد؛ یعنی اگر دنبال چالشهای فنی هستید، حواستان باشد جایی بروید که انتظاراتتان برآورده شود و برعکس.
محصول
بحث محصول از جمله مواردی است که برای بسیاری از افراد مهمترین عامل در انتخاب شغل به حساب میآید. به عبارت دیگر، اینکه شما به طور کلی علاقه دارید روی چه چیزی و چه محصولی کار کنید. مثلاً شاید فردی علاقه داشته باشد تا در فضایی کار کند که در نهایت به بهتر شدن وضعیت افراد دیگر جامعه کمک کرده باشد. چنین شرایطی است که باعث میشود این افراد نسبت به کارشان حس رضایت داشته باشند و احتمالاً آخر روز که به خانه میروند با خودشان فکر میکنند که نقش مؤثری در بهبود وضعیت و شرایط اطرافیان خود داشتهاند و صبح روز بعد با اشتیاق و ذوق بیشتر دوباره برای برداشتن قدم بعدی سر کار میروند.
شاید فرد دیگری بخواهد با کاری که انجام میدهد نامش را بر سر زبانها بیندازد و برای خودش اسم و رسمی دستوپا کند. یعنی به طور کلی باید به این موضوع فکر کنید که بیشتر ساعات زندگیتان از حالا به بعد قرار است برای چه چیزی، چه هدفی و در چه مسیری صرف شود؟
فناوری
احتمالاً شما در طول زندگی حرفهای و شغلیتان چند باری فناوریهایی که با آن سروکار دارید را تغییر میدهید. یعنی شما به جای اینکه روی مثلاً برنامهنویسی جاوا و توسعهٔ نرمافزارهای مبتنی بر آن تمرکز کنید، باید بیشتر به این بخش توجه داشته باشید که بتوانید در آینده یک مهندس نرمافزار بسیار خوب باشید. مثلاً به جای اینکه صرفاً مشکلات و ایرادات مشخصی را حلوفصل کنید، باید بیشتر روی مفاهیم انتزاعی و ارائهٔ سولوشن (راهکار) برای رفع مشکلات موجود کار کنید.
البته منظورمان این نیست که کلاً استفاده از زبانهای برنامهنویسی و فناوریهای مختلف را کنار بگذارید و به آنها اهمیتی ندهید. در واقع، علاقه به زبانهای برنامهنویسی و فناوریهای مختلف باعث میشود انگیزهٔ زیادی برای حرکت به سمت جلو داشته باشید؛ ولی بهتر است خودتان را بیش از حد درگیر -و یا بهتر است بگوییم محدود- به این چیزها نکنید. یعنی نباید بگذارید انتخابهایتان محدود و از پیش تعیین شده شوند و باید قبول کنید که شما نمیتوانید تمام مهارتهایتان را ارتقاء بدهید و مثلاً کار با همهٔ فریمورکها را یاد بگیرید.
بنابراین اگر قرار است از یک زمینه به یک زمینهٔ جدید وارد شوید، بهتر است اول از همه در مورد مهارت جدیدی که قرار است یاد بگیرید کمی تحقیق کنید. باید مطمئن شوید این مهارت جدید با شغل و مهارتی که در حال حاضر دارید سازگاری دارد و در آینده به همدیگر کمک خواهند کرد (مثلاً در حال حاضر رفتن سراغ زبانی مثل ویژوال بیسیک اصلاً توصیه نمیشود چرا که این زبان برنامهنویسی که روزگاری از اهمیت قابلتوجهی برخوردار بوده است، امروزه مخاطب چندانی ندارد، حتی در میان دولوپرهای متعصب مایکروسافت!)
وظایف شغلی
اینکه کار شما دقیقاً چه خواهد بود نیز بسیار حائز اهمیت است. مثلاً آیا قرار است کار نگهداری از کدهای قدیمی (لِگِسی) را بر عهده داشته باشید یا قرار است ماژولهایی کاربردی بنویسید. شاید هم قرار باشد نقش یک توسعهدهندهٔ حرفهای را داشته باشید که دست به معماری نرمافزار میزند.
مسئله مهم دیگر هم این است که بدانید آیا قرار است با یک زبان یا فریمورک کار کنید یا اینکه با فریمورکها و زبانهای مختلف و متعدد برخورد خواهید داشت. به علاوه، شاید لازم باشد بین محیطهای مختلف برنامهنویسی مرتباً سوئیچ کنید و هر چند روز یک بار از یک محیط به سراغ یک محیط دیگر بروید.
بنابراین میتوان گفت که دانستن کاری که قرار است انجام دهید و نقشی که بر عهده خواهید داشت، اهمیت زیادی دارد. باید قبل از اینکه به سمت یک کار بروید، جوانب مختلف آن را کاملاً بررسی کنید چرا که در غیر این صورت ممکن است انتظارات نابهجایی در ذهنتان داشته باشید که هیچوقت برآورده نشوند.
به غیر از این مسئله، باید در مورد مسیری که در پیشرو دارید هم فکر کنید. یعنی اینکه در آینده چهطور میتوانید در این شغل پیشرفت کنید و اینکه آیا در آینده میتوانید نقش و وظیفههای متفاوتی را بر عهده بگیرید؟ اگر جواب مثبت است، باید در مورد زمان آن هم فکر کنید؛ یعنی چه موقع این اتفاق خواهد افتاد و به احتمال زیاد در چه جهتی -یا بهطور دقیقتر، چه چیزی- خواهد بود.
مدیریت
خیلی از افراد دوست دارند زیردست کسی باشند که از ایدههای جدید و روشهای نوین استقبال کند؛ یعنی کسی که تمایل داشته باشد تجربههای جدید و استفاده از فناوریهای جدید را امتحان کند، حتی اگر این کار کمی زمانبر هم باشد.
به علاوه، مطمئناً بهتر است شرایط طوری باشد که بتوانید با فرد بالادستتان مرتباً در ارتباط باشید و بتوانید صحبت کنید. سعی کنید حتماً با رئیستان ارتباط خوب و مؤثری داشته باشید و قبل از آنکه پیشنهادی را از سوی او قبول کنید، حتماً او را به طور کامل بشناسید.
تیم
اگر احساس میکنید که باهوشترین و زرنگترین نفر در یک جمع هستید، باید بدانید که احتمالاً جای اشتباهی رفتهاید! همکاری در برخی گروهها باعث میشود شما رشد کنید و به سمت جلو حرکت کنید؛ از طرف دیگر هم برخی گروهها هستند که به نوعی باعث کاهش سرعت پیشرفت شما میشوند! بهتر است همکاری با گروهها و افرادی را تجربه کنید که فکر میکنید از شما بهتر هستند و البته کار کردن با آنها میتواند جالب و آموزنده باشد.
علاوه بر این موارد، باید به اندازهٔ گروه و تیمی که با آن کار میکنید هم توجه داشته باشید. گروههایی که اندازهای متوسط یا بزرگ دارند معمولاً محیطی متنوع و خلاقانه ایجاد میکنند؛ همینطور اینکه گروههایی که در آنها افرادی با پیش زمینههای مختلف حضور دارند، میتواند محیط جالبی ایجاد کند و نکات زیادی برای یادگیری در اختیار شما قرار دهد.
حقوق و مزایا
مطمئناً اینکه تمام تمرکز و انرژی خود را بر روی یک کار بگذارید، نتیجهٔ خیلی متفاوتی خواهد داشت تا اینکه سعی کنید با انجام پروژههای آزاد و مستقل پولی به دست بیاورید. اهمیت این مسئله احتمالاً برای افراد مختلف متفاوت است ولی به هر حال میتوان گفت که به طور کلی درآمدی که کسب میکنید باید به اندازهای باشد که بتوانید از پس تعهدات مالی و اقتصادیتان برآیید. به علاوه باید درآمدتان با متوسط درآمد شهری که در آن زندگی میکند همخوانی داشته باشد و در نهایت و از همه مهمتر اینکه خودتان از بابت درآمدی که دارید، احساس رضایت کنید.
لازم نیست از صحبت کردن در مورد حقوقی که قرار است دریافت کنید، خجالت بکشید. بهتر است پیش از قبول کردن کار، در مورد همهٔ جزئیات صحبت کنید و از این کار هیچ ترسی نداشته باشید. در مورد حقوق پایه، مزایا، افزایش حقوق، سهم از سود، اضافهکاری، رفتوآمد و خلاصه هر چیزی که فکر میکنید برایتان مهم است، سؤال کنید.
مسئله دیگری که باید خوب در مورد آن فکر کنید این است که در مورد مقدار اضافهکاری که میتوانید انجام دهید سؤال کنید. معمولاً شرکتهایی که علاقهای به دادن حقوق اضافهکار ندارند، احتمال بیشتری دارد که بخواهند به کارمندان خود فشار آورند. در واقع، فشار آوردن برای انجام هرچه سریعتر یک کار خیلی از اوقات اولین و راحتترین راهحلی است که به فکر مدیر پروژه میرسد. اگر هم قرار باشد برای شما اضافهکاری تعریف شود، اول از همه باید برای این کار یک بودجه در نظر گرفته شود و نیاز به انجام اضافهکاری برای مدیر توضیح داده شود.
فرآیندهای کاری
بهتر است در مورد فرآیندی که برای ساخت یک نرمافزار طی میشود اطلاعاتی داشته باشید. یعنی بدانید شرکت مورد نظر برای توسعهٔ یک نرمافزار از چه روشی استفاده میکند و چهقدر به شیوهها و روشهای خود پایبند است. به علاوه اینکه ابزارهایی که برای پیروی کردن از یک فرآیند استفاده میکنند چه چیزهایی هستند.
در ضمن، در مورد بازبینی کدها و استانداردهای کدها هم سؤال کنید. برخی شرکتها ترجیح میدهند در مورد این بخش صحبتی نکنند. شما هم بهتر است دور این شرکتها را خط بکشید چرا که در غیر این صورت ممکن است از کدهایی که مینویسید متنفر شوید یا بدتر از آن اینکه به کدهای کمکیفیتی که مینویسید عادت کنید و به همان قانع شوید.
آموزش و پیشرفت
سعی کنید بفهمید که آیا شرکت مورد نظرتان دورهٔ آموزشی یا برنامهای برای توسعه و پیشرفت شما در نظر دارد یا خیر. این دورهها میتوانند برای شما بسیار مفید باشند به خصوص اگر قرار باشد برای مدت زمانی طولانی در آن شرکت بمانید. سعی کنید هرچه میتوانید در مورد فرآیند ارزیابی کار و عملکرد خود و معیارهای آن سؤال کنید و بفهمید این کار چهطور انجام میشود.
فریلنسری
بد نیست مقداری از وقت خود را برای اضافهکاری شخصی اختصاص دهید یا چند روزی روی پروژهای که فکر میکنید مهم است وقت بیشتری بگذارید. در واقع، باید بخشهای دیگر زندگیتان را هم به یاد داشته باشید و برای آنها وقت بگذارید. با این حال، داشتن ساعات کاری انعطافپذیر و کار در خانه شرایطی است که میتواند برایتان بسیار مفید باشد.
سابقهٔ شرکت
شهرت شرکت، اندازه، سلسله مراتب و ثبات آن را باید در نظر داشته باشید. مثلاً اینکه شرکتی که میخواهید با آن همکاری کنید یک شرکت نرمافزاری است یا اینکه دپارتمان فناوری یک شرکت بزرگ است؟ به علاوه اینکه این شرکت چقدر برای محصولات نرمافزاریاش اهمیت قائل میشود و برای آن وقت و هزینه صرف میکند؟
سایر مزایا
مزیتهای دیگر مثلاً میتواند بیمهٔ درمانی، تعطیلیها، فضای کاری، ماشینها و ابزارها، محل کار، وعدهها یا میان وعدههای غذایی رایگان و ... باشد که میتوانید به آن هم نیمنگاهی داشته باشید.
کلام آخر
در انتها باید بگوییم که این فهرست مطمئناً کامل نیست و نکات و فاکتورهای دیگری هم هستند که قبل از پذیرفتن پیشنهاد کاری میتوان به آنها فکر کرد. البته به احتمال خیلی زیاد قبل از قبول همکاری ممکن است پاسخ بسیاری از سؤالاتتان را ندانید و این فاکتورها را نتوانید به درستی تعیین کنید؛ بهتر است وضعیت برخی از فاکتورهایی که اولویت مهمتر و بالاتری برای شما دارند را مشخص کنید.
به هر حال، باید به یاد داشته باشید که هیچ کاری بدون اشکال و ایدهآل نیست. بنابراین بهتر است مهمترین فاکتورها و برترین اولویتها را برای خودتان مشخص کنید و در نظر داشته باشید که در کدام موارد میتوانید کمی ارفاق قائل شوید و سطح انتظاراتتان را پایین بیاورید (در تکمیل مباحث طرح شده در این مقاله، توصیه میکنیم به مقالهٔ درک تأثیر اولین شغل در شکلگیری DNA کاری شما مراجعه نمایید.)
حال نوبت به نظرات شما میرسد. به نظر شما چه فاکتور یا فاکتورهای دیگری هستند که مهندسین نرمافزار در انتخاب محل کار خود میتوانند مد نظر قرار دهند؟ نظرات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید (لازم بهذکر است که علاقمندان به یافتن فرصتهای شغلی مرتبط با برنامهنویسی، طراحی سایت، سئو و غیره میتوانند با مراجعه به سرویس استخدام برنامهنویس (جابز) سکان آکادمی، با فرصتهای شغلی موجود در شرکتهای نرمافزاری که به دنبال تکمیل کادر اجرایی خود میگردند آشنا شوند.)