🧑‍💻PythonDev🧑‍💻
365 subscribers
86 photos
3 videos
15 files
78 links
Python tips and tricks
The Good, Bad and the Ugly

📚توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

👨‍💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)👨‍💻


@Mtio975
Download Telegram
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم.

همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا git commit)

شاید شما ندونید برای چی ذخیره می‌کنیم ولی ی روزی نجاتتون میده.

برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا می‌کنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم example.py ذخیره کردیم)
python -m cProfile -s cumulative example.py
و درصورتی که بخوایم خروجی رو ذخیره کنیم که برای آنالیزش از
snakeviz, pstats
استفاده بشه و مهمتر از همه داکیومنتش کرده باشیم می‌تونیم از دستور
python -m cProfile -s cumulative -o compare_bubble_vs_builtin_sort_$(date +'%Y_%m_%dT%H_%M_%S').prof example.py

استفاده کنیم؛ حتما پسوند رو .prof بذارید که راحت شناسایی بشه.
🧑‍💻PythonDev🧑‍💻
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم. همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار : ۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون…
توی دستور بالا :
-m:
برای استفاده از یک ماژول خاص استفاده می‌شه
-s:
ترتیب نمایش هست که گفتیم بر اساس cumulative time باشه  همیشه هم همین رو استفاده خواهید کرد
-o:
برای اینکه خروجی رو توی یک فایل بریزه و توی ترمینال نمایش نده (اول در تاریخ ثبت می‌کنیم بعد ی بار هم بدون این option برای راحتی خودمون اجرا می‌کنیم)

تفسیر خروجیش هم خیلی ساده‌تر از اون چیزی هست که فکر می‌کنید فقط چندتا نکته داره :
ncalls:
تعداد فراخوانی اون خط از کد (ستون آخر کمی جلوتر توضیح میدم دقیق)
وقتی دوتا عدد هست مثل خط اول خروجی توی عکس قبلی
3/1:
عدد کوچیکتر تعداد فراخوانی غیر بازگشتی یا primitive هست و عدد بزرگتر تعداد کل فراخوانی به هر شکلی که بوده (بازگشتی و غیر بازگشتی و ...) یعنی بصورت کلی اون builtin method توی مثال قبل ۳ بار فراخوانی شده.

tottime:
مجموع زمان مورد نیاز جهت اجرای اون تایع؛ به غیر از زمان اجرای توابعی که داخل این تابع فراخوانی شده‌اند.

percall:
زمان اجرای مورد نیاز برای هربار اجرای اون خط یا اون تابع معمولا حدودی برابر هست با :
tottime / ncalls

cumtime:
مهمترین ستون همینه و اون مرتب سازی که توی دستور انجام دادیم (منظورم s cumulative- هست) بر اساس همین ستون بود.
مجموع زمان مورد نیاز از لحظه فراخونی اون خط یا تابع تا خروج از اون خط یا تابع + زمان مورد نیاز برای اجرای توایعی که داخل این تابع یا خط فراخوانی شدند + زمان اجرا بصورت recursive , ... خلاصه همه چیز اینجاس و از همه ستون‌ها هم دقیق‌تر هست

filename:lineno(function)
اینم که بسیار واضح هست از سمت چپ به راست :
اسم اسکریپت : شماره خطی که اون کد اجرا شده (اسم تابع)
اسم تابع برای شرایطی مهم هست که داخل تابع اصلی توابع دیگری هم فراخوانی بشه

توی خروجی بالا مواردی مثل builtin.exec (از توابع مورد علاقه من هست اصن ی وضعی) و برخی موارد دیگر برای
import random
هست


