تصمیم کبری: جانگو یا دات نت؟

اوایل ۲۰۱۵ بود که به طور جدی تصمیم گرفتم یک مقدار اوبونتو را امتحان کنم و به همان واسطه سعی کنم از دات نت به یک پلتفرم غیر مایکروسافتی مهاجرت کنم. با هر کدام از پلتفرم های رایج یک مقدار کار کردم تا دید بهتری پیدا کنم. اما هنوز بعد از دو سال و هشت ماه به دلایل مختلف نتوانسته‌ام به یک پلتفرم توسعه نرم‌افزار غیر دات‌نتی مهاجرت کنم. امروز با خودم فکر می‌کنم که آیا بهتر نیست که یک تصمیم کبری بگیرم و دوباره روی C# و دات‌نت متمرکز شوم؟

مهاجرت از ویندوز

تصمیم به مهاجرت از ویندوز و دات نت را زمانی گرفتم که عمدتا به شکل شرکت و Freelancer در حال انجام پروژه های سفارش مشتری بودم. به این نتیجه رسیده بودم که دات نت انتخاب خوبی برای یک محیط استارتاپی نیست. در بعضی از پروژه هایی که دریافت می کردم، استفاده از محصولات نیمه آماده و Open Source مثل وردپرس یا OTRS (نرم افزار تیکتینگ) توجیه بیشتری داشت. نگهداری و کانفیگ یک سرور لینوکسی به مراتب راحت‌تر و سریع‌تر از نگهداری یک سرور ویندوزی بود. توسعه MVP (کمینه محصول) که در فضای استارتاپی خیلی باب است با پلتفرم های غیر دات‌نتی مثل Ruby/Rails و Python/Django معقول تر به نظر می رسید.

Remote Working

یکی از گزینه های مد نظرم در آن سال‌هایی که از استخدام در شرکت های ایرانی زده شده بودم، کار به صورت Remote با شرکت های خارج از ایران بود. تصورم این بود که بیرون از ایران، این Ruby و Node.js و Python هستند که رواج بیشتری دارند. از طرفی هر چقدر که موقعیت های کاری Remote را مرور می‌کردم می‌دیدم که Rails و Django آمار خیلی بیشتری دارند. به همین خاطر دوست داشتم چیزی غیر از دات نت یاد بگیرم تا شانسم را در به دست آوردن کار بالاتر ببرم.

آیا به اندازه کافی به سی شارپ تسلط دارم؟

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

دلایل دیگر

البته برای فرار از دات نت دلایل دیگری هم دارم. ویژوال استودیو ۲۰۱۷ بیش از ۲۰ گیگ حجم دارد. خود ویندوز خیلی کند تر از اوبونتو است. شرکت ها و تیم های دات نتی آنقدری که من دوست دارم فرز نیستند. ظواهر نشان می‌دهند که یک برنامه نویس C# معمولاً کمتر از یک برنامه نویس Node.js اهل ریسک، کنجکاوی و خلاقیت باشد. کلاً ویندوز و دات نت سنگین هستند. Backup گرفتن از یک ریپوی گیت در چند دقیقه قابل انجام است آن هم توسط یک فرد تازه کار. ولی Backup گرفتن و Restore یک Repo در TFS بسیار حجیم تر و کندتر است و فرد انجام دهنده باید اطلاعات خوبی راجع به TFS و MS-SQL داشته باشد. در دنیای مایکروسافت Integration بالا و خوبی وجود دارد ولی در عوض در همه چیز منحصر هستید به ابزارهایی که مایکروسافت خودش به شما می دهد. به تمام این‌ها موارد کپی رایت را هم اضافه کنید. از این همه ویندوز قفل شکسته خسته هستم واقعا. از این همه لپ تاپ بدون ویندوز، از این همه نرم‌افزار کرک. مایکروسافت به من ایرانی سرویس پشتیبانی نمی‌دهد من هم پول ویژوال استودیو و ویندوز را ندارم که بدهم.

