شاخه های شغل برنامه نویسی


#1

سلام
در سایت های کاریابی برای برنامه نویسی چند اصطلاح بود که خواستم اطلاعات بیشتری در موردشون کسب کنم.
مثلا:

Python Engineer

Python Developer

Python Software Engineer

Python Instructor

1-بیشتر می خواستم درباره Developer بدونم به این دلیل که احساس کردم ارزش زیادی براش قائل اند.
2-درآمد کدام بیشتره (فرصت شغلی در خارج از ایران)؟

خوشحال میشم نظرتون در این مورد بدونم.


#2

توضیح کوتاه (tldr):

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

توضیح کاملتر:

اصلا python engineer و python instructor نداریم! یعنی چی اصلا؟ ما software engineer داریم که میشه «مهندس نرم افزار» ولی مهندس یه زبان خاص یعنی چی؟ :neutral_face:

در کل developer به کسی میگن که با استفاده از یه سری لایبرری و فریموورک، یه محصولی برای کاربر نهایی تولید میکنه. مثلا یه سایت میسازه. یا یه اپلیکیشن دسکتاپ.
اگه بخوایم اصولی نگاه کنیم، programmer به کسی میگن که اون لایبرریها و فریموورکها رو میسازه!
اگه بازهم بخوایم اصولی نگاه کنیم، computer scientist کسیه که الگوریتم‌ها و تئوریهای مورد نیاز برای کار programmer رو ارائه میده.

یه مثال:
خیلی سال پیش یه computer scientist که کارش فقط با ریاضی بود و خیلی کم کد میزد، یه الگوریتم میسازه برای رمزنگاری اطلاعات و احتمالا یه خورده کد مینویسه برای اثبات اینکه الگوریتمش درست کار میکنه.
یه programmer چندسال بعد میاد با استفاده از اون الگوریتم، یه لایبرری رمزنگاری درست میکنه و احتمالا یکی دوتا نرم‌افزار هم باهاش درست میکنه.
چند سال بعدش ما همه اون الگوریتم رمزنگاری رو میشناسیم و لایبرریش برای زبان برنامه نویسیمون تولید شده و با استفاده از اون مثلا پسوردهای یوزرهامون رو hash میکنیم میذاریم تو دیتابیس.
در حالی که ما به همه‌ی اینا میگیم «برنامه نویس»


چیزی که همه‌ی این شرکتها میخوان، احتمالا همون developer هست. مگر اینکه توی توضیحاتشون چیزی نوشته باشن که مربوط به زیرساخت باشه.
وگرنه شرکتی که کارش تولید وبسایت هست، استخدامهاش هم اکثرا developer هست.


حالا یه مطلب دیگه. یه شغلی داریم به نام computer engineer یا software engineer که نیازمند اینه که طرف توی زبانهای برنامه نویسی زیادی تسلط داشته باشه و یا حداقل باهاشون آشنا باشه. تکنولوژیهای زیادی رو بشناسه و در کل بتونه پروژه رو درک کنه.
این فرد کارش اینه که به developerها بگه چیکار کنن و از کدوم راه این پروژه رو حل کنن (یا بهتر بگم، از کدوم راه این feature رو بسازن)
این فرد کارش اینه که بگه «خوب. برای این feature باید دوتا برنامه نویس استخدام کنیم که فلان کار رو انجام بدن» یا «اصلا نیازی به انجام این کار نیست. با فلان شرکت قرارداد میبندیم از پروژشون استفاده میکنیم». (همه‌ی مشکلات که به کد زدن منتهی نمیشه!)
شاید منظورشون از python engineer و python software engineer این باشه. و چون کارشون فقط با پایتونه، خواستن تاکید کنن که بیشتر دوست دارن توی این زمینه کار کنن.


برای developer ارزش بیشتری قائل نیستن (منظور بدی ندارم) آگهی‌های استخدام developer خیلی بیشتره چون طرف میدونه میخواد چیکار کنه! میخواد سفارش نرم‌افزار بگیره و بده به اینا انجام بدن، سفارشهاش هم تقریبا همه شبیه هم هستن. نمیخواد جای فیسبوک رو بگیره!

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

اینو نگفتم که باعث ایجاد رعب و وحشت بشم :sweat_smile: هدفم این بود که بگم «developer راحتتر از software engineer کار گیر میاره، راحتتر هم کارشو از دست میده.»
همه‌ی شرکتها و startupها نیاز به developer دارن. ولی فقط شرکتهای بزرگ میان دنبال software engineer. پس احتمالا حقوق خیلی بالاتری داره و امنیت شغلیش بیشتره (گرچه کار سختتر گیر میاد و آدم باید بین بهترینها، بهترین باشه تا بتونه استخدام بشه)


