سلام دوستان عزیز میدونم خیلیهاتون الان با عنوان این موضوع گارد محکمی گرفتید که بیاید اینجا حسابی از خجالت من دربیاید ولی خوب منم دلایلی دارم که شاید شخصی باشه برای اینکه از پایتون بدم بیاد. قبل از اینکه شروع کنم باید بگم که من برای خیلی از کارهام از پایتون استفاده میکنم چون کتابخانه و فریمورکهای متنوع و قدرتمندی داره و اصلا مخالف پایتون نیستم، بیشتر مشکل من با سینتکس اون هست.
1. اگه بخوام مشکل اصلیم رو با سینتکس این زبان بگم، اینه که واقعا یه جاهایی که اصلا لازم نیست داره از قاعده خارج میشه، به عنوان مثال آدم داره کد میزنه یه دفعهای میبینه خطا سینتکس داره اونم برای اینکه بجای && از خود کلمه and استفاده کرده
واقعا لازم بوده این کار؟ ببینید اگه قراره این دلیل دوستان بیارن که میخواسته به زبان انسان شبیهتر بشه الان علامت & دقیقا چه معنای دیگهای میتونه داشته باشه؟ یا مثلا میگه elif که یکی از احمقانهترین چیزایی بود که من دیدم، لینک زیر از نشون میده که همچین سوال سادهای چقدر میتونه rate بگیره
:
https://stackoverflow.com/questions/2395160/what-is-the-correct-syntax-for-else-ifمورد بعدی که واقعا اذیت میکنه این True و False هست که با حروف بزرگ نوشته شده، خوب چرا؟ توی کدوم زبانی دیدید به این شکل عمل بشه، حداقل توی زبانهایی که من کار کردم هیچ وقت حروف بزرگ و کوچک با هم قاطی نمیکنن برای کلیدواژهها، همه حروف کوچک هستند، یکی از بدترین کارهایی که میشه انجام داد و خطاهای سینتکسی را بالا برد. الان فرض کنید من برای کلاینتم دارم React یعنی JS کار میکنم، میخوام بیام برای سرور هم از جنگو یا فلسک استفاده کنم، یه لحظه ببینید سوئیچ کردن مابین JS و پایتون چقدر میتونه اذیت کننده باشه، یعنی به قطع شما حداقل یک بار توی پایتون True و False را با حروف کوچک مینویسی و برعکس. از این موارد سینتکس عجیب غریب خیلی هست و دوستان هم واقعا میدونن چون اکثرا کسی که کارش با لینوکس هست بدون اینکه بخواد با پایتون هم مجبور حداقل کار بکنه.
2. فکر کنم اینو یک مشکل جدا در نظر بگیرم بهتره، واقعا چرا توی کلاسها در Python باید توی هر تابعی self را صدا بزنیم
یعنی یه هندل کردن this اینقدر سخت بوده؟ جدا اذیت کننده نیست که هر سری یه پارامتر اضافه داشته باشی؟ پایتون ادعای خوانایی داره، الان کسی که تا حالا پایتون کار نکرده ولی شیگرایی توی زبان دیگه مثلا #C بلد بوده یک کلاس پایتون نشون بدی، دو ساعت زل بزنه به صفحه بازم متوجه نمیشه این self واقعا چیه. یعنی میفهمه که همون this هست ولی بازم نمیتونه باور کنه
3. مشکل اصلی من، واقعا چرا باید {} حذف کنی و به جاش از تب و اسپیس استفاده کنی؟ خدایی خوانایی میبره بالا؟ حجم کد میاره پایین؟ داری کد میزنی از جایی کد کپی میکنی اون از تب استفاده کرده توی از اسپیس، خوب حالا باید یه افزونه روی ادیتورت نصب بکنی تا اینا رو تبدیل بکنه
الان واقعا زبانی که وابسته باشه به ادیتور و افزونه و حتی IDE اینقدر تعریف داره؟ یعنی ارزشش داشت بیای اینجوری این همه مشکل به وجود بیاری سر این قضیه؟ حالا مشکلاتی مثل مینیفای نشدن کد و این حرفا به کنار ولی به نظرم این کار نه تنها خوانایی بالا نمیبره بلکه توی کدهای زیاد یک پروژه همون براکتها باعث خوانایی بیشتر میشه که متاسفانه پایتون فاقد این امکان هست.
4. ورژن جدید میدید یا زبان جدید منتشر میکنید؟ فکر کنم همین یه جمله کافی باشه دیگه این قضیه ورژن بندیهای پایتون برای همه آشکار هست.
5. ببینید یه موقع من دارم JS کار میکنم، تا حدی که برم جلو بیسیک نحوه کار زبان دستم میاد، مثلا میگم که خوب وقتی دارم توی PHP کد میزنم میدونم که تمامی امکانات اون توی توابع از پیش تعریف شده هست، پس برای اندازه آرایه نمیام به این شکل عمل کنم:
$array.length
میدونم که تابعی برای این کار هست، یا مثلا میخوام روی آرایه عملیات push و pop انجام بدم، خوب به قطع انتظار ندارم مثل مثال بالا عمل کنم، پس دنبال توابعی برای این کار میگردم و بعد هم مطمئن هستم که جواب حاصله از خود تابع بازگشت داده میشه نه اینکه خود متغیر تغییر کنه. و این موضوع توی زبانهای دیگه هم به همین شکل هست، به عنوان مثال توی JS هم من انتظار اینو ندارم برای push کردن تابع سراسری داشته باشه، میدونم این تابع توی کلاس خود همون آرایه یا آبجکتم قرار داره.
ولی متاسفانه python قاعده کلی نداره، نه اینکه هر کسی هر جور دوست داره بنویسه، نه، این امکان JS هم داره، منظورم اون بیسیکی هست که خوب رعایت بشه تا من برای مواجه با مسائل جدید دوباره نخوام چند تا روش امتحان کنم. مثلا میخوام اندازه آرایه(شما بهش بگو لیست
) بخونم باید از تابع سراسری len استفاده کنم، بعد میخوام آرایه را برعکس کنم حالا باید از خود ویژگیهای آرایه تابع reverse صدا بزنم. همینجا توی نام گذاری این تابعها هم میتونید اشکال بگیرید، یه سریها مثل همین len مخفف و کوتاه شده هستن، یه سریها کاملا، خوب آدم تکلیفش واقعا روشن نیست که باید چیکار کنه.
فکر کنم یه مثال دیگه بزنم همه چی روشن بشه، ببینید من JS کار کردم، خوب پس اگه از یک کتابخانه یا فریمورک اون بخوام استفاده کنم اصلا حتی شاید نیاز به داکیومنشن و آموزش هم نداشته باشم، دو روز بشینم کدها رو بخونم کامل متوجه میشم. شما JS بلدی یه مشت کد NodeJS میزارن جلوت، واقعا درک کردنش سخته واست، یا React؟ حالا فرض کن شما پایتون بلدی بخوای جنگو کار کنی چه اتفاقی میفته؟ دیگه قضاوت با دوستان، اگه برنامهنویس هستید و تا حالا جنگو را امتحان نکردید فقط یک django getting started سرچ کنید مطمئنم برق سه فاز از سرتون میپره،اصلا اون انتظاری که باید رو ندارید.
من زیادی از JS گفتم حالا دوستان فکر میکنن من انتظار دارم در پایتون از قواعد JS استفاده کنم و حال تغییر ندارم، در صورتی که من فقط مثالهام رو روی این زبان زدم و اصلا همچین انتظاری ندارم از پایتون، دیدید که تا جایی هم از PHP مثال زدم.
در آخر باید بگم مشکلات متعدد زیادی وجود داره که خوب الان دیگه توی ذهنم نمیاد ولی در حین انجام پروژههای هر چند کوچیک یا بزرگ واقعا اینها به چشم میان، از این بعد اونا رو یادداشت میکنم که از ذهنم نره.
اینو صرفا جهت شوخی میگم ولی حسی که به من دست میده وقتی دارم پایتون کار میکنم اینه که اولا زبانی بوده که به هیچ وجه هیچ پلنی برای این حجم از بزرگ شدن نداشته، واسه همین بیس خوبی که واقعا فکر شده باشه روش نداره، یکسری عقیدههای چرتی مثل این که کسی که کد زنی بلد نیست هم بتونه کار کنه باهاش که به نظرم اومدن ابرو رو درست کنن زدن گردن یارو رو قطع کردن نه تنها چشمش رو واین که در نهایت حس همیشه من در حال کار کردن با این زبان:
What the f*ck