Mehrab Mohammad Hosseini
خواندن ۱۰ دقیقه·۱ روز پیش

چرا پایتون زبان مناسبی برای شروع برنامه نویسی وب نیست؟

چن سالی هس که پایتون به خاطر سینتکس قشنگ و ساده ش و همچنین کاربردهای متنوعش به سرعت سر زبون ها افتاد و به همون نسبت کلاس ها و ویدیوهای اموزشی مرتبطش هم زیاد شدن. اما این ها دلیل نمیشه که اگر مبتدی هستید و میخواید وارد حوزه شغلی برنامه نویسی بشید کدنویسی رو با این زبون شروع کنید؛ به این دلایلی که در ادامه خواهم گفت و نهایتا زبون های جایگزین هم معرفی میکنم.

لازم به ذکره که من خودم مسیر برنامه نویسی رو از دو کانال موازی شروع کردم: در دانشگاه با زبون c و توی بوتکمپ توسعه بکند با زبان پایتون و تمرکز بر فریمورک جنگو. بنابراین کسی هستم که هر دو طرفو دیده و شاید تجربیاتم به درد افرادی بخوره.


دلایلی که پایتون برای شروع شما مناسب نیست

1. عدم درگیری با مفاهیم سطح پایین و پایه ای تر در کامپیوتر

متاسفانه یا خوشبختانه پایتون برای شما یه سری مباحثی رو handle میکنه که توی باقی زبون ها به همین راحتیا نیس! در کل به نظرم کار رو با یک زبونی شروع کنید که کامپایلری باشه و strict typing داشته باشه. این داینامیک تایپ بودن پایتون به این معنیه که شما توجهتون رو به ساختار و نوع متغیر و داده هایی که تعریف کردید به مرور از دست میدید و مطمئن باشید این یک منبع بزرگ برای تولید باگه:)

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

مثال دیگش data structure هایی هستن که توی این زبون قابل تعریفن. تقریبا همۀ اونا دست شما رو بیش از حد باز میذارن و اگر مبتدی باشید نمیتونید خوب یاد بگیرید چجوری به بهینه ترین شکل از هر کدوم استفاده کنید؛ چه مواقعی تاپل نیازه چه مواقعی لیست و دیکشنری و ... . شاید بهتر باشه مفهوم array رو در یک زبون دیگری به درستی درک کنید و بعدش از این دیتا استراکچرها استفاده کنید! به بیان دیگه، پایتون اینقدری لایه های انتزاع رو برده بالا که انگار شما دارید با زبان انگلیسی با کامپیوتر صحبت میکنید و این descriptive بودنش اتفاقا نقطه قوتشه، اما نه واسه شروع یادگیری!

2. شیء گرایی نه چندان زیبا

شاید این یه کم شخصی باشه اما من واقعا با شیء گرایی مورد استفاده در پایتون مشکل دارم. بله اینکه همه چیز در پایتون یک آبجکت هس خیلی زیباس اما شما وقتی میخوای کلاسهای اصولی بنویسی بدیهی ترین چیزایی که نیاز داری معمولا تعریف متودهای از نوع abstract یا static هست. اینکه توی پایتون با استفاده از decorator ها به این موارد دسترسی پیدا میکنی و نه سینتکس، برای من یه کم تو ذوق میزنه. نحوه به کارگیری ویژگی های private/protected خیلی کد رو زشت میکنه. همچنین خیلی موارد دیگری که بحثو بیش از حد تخصصی میکنه اما میشه راجبش بحث کرد.

3. دردسر برای یادگیری مابقی زبان ها در آینده

سینتکس پایتون یه کم زیادی متفاوت از بقیه س. اکثر زبون های برنامه نویسی که باهاش روبرو میشید احتمالا با استفاده از کرلی براکت { } شروع و پایان یک اسکوپ رو مشخص میکنن اما در پایتون با دونقطه : و tab این اتفاق رخ میده که شاید بعدا تا عادت به تغییرش کنید یه کم دستتون اذیت شه. از اون مهمتر پایتون سمی کالن ; نداره! بعدش سر این که یادتون میره ته هر خط توی باقی زبون ها سمی کالن بذارید قراره یه کم بد قلق باشن.