همینجا بگم که تصویر قبلی خروجی کامل cProfile نیست و بنده این خروجی رو بریدم تا خواناتر باشه
خوب از کجا شروع کنم براتون توضیح بدم همین چند دقیقه پیش داشتم با یه سری دوستان گفتگو میکردم در مورد بازار کار و اینکه برای بازار کار اماده هستن یا نه یه سری از دوستان میدونم پایتون کار کردن و جنگو هم خیلی کار کردن کلس داکیومنت خوندن و دوره مختلف دیدن و پروژه های مختلف زدن و کتاب های مختلفی هم خوندن ولی مثلا ویدیو وقتی میبینن مثل یوتیوب میکرو فرانت بر میخورن خیلی مباحث جدید می بینن مصاحبه هم که میرن رد میشن
🧑‍💻PythonDev🧑‍💻
خوب از کجا شروع کنم براتون توضیح بدم همین چند دقیقه پیش داشتم با یه سری دوستان گفتگو میکردم در مورد بازار کار و اینکه برای بازار کار اماده هستن یا نه یه سری از دوستان میدونم پایتون کار کردن و جنگو هم خیلی کار کردن کلس داکیومنت خوندن و دوره مختلف دیدن و…
در ادامه این باید بهتون بگم که اول بررسی که دوره ها رو پروژه ها ور کتاب های که خوندی نرو سطح مهارت های خودت رو ارزیابی کنید ببینید میتونید مفاهیم پیچیده رو درک کنی و تو کاربرد عملی ازشون استفاده کنید اگهی های استخدامی رو مطالعه کنید تو همون حوزه جنگو تحلیل کنید نیاز های موجود تو بازار ر و بهتون کمک میکنه که کدوم موضوع ها کمی ناکافی هستن و چه مهارت های رو هم باید بهبود بدین مهارت های جدید رو بررسی کنید ویدیو ها و منابع اموزش میکرو فرانت اند رو بررسی کنید یا هر موضوع جدید دیگه ای رو یا هر موضوعی که بهش برخورد میکنید رو ببینید اینکه میتونید این موضوع ها رو یاد بگیرید یا نه که این بستگی به نیاز شغلی خودتون داره از مصاحبه ها بازخورد بگیرین اگه خدای نکرده تو مصاحبه رد شدین سعی کنید از مصاحبه کننده یه بازخورد بگیرید این بهتون کمک میکنه نقطه ضعف خودتون روپیدا کنید مهارت های جدید رو توسعه بدین برنامه ریزی واسه توسعه دادن یه مهارت جدید و پیشرفت تو حوزه های که الان نیاز مند بازار کار هستن این هم ممکن هستش که یه سری مهارت های اضاف مثل فرانت اند یا مدیریت پروژه هم براتون مفید باشه تمام مورادی که براتون بهش گفته هم بر گرفته از تجریات کاری خودم هستش و بهتون گفتم که تو مسیر کار و یادگیری به مشکل برنخورید
خیلی وقتا بهم میگن، اشتباه می‌کنی و وقتت رو الکی تلف می‌کنی که بجای خوندن فقط آموزش و یادگیری میری سورس کد رو میخونی ؛

هیچ‌وقت این موضوع رو جواب نمیدم و همیشه می‌گم حق با شماست، ولی به این آدما باید گفت :

خیلی باید رشد کنی، تا بفهمی چرا حتماً باید بعضی سورس کدها رو خوند.

حداقلش : کمک واضح به
System design, Optimization
هست.

مثلاً می‌دونستید
Coroutine
توی پایتون 3.5 کلا ۳۵۰ خط کد بوده، و پیاده سازیش با
generator
های پایتون بود ؟
برای همین می‌تونستیم خیلی راحت بهش فیچر اضافه کنیم (کاری که توی پروژه انجام دادیم)

تصویر مربوط به سورس کد coroutine روی python3.5
🧑‍💻PythonDev🧑‍💻
خیلی وقتا بهم میگن، اشتباه می‌کنی و وقتت رو الکی تلف می‌کنی که بجای خوندن فقط آموزش و یادگیری میری سورس کد رو میخونی ؛ هیچ‌وقت این موضوع رو جواب نمیدم و همیشه می‌گم حق با شماست، ولی به این آدما باید گفت : خیلی باید رشد کنی، تا بفهمی چرا حتماً باید بعضی سورس…
حالا ی بحثی که پیش میاد این هست که چقدر باید سورس کد خوند و تا کجا ؟

