Python BackendHub – Telegram
Python BackendHub
7.5K subscribers
314 photos
46 videos
11 files
432 links
Learning python & Backend Engineering, with Mani!

Youtube: https://www.youtube.com/@GitOverHere
Github: https://github.com/ManiMozaffar
Linkedin: https://www.linkedin.com/in/manimozaffar

تبلیغات نداریم

Admin: @Mani_nikou
Download Telegram
Python BackendHub
تو این ویدیو پرداختم به نحوه code review و clean code یک کد FastAPI که خوب نبود و نیاز به ریفکتور اساسی داشت رو باهم ریفکتور کردیم و توضیح دادم دقیقا چرا ریفکتور کردم و چرا نسخه ریفکتور شده بهتره خود کد رو از این ریپو میتونید ببینید https://github.com/Ma…
یک نکته ای داخل این ویدیو بود که نتونستم توی ویدیو بگم چون خیلی طولانی میشد و ربط مستقیم به تایتل ویدیو هم نداشت.. به عنوان یک برنامه نویس باید بفهمید چیکار دارین میکنید.

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

مثال میگم, کسی که کتاب two scopes django رو خونده باشه اونجا نویسنده میگه که تو جنگو تمام assert ها رد میشن موقعی که دیباگ رو false میذارین. دلیلش چیه؟ دلیلش اینه که شما وقتی پایتون رو آپتیمایز ران میکنید (و خود پایتونم از حالت دیباگ خارج میشه که با داندر دیباگ میتونید ببینید) یکی از کار هایی که میکنه تمام assertion هارو ایگنور میکنه. پس شما وقتی two scopes رو دارید میخونید باید بعد اون جمله ای که نوشته یک چرا بذارید و گوگلش کنید. چرا اینکارو میکردن؟‌ قطعا یک دلیلی دارن دیگه... جنگو core دولوپر ها که الکی کدی وارد جنگو نمیکنن... عمق اطلاعاتتون هم در همین راستا زیاد میشه.

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

مثال دیگه وقتی شما مینویسی router.post باید بدونید داره چه اتفاقی میفته. اینکه میاین validation حجم باینری فایل input رو توی خود روتر مینویسید یعنی عمق سواد HTTP نداشتین.
مثال دیگه اینکه داریم کد رو decouple میکنیم که reusable شه باید بدونید چرا داریم اینکارو میکنیم. برنامه نویسی جغرافی نیست. من دیدم بعضیا میگن چون فلان کتاب یا فلان شخص گفته, دنبال راه حل اونا نباشید تو مرحله اول شما باید صورت سوال رو درک کنید تا بعد بتونید راه حل اونا رو درک کنید.

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

@ManiFoldsPython
👍16🔥4
Python BackendHub
وقتی میگفتم این هفته فقط باید تست بنویسم و ‍code review تست بکنم شوخی نمیکردم :)) کانتربیوت امروز گیتهابمه پی نوشت: اون ۴ تا review ای که کردم هم unit test بوده رو یک ریپو دیگه @ManiFoldsPython
بعضیا پرسیدن من چطوری مثلا تست نویسی رو یاد گرفتم, مثلا چه کتاب خاصی خوندم یا چه دوره ای دیدم..

بنظره من کلا اشتباهه که شما ۱ کتاب بخونی و بعد بگی اوکی من یاد گرفتم. چون اون کتابو یک انسان نوشته, و ذهنیت اون انسان پشت اون کتاب بوده. برای همین من شخصا ترجیح میدم تو همچین چیزایی برای اینکه ذهنم bias نشه به جاش ۳۰-۴۰ تا article بخونم که کار همون یک کتاب رو میکنه برای من ولی از دید ۳۰-۴۰ نفره مختلف..

امروز ۲ تا آرتیکل خوندم براتون میذارم اینجا راجب تست نویسیه

اولیش راجب اینه که always assert the failing test first توی یونیت تستاتون. خیلی وقتا assertion ای که میذارین شما برای حل یک چیزی (مثلا میگین فلان چیز خرابه)‌اشتباهه. در صورتی که assertion شما اشتباهه و دلیل باگ اون چیزی که شما فکر میکردی نیست و طبق همین assertion جلو میرین و کد رو تغییر میدین. تغییراتی که دادین کلا وقتتون رو هدر دادین و حالا احتمالا باگ جدید هم درست کردید. پس به جای سرو کله زدن با یک باگ باید با ۲ باگ سرو کله بزنید. برای همین تو اولین قدم سعی کنید تستی بنویسید که اون خطا رو reproduce میکنه تو مینیمال ترین حالت ممکن. (دقیقا ‍unit ای که fail میشه باید براش تست بنویسید). اینطوری خیلیی راحت دیباگش میکنید و یک چهارم وقتتون گرفته میشه.
اینجا خیلی کامل توضیح داده
https://canro91.github.io/2021/02/05/FailingTest/

نکته دوم راجب confidence بود تو تست نویسی. تستی که مینویسیم واقعا چقدر اطمینان میده به ما که محصولمون کار میکنه؟ چقدر ارزش داره؟ این مقاله راجب همینه
https://meeshkan.com/blog/defining-confidence-in-software-testing/