از این موارد سطحی گذشته، راحتی استفاده از همه چیز توی پایتون، باعث میشه یه سری مفاهیم رو کلا نادیده بگیرید یا حتی بهش فکرم نکنید. مثلا مرتبه زمانی اجرای کد توی یه لوپ. یا کلی تابع آماده ای که توی باقی زبون ها خیلیاشون در کتابخانه های استاندارد اون زبان نیستن و شما باید پیاده‌سازیشو خودتون بلد باشید! در صورتی که مثلا اگر با کتاب C programming language شروع کنید و زبان c رو حتی یک چهارمشو یاد بگیرید، به آسونی میتونید پایتون هم فرا بگیرید. البته میدونیم که همه زبان ها از جمله پایتون، کلی مورد تخصصی و پیچیده دارن که حتی سنیورهاش بعد ۱۰ سال هم ممکنه ندونن و همیشه این منحنی یادگیری ادامه داره، اما بحث دونستن پایه های اساسی هر زبان هست.

4. عرضه و تقاضا: همه پایتون بلدند!

به خاطر همین سادگی ها و همچنین کاربرد و مشهوریتی که پایتون کسب کرد تعداد developer ها و کلا افرادی که به این زبون تا حد خوبی مسلطند روز به روز بیشتر شد تا جایی که برای استخدام شدن در یک پوزیشن شغلی مربوط به پایتون معمولا لازمه خیلی زحمت بکشید و رزومۀ قوی داشته باشید تا از رقبای زیادتون یک قدم جلوتر باشید! این موضوع برای باقی زبون ها به این شدت برقرار نیست. از طرفی به شخصه مواردی دیدم که کارفرما برای برنامه نویسی که فقط و فقط پایتون بلده به دید خوبی نگاه نمیکنه و متاسفانه فک میکنه شما حرفه ای نیستید. برای رهایی از این موضوع اگر به هر دلیلی خواستید با پایتون شروع کنید حتما و حتما کتاب clean code آنکل باب رو بخونید یا از جاهای دیگه یاد بگیرید چطور تمیز کد بزنید. همچنین با اصول solid آشنایی پیدا کنید و سعی کنید اونو توی کدهاتون به مرور زمان به کار ببرید تا شما رو از باقی افراد یه پله جلو بندازه!

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

جمع‌بندی دلایل

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


معرفی زبان جایگزین برای شروع کدنویسی

یکی از بهترین زبانها برای شروع بدون شک زبان c هست.
  • زبان c در بعضی از دانشگاه ها برای تدریس مبانی برنامه نویسی به کار برده میشه مخصوصا برای رشته های مهندسی برق و کامپیوتر. دلیلش خیلی واضحه: زبون c به شدت سریع، قوی، و البته نزدیک ترین زبان بین زبان های سطح بالا به زبان های سطح پایینه! یعنی برعکس پایتون شما با مفاهیمی مثل pointer , memory allocation سر و کله میزنید و بعد از اشنایی با struct ها آماده میشید که در باقی زبون ها مثل c++ مفهوم شی گرایی رو راحت تر یاد بگیرید. نیازی نیست از کاربردهاش براتون بگم چون همون پایتونی که راجبش صحبت کردیم تهش به همین c ترجمه میشه و سپس اجرا میشه. هستۀ سیستم عامل لینوکس با این زبون نوشته شده ( سورس کد ) و بینهایت جاهای دیگه که به کار برده میشه. من معتقدم اگر کسی زبون سی رو مسلط باشه میتونه سایر زبون ها رو خیلی راحت تر یاد بگیره.
