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
Forwarded from ‌BenDev
خب خب
بریم سراغ راهنمایی اول
من پروژه رو خودم تکمیل کردم و در لینک زیر قرار دادم
https://github.com/amirbahador-hub/python_tutorial
کاری که شما باید بکنید اینه که fork بگیرین و بهبودش بدین
الان دیگ خیلی راحت تره دیگ , یه کدی دارین که داره کار می‌کنه
فرض کنید سنیور شرکت هستین و اینو یه جونیور بهتون pull request داده

همانطور که گفتم باید سعیتون این باشه که با کمترین راهنمایی به جواب برسین

@BenDevelop
👍4
تو پروژه student app رضا جان PR زد یک نکته خیلی تمیز پیدا کرد!

در صورتی که من شروطمو اسم گذاری کرده بودم که باعث خوانا تر شدن کد میشد رضا از Walrus Operator استفاده کرد که همینکارو تو یک خط انجام بده و حجم کد بیشتر نشه 👌

یک نکته

اگه برید تو ریپو کل پوشه ACL و پیاده سازیش یک کلس هم نداره! یک نفر از دوستام همین کارو کرده بود ولی برای هر user role اومده بود یک کلس ساخته بود که نتیجش این شده بود که همیشه نیاز به کلس داشت برای اضافه کردن یک role جدید و نمیتونست از فانکشن هایی که نوشته re-use کنه.