@ManiFoldsPython
👍7
داشتم یک سر به لیست سابسکرایبم میزدم که تلسکو رو دیدم :))
اولین توتوریال پایتونیم رو با تلسکو دیدم واقعا یکی از بهترین معلم هایی که دیدم. تو هر ویدیوش ۱۰ بار خطا میکرد و بعد دیباگش میکرد.

@ManiFoldsPython
10😁6👍4
صبح obs ریختم که ریکورد های بعدیو با obs بکنم

نتیجش این شد که رفتم تو میتینگ daily standup و تبدیل شدم به mr invisible 😎

۲۰ دقیقست دارم بالا پایینش میکنم ولی درست نمیشه :))‌ کسی راهکاری داره براش؟

پ.ن:‌اپو بستم ... درست نمیشه
@ManiFoldsPython
🤣16
این پست راجب SDLC هست, یک مقاله عالی راجب Gherkin
لینک

What is Gherkin Language?
Gherkin is a business readable language which helps you to describe business behavior without going into details of implementation. It is a domain specific language for defining tests in Cucumber format for specifications. It uses plain language to describe use cases and allows users to remove logic details from behavior tests.

Gherkin Syntax
Gherkin is line-oriented language just like YAML and Python. Each line called step and starts with keyword and end of the terminals with a stop. Tab or space are used for the indentation. In this noscript, a comment can be added anywhere you want, but it should start with a # sign

توصیه میکنم اولین کاری که باید انجام بدید موقع ساخت یک Software اینه که یک فرد غیر فنی بیاد و با Gherkin Syntax دقیقا داکیومنت کنه چی میخواد از تیم سافتور. یادگیریش یک روز هم زمان نمیبره. صرفا یک language هست برای توصیف محصول. اون موقع دیگه تیم دولوپر انرژی خیلی کمتری میذاره رو فهم بیزنس و خیلی راحت تر متوجه میشه و دیزاینی که میشه هم دقیقا متناسب با همون بیزنس و فیچر ها خواهد بود.

@ManiFoldsPython
👍4🤯3
کیفیت کد خوب با این metric ها سنجیده میشه:
Reusability
Readability
Testability
Flexibility
Mature Tests

کتاب x و روش y همه راه حل برای حل این مشکلاتن. کدی که این ۵ مورد توش رعایت شده اصلا مهم نیست که OOP بوده یا نه. مهم نیست SOLID بوده یا نه. مهم نیست TDD بوده یا نه.
خلاصه TDD اینه که به شما داره میگه کدتون باید Testability بالایی داشته باشه و overengineer نکنید و اول <فکر>‌کنید بعد <دیزاین>‌کنید و بعد کد بزنید (برای اینکه اول تست بنویسید دقیقا باید این مسیر طی شه) ولی آیا تنها روش رسیدن به اینا TDD هست؟ قطعا نه. یک راه حل خوبه. برای یک سواله خوب که معایب خودشو هم داره. پس همیشه به جای دنبال کردن کورکورانه یک methodology فکر کنید ببینید چی داره به شما میده و چی از شما میگیره

@ManiFoldsPython
👍7
https://www.youtube.com/watch?v=udrvnKiQHsA

ویدیو دوم هم آپلود شد. همون ویدیو لایو بود که ظبط کردیم. خوشبختانه فیچر chapter ساختن هم باز شد برام تو یوتیوب

سورس کد دوره لایو چلنج
https://github.com/ManiMozaffar/fast-student

لینک توضیحات خود تمرین و چیزایی که تو تسک خواسته شده بود ازتون
- توضیح لایو کد چنلج

@ManiFoldsPython
7👍1
امروز پلی لیست بعدی رو شروع میکنم
سعی میکنم ۲ ویدیو ضبط کنم

ویدیو اول: DI و DIP
ویدیو دوم:‌ یونیت تست و ماک گرفتن


دوستان برای پلی لیست ریفکتورینگ اگه کدی چیزی دارید که در حد ۲۰۰ خط نوشته شده خیلی ممنون میشم باهام به اشتراک بگذاریدش که بتونم ریفکتورش کنم و ظبطش کنم که اون پلی لیست هم ادامه داشته باشه. سه چهار ریپو کد نیاز دارم. اگه داشتین کامنت کنید تو همین پست که من اضافش کنم به لیستم

@ManiFoldsPython
👍8🔥64
یک پلی لیست جدید داریم که توش میپردازم به نحوه تست نویسی, تست های مختلف, و اصول تست نویسی در SDLC

ویدیو اول این پلی لیست, اومدم در مورد dependency inversion principle و Dependency Injection صحبت کردم و گفتم چرا مهم هستند و تو فریم ورک های مختلف نحوه پیاده سازی DI رو بررسی کردیم.

https://www.youtube.com/watch?v=qSMHCHeErYY&list=PLEQ3RnweNGA6v7qTMrDCcpgr9u91zvpq_&index=1

