-
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 لینک گروه: https://t.me/PythonFellow
واقعا این روزا hiring خیلی سخت شده.
تعداد زیادی از candidate ها فقط یک اسکرین chatgpt کنارشون هست و تمام assignment و live coding هارو میدن بهش :))
تشخیصش که به شدت آسونه. یک کاندید سنیور فرانت اند داشتیم با ۷ سال سابقه, تو لایو کد ازش خواستیم یک کمپوننت ری اکت بنویسه. یعنی یک همچین چیزی
export const FooComponent = () => {
return <div>Hello</div>;
};
در خصوص پست قبلی کاملا باهاش موافقم. در جهت پست دو روز پیشمه. شما وقتی با fastapi کد میزنید خیلی بهینه تر و سریع تر جلو میرید (به جز چند هفته اول که درگیر زیرساخت و boilerplate پروژه هستین)
چرا؟ چون یک سری مسائل که همیشه باهاش سرو کله میزدیم تو جنگو دیگه تو فست وجود نداره.
۱. نیاز نیست خط به خط پروژه رو بخونید و ران کنید و تست کنید. تایپینگ قوی وجود داره و کدتون اگه ارور تایپ نده و با یک دور چشمی نگاه کردن مشکلی نداشته باشه احتمالا اوکیه و با ران اول اجرا میشه.
۲. جیسون اسکیما و openapi بهتری داره. تو جنگو یک لایبری داریم که خیلی خوب پیاده سازی نشده. و خیلی فیچر های بیسیک رو نداره از جیسون اسکیما. مثلا union یا tagged union یا .... همین که شما out of box یک openapi بسیار دقیق و تایپ سیف دارید, به توسعه کلاینتتون خیلی کمک میکنه.
۳. او ار ام خیلی مجیکی داره و وقتی بخواین کوئری بنویسید اذیتتون میکنه همیشه و وقتتونو الکی میگیره. ولی sqlalchemy بسیار نزدیک به sql هست.
خیلی موارد بیشتری هست...
ولی ابزار مهم نیست. یک برنامه نویس نباید بایاس باشه
یک نکته دیگه هم که من همیشه خیلی بهش اعتقاد دارم اینه که شما باید از تایپ سیستم یک زبون استفاده کنی که invariant های برنامه ات رو داخلش جا بدی. صرفا اگه قراره تایپینگ داشته باشی دلیل به maintainable بودن کدت نیست!
مثلا از من خواسته شده که یک دیتاکلس بسازم که state یک درخواست و دیتاش رو بذارم اونجا.
خب یک درخواست یا میتونه تو استیت اولیه باشه که هنوز اتفاقی نیفتاده. یا در حال لود شدن هست. یا دیتا رو میگیره. یا ارور میگیره.
اینجا invariant برنامه من چیه؟
اگه چیزی در حال لود شدن باشه میتونه دیتا داشته باشه؟ نه.
اگه ارور بیاد ایا دیتا اصلی رو دارم که انتظارشو داشتم؟ نه.
و ...
شما یا میتونید به سبک بالا بیاین همرو تو یک دیتاکلس بذارین و همه جا if elif elif استفاده کنید.
یا به سبک پایین کد بزنید و به جای اینکه ۲۴ حالت داشته باشین درواقع فقط ۴ حالت دارین.
تو این ویدیو از دوره ام بیشتر راجبش حرف زده بودم یک سال پیش.
@PyBackendHub
تو نسخه های ۳ اتفاقات جالبی نیافتاده ظاهرا :))
@PyBackendHub
من هرچی تو حوزه گیم بیشتر تحقیق میکنم بیشتر جذبش میشم اینقدر که جزئیات داره. اخیرا ویدیو و کنفرانس های زیادی رو دیدم راجب اینکه بازیای آنلاین (مثلا شوتینگ) چطوری تجربه زنده رو میدن. مثلا شما میبینی یک آبجکت (یا پلیر مثلا) داره حرکت میکنه این تو بک گراند چطوری کار میکنه.اصلا چیت چیه و چطور چیت پیاده سازی میشه. چطوری مثلا اشیای رندوم جلوتون تو مپ ظاهر میشه که تقریبا consistent هست. مثلا شما رد میشین از یک جایی پر از چمن و رندوم گل هست. ترتیب کنار گرفتن اینا چطوریه. آیا همه اینا واقعا هاردکد میشن پیکسل به پیکسل؟ یا on-fly جنریت میشن؟ خیلی تاپیک های جالبیه در کل.
برای اینکه با کرنل آشنا بشین توصیه میکنم یک چیت بنویسید برای یک بازی رو لینوکس. خیلی کمکتون میکنه که عمق دانشتون بیشتر شه.
@PyBackendHub
دو تایپ چکر جدید اومدن که جفتشون با راست نوشته شدن 😍
یکی از astral
https://github.com/astral-sh/ty
یکی هم از meta
https://github.com/facebook/pyrefly
بالاخره دارن مارو از دست pyright و mypy خلاص میکنن : )
@PyBackendHub
علیرضا یه ابزار درست کرده برای نوشتن ماژول های پایتون با زبان Go.
یعنی چیزی شبیه به pyo3 اما خب برای گو.
https://github.com/alireza-hariri/go4py
@PyBackendHub
واقعا متوجه نمیشم استفاده از AI برای یک برنامه نویس چه آموزشی میخواد؟ کوه قرار نیست بکنید که.
اگه برای نصب یک cursor یا auto complete نیاز به دوره یوتیوب دارین، واقعا باید یک مرحله برگردین عقب و فعلا کد نزنید.
و اینکه شما از این ابزار ها استفاده میکنید از دنیا عقب نیستین و جاتون هم قرار نیست کسی بگیره که از این ابزارا استفاده میکنه، یک سری ابزاره یک سریا استفاده کردن و یک سریا نکردن و حتی دیسیبلش کردن. من هنوز engineer ای میبینم که از AI استفاده نمیکنه و خیلی خروجی بیشتری داره نسبت به کسی که داره استفاده میکنه 🙂
خودم شخصا در حد یک اتوکامپلیت و یک وقتا به جای گوگل وقتی نمیدونم چیو باید سرچ کنم استفاده میکنم.
@PyBackendHub
شاید باورتون نشه ولی این ته یک جواب به یک سوال بود وقتی داشتم مدل رو تست میکردم 😂😂
نمیدوستم AI هم زده تو کاره قهوه. این روزاست که جای انسانارو بگیره 😂
@PyBackendHub
https://dev.arie.bovenberg.net/blog/python-datetime-pitfalls/
اینو حتما بخونید. Datetime is hard. کدی که با دیت تایم سروکار داره، احتمال خیلی زیاد معمولا باگ داره
@PyBackendHub
توصیه میکنم اولا همیشه وقتی چیزی تو اینترنت میخونید حتما برین دنبالش و تحقیق کنید. ببینید چه کسی اونو گفته, رزومه اش رو ببینید یا لینکدینشو ببینید یا صفحه گیت هابش یا ... . اینطور افراد ۹۹درصد پروفایل های کاری بسیار ضعیفی دارن چون اگه نداشتن نیاز نبود دست به همچین کار هایی بزنن.
تو کامنتا یک سری reply زده شد در خصوص نیروی جونیور, ببینید من اگه یک تسک دارم نمیام تسک رو توضیح بدم به نیروم. سعی میکنم بهش توضیح بدم چرا داره این کد رو مینویسه و هدف نهایی چیه. و راه حل رو میذارم به عهده خودش. من اگه بخوام requirement engineering کنم و تا کوچیک ترین if elif کد رو توضیح بدم, اون نیرو رو اخراج میکنم و خودم تسکو انجام میدم چون زمان کمتری ازم میگیره. من از نیروم انتظار دارم که وقتی هدف رو نشون دادم مسیر رو خودش پیدا کنه, مشورت کنه و راه حل خلاقانه پیدا کنه. ۹۵درصد software engineering پیدا کردن یک راه حل خلاقانه و درست برای حل مسئله هست با تحقیق و ..., نه تایپ کردن کد. و هیچ AI ای نمیتونه به شما راه حل خلاقانه بده یا باهاتون بحث کنه و ... . ولی اگه از AI بخواین یک requirement حسابی تعریف شده رو تبدیل به کد کنه, بله میتونه. در واقع AI یک زبون برنامه نویسی abstract شده تر هست با احتمال خطا بالا.
بار اول احتمال خیلی زیاد نیروی جونیور خطا داره در راه حل دادن یا پیاده کردن راه حل خودش ولی در نهایت بعد از چند ماه به سطحی میرسه که نیروی ارزشمندی برای شرکت میشه.
متاسفانه تو خیلی شرکت های ایرانی/خارجی همین روند وجود داره و در نهایت نیروی جونیور هیچ پیشرفتی نمیکنه. اکثرا پروسه های جدید میسازن و optimize میکنن که اون requirement عه بیشتر مهندسی شه قبل از رسیدن به برنامه نویس که سریعتر تبدیل به کد شه, جای اینکه بخواد روش فکر شه و برنامه نویسا اصلا نمیدونن برای چی دارن این کد رو مینویسن و کارشون اینه که مثل یک ربات یک تیکت از جیرا بردارن و تکمیلش کنند. انگار دارن به مسیر اشتباهی خیلی بهینه حرکت میکنن.
There is nothing so useless as doing efficiently that which should not be done at all - Peter Drucker
بچه هایی که نگران هوش مصنوعی هستن من حقیقتا نمی خواستم این راهو افشا ولی خب دیگ دلم نیومد به شما نگم
ببینید من یه پلنی دارم که مدت هاست دارم بهش فکر می کنم
فرض کنید یهو یه هوش مصنوعی میآد که میتونه همه برنامه نویسا رو بی کار کنه مثلا همین https://devin.ai/
فرض کنید خیلی پیشرفته تر شه
حالا من یهو میرم ازش میخوام که خودش رو بسازه به اسم
https://beni.ai/
بعد منم میلیونر میشم
همین دیگ
فقط لطفا به کسی نگین
@BenDevelop
یک نقل قول (و حق) دیگه از پرایم
اگه از AI استفاده میکنید toolbox تون باشه، نه boxتون!
به زبون ساده تر، از AI مثل یک جعبه ابزار استفاده کنید. نه اینکه کامل بهش وابسته باشین.
ما به طور کلی دو مشکل داریم وقتی کد میزنیم،
یا داریم به کامپیوتر میگیم چیکار کنه. مثلا اگه رو این دکمه کلیک کردم، یک modal باز شه. فریم ورک و AI و جعبه ابزار هایی که داریم، به ما تو این مسیر کمک میکنن. این کاره خیلی سختی نیست. بالاخره از پسش برمیایم.
یا داریم فکر میکنیم که کامپیوتر باید چیکار کنه. اصل پیچیدگی کار ما همینجاست. و تو این مورد AI اصلا نباید و نمیتونه کمکتون کنه!
@PyBackendHub
هیچوقت جنس پیچیدگی که دیزاین پترن به کد شما اضافه میکنه رو عمیقا متوجه نشده بودم (یعنی نمیتونستم توضیحش بدم)، تا اینکه این ویدیو رو دیدم:
https://youtu.be/SEp0NrXWwoo?si=mBy7nitVakta-SNz
پیچیدگی که به برنامه شما اضافه میکنه اسم گذاری هست😄. با دیدن این ویدیو متوجه این جملم میشین. حتما توصیه میکنم ببینید خیلی جالبه.
@PyBackendHub
🚫 اگه مثل توضیحات بالا عمل میکنید، یک مهندس نرمافزار نیستید.
™️ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx
لایبری که چند وقت پیش نوشته بودم ۱۸۹ استار گرفته و یک عالمه دانلود روزانه داره. خیلی ممنون بابت استقبالتون.
https://github.com/ManiMozaffar/aioclock
A modern python scheduling framework with dependency injection and modular integration support. Alternative for Rocketry or apscheduler
دویست استارمون نشه؟
@PyBackendHub
رفقا من نمیخواستم اینقدر صریح اینو بگم چون استثنا زیاد وجود داره، منتهی من چند تا کد از شرکت های به اصطلاح پولدار تک ایرانی دیدم و مجبورم بگم.
به صورت یه قاعده کلی جدا سعی کنید از فلسک و جنگو دوری کنید، با همون fast api نود درصد بیزینس های پایتونی باید اوکی باشه، modern python استفاده میکنه انعطاف پذیر هم هست دیگ، بی خیال لطفا
@BenDevelop
یه نگاهی کلی به سورس کد نوبیتکس انداختم و واقعاً اسپاگتی بود. تو این یک سال فهمیدم که خروجی یک تیم به تعداد نفراتش ربطی نداره؛ ممکنه ۵ نفر آنقدر بهینهکار باشن که ۵۰۰ نفر هم نتونن بهشون برسن. نکته کلیدی چیه؟ بهینهسازی پروسهها و حذف کارهای وقتگیره.
منظورم چیه؟ وقتی تصمیم میگیرید یک فیچر بنویسید، باید ببینید چقدر از وقتی که صرف کدنویسی میکنید به کسبوکار سود میرسونه، نه صرفاً پیچیدگی تکنولوژیک.
مثلاً به جای اینکه تیم فرانت و بکاند دائم با فایل پستمن ور برن، بکاند میتونه OpenAPI رو خودکار تولید کنه و موقع دیپلوی سرور تایپسیف بگیره. بعد تیم فرانت اون رو Pull میکنه و یک کلاینت HTTP اتوماتیک میسازه. این سادهترین و بیدردسرترین راهه. قبل از هر ریلیز، یک بار تایپها رو Pull میکنیم و اگه TypeScript ارور نده یعنی Breaking Change نداریم. این تسک شاید ۲ ثانیه طول بکشه، اما اگه دستی چک بشه میتونه ساعتها وقت و هزینه کسبوکار رو هدر بده. سوال مصاحبهای که ۹۰٪ کاندیدای فرانت اشتباه جواب میدن هم دقیقاً اینجاست!
حالا فرض کن تیم فرانت میخواد پاسخهای خطایی که Status ۲۰۰ نیست رو ترجمه کنه. تیم بکاند میتونه هر دفعه که یک کد خطای جدید اضافه میکنه، اینو به فرانت اطلاع بده یا اصلاً کل ترجمه رو بسپره به بکاند (که اشتباهه؛ ترجمه برای End Userه نه برای کلاینت). راه بهتر اینه که OpenAPI رو Extend کنیم و Errorها رو اونجا تعریف کنیم، یه discriminator بذاریم مثلاً error_type. حالا تیم فرانت خیلی راحت میتونه همه حالتهای خطا رو هندل کنه و error_type رو مستقیم به یک کلید ترجمه تبدیل کنه. این پروسه که قبلاً ساعتها طول میکشید، با همین روش میتونه خیلی سریع بشه.
ممکنه اون کلید ترجمه تو یه سری زبانها تعریف شده باشه و تو یه سری، نه. یا از اول تو فایل پیشفرض (مثلاً انگلیسی) یادت رفته باشه تعریفش کنی. اینجا میتونیم با استفاده از کتابخونهی intl-t یک تایپینگ خیلی قویتر کنار i18n داشته باشیم و جلوی این مشکلات رو بگیریم!
کلا هروقت دارین زیاد با یک مشکل دست و پنجه نرم میکنید دنبال راه حلی باشید که با اون مشکل دیگه دست و پنجه نرم نکنید. و اینطوری شما تبدیل به اون تیم خیلی بهینه میشید.
@PyBackendHub
#آف_تاپیک
خیلی برام عجیبه که تو ایران خیلی ها مشتاق جنگ کردن هستن و نمیخوان آتش بس یا صلح باشه. و فکر میکنن ایران باید جنگ رو ببره انگار یک مسابقه ورزشیه.
یک نقل قول خیلی خفن ببینید از برتراند راسل :)
@PyBackendHub
یک پروداکت MVP خیلی قشنگ دیدم که ۲ تا سافتور انجینر نوشتنش
https://www.hypertune.com/
فیچر فلگی هست که تایپ سیفه! اگه نمیدونید فیچر فلگ چیه توصیه میکنم گوگل کنید. ولی تایپ سیف بودنش یعنی چی؟ یعنی شما یک سری فلگ میسازین, بعد از روش تایپ میسازه براتون. مثلا میدونه فلگ x ورودی تایپ y و z میگیره و خروجی مثلا بولین میده.
قبلا تو کورس پرسونال برندینگ گفته بودم سعی کنید بلاگ و اینا نسازین چون چالش و ارزشی نداره :) خیلیا پرسیده بودن چی بسازیم. کافیه به اطرفاتون نگاه کنید و سعی کنید یک مشکلی که دولوپر ها دارن رو حل کنید.
@PyBackendHub
ری اکت که خب واسه وب هست
و react native برای گوشی هست. که تقریبا ری اکته ولی برای native application ها. که خب طبیعتا نمیتونید اینو بذارین رو مرورگر چون دپندنسی هایی داره که رو دیوایس گوشیه.
حالا react native web میاد که میذاره شما اونی که تو component های native ای که نوشتی رو دوباره تو وب ازش استفاده کنی 😂
احساس میکنم باید یک فریم ورک بدم به اسم react native web native :))
@PyBackendHub
ینی یه نفر پیدا نشد جای این همه سر و صدا و داد و بیداد و هوار و هیاهویی که توی یوتیوب فارسی راه انداختن که آی هوش مصنوعی اومد بدبخت شدیم فلانب ها دارن لی آف میکنن فلان و بهمان چهار تا کورس آموزشی خوب کد زدن با copilot و cusror بسازید.
™️ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx
گشت گرداگرد مهر تابناك، ايران زمين
روز نو آمد و شد شادى برون زندر كمین
اى تو يزدان، اى تو گرداننده مهر و سپهر
برتريناش كن برايم اين زمان و اين زمين
سال خوبی داشته باشن! ❤️
شرکتی که توش کار میکنم در حال استخدام Senior frontend engineer هست
https://join.com/companies/noah-labs/13793716-senior-frontend-developer
@PyBackendHub
در ادامه این پست... خیلیها این روزا سعی میکنن ChatGPT و AI رو خیلی بزرگتر از واقعیت نشون بدن؛ یا برای منفعت شخصی، یا برای ترند شدن و جذب مخاطب، یا شاید واقعاً اینطوری فکر میکنن. مثلاً چند روز پیش توی اینستاگرام ویدیویی دیدم که یکی از داخل سوئد میگفت ۲۰ درصد برنامه نویس های شرکتشون به خاطر AI layoff شدن و جاشون رو AI گرفته. ولی وقتی رفتم تو لینکدین شرکتشون رو نگاه کنم، نه افتی دیدم و حتی رشد هم داشتن! بعد چند روز ویدیویی زد که توضیح میداد برنامهنویسها جا به جا نشدن؛ فقط کله پروداکت جابجا شده با AI که از گوگل گرفته بود و هرکی تو اون پروداکت کار میکرد layoff شده 😅 خلاصه هرچیزی که توی اینترنت میبینید رو باور نکنید.
بعضیها ادعا میکنن که با AI سرعتشون چند برابر میشه. قبلاً وقتی از کسی میپرسیدین کد چطور کار میکنه و side effectهاش چیه، جواب میدادن. حتی اگه از Stack Overflow هم کد میآوردن، کد به تنهایی کار نمیکرد و نیاز به درک عمیق تری داشتن. متأسفانه امروز بیشتر برنامه نویسا که خیلی به AI وابستن نمیدونن کدی که خودشون نوشتن چطور کار میکنه.
از طرفی، من بیشتر وقتم رو صرف فکر کردن در مورد چگونگی نوشتن کد خوب و maintainable میکنم؛ فقط هدف نوشتن کد نیست، بلکه نوشتن کدی که قابل فهم و نگهداری باشه از یک راه حل منطقی و این هست که اهمیت داره. حتی اگر AI بتونه بهترین کد رو برا شما تولید کنه (که فکر نکنم)، نمیتونه چندین راه حل مختلف ارائه بده؛ این نیاز به خلاقیت داره. اگر بیشتر زمانتون رو صرف این فکر کنید که کد کار کنه، بله AI سرعتتون رو چند برابر میکنه، ولی با این حال سرعت شما کمتر از بقیه میمونه چون کدهای بد و technical debt روی هم جمع میشه و هم تیمتون و هم خودتون رو کند تر میکنه.
من از کدهای AI استفاده میکنم و بعد ریفکتور میکنم.
از این زاویه بهش نگاه نکرده بودم 🤣
@PyBackendHub
یک باگ خیلی مزخرف تو pylance که هنوز بعد ۳ ماه اصلاح نشده هنوز
وقتی type alias دارین تو پروژتون, دیگه تو یک فایل دیگه وقتی میخواین ایمپورتش کنید suggest بهتون نمیده.
اگه pylanceتون رو به نسخه 2024.9.2 داونگرید کنید درست میشه.
@PyBackendHub
خیلیا منظور این متن رو متوجه نشدن، قرار نیست شما انجین دیتابیس بنویسی. ولی همین که بدونی چیه و بتونی راجبش ۵ دقیقه حرف بزنی خیلی مهمه چون بیشتر روز باهاش درگیری. یا بهتره خوده raw sql رو یاد بگیری تا اینکه orm django رو بدون یاد گرفتن sql استفاده کنی ازش.
ایا میشه بدون دونستن sql از جنگو استفاده کرد؟ بله. آیا در این صورت شما skilled worker محسوبمیشین؟ نه.
خیلی وقتا ممکنه بخاطر دانش بیشترتون، یک راهکار بهتر به ذهنتون برسه که برد بزرگی رو برای بیزنس رقم بزنه. به خاطر دانش بیشترتون، کدتون ممکنه باگ کمتری داشته باشه که براتون پروموشن خواهد داشت. و …
نقل قول ازنظرر Kurt Guntheroth، با ۴۰ سال سابقه و نویسنده چند کتاب معروف:
Some software jobs you can get after a 2-year Associate’s Degree from a community college, or a 9-month boot camp, just like a blue-collar job.
Some software jobs don’t require much independent thought and analysis. How hard is it to arrange content on a web site? (Yes, I know, as hard as you want to make it. But not always).
Some software jobs are done in assembly-line fashion. Pull the next feature card off the stack and start coding, pull the next bug report off the list and start looking for a fix. Your job has no beginning and no end, just an endless stream of little tasks (called sprints), with no time to rest in between, just like a blue-collar job.
Some bosses of software people are Dickensian horrors, driving their team to work long, uncompensated hours. Never a word of praise, but the sure prospect of getting fired for not toeing the mark, just like a blue-collar job.
But those same bosses will insist software is a white collar job, because if it ever did become a blue-collar job, they would have to pay time-and-a-half for overtime (in the US).
I think what’s true is that the software profession is diverging into two levels of skill, professional software developers, and programmers. Once upon a time it was like this, but the original reason for programmers (typing code onto punch cards and running it on batch terminals) went away. Now we’ve got easy problems solved by programmers with limited education, and really hard problems, solved by highly educated and trained professionals.
@PyBackendHub
https://github.com/teamhanko/hanko
ایده pass-key رو خیلی دوست دارم. واقعا یوزرفرندلی و امنیت رو باهم تو یک level دیگه داره! اینم یک سرویس اوپن سورس برای اینکاره.
@PyBackendHub