همیشه استفاده از دیزاین پترن های OOP همه چیزو پیچیده میکنه. منتهی باید بدونید کجا استفاده کنید که کدتون رو خوانا تر کنه (مثلا اگه ۱۰۰ تا فانکشن داشتم اون موقع قطعا باید function هامو decouple میکردم یا تو چند تا کلس اونا رو میشکوندم که رفتاری رو پیاده سازی میکردن.

@ManiFoldsPython
👍17🔥1
SOA vs Microservices

@ManiFoldsPython
👍5👎2
Python BackendHub
SOA vs Microservices @ManiFoldsPython
یک اشتباهی که تو این تیبل وجود داره اینه که نوشته containerization تو SOA محبوب نیست در صورتی که عکس این موضوعه
تو microservice هم اشاره به grpc نشده

@ManiFoldsPython
👍3
دو ریسورس خوب که تو گروه بچه ها به اشتراک گذاشتن

یکی برای درک بیشتر SOA که آمازون توضیح داده. خوبه نسبتا. فقط کاش توضیح ESB رو بیشتر میداد چون یک پارگراف براش تو همچین article ای کم بود.
https://aws.amazon.com/what-is/service-oriented-architecture/

یکی هم شرح DI تو مدرن پایتون و رفع ابهام
https://www.youtube.com/watch?v=qkGxy4c64Jg


گروه دقیقا داره سمت خوبی میره و سوالات خیلی خوبی پرسیده میشه👌
@ManiFoldsPython
👏52🕊1
فکر کنم کمی رو falsehood ها مانور برم خیلی بهتره چون جزو دسته مطالبیه که خیلی بهش پرداخته نمیشه ولی خیلی اشتباهات فاجعه بار ازش ناشی میشه. یک مطلبی الان جایی نوشتم که گفتم براتون کپی پیست کنم.

برنامه نویس جونیور کسیه که ایندکس نمیزنه. برنامه نویس سنیور کسی که کلی ایندکس میزنه . ایندکس همیشه خوبه
همه اینا غلط بودن. هرکی اینو بگه بی سواده.

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

مزایا نداشتن ایندکس:

write خیلی سریع تر
CPU-usage خیلی کمتر
دیسک اسپیس کمتری اشغال میکنه دیتابیستون بدون ایندکس
میدونستید وقتی دارین یک row رو آپدیت میکنید دیتابیس داره indexاش رو لاک میکنه؟ چون باید در برابر race condition مقاوم باشه. البته این تاثیرش مثلا تو postgresql خیلی بهینه تر و کمتره تا mysql
اورایندکس که sql planner تون میتونه به اشتباه index بدی رو انتخاب کنه
ایندکس زدن رو دیتایی که موقع query زدن بیشتر از ۳۰ درصده (ایندکس رو دیتایی جواب میده که مثلا کمتر درصد حضور داشته باشه. مثلا دیتایی که ۳ تا حالت بیشتر نداره بهتره از enum استفاده شه به جای ایندکس)

من یک پروژه همینکارو کردم. قطاری ایندکس زدم. سرعت read عالی شد. ولی وای به حال موقعی که بخواد کلی write همزمان بخوره...
چند بار شده دیتابیس داون شده بخاطر همین...
مجبور شدم کل index هارو دراپ کنم از اول بزنم.
زدن ایندکس اصولی واقعا سواد بالایی میخواد و همینطوری کشکی زدن درست نیست اصلا. باید دقیقا متوجه شین چی رو دارید ایندکس میکنید و چرا ایندکس میکنید؟


یک برنامه نویس سنیور میفهمه داره چیکار میکنه! نمیخوام label کنم ولی این کامل ترین تعریفی بود که شنیدم. این تجربه مصاحبه من با ولکس واگن بود حتما توصیه میکنم بخونید.. خیلی دیدم به مفهوم سنیوریتی تغییر کرد بعد این مصاحبه!

پ.ن: سنیور کلمه ایه که کلا ۵ بار تو کل پستای کانالم تکرار شده... چون واقعا علاقه ندارم به این الفاظ اینطوری..
@ManiFoldsPython
👏7👍4
اپدیت اخر فست شما حالا میتونید تو سطح APIتون چندین مثال داشته باشین برای schema 🙌🙌
@ManiFoldsPython
👍13😱3
مثال ACL که نوشتم یادتون بود؟ تو اپ دانش آموز

که تو هر روتر مجبور میشدم بیام یک enum بهش بدم که این روتر چیه که بتونه کانفیگو بخونه از ACL

حالا داشتم یک کاری میکردم که کدی که داره چک میکنه پرمیشن روتر رو کاملا بره تو depends که تو همه روتر ها duplicate نشه. تقریبا تا ۹۰درصد مسیرو رفتم ولی خیلی بد شد چون باید APIRouter خود فست کاستومایز میشد.

حالا اگه built in تو خود لایبری میشد برای هر روتر یک enum گذاشت که دیگه نیاز نباشه با path اون روتر شناساییش کنیم خیلی عالی میشد (یک چیز static و با خوانایی بالا). نظرتون چیه؟

اینجا پیشنهادشو گذاشتم اگه موافق بودین حتما upvote کنید. اینطوری کل کد میرفت تو Depends و DI میشد کلا و خیلی تمیز و خوشگل تر میشد کد👌

https://github.com/tiangolo/fastapi/discussions/10156

@ManiFoldsPython
👍9
Python BackendHub
این پست Falsehood رو یادتونه؟‌این سبک یاد گیری بنظرم خیلی خوبه. حالا بریم راند دو :)) 1. If the code works, it is clean. 2. Comments are unnecessary if the code is written clearly. 3. Clean code is always easy to understand, regardless of the complexity…
دوستان falsehood یعنی خرافه
یعنی این متنی که مینویسم اینجا از مورد اول تا آخر غلطه.
اینو برعکس کنید درست میشه تازه.

دلیل اینطور پستا هم اینه که باور غلطمون رو سریع بتونیم پیدا کنیم و اصلاحش کنیم.

مثلا تو این پست من کلی چیز یاد گرفتم:
https://news.1rj.ru/str/manifoldspython/318

مثلا میدونستید ما ساعت ۲۳:۵۹:۶۰ داریم؟

میدونستید که داشتن دو تا UTC Timestampts دلیل نمیشه شما بتونید فاصله ثانیه ایشون رو حساب کنید؟‌اگه یکیشون تو اینده باشه؟‌:)))).

میدونستید کم ترین فاصله بین دو نقطه یک خط مستقیم بینشون نیست؟

آدم اینا رو میخونه کم کم به اطرافیانش شک میکنه 🤣

@ManiFoldsPython
😁7
از مهندس خیلی چیز یاد گرفتم 🙌🙌 مخصوصا تو بحث تست نویسی که خیلی با دقت و کامل توضیح دادن و همینطور کالچر شرکت های خارجی .
واقعا لایو خیلی خوبی بود. حتما سعی کنید ببینید.

https://www.youtube.com/live/UjPYhD2PUVc?feature=share
@ManiFoldsPython
8👍1
یکی از خفن ترین typing هایی که تو پایتون هست و تو داک pydantic هم حتی بهش اشاره شده لایبری annotated_types هست

خیلی خوبه حتما استفاده کنید!
https://github.com/annotated-types/annotated-types

@ManiFoldsPython
👍17👎1🆒1
توضیح annotated type از سروش که خیلی کامل بود
و داستانش کلا...

@ManiFoldsPython
Forwarded from SorousH
🔥8👍3
Python BackendHub
از مهندس خیلی چیز یاد گرفتم 🙌🙌 مخصوصا تو بحث تست نویسی که خیلی با دقت و کامل توضیح دادن و همینطور کالچر شرکت های خارجی . واقعا لایو خیلی خوبی بود. حتما سعی کنید ببینید. https://www.youtube.com/live/UjPYhD2PUVc?feature=share @ManiFoldsPython
من خودم تو مارکت ایران خیلی کار نکردم ولی یکی از برداشت من بعد از هاست شدن یا مشاهده مصاحبات tech immigrant اینه که تو ایران اصلا مهم نیست نرم افزار چقدر تست شه و صرفا سرعت ریلیز مهمه. یعنی اول و آخر تیم product تصمیم میگیرن و تیم develop رو پوش میکنند (البته نه تو همه شرکت ها ولی با اکثر دوستان که حرف میزنم ظاهرا همینطوره)

در حالی که تو اروپا کاملا برعکسه. من دیدم دولوپر ها تو ایران حتی تست هم نمینویسن!
من خودمو مثال میزنم, این هفته ۳۰ ساعت باید کار کنم. از این ۳۰ ساعتی که کار میکنم طبق board حدودا ۲۲ ساعت باید تست بنویسم. ۴-۵ ساعت باید code review کنم, ولی اشتباه نکنید, کد ریویو test هایی که قراره اضافه شن :))
و ۲-۳ ساعت آخر هم باید نوشن اضافه کنم و داکیومنت تست سناریو ها و تست کیس هاو چیزای دیگه رو تکمیل کنم.

این هفته یک خط کد هم فیچر بک اند نمیزنم! با وجود اینکه backend developer هستم.

و دقیقا تو لایو مهندس هم به همین موضوع اشاره کرد که بیشتر تایم رو ما داریم تست مینویسیم تو شرکت و همه چیز کند پیش میره و مشکلی نداره به جاش پروداکتی که میاد بیرون ریلیز میشه خیلی stable هست و ستون بندی خیلی مناسبی داره.

@ManiFoldsPython
👍22👏6🤔1
Forwarded from Python BackendHub
اوایل که مصاحبه میرفتم همون اولین مصاحبه رد میشدم,
اما الان تقریبا هروقت مصاحبه میگیرم میرسم به coding challenge یا technical interview
تکنیک هایی که این مدت به کار بردم و جواب داده رو خواستم تو این پست بنویسم تا استفاده کنید:


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

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

اما کی باید این سوالات رو بپرسین؟ معمولا interviewer از شما میخواد که اول به حرفاش گوش بدین و معمولا یک introduction ای از شرکت خودشون و چالش هاش به شما میگه. بعد از شما میپرسه که آیا سوالی دارین یا نه, و بدترین جواب اینه که بگین نه ندارم. همینجاست که سوالاتی که حاضر کرده بودین, باید بپرسین و سعی کنید هم چند سوال راجب توضیحاتی که خودش داده اول بپرسین, حتی اگه کامل فهمیده بودین!


طرفی که باهاش مصاحبه میکنید رو بسنجید و سعی کنید که درجه صحبتتون بر اساس سطح technical اون آدم منطبق کنید. مثلا تو یک مصاحبه خود HR سابقه کد زنی داشت و من تونستم خیلی فنی تر حرف بزنم که تجربه خیلی خوبی برای جفتمون بود. اما اگه همینکارو با HR کنم که old fashion تره, قطعا یک red flag خواهد بود. سطح فنی اش رو از توضیحاتی که راجب شرکتشون میده میتونید ارزیابی کنید.

حالا نیمی از interview گذشته و فقط راجب شرکت حرف زده شده, احتمالا interview از شما بخواد که بک گراند بیشتری راجب خودتون بدین. حالا شما باید به نحوی مهارتتون رو بفروشید, مثلا به هر نحوی شده سعی کنید پروداکت هایی که تا امروز روش کار کردین به پروداکت این شرکت لینک کنید. حتی اگه دروغ بگین یا بزرگ نمایی کنید ایرادی نداره, فقط دروغ فنی نگین یا بزرگ نمایی از خودتون نکنید. مثلا ممکنه تو یک business domain ای اصلا کار نکرده باشین, مثل B2B. ولی اگه شب قبل حسابی راجبش بخونید میتونید ادعا کنید که اره فلان جای پروداکتمون B2B بود و من کمی درگیرش شدم. سعی کنید اگه تو این موارد دروغ میگین, خیلی خوب و متواضعانه دروغ بگین!

تو قسمت آخر هم خیلی خلاصه از یک پروژه خوبی که کار کردین و پیچیدگی بالایی داره یا impressive هست میتونید صحبت کنید, سعی کنید خیلی کشش ندین چون این پارت برای اینه که شما یک تاثیری بذارین رو فرد مصاحبه کننده, نه اینکه خستش کنید.


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


@ManiFoldsPython
👍14
راجب اصول تست نویسی, یک مقاله پیدا کردم, میخوندمش مفید و کلی بود
به عنوان یک software engineer حداقل باید با مفاهیم اشنا باشین که وقتی با کلمه های زیر خوردین فکر نکنید چیز خیلی عجیب و فضایی هستند. نمیگم بلدشون باشید ولی باید بدونید چی هستند. دونستن این موارد کمک میکنه بهتون که به عنوان یک SE بهتر کد بنویسید و بهتر تست بنویسید.

- Testing Strategy
- Test policy
- Test scenario & Test case
- Software requirements, and requirements review
- Types of automated testing (A/B, smoke, unit, integration, e2e, exploratory, stress, load, perfomance, regression, cross-device, crowss-browser, acceptance, black box, Operational acceptance, conctract acceptance)
- Types of manual testing (exploratory testing, ad hoc testing)
- Software quality indicators
- Test Metrics


لینک مقاله:
https://www.altexsoft.com/blog/engineering/software-testing-qa-best-practices/


@ManiFoldsPython
👍12
یک تمرین میذارم که انجام بدیم, بعدش ویدیو میگیرم و خودم دقیقا همینکارو میکنم, از اون تمرین هاست که ظاهرش به شدت راحته ولی باطن به شدت سخت.

وقتی شما تو یک شرکت خوب کار کنید اولین چیزی که باهاش مواجه میشین strict code review هست.
یکی کدتون رو به حدی review میکنه که مجبور میشین ۴-۵ بار تغییرش بدید تا کد مرج شه.
خیلیم ربطی به level برنامه نویسی نداره هر انسانی موقع نوشتن کد قطعا یک سری خطایی میکنه که هدف code review کم کردن اون احتمال اون خطاست.

پی نوشت:‌عکس نشون میده چرا code review و pair programming میتونه مفید باشه
@ManiFoldsPython
👍4
اولین کد, مدل دیتابیس
ایرادات این کد رو پیدا کنید و کامنت کنید 👀

با sqlalchemy نوشته شده...
این مدل قراره فایل های آپلود شده رو تو دیتابیس مسیرشو ذخیره کنه و بگه از چه source ای اومدن (مثلا سورس فایل آپلود شده چی بوده) و کی آپلودش کرده

@ManiFoldsPython
دومین تیکه کد
داره یک سری فایل میگیره
و ذخیرش میکنه تو سیستم
کانتنت تایپشونو چک میکنه

و ارور raise میکنه اگه مشکلی داشت

مشکل این کد؟ (حداقل ۱۰-۱۵ تا مشکل داره این تیکه کد)

@ManiFoldsPython
👍1