سلامی چو بوی خوش زندگانی به تمامی آنان که در راستای ارتقای شخصی خود گام بر می دارند. پول که چرک کف دسته. .والا
بسته به تصمیمی که از برنامه نویس شدن دارید قضیه فرق می کنه. اما یک قاعده کلی وجود داره و اونم اینه که: اگه تو هر کاری حرفه ای و متخصص باشی و صبر هم داشته باشی به همه چی می رسی. میگی نه ۳ رو بفرست به انجمن برنامه نویسان خفن و اینا
زبان هایی که با آن ها پروژه نوشتم چه به صورت تیمی و چه به صورت فردی:
Python: شروع سال ۸۹ - هنوزم دارم کار می کنم
C#: شروع سال ۹۲ از سال ۹۷ دیگه کار نمی کنم
Java: شروع سال ۸۷ هر از چند گاهی برای پروژه های اندروید از اون استفاده می کنم
و فرانت (بخش کد نویسی)
AngularJS, Angular2.0: از سال ۹۳ تا ۹۹ دیگه استفاده نمی کنم
VueJS: از سال ۱۴۰۰
البته اینا رو به صورت تکی انجام نمی دم و تیم داریم و به عنوان یک تیم لید تجربیاتم رو باهاتون به اشتراک می زارم
یه اصلی هست که همیشه باید مد نظر داشته باشین و اون هم عمر آدمی هست که سریعا می گذره و از یه زمانی به بعد: رویابافی و یادگیری و اینا کم و کند میشه. پس سعی کنید در یک فیلد - یا یک زبان، خیلی حرفه ای بشید
در مورد پایتون اگه بگم، به شدت سرعت تولید محصول بالاست چه در زمینه وب و چه در سایر زمینه ها. خیلی زبان سطح بالاییه. بزارید با یه مثال براتون بگم
فرض کنید بخوایم تو یه آرایه دنبال یه آیتم بگردیم:
کد پایتون
if value in array:
print('yes')
کد C#
foreach(var item in array)
if(value == item)
Console.WriteLine("yes");
همون طور که مشاهده کردین زبان پایتون خیلی به زبان انسان ها نزدیک تره و کدهای کمتری نوشته میشه. اما و اونم یه امای بزرگ: به شدت زبان کندی هست. اما خیالتون راحت باشه که هیچ بیزنسی انقد بزرگ نیست که پایتون نتونه از پسش بر بیاید. و یه اما که این اما خیلی مهمتره. خیلی زبان خطرناکی هست چون تعریف نوع نداره و در هر جایی می تونین نوع و مقدار متغییر رو تغییر بدین و علی برکت الله. و اینجاست که تست نوشتن نقش خیلی پر رنگی رو ایفا می کنه
خب بریم سراغ انتقادات خودم. مثه همه زبان های دیگر یه سری استایل کد براش تعریف کردن که مثلا متغییرها رو اینجوری تعریف کنید و انجوری نباشه اما ماژول داخلی خودش هم اینو رعایت نکردن به عنوان مثال
getsizeof()
متد overloading نداره. به نظرم اینو باید می داشت
کلمه def برای تعریف متد و تابع گذاشتن یعنی چی
برای اونایی که از C# , Java میان پایتون، اینو در نظر داشته باشین که a++ نداره به نظرم این یکی از بهترین کارهایی که کرده. به نظر من حالت بی منطقی هست مثه تخم مرغ عید پاک. گفتم یه کم غارجی بنویسم حال کنید
خیلی چیزاش میشه گفت خوبه. مثلا GIL در کل تصمیم خوبیه که نمی زاره دو thread هم زمان یه کد رو اجرا کنن چون سرعت اجرا خیلی بهتر میشه برای اجرای IO بهتر از asyncio استفاده کنید
در کل برای استارت آپ ها به شدت توصیه می شه.
هنگام استفاده از پایتون باید دانش عمیقی از طراحی الگوریتم داشته باشید چون زبان کندی هست و برای preformance بهتر، بایستی کدهای بهتری بنویسید
با C# خیلی خاطره دارم و یادمه اوایل که داشتم asp.net mvc رو یاد می گرفتم کتاب pro asp.net mvc از apress رو خوندم خیلی دانش عمیقی بهم داد هر چند در مورد برنامه نویسی وب بود اما دانش برنامه نویسی من را هم افزایش داد. یادمه بخش dependency injection رو که ۱۰ صفحه بود یک ماه داشتم هی می خوندم و با سعی و خطا پیش می رفتم تا یاد بگیرم. در کل کتاب خوبی بود.
اما در مورد C# اگه بگم بهترین زبان برنامه نویسی بعد از جاوا از دید من هست، دروغ نگفتم اما چرا دیگه با اون کار نمی کنم
نکته: اصول و قواعد پایه اش خیلی حرفه ای طراحی شده
چرا دیگه با اون کار نمی کنم چون برای یه کار ساده خیلی درگیر یادگیری اصول و قواعد و دانش زیادی می شین.
در مورد زبان بگم: ساختارهای in, out, ref اینا چیه گذاشتن(می دونم چیکار می کنن نیاید تو کامنت برام توضیح بدین:) ) سطح دسترسی ها زیادی internal protected اینا چیه اضافه کردن. یا کلاس sealed که چی. برات انقد دانش اضافی گذاشتن اگه استفاده هم نکنی هیچ اتفاقی برات نمی افته. pinterest رو با پایتونی که اینا رو نداره ساختن گوگل از پایتون استفاده می کنه ...
و موارد بالا و سعی در اثبات خود به عنوان بهترین برنامه نویس جهان و ایران و زور چپون کردن اصول مارتین و فاولر برای کارهای پیش پا افتاده. دیگه علاقه ای به کار کردن با زبان C# در شرکت ها نداشتم
بزارید با یه مثال توضیح بدم. سال ۹۳ تو یه پروژه DDD شرکت کردم که تقریبا ۲ سال با اون تیم همکاری کردم. برای یک نمایش دادن آیتم های یک dropdown ۱۸ تا فایل ایجاد می کردیم و کدهای زیاد هم برای جنریک ها می نوشتیم دیگه بماند unit_of_work های اضافی (دیالوگ مزخرف که همیشه می گن شاید فردا از orm دیگه ای استفاده کنیم) و پابلیش تغییرات در یک eventbus و اینا و در نهایتش هم پروژهایی که می نوشتند درست حسابی کار نمی کرد
بعد ها، یک سال نشستم و همه اون دانش ها را خودم از صفر بروز کردم و فهمیدم اون شخص تصمیم گیرنده دانشی که به ما انتقال داد همش اشتباه بود و اسرار هم به درست بودن کارش داشت
هر جایی هم می رفتم دانش ها همه نصفه نیمه بود و با کلماتی مانند autofac, structuremap, windsore, ... سر هم دیگه رو شیره می مالیدن. بماند در کل دنیا همین قوانین حاکمه اما تو ایران اوضاع داغون تر بود. چون همه می خواستن به نحوی خودشون رو ثابت کنن. به عنوان مثال یکی از ساختارهای اشتباهی که دیدم:
schedule رو گذاشته بودن داخل while
این شخص الان مربی و مشاور استفاده از microservice , DDD اینا هست. تو یه مصاحبه می خواست منو رد کنه که مدیر عامل نزاشت. اما خودم نرفتم
بعد هر جایی هم می رفتم همه یه سری سوال مشابه می پرسیدن. یه بار از یکی از اونها پرسیدم این کد خیلی آشناست گفت نه خیر اینو خودم نوشتم
برای مصاحبه یه شرکت بزرگ ایرانی رفتم ازم پرسیدن اگه یه سیستم پرواز رو به شما بدین از چه الگوهایی استفاده می کنین. منم گفتم اگه براساس تجربه جلو برم از همون تمپلیت mvc استفاده می کنم. هر جا نیاز باشه خودمون رو اصلاح می کنیم و نیرو هم به راحتی براش پیدا میشه. یه عقیده ای دارم که برنامه نویسی حرفه ای است که بخواهد و علاقه داشته باشد که مداوما کدهایش را بهبود بخشد. رد شدم
در کل سرعت c# نسبت به پایتون خیلی بیشتره اما دانش بیشتری نسبت به پایتون برای یکسری کار می خواد که در بحث بیزنس مخصوصا بیزنس های استارت آپی خیلی بهینه نیست اما برای پروژه بانکی حتی الامکان از C# یا جاوا استفاده کنید
خیلی طولانی شد بعدا در یه مقاله ی دیگه در مورد زبان های دیگه ای که باهاشون کار کردم می نویسم. اگه آپدیتی هم داشتم اضافه می کنم