پ.ن:
به نظرم اینکه اون شرکت واقعا چی میخواد، فقط از توضیحاتی که داده مشخص میشه. نه عنوانی که برای شغل نوشته.


#3

مرسی بابت توضیحاتتون
سوال دیگم اینه که مثلا python developer کسیه که با پایتون (فقط پایتون ) یه سایت میسازه. یا یه اپلیکیشن دسکتاپ یا …؟
بهتره کسیه که پایتون رو تمام و کمال مسلطه و هرکاری(یه سایت میسازه. یا یه اپلیکیشن دسکتاپ) از پسش برمیاد؟


#4

بله. اصولا وقتی یه زبان خاص رو میگن، فقط همون زبان رو در نظر دارن. ولی داشتن اطلاعات و تجربه توی زمینه‌های جانبی هم خیلی میتونه نکته‌ی مثبتی باشه.
مثلا برنامه نویسی که با flask یا tornado سایت بسازه ولی بلد نباشه روی سرور deploy کنه، نسبت به کسی که تجربه‌ی دیپلوی رو سرور داره خیلی فرق میکنه.

یه سری مهارتهای جانبی که به نظر من مهم هستن و توی آگهی‌های استخدام دیدم و توی شرکتهایی که کار میکردم جزء آپشنهای مثبت به حساب میومدن:

  • کار با git (داشتن چندتا پروژه رو گیتهاب/گیتلب خیلی خوبه. اگه توی پروژه‌های دیگران (پروژه‌ی درست حسابی) هم کامیت زده باشید خیلی عالیه) ولی حداقل اینکه با دستورات گیت آشنایی داشته باشیم به نظرم لازمه.
  • توانایی کار با لینوکس (کامند لاین بلد باشید. نیازی به داشتن مدرکهایی مثل LPIC نیست) و اگه سیستم عاملی که استفاده میکنید، لینوکس باشه که خیلی بهتره.
  • تجربه‌ی کار (یا حداقل یه بار امتحان کردن) دیتابیسهای مهم. مثل mysql pgsql sqlite و دیتابیسهای no-sql
  • توانایی برنامه نویس تو زبانهای دیگه (مخصوصا js اگه کار شما مربوط به وبسایت میشه)
  • یه سری چیزها مثل restFul و web crawler و اینطور چیزهایی که شاید به درد بخوره هم اگه تو رزومه باشه کمک میکنه.

خلاصه رزومه با یه سری چیز به درد بخور پر شده باشه خوبه.


کسی بهتره که علاوه بر تجربه، دانش زیادی هم داشته باشه. پارادایم‌های مختلف رو بشناسه و درک کرده باشه. وقتی یه مشکلی جلوش میذارن، از بین چندتا مسیری که میشناسه یکی رو انتخاب کنه (نه اینکه فقط یه چیز بلد باشه) و اگه ازش پرسیدن «چرا فلان مدل کار نکردی؟» بتونه با دلیل ثابت کنه اون کار خوب نبوده. (نه اینکه بگه «من اینجوری دوست دارم.»)
و کسی از این بهتره، که زبونهای برنامه‌نویسی دیگه رو بلد باشه. درسته که با پایتون میشه هر کاری کرد (تقریبا با هر زبانی میشه هر پروژه‌ای رو انجام داد) ولی همیشه که بهترین گزینه نیست! البته وقتی شما رو برای کار پایتون استخدام میکنن، توقع ندارن یه task رو توی زبون دیگه‌ای انجام بدید. ولی اینکه آدم بلد باشه ضرر نداره.

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


#5


این تاپیک رو الآن دیدم. جوابهای زیادی زیرش نوشته نشده متاصفانه. ولی به نظرم آقای @shahryarjb خیلی کامل و درست توضیح دادن.
به نظرم خوندنش میتونه خیلی کمکتون کنه.


راستی!‌ داشتن یه وبسایت تک صفحه‌ای شخصی (یه دامنه‌ی شخصی که کلا یه صفحه‌ی ساده رو باز کنه) و لینک pdf رزومه داخل اون صفحه باشه هم بد نیست. به علاوه اینکه میتونید یه سری از پروژه‌هاتون رو توی اون سایت قرار بدید.