یک سوال دارم از همتون,
چرا تو کامینیتی پستایی مثل دیزاین و کلین کد و اصول کد نویسی engage خیلی کمتری دارن؟ به جاش مثلا دیدم یک پستی راجب یک موضوع تخصصی تر تو پایتون خیلی engage بیشتری داره! یا مثلا پستم راجب sqlalchemy و tortoise که یک نصیحت و نظر شخصی ساده بود.
من تو دو کامینیتی روس هستم و میبینم ۲۴ ساعته حوزه سوالاتشون رو همین مباحث میچرخه. ولی احساس میکنم این تو بحثا تو کامینیتی ایران خیلی طرفدار نداره چون تاحالا هیچ پستی ازکانال که راجب این چیزا بوده engage نگرفته. البته هدف من engage گرفتن نیست ولی میخوام دلیلشو بدونم؟
نظره شخصیم اینه که هممون قرار نیست magic code بنویسیم. هممون قرار نیست اینترنال cpython رو خوب بلد باشیم. هممون قرار نیست پروژه big data داشته باشیم که مثلا یک جایی یک خطه کد efficient نبود پروداکشن زیر بار و فشار بره.
ولی هممون داریم رو یک پروداکت کار میکنیم که خیلی مهمه راحت بتونیم بهش فیچر اضافه کنیم و بیزنس fail نشه بخاطر دیزاین بدمون. هممون تست مینویسیم ولی حتی پستای تست نویسی منم engage خوبی نداشتن!
دلیل engage تو این بحثا نداشتمون چیه؟
"من فکر میکنم بخاطر اینه که سطح usecase کامیونیتی پایتون فارسی در همین حد هست. کدی بنویسن که در درجه اول کار بکنه، در درجه دوم با پرفرمنس شوآف بکنن حتی اگه بهش نیاز نداشته باشن. درجه سوم هم نداره!😅"
چقدر حق بود این کامنت بابی!
من شخصا ترجیح میدم ۱۰۰ ساعت رو دیزاین وقت بذارم و بهتر یاد بگیرم تا اینکه ۱ ساعت رو cpython internal وقت بذارم. اونا هم فانه و قطعا دوست داشتنیه. ولی حقیقتا کاربرد کاری نداره براتون مگه maintainer لایبری اوپن سورس هستین.
من تو کانالم هر مطلبی نوشتم صرفا "یادداشت روزانم" بود. اینطور نیست که این مطالب رو همیشه بلد بودم. خیلیاشو همون روز یاد گرفته بودم. یادداشت میکنم چون بازنویسی و توضیحش به بقیه باعث میشه خودتون یک مبحث رو بهتر یاد بگیرین. و البته بحث کردن راجبش که باعث میشه ایده و نظرات بقیه رو بشنوید و یاد بگیرین. من واقعا دوست دارم پست میذارم ایرادی داره کلی کامنت و engage ببینم که به اون ایراد پرداخته شده. تو همون کامینیتی روسی پایتون که من هربار ریپویی یا کدی گذاشتم ترور شدم :)) و همون ترورا باعث شده که پیشرفت کنم.
مثال DIP رو زدم امروز چون واقعا با پوست و گوشت حس کردم چقدر خفنه! تسک این هفته من این بود که admin role بنویسم برای بک اندمون, و کل این کار فقط با ۴۰ خط کد انجام شد. اضافه کردن یک implementation در راستای پروتکل authorization ای که داریم برای هر role. و return True تو همه حالت ها. حالا همون روتر هایی که داشتیم رو میتونیم با admin صدا بزنیم و بدون اینکه یک queryجدید هم اضافه کرده باشم دسترسی super user رو implement کردم. ولی تو کامینیتی ایران این خودش یک تسک چند هفته ایه :)) .
من این پستا رو ادامه میدم حتی اگه engage زیادی نداشته باشه ولی امیدوارم این کالچر توی کامینیتی پایتون ایران نفوذ کنه.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand" - Martin Fowler
پست آخر امروز:
من دانشم کافی نیست برای شرکت تو بحث. من دانشم کافی نیست برای کلین کد. من که تو big tech کار نمیکنم. من شرکتم ۵ نفره چرا باید کدم کلین باشه؟ من برای خودم کد میزنم. و .. . تجربه شخصی من ثابت کرده همه این حرفا اشتباهه. کد شما همیشه باید دیزاین شده باشه اگه قراره maintain شه. دیزاین به شما اجازه decoupling میده. دیزاین به شما flexibility میده. اینکه برداری تند تند کد بزنی یک جایی یقتون گرفته میشه.
یک خاطره براتون تعریف کنم, من ربات نوشتم. که کراول میکنه. کی؟ ۲ سال پیش. فقط خودم روش بودم. ۱۸ ماهم maintain کردمش. با بقیه فریلنسر ها هم کار میکردم ولی به صورت ماژولار بود (یک بحثایی بود که تو تخصص من نبود). یعنی سورس اصلی فقط دست من بود.
با خودم اون موقع میگفتم چطور میتونم تستش کنم!باید رباتم واقعا کار کنه. برای همین تو محیط لوکال و staging اینقدر تست میکردم تا استیبل شه. بعد دیپلوی میکردم. همه چی خوب پیش میرفت. وقت ازم زیاد میگرفت ولی مشکلی نداشت. چیزی نبود که نتونم بهش اضافه کنم. ولی به یک نقطه رسیدم که یک خط کد اضافه میکردم مجبور میشدم کلی دستی تست کنم تا بره رو پروداکشن. نتیجشم این شد که یک دفعه چند ماه ریلیز ندادم به پروداکشن.
کاش اون موقع یک نفر به من همین نکاتو میگفت. بدی کد SOLID ننوشتن اینه که شما تا ننویسی نمیفهمی چقدر زندگیت شیرین تر میشه. تو یک چاله هستین که نمیدونید بیرون چاله دنیا چه شکلیه.