ویدیو دوم, اومدم در مورد ماک گرفتن صحبت کردم, ماک چیه و side effect چیه و چطوری میتونیم ماک بگیریم؟‌تفاوت ماک کاستوم چیه با ماک unittest و چه مزایا و معایبی نسبت به هم دارن؟ و کجا باید چیو ماک بگیریم

https://www.youtube.com/watch?v=8tsrLxe_-oE&list=PLEQ3RnweNGA6v7qTMrDCcpgr9u91zvpq_&index=2


سورس کد:
https://github.com/ManiMozaffar/testing-101


سوال داشتین حتما زیر ویدیو کامنت کنید پاسخ میدم
@ManiFoldsPython
👍152🔥1
Python BackendHub
یک پلی لیست جدید داریم که توش میپردازم به نحوه تست نویسی, تست های مختلف, و اصول تست نویسی در SDLC ویدیو اول این پلی لیست, اومدم در مورد dependency inversion principle و Dependency Injection صحبت کردم و گفتم چرا مهم هستند و تو فریم ورک های مختلف نحوه پیاده…
دوستان یک نکته اشاره کنم.. من تو ویدیو هام معمولا از فست استفاده میکنم برای اینکه مثال بزنم و مثال نشون بدم. واقعا چیز خاصیم نداره. توصیه میکنم بهتون حتما یاد بگیرید
نهایتا شما تو یک هفته یا دو هفته کل داک فستو تموم میکنید. خود داک فست همینطوری که تو ویدیو نشون دادم فقط داک نیست خیلی مفاهیم رو توش توضیح داده! بنظره من هیچ دوره فستی واقعا به خوبی داکش نیست. فریم ورک نیست لایبریه برای همین خیلی چیز سنگینی نداره و سریع یادش میگیرین

اما اینکه API خوب بنویسید چه با فست چه بدون فست هنر میخواد. با فست شاید مثلا از فریم ورکی مثل جنگو بیشتر انرژی بطلبه چون چیزی تو سطح لایبری کنترل نشده و دستتون بازه. منم تو این محتوا هایی که میخوام تولید کنم بیشتر هدفم این چیزاست. پس اینکه اگه با فست کد نمیزنید بازم میتونه مطالب براتون به درد بخور باشه.

یک سوال هم دارم برام پیش اومده, من که قبلا vote گرفته بودم اکثرا میخواستن راجب تست نویسی محتوا تولید کنم ولی الان بازدید و استقبال خیلی کمه ازش, اگه ایده یا فیدبکی دارین ممنون میشم باهام درمیون بذارید که ویدیو های بعدی رو بهتر کنم. مثلا سطح مطالب بالاست؟‌ پایینه؟ مثال خوب نیست؟ مثال کمه؟‌

سعی کردم زمان ویدیو رو کم کنم که کلا شد ۲ تا ویدیو ۱۵ دقیقه ای و نمیذارم تو پلی لیست ویدیویی بالای ۲۰ دقیقه بره.

@ManiFoldsPython
21👍3
get git over here😂

اسم کاناله که واسه یوتیوب گذاشتم
@ManiFoldsPython
🤣16🔥4😁4
Python BackendHub
get git over here😂 اسم کاناله که واسه یوتیوب گذاشتم @ManiFoldsPython
وقتی یک هندی میخواد get over here رو تلفظ کنه‌:))
🤣20👎3😁2
پایدانتیک یک میلیارد دانلود داشته..! 👀
@ManiFoldsPython
🔥13👍1
git checkout -

میرین تو همون برنچ قبلی که بودین
واقعا مفیده 😂
😁17👍4🔥4😱2
Forwarded from ‌BenDev
ویس در مورد اینکه چرا جنگو (فریم
ورک )نباید استفاده کنید!
@BenDevelop
👍15🔥2
‌BenDev
Voice message
چقدر این ویس حق بود
(پ.ن:‌اکثر پست های کانال امیربهادر تو گروهش برای من میاد :)))‌ تو کانال هیچ پستی برام نمیاد. از عجایب تلگرام :))) )

@ManiFoldsPython
👍7🤣3🥴1
یک پلی لیست داریم که توش میپردازم به نحوه تست نویسی, تست های مختلف, و اصول تست نویسی در SDLC

تو ویدیو سوم پلی لیست, پرداختم به پای تست, توضیح دادم پای تست چیه, چرا بهتره از لایبری unit test پایتون و اینکه fixture ها چین و scope چیه و assertion چیه و چطور assertion ای بنویسیم که خوانایی بالاتری داشته باشه.
https://www.youtube.com/watch?v=_YPJZtMRs8Q&list=PLEQ3RnweNGA6v7qTMrDCcpgr9u91zvpq_&index=3

تو ویدیو چهارم پلی لیست, نحوه ماک کردن database و application رو توضیح دادم و نحوه نوشتن تست تو FastAPI رو هم آموزش دادم.
https://www.youtube.com/watch?v=zhp7Y6sWqfE&list=PLEQ3RnweNGA6v7qTMrDCcpgr9u91zvpq_&index=4

‍سورس کد:
https://github.com/ManiMozaffar/testing-101

سوال داشتین حتما زیر ویدیو کامنت کنید پاسخ میدم
@ManiFoldsPython
9👏2👍1