اینکه هر پکیجی که دستمون میاد رو بریم سورس کدش رو بخونیم که عملاً واقعی نیست، کاش سرعت خوندن انقدر زیاد بود یا زمان زیادی داشتیم که خب اینطوری نیست و همین شاید زندگی رو ارزشمند کرده 🤔

ولی شخصاً مطالب و فیچرهای خیلی مهم پایتون رو حتماً سورس کداش رو میخونم (قرار نیست خط به خط دیباگ کنید)
باقی پکیج‌ها هم فقط مواردی که می‌دونم ازون روزی که یاد میگیرم به بعد قرار هست توی تموم پروژه‌هام ازش استفاده کنم و پول در بیارم

پکیج‌هایی که قراره فقط ۶ ماه باهاش کار کنم یا در حد ۱ پروژه هست رو هیچوقت اینکارو نمی‌کنم مگر اینکه مجبور بشم یا شرکت بخواد داخلش تغییرات ایجاد کنه.

این مرز بندی بسیار بسیار مهم هست که درست و بهینه باشه
دوستان که تازه کار هستن یه آمار بهم بدین بینم چی به چیه تا بنده براتون در مورد دوره های آموزشی و بازار کار براتون توضیح بدم
Anonymous Poll
62%
مبتدی(تازه کار)
24%
متوسط (کارآموزی)
14%
پیشرفته
یه سری از دوستان از من خواستن که در مورد یادگیر پایتون و اینکه مسیر اموزش پایتون و بازار کارش بگم خوب من سعی میکنم خیلی کامل توضیح بدم که کم گذاشته نباشم واستون و بهتون تو مسیر یادگیری کمک کنه خوب اول که باید بهتون بگم که واسه یادگیری پایتون مفاهیم اولیه رو اول یاد بگیرید مفاهیم اولیه شامل همون متغییر ها لیست حلقه و توابع میشه می تونید از منابع اموزشی انلاین استفاده کنید و یا کتاب های مانند learn python the hard way که نویسنده اون zed shaw هست استفاده کنید در مرحله دوم یادگیری ساختار داده ها و الگوریتم ها خیلی مهم هست که توی حل مسائل پیچیده خیلی به کارتون میاد از کتاب های که میتونم معرفی کنم میتونم به کتاب data structures and algorithms in python که اثر michael استفاده کنید و اینکه باید بگم که پروژه های عملی هم خیلی بهتون کمک میکنه بهترین روش برای تقویت مهارت های پایتون انجام داده پروژه های عملی هستش شروع به پیاده سازی پروژه های کوچک کنید مثل یک برنامه ماشین حساب یا یک برنامه تحت وب ساده و پس از این ها پروژه های پیشرفته تر مثل مدیریت سیستم داده ها بپردازین
🧑‍💻PythonDev🧑‍💻
یه سری از دوستان از من خواستن که در مورد یادگیر پایتون و اینکه مسیر اموزش پایتون و بازار کارش بگم خوب من سعی میکنم خیلی کامل توضیح بدم که کم گذاشته نباشم واستون و بهتون تو مسیر یادگیری کمک کنه خوب اول که باید بهتون بگم که واسه یادگیری پایتون مفاهیم اولیه…
و اموزش مفاهیم پیشرفته شما هر چه بیشتر مسیر اموزشتون جلو بره به مفاهیم پیشرفته تری تو پایتون مثل خطا ها و استثنا ها نخ ها و همزمانی و برنامه نویسی شی گرا بپردازین برا این کار میتونید از منابع اموزشی انلانی مانند سایت python.org , real python استفاده کنید یه سری چارچوب ها و پروژه های واقعی هستند که شما با یادگیری این چهارچوب های پایتون مثل Django , Flask میتونید برنامه های تحت وب قدرتمندی رو بسازید شروع به ساخت پروزه های واقعی و تجاری کنید و با کار تیمی و مشارکت تو گروه های توسعه دهنده ها پیشرفت کنید و گام بعدی به روز رسانی هستش پایتون یه زبان برنامه نویسی پویا هستش بنابراین باید بهتون بگم که روزانه از طریق منابع اموزشی انلاین کتاب ها و وبلاگ ها و و جامعه برنامه نویسی پایتون خودتون رو بروز کنید میتونید در دروه های انلاین و دوره های حضوی هم شرکت کنید و مهارت خودتون رو بالا ببرید من در ادامه دوره ای رو معرفی میکنم براتون و یه سری نکته های اصولی هم میگم واستون
🧑‍💻PythonDev🧑‍💻
و اموزش مفاهیم پیشرفته شما هر چه بیشتر مسیر اموزشتون جلو بره به مفاهیم پیشرفته تری تو پایتون مثل خطا ها و استثنا ها نخ ها و همزمانی و برنامه نویسی شی گرا بپردازین برا این کار میتونید از منابع اموزشی انلانی مانند سایت python.org , real python استفاده کنید…
تا جایی که میتونید از دیدن دور های با ساعت اموزش خیلی بالا پرهیز کنید این طور تایم که دارید به شدت گرفته میشه در هنگام یادگیری حتما نت برداری بشه و لطفا اگه نت برداری میکنید روزانه مطالع داشته باشید نت برداری کردن و نخوندن باعث میشه مطالب که نوشتید ارشیو بشن و بهشون مراجعه نکنید پس تا جایی که میتونید حتما روزانه ساعت مشخصی رو واسه خوندن مطالب که برداشت کردین بزارین سعی کنید داکیومنت خونی هم داشته باشین با رفرنس ها کتاب خونه های پایتون اشنایی داشته باشید که میتونید به سایت رسمی خود پایتون مراجعه کنید و یا از سایت های دیگر استفاده کنید یادگیری زبان انگلبسی در برنامه نویسی به شدت مهم و تاثیر گذار هستش حتما زبان انگلیسی خودتون رو تقویت کنید از حفظ کردن کد و کد زنی که فقط کد بزنید به شدت پرهیز کنید همه میتونن کد بزنن بیشتر در کنار کد زنی توسعه دادن یه پروژه رو هم یاد بگیرید
🧑‍💻PythonDev🧑‍💻 pinned «یه سری از دوستان از من خواستن که در مورد یادگیر پایتون و اینکه مسیر اموزش پایتون و بازار کارش بگم خوب من سعی میکنم خیلی کامل توضیح بدم که کم گذاشته نباشم واستون و بهتون تو مسیر یادگیری کمک کنه خوب اول که باید بهتون بگم که واسه یادگیری پایتون مفاهیم اولیه…»
🧑‍💻PythonDev🧑‍💻 pinned «و اموزش مفاهیم پیشرفته شما هر چه بیشتر مسیر اموزشتون جلو بره به مفاهیم پیشرفته تری تو پایتون مثل خطا ها و استثنا ها نخ ها و همزمانی و برنامه نویسی شی گرا بپردازین برا این کار میتونید از منابع اموزشی انلانی مانند سایت python.org , real python استفاده کنید…»
🧑‍💻PythonDev🧑‍💻 pinned «تا جایی که میتونید از دیدن دور های با ساعت اموزش خیلی بالا پرهیز کنید این طور تایم که دارید به شدت گرفته میشه در هنگام یادگیری حتما نت برداری بشه و لطفا اگه نت برداری میکنید روزانه مطالع داشته باشید نت برداری کردن و نخوندن باعث میشه مطالب که نوشتید ارشیو بشن…»
دوره های برنامه نویسی منابع زیادی هستن بنده به شخصه به استاد خاصی اشاره نمیکنم و تعدادی دوره میگم چون یادگیری هر فردی متفاوت هستش و ممکن هست هر کس با استادی یاد بگیره دوره های که میگم به شرح زیر هستن دوره پایتون مقدماتی و پیشرفته جادی دوره پایتون رضا دولتی دوره پایتون کدیاد امیر حسین امیری دوره پایتون نابغه ها امیر حسین معلمی دوره پایتون توسعه وب حسین رمضان پور سون لرن ممکنه باز هم دوره های باشه که من اشنایی با اساتیدشون ندارم و دوستانی که زبان انگلیسی خوبی دارن میتونن دوره پایتون یدومی و دوره پایتون لینکدین رو بهشون معرفی میکنم
🧑‍💻PythonDev🧑‍💻 pinned «دوره های برنامه نویسی منابع زیادی هستن بنده به شخصه به استاد خاصی اشاره نمیکنم و تعدادی دوره میگم چون یادگیری هر فردی متفاوت هستش و ممکن هست هر کس با استادی یاد بگیره دوره های که میگم به شرح زیر هستن دوره پایتون مقدماتی و پیشرفته جادی دوره پایتون رضا…»
Please open Telegram to view this post
VIEW IN TELEGRAM
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم.

همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا git commit)

شاید شما ندونید برای چی ذخیره می‌کنیم ولی ی روزی نجاتتون میده.

برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا می‌کنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم example.py ذخیره کردیم)
python -m cProfile -s cumulative example.py
و درصورتی که بخوایم خروجی رو ذخیره کنیم که برای آنالیزش از
snakeviz, pstats
استفاده بشه و مهمتر از همه داکیومنتش کرده باشیم می‌تونیم از دستور
python -m cProfile -s cumulative -o compare_bubble_vs_builtin_sort_$(date +'%Y_%m_%dT%H_%M_%S').prof example.py

استفاده کنیم؛ حتما پسوند رو .prof بذارید که راحت شناسایی بشه.
🧑‍💻PythonDev🧑‍💻
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم. همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار : ۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون…
توی دستور بالا :
-m:
برای استفاده از یک ماژول خاص استفاده می‌شه
-s:
ترتیب نمایش هست که گفتیم بر اساس cumulative time باشه  همیشه هم همین رو استفاده خواهید کرد
-o:
برای اینکه خروجی رو توی یک فایل بریزه و توی ترمینال نمایش نده (اول در تاریخ ثبت می‌کنیم بعد ی بار هم بدون این option برای راحتی خودمون اجرا می‌کنیم)