شرایط جدید

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

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

مایکروسافت Open Sourceتر شده. .Net Core پیشرفت خیلی خوبی داشته. هم کاملاً Open Source است و هم خیلی خوب روی اوبونتو کار می کند.

برداشت جدیدی که از بازار کار در کشورهای استرالیا و کانادا پیدا کرده‌ام این است که دات نت هم جایگاه بدی در بازار کار ندارد. مثلاً شرکت Readify در استرالیا یک شرکت دات نتی حساب می شود.

دوباره دات نت

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

دلیل اول

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

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

دلیل دوم

دلیل دوم بازگشت دوباره به دات نت این است که به این نتیجه رسیدم که در همین بازار کار ایران هم نیاز دارم که تسلطم را به دات نت و سی شارپ بالاتر ببرم. درست است که حداقل از نظر خودم درک خوبی از C# و Object Oriented دارم ولی وقتی که در یک مصاحبه از من می‌خواهند که تفاوت Association و Composition و Aggregation را همانجا بدون کمک StackOverflow بیان کنم و من هم با شک و تردید جواب می‌دهم به این نتیجه می‌رسم که آنچنان که باید، به موضوع مسلط نیستم.

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

Comments

  1. senaps

    البته اگر این موضوع که جنگو یه فریم‌ورکه و سی‌شارپ یه زبان برنامه نویسی رو کنار بذاریم، می‌رسیم به اینکه بهتره همیشه تمرکز رو روی یک چیز بذاریم…

    برای مثال، یا پایتون، کم کم کار کردن با دیتابیس ها و لینوکس‌ و گیت و فایروال‌ها و حتی یه روزی می‌بینی اونقدری که با ویم داری کد میزنی پای IDE ات نیستی! یعنی یه استک کامل. بعضی از ماها که پایتون کار میکنیم، گاها حتی به زبان سی هم سلام می‌دیم و توی کارهامون استفاده میکنیم…
    دوستانی که در زمینه وب با پایتون کار میکنن، باید دانش مناسبی از تکنولوژی های وب داشته باشن که با سرعت برق و باد داره پیشرفت میکنه! یه قلم جاوااسکریپت و فریم‌ورک‌هاش، تا این یکی رو یاد میگیری می‌بینی توی کامیونتی دیگه قدیمی شده و یکی دیگه اومده!!! یا ورژن جدیدش اومده با کلی تغییرات ساختاری…

    حالا یه عده مثل من بدبخت هستن و با وب و کور همزمان سر و کار دارن و توی یه پروژه، از سی و سی‌پلاس و پایتون گرفته تا کوری‌های خشن اس‌کیو‌ال و جاوااسکریپت و HTML/CSS در هم قاطی میشه تا پروژه در بیاد! 🙂

    در مقابلش، سی‌شارپ یه استک کامل با تکنولوژی های خودش و غول بی‌شاخ و دمش، ویژوال استودیو هستش… یعنی دو دنیای کاملا متضاد با هم…
    برای یاد گرفتن و ادامه در یکی، باید استک دیگه رو کاملا رها بکنی… همونطور که عرض کردم، در دنیایی که ما سیر میکنیم، حتی یه زبان بخصوص ممکنه برای سولوشن های مختلفش استک‌های مختلفی داشته باشه… مثل رفقای وب‌کار و نتورک‌کار و هوش‌مصنوعی کارمون در پایتون…

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

    همراه جنگو، دیتابیس میاد، همراهش لینوکس و گیت، همراهش تنظیم فایروال‌ها و کانفیگ دیتابیس‌ها، همراهش HTML/CSS و جی‌کیوری و جاوااسکریپت… یه استک کامل! پس اگر میخوایم جنگو کار کنیم، همین الانش هم یه استک از تکنولوژی ها جلمون هستش که روز استخدام لازمه که باهاشون اشنا باشیم…

    من شخصا روزی که استخدام می‌شدم در مصاحبه استک‌ام مشخص شد:

    پایتون – > متوسط
    فلکس -> متوسط
    اشنایی با زبان انگلیسی – > خیلی خوب
    HTML/CSS -> متوسط
    git -> متوسط
    ++C/C -> کمی(خوندن و ویرایش کد)
    جاوااسکریپت(جی‌کیوری – کمی، انگولار- کمی، ریکت- کمی…) در حد خوندن و ویرایش کد!
    لینوکس- گیت -> متوسط…
    شبکه، امنیت، و … -> کمی
    دیتابیس ها( پستگرس – کمی، مای‌اس‌کیو‌ال- خوب، NOSQL- خوب)
    و…

    در حالی که شرکت مربوطه به دنبال یه نیروی حرفه‌ای میگشت، ولی چون دو سه نفر دیگه‌ای که برای استخدام از دانشگاه شریف و علم و صنعت اومده بودن و بینشون من که اصلا تحصیلات دانشگاهیم نه معدل خوبی داره نه اسم دانشگاه مناسبه، استخدام شدم…
    چرا؟ چون کل استک رو در حدی که کارم رو راه بندازم بلد بودم و این چیزیه که مهمه! بلد باشی، بتونی کارت رو راه بندازی با سرچ کردن…

    ممکنه شخصی بیاد که یکی یا دوتا از بخش‌های این استک رو در سطح عالی داشته باشه، ولی نمی‌تونه کاری از پیش ببره چون کل استک برای تولید محصول نهایی و همراهی با تیم نیاز هست…

    بهترین کار این هستش که ادم استک خودش رو پیدا کنه و درش به سطح مناسبی برسونه خودش رو…. من ۴ ماهه که توی شرکت فعلی کار میکنم و به شدت وضعیت دانشم نسبت به تکنولوژی هایی که گفتم به شدت افزایش پیدا کرده! در صورتی که هنوز برخی مباحث اولیه و مقدماتی که توی کارم بهشون بر نخوردم و لازمم نبوده رو دوستان می‌پرسن، هیچ ایده‌ای ندارم!! یعنی نیاز نیست همه چیز یه زبان رو بلد باشی… کافیه استک‌ات رو پیدا کنی و بلدش باشی! 🙂

    1. Post
      Author
      افشار محبی

      سلام.

      من اینجا نمی خواستم بین دات نت و ASP.NET و C# با جانگو و پایتون مقایسه ای انجام بدم. من هم اگر آزادی عمل داشتم دوست داشتم از جانگو و امثالهم استفاده کنم.

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

      همین طور صحبت کمبود وقت برای تسلط به پلتفرم های جدید…

    1. Post
      Author
      افشار محبی

      سلام امید.

      من خودم هم پایتون و لینوکس را خیلی دوست دارم. هیجان خوبی داره.

      ولی خوب چه میشه کرد. در بازار کار ایران و حتی کشورهایی مثل آمریکا و کانادا، با دات نت و سی شارپ راحت تر میشه پول در آورد!

       

  2. Reza

    سلام – چرا جاوا رو امتحان نمیکنید ، جاوا هم دنیای جالبی داره و هم بسیار بزرگ و متنوع با فریم ورکهای قوی- برای پروژه های وب و انترپرایز فریم ورک اسپرینگ و جی باس سیم فوق العاده قوی هستش و هم چنین ORM های جاوا مانند هایبرنیت ، مای بتیس و… فوق العاده خوب و قوی هستن – من فکر میکنم شما چون دات نت کار هستید و به نوعی #C هم از روی جاوا درست شده است و همچنین بعضی از فریم ورکهای آن مانند Nhibernate از hibernate جاوا الگو گرفته اند شما بتونید سریع تر روی جاوا مهاجرت کنید ، و همچنین جاوا هم توی کشورهای غربی خصوصا آمریکا وا کانادا و اروپا بسیار پرکاربرد هستش .

    1. Post
      Author
      افشار محبی

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

      حتی یک زمانی سعی می کردم چیزهایی که در جاوا هست را در نظر بگیرم و با معادل دات نتی اونها کار کنم. مثل Hibernate در جاوا و NHibernate در دات نت که تا قبل از ظهور EF خیلی رایج بود.

  3. فربد

    سلام
    راستش من خیلی از جو ضد مایکروسافتی که وجود داره و گاها آدم احساس می کنه یه جور خودنمایی هم باهاش همراه میشه خوشم نمیاد. به خصوص الان که همینطور که خودتون هم گفتید مایکروسافت هم تو روش هاش تحولاتی بوجود آورده و به نظرم تو مسیر خوبی داره پیش میره.
    می دونم که خودتون سالها تجربه دارید و من مدتهاست که وبلاگ شما رو می خونم. بابت درد دل موارد زیر رو عرض میکنم.
    اینکه یه کاری رو آدم بابت تست انجام بده، یا به طور تفریحی یه ابزار خوب با تکنولوژی ها و فریم ورک های جدید تهیه کنه یه بحث هستش، اینکه واقعا یه نرم افزاری تهیه بشه که سالها امکان پشیبانی داشته باشه و نیروی فنی به تعداد مناسب هم براش باشه یه بحث دیگه.
    می دونم که شما هم وبسایت آقای وحید نصیری رو می خونید و دیدم که کامنت هم گذاشتید. واقعا بعضی پست های ایشون، چه در زمینه دات نت و چه غیر دات نتی، خیلی سطح بالا و عمیق هستش. کی می تونه بگه مثلا ایشون چون با دات نت کار میکنه کارشون سطح پایین هستش. منظورم اینه که تهیه نرم افزار با کیفیت، بیشتر از اینکه به زبان و تکنولوژی مورد استفاده مربوط باشه به دید و دانش فرد از مفاهیم برنامه نویسی و توسعه نرم افزار بستگی داره، و البته اینکه توی تکنولوژی انتخابیش روش درست استفاده از ابزارها رو بلد باشه.
    تو چند مورد بین خودم و شما شباهت می بینم. اینکه سالها با سی شارپ و دات نت کار کردید (البته می دونم که شما تجربه و دانش تون خیلی از من بیشتر هستش) علاقه دارید با تکنولوژی های غیر مایکروسافتی هم کار کنید. احساس می کنم دارید شرایط رو برای مهاجرت به خارج از کشور بررسی می کنید .
    من واسه خودم این مسیر رو در نظر گرفتم: تو تکنولوژی های سمت سرور همچنان روی دات نت تمرکز می کنم. سعی دارم asp.net core رو هم بعد از مدتی دنبال کنم. اما اولویت اولم مهارت تو زمینه توسعه سمت کلاینت هست. به این ترتیب اون علاقه به مهارت تو تکنولوژی های غیر مایکروسافتی هم برآورده میشه. تو این زمینه در حال مطالعه angular هستم.
    در مورد مهاجرت هم من خیلی استرالیا رو بررسی کردم. در مورد خیلی از رشته ها که قبلا اوضاع خوب بوده ( مثلا معدن یا عمران و …)، الان شرایطشون مناسب نیست. چون در حال تغییر فضای کار و حرکت به سمت تکنولوژی های جدید هستن. اما با چند تا از برنامه نویس های ایرانی که تو استرالیا مشغول هستن صحبت کردم(به طور اینترنتی البته)، میگن اوضاع برای کار نرم افزار خوب هست. همونطور هم که خودتون گفتید خیلی از شرکت هاشون هم با دات نت کار می کنن. عمده شرکت های نرم افزاری هم تو سیدنی هستن. البته میگن اگه هم به سمت سرور هم به سمت کلاینت مسلط باشید، احتمال اینکه کار بهتری گیر بیارید بهتر میشه.
    ببخشید که اینقدر پر حرفی کردم.

    1. Post
      Author
      افشار محبی

      سلام فربد عزیز،

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

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

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

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *