Python BackendHub – Telegram
Python BackendHub
7.51K 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
چند تا ریسورس برای یادگیری و عمیق تر شدن تو مفاهیم دیتابیس:

۱. این همون میمی بود که فرستادم. از این مقاله و گیت هاب پیداش کرده بودم. خیلی خوبه که ادم خودشو بسنجه ببینه چقدر sql بلده تو تو کدوم level هست.
https://github.com/airbytehq/SQL-Levels-Explained
https://avestura.dev/blog/explaining-the-postgres-meme

اینو قبلا معرفی کردم.
https://git.ir/p/xnEZB

اونایی که دارم میخونم(WIP):
https://www.pluralsight.com/cloud-guru/courses/postgresql-administration-deep-dive

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
(اینم دارم میخونم بحث high availability خیلی مهمه و واقعا خوب بهش پرداخته)

و اونی که دوست دارم ببینم در اینده:
https://www.udemy.com/course/database-engines-crash-course/

@ManiFoldsPython
3👍2🤮2
سه قسمت مورد علاقم تو مصاحبه با بابی👌:

+ بابی به کی میگی مهندس نرم افزار؟
- به کسی که بتونه خودش سولوشن هارو با trade offشون پیدا کنه، یعنی حل کننده و کارگشا مشکلات یک نرم افزار باشه.

+ بابی تو مصاحبه قبلی رشاد گفته بود به من که شخصا هرچیزیو هرقدری یاد میگیرم که یک بهش نیاز داشته باشم و دو بتونم اون کاربردی که برام داره رو درک کنم، نظرت راجب این چیه؟
- اره موافقم با این دیدگاه، بنظره من ما خیلی چیزا رو تو کار یاد میگیریم، و تو وقتی که وارد دنیای کار نشیم یاد نمیگیریم اون مباحثو، ولی وقتی تو کار به مشکل میخوریم و باهاش کلنجار میریم خیلی بهتر یادش میگیریم. به توییت جادیم اشاره کرد که من یادم نیست الان😅

- چرا میگین فلان اسکیل رو یاد بگیرم بعد رزومه میفرستم، یا اینقدر جلو برم بعد میرم دنبال کار. وقتی اینکارو میکنید خودتون دارین خودتونو ریجکت میکنید. بذارین اونا ریجکتتون کنند😁

———
سوال دوم خودم میدونستم، ولی یادم رفته بود این مدت. شاید این چند ماه knowledge ای که یاد میگرفتم نمیبردم تو محیط کار ازش استفاده کنم با وجود اینکه شرایطشو داشتم. خلاصه کسایی که تجربه کار ندارین بدونید دنیای واقعی مثل کتبی که میخونید نیست و تا زمانی که پروژه رو لوکال هاستتونه همه چیز گل و بلبله 😂

@ManiFoldsPython
👍132🔥2👏2
چند درصد اگهیو بلدیم رزومه بفرستیم؟
چطور تو مصاحبه ها خوب عمل کنیم؟
چه کارایی کنیم شانس قبول شدنون بیشتر شه؟

@ManiFoldsPython
👍257
Python BackendHub
Voice message
این ویسو توصیه میکنم گوش بدید… به عنوان یک جونیوری که کار رسمی نداشته، بیمه نداشته، تحصیلاتش دیپلم بوده تونستم کار بگیرم و ایشالا اگه بشه باهاش مهاجرتم دارم میکنم، پس شما چرا نتونی؟😁
🔥142👍2
Python BackendHub
Voice message
ریپو رزومه نویسی خودم
https://github.com/ManiMozaffar/awesome-resumes

کانال یوتویوب tech immigrant
https://www.youtube.com/c/techimmigrants

یک پلی لیست خوب از ماک اینترویو
https://www.youtube.com/playlist?list=PLtuWfrF8FU5xGKn2kb8OT2tAKZXPjEuWI


این هفته سرم خیلی شلوغه. بعدا وقت کنم خودمم یک playlist میزنم هم راجب mock interview و هم یک ریپو مینویسم راجب Interviews (مثل ریپو رزومه نویسیم)

@ManiFoldsPython
9👍1🥰1
در پی ویدیو Encapsulation و Abstraction که فیلم گرفتم راجبش:
https://www.youtube.com/watch?v=jvXn8VcJPNY&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=3

من تو یکی از اپلیکیشن هام یک flowchart خیلی پیچیده داشتم
وقتی داشتم ریفکتورش میکردم واقعا maintain کردنش سخت شده بود. تبدیل شده بود به کد لگاسی. ۲ سال اونجوری افتاده بود دست نخورده مونده بود. و کلشو بردم تو یک کلس دیگه و کامل encapsulate کردم. یک متود decide هم گذاشتم که کل مسیر فلوچارتو طی کنه. و چند تا متود کمکی دیگه که لازم داشتم. شد ۲۵۰ خط کد که همش fi elif و match case میخوره. بعدش ریزالتشو یک آبجکت namedtupl ساختم و با enum و دیتا تایپ های مختلف parse کردم تو اون named tuple که اسمشو گذاشتم decision. خوانایی کدم با این encapsulate ای که انجام دادم حداقل ۱۰ برابر بیشتر شد جوری که همکارم که برنامه نویس هم نبود فهمید دارم چیکار میکنم :))

درنهایت سعی کنید از match case حتما استفاده کنید وقتی کاربردش پیش میاد جای if elif. سینتکس تازه ای هست تو پایتون و نمیبینید تو لایبری های اوپن سورس هنوز ولی واقعا قدرت خوانایی کدتون رو بالا میبره.

یک مقاله خوب میذارم بخونید عالیهه

Strong Static Typing to Prevent Illegal Code States | Python Patterns
https://towardsdatascience.com/strong-static-typing-to-prevent-illegal-code-states-7a13e122cbab


@ManiFoldsPython
👍9
dummy return or exception?
نظره شما چیست؟‌این سوالیه که این چند وقت خیلی برام مطرح شده بود.
اول توضیح بدم یعنی چی. دامی ریترن یعنی ریترن ساختگی. یعنی درواقع چیزی دارین ریترن میکنید که هدف تابع اون نبوده. مثلا داریم:

def get_order(order_id: OrderId) -> Order | None:
try:
reutrn Order.objects.filter(id=order_id)[1]
except Exception:
return None

کاری به کد و بهتر شدنش نداشته باشین این یک مثاله برای اینکه صرفا درک کنید منظور از دامی ریترن چیست.
حالا همینو بخواین با exception بنویسید:


def get_order(order_id: OrderId) -> Order:
try:
reutrn Order.objects.filter(id=order_id)[1]
except Exception:
raise OrderNotFound(id=order_id)



خوبی دامی ریترن:
شما signature یک تابع رو میبیند متوجه میشین که این تابع ممکنه دامی ریترن داشته باشه. نیازی نیست هردفعه برای استفاده ازش برین تو سورس کد و exception رو handle کنید. همینطور موقع کد زدن اگه یک کیس رو هندل نکرده باشین قطعا type checker کد ادیتورتون بهتون میگه.

بدی دامی ریترن:
نمیتونید متوجه شین دقیقا چرا None برگشته. یعنی بهتون tracability خوبی نمیده.


خوبی raise کردن و هندل کاستوم اکسپشن:
هرجایی از کدتون بخواین میتونید jump کنید و بپرین یک جای دیگه. قابلیت پرش تو کد با exception خیلی خوب میتونید داشته باشید. همینطور خیلی state رو خوب نگه میدارن تو خودشون و میتونید کارای خیلی باحالی کنید با همین پاس دادن state تو اکسپشن

بدی کاستوم اکسپشن:
مخفیه و تو signature تابع نیست. تو داک استرینگ هم بگین این تابع فلان اکسپشن رو raise میکنه بازم کامل نیست چرا چون ممکنه داخل اون تابع یک تابع دیگه باشه که یک exception دیگه raise میکنه. و همینطور لایه لایه زیاد میشه. اخرسر اینقدر overhead میشه که میبینید کد کدتون شده handle exception هایی که مخفی بوده از چشمتون و برنامتون خیلی باگ میخوره


من این مدت خیلی کلنجار رفتم با این و بنظرم:
دامی ریترن برای utilty function ها و reusable function ها خیلی مناسب ترن. چون برنامه نویسی رو برامون سخت نمیکنه و چند لایه اکسپشن و هندلر نمیخوریم

کاستوم اکسپشن برای business logic ها خیلی خوبه. باید تو بالا ترین سطح کد باشه و یکی دو لایه بیشتر نشه. کدی که قرار reusable باشه باید dummy return داشته باشه

نظر شما چیه؟ با من موافقین؟ مخالفین؟

@ManiFoldsPython
👍13👎2🔥1
مثال بهتر, من یک فانکشن دارم که قراره کلی جا ازش استفاده کنم به اسم get_user و از طرفی process_order هم دارم که قرار مثلا یک اوردر رو برام پروسس کنه طبق لاجیک بیزنس.

با دامی ریترن

def get_user() -> UserId | None

process_order() ->
user = get_user
if not user:
raise Stp[P(reason="User does not exist")


بدون دامی ریترن:

def get_user() -> UserId

process_order() ->
try:
user = get_user
except UserDoesNotExist as exception:
raise StopOrderProcessing(reason="User does not exist")


من خودم حالت دوم رو اصلا نمیپسندم. حالت اولاستفاده از کد رو خیلی راحت تر میکنه و خوانایی کدو به شدت بیشتر میکنه.

@ManiFoldsPython
👍6👎3💩3
Forwarded from Oh My Task!
I always have a respect for the aged geeks who have been growing with the technology and felt the history instead of reading it. One of them is David Beazley. He was one of the developers who used first versions of Python (<=1.0) in big projects and it’s cool to see these guys seen all the change history of these tools and programming languages.

Follow him on Youtube and watch his lectures about multi-threading and asyncio.

Here he’s teaching you how to build your async:
https://youtu.be/Y4Gt3Xjd7G8?si=A4GrpDoqQPZ8Q8G5

@OhMyTask
👏4👍1
👍17😁3
چقدر تبلیغای real python احساسی و personal شده 😂😂

الان ایمیل بعدی اسکرین شات میفرسته میگه “به بعضیا باید گفت ببخشید که فکر کردم رفیقی، دیگه تکرار نمیشه 🙃” :)))

@ManiFoldsPython
😁26🤣7👍1💩1🖕1
یک مقاله خوب از مهدی

✔️ تازه‌های پایتون ۳.۱۲
تا چند روز آینده پایتون ۳.۱۲ که آخرین ورژن پایدار پایتون هست قراره منتشر بشه، بیاید تا با جدیدترین قابلیت‌ها و بهبودهای پایتون آشنا بشیم 😁

🔗 https://virgool.io/@liewpl/python-3-12-whats-new-vpq99njtytc6

@ManiFoldsPython
👏134👍3🙏1
برگشتم با یک ویدیو جدید از ادامه دوره دیزاین پترن
تو این ویدیو راجب ‍دیزاین پترن متود فکتوری صحبت کردم و مثال با کد زدم, گفتم کجا و چقدر میتونه استفاده شه و کاربردش چیه و مزایا و معایب استفاده ازش چیه؟

https://www.youtube.com/watch?v=Ci_noxGINY4&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=4

لینک گیتهاب دوره دیزاین پترن
جزوه و مثال های دوره همه اینجا ذخیره خواهند شد.
https://github.com/ManiMozaffar/design-101

@ManiFoldsPython
21🔥6💩2👍1
بقیه از AI میترسن که جاشونو بگیره
من از این :)))

اینقدری که خوب دیباگ میکنه منو gpt نمیکنیم :)))
@ManiFoldsPython
🤣33😁2👍1
✔️ اخیرا code review برای یک سری از دوستان انجام دادم و یک موردی که در اکثر کدها میدیدم عبارات شرطی (if/else) های غیرضروری و تورفتگی های بیش از حد کدها بود که باعث میشد خوانایی کد پایین بیاد، کدها کثیف بشن و دیباگ و نگهداری کد هم سخت تر بشه. این مورد انقدر زیاد بود که تصمیم گرفتم راجع بهش یه ویدیو بسازم.

توی این ویدیو راجع به تکنیک گارد کلاوز (Guard Clause) صحبت میکنیم که با استفاده از برعکس کردن شرط‌های if، میشه کدهای تمیزتری نوشت و دیباگ، نگهداری و در نهایت زندگی راحت تری داشته باشیم.

🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/Q3FLJ95Mc1g?si=JnCE5PYehlrTyQMl

〰️〰️〰️〰️〰️〰️
@BobyDotCloud
🔥72👍1👏1😁1
context is king
@ManiFoldsPython
😁10💩31
Python BackendHub
context is king @ManiFoldsPython
مقاله جالبه بخونید بنظرم

https://belief-driven-design.com/naming-stuff-is-hard-17fca2ee582/

میشه گفت مهم ترین اصل کلین کد اسم گذاری variable ها هست. چون شما هر طوری کد بزنی اگه اینو درست انجام ندی کدت کلین نیست.

همیشه تو هر کاری زیاده روی هست. به کسی که قراره کدتون رو maintain کنه رحم کنید و مثل عکس اسم گذاری نکنید :))


w 🚫
weight
weightKg
customerWeightInKg
customerCurrentWeightInKg🚫

@ManiFoldsPython
👍15👎2
یک تایمی که اپلای میکردم برای اروپا متوجه شدم اکثر شرکت های اروپایی یک فریم ورک و فرهنگ مشخص دارن برای استخدام،

اولا که اگهی ها اینطوری بود:

What you will do
1. ….
2. ….

What you will bring
1. Proficienct in Django
2. …
3. Fimiliar with k8s

Nice to have
1. …

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

نکته دوم، شرکت های خیلی بزرگ و FAANG میان سوالات سخت الگوریتمی میذارن تو مصاحبه فنی، کاری به خوبی و بدیش ندارم ولی اون شرکتا تو اون حجم راهکار دیگه ای ندارن. نمیتونن بشینن برای کاندید های مناسب یک پوزیشن تک تک coding assignment بدن و پروژه هاشون رو چک کنند، هزینه این کار تو scale بالا ممکنه براشون غیرمنطقی باشه. پس شرکتا معمولا یا coding assignment میدن یا الگوریتم. نمیان جفتشو بدن! کنارش سوالات تئوری هم میپرسن.

و نکته اخر، چه الگوریتم باشه چه coding assignment، مستقیما به پروداکت شرکت ربطی نداره! مثلا من coding assignment هایی که انجام دادم راجب pokemon و imdb و این چیزا بود. طبیعتا نباید چالش شرکتو assignment بدن بهتون، یا اگه همچین کاری‌کنند باید بهتون هزینه پرداخت کنند چون دارین عملا رو پروداکتشون کد میزنید.


@ManiFoldsPython
👍232👏2💯2
یک اپلیکیشن فست نسبتا خوب با رعایت استاندارد ها.

- Backend -> Fastapi
- Front -> React
- Opentelemtry
- Jaeger
- Alembic & migration

https://github.com/fike/fastapi-blog

اصلاحاتی که نیاز داره:
۱. بنظره من jaeger و tracing اش میتونست بهبود پیدا کنه و از فرانت تا بک کلش trace شه.
۲. بکش async باشه.
۳. دپندسی اینجکشن و auth اش خیلی ضعیفه


@ManiFoldsPython
👍13