تفسیر خروجیش هم خیلی ساده‌تر از اون چیزی هست که فکر می‌کنید فقط چندتا نکته داره :
ncalls:
تعداد فراخوانی اون خط از کد (ستون آخر کمی جلوتر توضیح میدم دقیق)
وقتی دوتا عدد هست مثل خط اول خروجی توی عکس قبلی
3/1:
عدد کوچیکتر تعداد فراخوانی غیر بازگشتی یا primitive هست و عدد بزرگتر تعداد کل فراخوانی به هر شکلی که بوده (بازگشتی و غیر بازگشتی و ...) یعنی بصورت کلی اون builtin method توی مثال قبل ۳ بار فراخوانی شده.

tottime:
مجموع زمان مورد نیاز جهت اجرای اون تایع؛ به غیر از زمان اجرای توابعی که داخل این تابع فراخوانی شده‌اند.

percall:
زمان اجرای مورد نیاز برای هربار اجرای اون خط یا اون تابع معمولا حدودی برابر هست با :
tottime / ncalls

cumtime:
مهمترین ستون همینه و اون مرتب سازی که توی دستور انجام دادیم (منظورم s cumulative- هست) بر اساس همین ستون بود.
مجموع زمان مورد نیاز از لحظه فراخونی اون خط یا تابع تا خروج از اون خط یا تابع + زمان مورد نیاز برای اجرای توایعی که داخل این تابع یا خط فراخوانی شدند + زمان اجرا بصورت recursive , ... خلاصه همه چیز اینجاس و از همه ستون‌ها هم دقیق‌تر هست

filename:lineno(function)
اینم که بسیار واضح هست از سمت چپ به راست :
اسم اسکریپت : شماره خطی که اون کد اجرا شده (اسم تابع)
اسم تابع برای شرایطی مهم هست که داخل تابع اصلی توابع دیگری هم فراخوانی بشه

توی خروجی بالا مواردی مثل builtin.exec (از توابع مورد علاقه من هست اصن ی وضعی) و برخی موارد دیگر برای
import random
هست


همینجا بگم که تصویر قبلی خروجی کامل cProfile نیست و بنده این خروجی رو بریدم تا خواناتر باشه
توی دوره‌های آموزشی و دانشگاه چیکار می‌کنند ؟!