زبان های جاوا و سی شارپ و سی پلاس پلاس: اگر مفاهیم basic رو از قبل میدونید
  • اگر تا حدی با یک زبان برنامه نویسی استارت کار رو از قبل زدید حالا دنبال این هستید که توی یک زبونی حرفه ای شید و وارد بازار کارش بشید با توجه به حوزه کاری و سلیقه تون میتونید یکی از زبون هایی که طی سالها جواب پس داده رو انتخاب کنید. مثلا اگر دوست دارید وارد حوزه گیم سازی بشید سی شارپ میتونه انتخاب مناسبی باشه. از طرفی جاوا کاملا object oriented هست و طرفداران خاص خودشو داره و در کابردهای متعددی قابل استفاده س. چنین چیزی در مورد cpp هم صدق میکنه ولی بیشتر برنامه نویس های حوزه embedded طرفدارش هستن و خیلی زبان محبوبی در همه حوزه ها به حساب نمیاد. مثلا کسی رو نمیبینید که با سی پلاس پلاس بکند بزنه. شما باید اول حوزۀ مورد علاقه تون رو پیدا کنید و بعدش با یه زبون شروع کنید. لازم هم نیس خیلی وسواس به خرج بدید. بعد از حرفه ای شدن در یکی از این زبونها، کار با بقیه شون خیلی سخت و طاقت فرسا نخواهد بود.

با چه زبانی ادامه دهیم؟

زبان هایی که به نظر میان آینده روشنی رو در انتظارشون دارن: ,rust, dart, kotlin, go, swift, solidity, ruby ...
  • زبون هایی که در بالا مطرح شد هر کدوم تقریبا مربوط به حوزه خاصی مثل رمزارز،اندروید،ios هستن یا چیزایی هستن که تازه دارن ترند میشن. بعضیاشون مثل روبی مدت هاست که وجود دارن اما برنامه نویس ماهر در این زمینه حداقل توی ایران نسبتا کم پیدا میشه پس میتونن بازار کار مناسبی رو بسازن. هرچند از صفر شروع کردن با این زبون ها رو پیشنهاد نمیکنم اما یادگیری هر کدوم از این زبون ها جذابیت خاص خودشو خواهد داشت!

چیزی که به شخصه بهش رسیدم اینه که کنجکاوی شخصی‌تون رو پیگیری کنید و در مسیر یادگیری زبان قرار بدید. اینو با اندکی تحقیق بهش خواهید رسید. مثلا، اگه دنبال مفاهیم هم‌روندی و یه زبون کامپایلری جدیدتر با سینتکس ساده هستید go جذابه. اگه دنبال زبون سطح پایین و سخت‌گیری هستید که پتانسیل جایگزین شدن C رو داره و کلی نکته جدید برای یادگیری، زبون Rust رو امتحان کنید. اگه از خانواده جاوایی ها دوس دارید گشت و گذاری بزنید کاتلین هست. و به همین ترتیب با یه سرچ ساده میتونید به کلیت هدف ساخت این زبان‌ها برسید و ببینید به کدوم سمت جذب میشید.


بالاخره باید پایتون یاد بگیرید!

درسته که کل متن حول این موضوع گذشت که پایتون زبان مناسبی برای شروع نیست اما قطعا یکی از بهترین زبون ها برای یادگیری و استفاده س. چه چیزی بهتر از اینکه شما میخواید یه اسکریپت دم دستی بنویسید و چیزی که توی بقیه زبون ها ممکنه خیلی طول بکشه رو با پایتون در کمترین تعداد خط ممکن انجام بدید؟ پایتون با وجود کتابخونه های کاملی که در همه بخشهای مختلف داره و البته اپدیت های جدیدش که performance و سرعتش رو از قبل خیلی بهتر کرده یکی از بهترین گزینه هاس. چندین ساله که علی رغم وجود زبان های R , matlab پایتون حرف اولو توی زمینه هوش مصنوعی میزنه. همچنین فریم ورک های قدرتمندی که توی زمینه وب داره (fastAPI , Django ) اونو به عنوان یه رقیب جدی در برنامه نویسی وب برای بقیه زبونها تبدیل کرده. کلی خوبی دیگه هم داره که مجالی برای بیانش نیست و همه جا میتونید از اون موارد مطلع شید.

پایتون فلسفه زیبایی پشتش داره و جزو یکی از زبان های موردعلاقه بنده هست همچنان، اما یادتون نره که اولین گزینه برای شروع یادگیری نه:)




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

موفق و پاینده باشید.



شاید از این پست‌ها خوشتان بیاید