چرا همه جوری صحبت می‌کنند که انگار همین یک دوره، همین یک کتاب یا ... برای کار و کل عمر کفایت می‌کنه ؟!

نکنید اینکارو، Junior های عزیز بعضی ازین برگذار کننده‌های دوره که فقط به فکر سود شخصی هستند شما مراقب باشید سمت این افراد نرید.

نه بخاطر پول، حتی نه بخاطر وقت که دقیقاً تو دنیای الان برنامه‌نویسی مثل طلا می‌مونه

بلکه بخاطر اینکه خیلی از شما دوستان اشاره کردید به  گرد ناامیدی شدن پست‌های کانال براتون

پست‌های کانال سطح بالاتری از تازه‌کار داره، حتی ممکنه یک سنیور رو ببینید که این مطالب رو بلد نیست (اشکالی هم نداره تا حدودی، چون بهش نیازی نداشته شاید)

اولین کاری که می‌کنید وقتی دوره تموم شد، اینه که برید مصاحبه
مصاحبه‌ها حتی اگر فقط رد بشید، بهتون کلی اطلاعات مهم میده اینکه بازار کار چی میخواد و چه مواردی رو باید بلد باشید
اگر رد نشدید، که بسیار هم عالی شغل پیدا کردید و این شغل یعنی کلی چیز جدید یاد گرفتن (مخصوصاً برای تازه‌کار)

حتی بعد از اینکه شغل پیدا کردید، باید یاد بگیرید مصاحبه کنید
این حق شما هست که دنبال کار بهتر با مزایای بیشتر باشید حتی اگر ۱ ماه بعد کار بهتری رو پیدا کنید.

مصاحبه دادن و نترسیدن از رد شدن توی مصاحبه، اولین و مهمترین قدم برای پیشرفت و senior شدن هست

مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
چون خیلی پرسیده شده :

اگر تازه کار هستید

Head First Python (3rd edition)

نسخه اولیه رو O'Reilly منتشر کرده (رایگان تو سایتش می‌تونید بخونید یا از منابع موجود استفاده کنید و دانلود بزنید)

برای کسی که تازه میخواد پایتون و برنامه‌نویسی رو شروع کنه کتاب بسیار خوبی هست (من نسخه‌‌های قبلی رو به شاگرد هام معرفی می‌کردم؛ این نسخه هم قطعاً بهتر هست که بدتر نه پس نخونده معرفی می‌کنم کتاب رو)
🧑‍💻PythonDev🧑‍💻
#django_roadmap #roadmap امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند : ۱- پایتون رو تا سطح خوبی بلد هست ۲- ساختمان داده و الگوریتم رو می‌شناسه ۳- لینوکس، گیت و داکر رو هم بلده یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین…
یکسری از دوستان اشاره کردند که کتاب جزئیات کمی داره و برای کسی که قبل از این وب کار نکرده خیلی راحت و سر راست نیست :

اگر این شرایط برای شما هم صدق می‌کند، به این لیست میشه یک کتاب دیگر هم اضافه کرد.

کتاب :

Web Development with Django 2nd edition By Ben Shaw, .... (Packt pub)

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

فصل‌های دیگری هم که بنظرم بهتر توضیح داده برای شروع :
Media serving and file uploads,
Session and authentication
Testing your django application
و بخش‌هایی (شامل مثال) از فصل های :
Generating CSV, PDF, and other Binary File
Django Third-Party Libraries
هست.

بازم میگم اگر کتاب دیگری خوندید، درگیر کتاب‌های مختلف نشید، تمرین کردن و با جستجو رسیدن به آنچه که نیاز دارید اولویت باشه براتون

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

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

حالا اینجا مثال
Django
بود شما به موضوعات دیگر و ... هم تعمیم بدید این موضوع رو.

اولویت اول شما باید کد زدن و تمرین باشه، شخصاً کل هفته رو کد میزنم
آخر هفته که روز استراحتم هست، ترجیح میدم کتاب بخونم تا مطالب و تکنیک‌های جدید رو توی کارهام پیاده سازی کنم (و همین ۱ روز برای خیلی از مباحث و کتاب‌ها بیشتر از کافی هست).