🧑💻PythonDev🧑💻
https://ocw.sharif.edu/course/id/522
خلاقیت الگوریتمی و برنامه نویسی پایتون
🧑💻PythonDev🧑💻
https://ocw.sharif.edu/course/id/267
درس طراحی الگوریتم ها
این دوره های که براتون قرار دادم بعضی هاشون دارای تمرین و یادداشت هستند و پاسخ نامه هر تمرین بعد از هر تمرین که حل شده به صورت فایل و به طور کامل و جامع توضیحات داده شده هستند
🧑💻PythonDev🧑💻
https://www.daneshjooyar.com/learn-algorithm/
الگوریتم و فلوچارت این طوره کاملا رایگان می باشد و دارای گواهی پایان دوره هم می باشد
🧑💻PythonDev🧑💻
https://quera.org/college/landpage/14471/programming-gateway
دوره دروازه ورود به دنیای برنامه نویسی سایت کوئرا سرفصل های دوره در سایت به طور کامل هستند و دوره دارای مدرک معتبر پایان دوره می باشد
🧑💻PythonDev🧑💻
https://quera.org/college/landpage/2572/programming-basics-course
دوره مبانی برنامه نویسی و تفکر الگوریتمی کوئرا
توی ادامه بحث
مثل منم باشید
برای پروفایلینگ مموری معمولا از کتابخونه
استفاده میشه ؛ اما حقیقتا شخصا ۶ ماه هست که جایگزین پیدا کردم و چقدر خوشحالم بابت این موضوع :
دقت کنید مصرف مموری کتابخونه
اما چطور ازش استفاده کنیم ؟
همینجا یک موضوع دیگه رو هم بگم (خودتون بخونید) یک پلاگین هم برای
profiling
اینبار میرسیم به اهمیت حافظه؛ وقتی از یک تازه سنیور شده از پروفایلینگ بپرسید راجب cpu
و ... صحبت میکنه از یک با تجربه بپرسید اهمیت مصرف حافظه در کنار زمان اجرا رو هم بهتون میگه مثل منم باشید
profiling GPU
رو هم گذارش میدید (البته به قدرت قبلیها نیست ولی از نداشتنش بهتره)برای پروفایلینگ مموری معمولا از کتابخونه
memory_profiler
استفاده میشه ؛ اما حقیقتا شخصا ۶ ماه هست که جایگزین پیدا کردم و چقدر خوشحالم بابت این موضوع :
memray
که تصویر بالا خروجی اجرای live هست واقعا پروردگار اطلاعات دقیق مصرف مموری هست.دقت کنید مصرف مموری کتابخونه
C, Rust, ...
هم که ایمپورت کردید توی پروژه و داره استفاده میشه رو نشون میده که خیلی خیلی مهمه.اما چطور ازش استفاده کنیم ؟
$ pip install memray
همینجا یک موضوع دیگه رو هم بگم (خودتون بخونید) یک پلاگین هم برای
pytest
داره که میتوندی بعدا دنبال کنیدpytest-memray
🧑💻PythonDev🧑💻
توی ادامه بحث profiling اینبار میرسیم به اهمیت حافظه؛ وقتی از یک تازه سنیور شده از پروفایلینگ بپرسید راجب cpu و ... صحبت میکنه از یک با تجربه بپرسید اهمیت مصرف حافظه در کنار زمان اجرا رو هم بهتون میگه مثل منم باشید profiling GPU رو هم گذارش میدید (البته…
سادهترین راه اجرای
ازین دستورات استفاده کنید :
peak memory usage
(بیشترین مصرف مموری در طول اجرای کد) رو بهتون نشون میده.
باقی موارد به ازای هر خط کد یا
پ.ن: همیشه فایل
توی پستهای بعدی میگم چرا .
memray
استفاده از دستور run
هست + flamegraph
همونطور که قبلا گفتم خروجی تمام پروفایلینگهارو باید نگه دارید و نمودار لایو اینکار رو نمیکنه پس قبل از استفاده از نمودار لایو (حین اجرای برنامه تمام دستورات و مصرف مموریهارو نشون میده)ازین دستورات استفاده کنید :
$ memray run <my-script>.py
بعد از اجرا یک فایل با پسوند bin
برای شما ذخیره میشه که تمام اطلاعات مورد نیاز داخل همین فایل هست.memray flamegraph <some-naming>.bin
بعد از اجرای دستور بالا یک فایل html
برای شما ایجاد میشه که اگر با مرورگر باز کنید چیزی مشابه تصویر بالا خواهید داشت. تنها نکتهای که راجب این تصویر لازمه بگم بخش stats
هست که peak memory usage
(بیشترین مصرف مموری در طول اجرای کد) رو بهتون نشون میده.
باقی موارد به ازای هر خط کد یا
import
, .... مصرف مموری رو نشون میده (مثال من شاید خیلی خوب نباشه)پ.ن: همیشه فایل
.html
رو همراه با .bin
روی سیستم خودتون خروجی بگیرید و نگهدارید.توی پستهای بعدی میگم چرا .
🧑💻PythonDev🧑💻
سادهترین راه اجرای memray استفاده از دستور run هست + flamegraph همونطور که قبلا گفتم خروجی تمام پروفایلینگهارو باید نگه دارید و نمودار لایو اینکار رو نمیکنه پس قبل از استفاده از نمودار لایو (حین اجرای برنامه تمام دستورات و مصرف مموریهارو نشون میده) ازین…
دستور
این حالت برای وقتایی هست که میخواید اثبات کنید
گرفتن ریپورت
بجای گزارشات کلی که توی تغییر سایز
همونطور که از اسمش پیداس میگه اگر از
از بین ۳ تا آپشن بالا توی این مدت شخصا فقط از
اما دوتا آپشن دوست داشتنی دیگه هم وجود داره :
همیشه بعد از اینکه دستور
هم همین کار رو میکنه اما گزارشات رو روی یک
پر استفادهترین حالت بعد از
حتما برای کاستومایز کردن خروجیها و بررسی دقیقتر داکیومنتش رو نگاه کنید (سعی کردم مهمترین مواردی که شخصا استفاده میکنم رو بگم فقط).
run
چندتا option
هم داره که هرکدوم توی شرایط خاص استفاده میشه :memray run --native <my-script>.py
این حالت برای وقتایی هست که میخواید اثبات کنید
numpy
, pandas
, ... هستند که دارند ازین میزان رم استفاده میکنند یا اینکه میخواهید بین توابع مختلفی که پیکجها ارائه میدهند مقایسه انجام بدید.گرفتن ریپورت
html
روی این حالت میتونه طولانی باشه (جزو حالاتی هست که هم bin
هم html
بهتره روی یک سیستم خروجی گرفته بشه)memray run --trace-python-allocators <my-script>.py
بجای گزارشات کلی که توی تغییر سایز
memory pool
گرفته میشه به ازای ایجاد و از بین رفتن هر آبجکت براتون گزارش مموری میده که باز هم خروجی خیلی کندتری خواهد داشت؛ و البته اطلاعات بسیار بیشتر. memray run --follow-fork <my-script>.py
همونطور که از اسمش پیداس میگه اگر از
parent process
فورک گرفته شد وضعیت مموری اون child process
رو هم توی ریپورت بیار.از بین ۳ تا آپشن بالا توی این مدت شخصا فقط از
native
استفاده کردم چندبار (باقی موارد رو نیاز نداشتم)اما دوتا آپشن دوست داشتنی دیگه هم وجود داره :
memray run --live <my-script>.py
همیشه بعد از اینکه دستور
run
رو اجرا کردم (ذخیره بشه) و بعد گزارش html
رو آماده کردم؛ تا وقتی دارم روی memory optimization
کار میکنم تنها دائما از live option
استفاده میکنم
PID, Thread, Samples, Duration, Max heap size, current heap size
و ... رو بهم میده (برای current heap size
) چون توی حالت لایو سریع تغییر میکنه از
time.sleep(10)
استفاده میکنم توی جایی که مشکوک هستم به میزان مصرف مموری و اینجوری ی پنجره ۱۰ ثانیهای برای خودم باز میکنم تا دقیق بررسی کنم توی رم چه اتفاقی داره رخ میده.memray run --live-remote <my-script>.py
هم همین کار رو میکنه اما گزارشات رو روی یک
port
خاص میفرسته (بازم من ازش استفاده نکردم)memray run --live --native <my-script>.py
پر استفادهترین حالت بعد از
live option
برای من استفاده ترکیبی از live
و native
هست (البته که حوصله آدم سر میره بعضی وقتها تا گزارشش آماده بشه)حتما برای کاستومایز کردن خروجیها و بررسی دقیقتر داکیومنتش رو نگاه کنید (سعی کردم مهمترین مواردی که شخصا استفاده میکنم رو بگم فقط).
توی این هفته ۴ بار، یک سوال مصاحبه قدیمی رو در موردش صحبت پیش اومده؛
داستان چیه، من چندین سال پیش با یک شرکت مصاحبه داشتم و مصاحبه کننده ازم یک سوال
Data structure & Algorithm
پرسید، من سوال رو خیلی سریع توضیح دادم و بعد خیلی سریع هم پاسخ صحیح رو نوشتم، در نهایت از تعجب مصاحبه کننده شک کردم که اشتباهی شده و توضیح دادم که من سطح جونیور نیستم و ... (اشتباه سمت HR بود، چون توی جلسه اول هم پیش اومده بود)
طرف ازم خواست که سوال دیگری رو مطرح کنه و دیدم داره طول میکشه روی همون سوال قبلی بهش یک پیشنهادی دادم که واقعاً خودمم تا اون لحظه کار نکرده بودم و برام جذاب بود چالش قضیه
در نهایت ایشون هم قبول کرد و رفتیم سراغ مسئله (کل جلسه همین سوال طول کشید و درنهایت هم من قبول شدم)
توی این هفته (شایدم ۲ هفته)، یکبار بعنوان مصاحبه کننده، دوبار دوستانه و یکبار هم راهنمایی بعد از مصاحبه برای یکی از دوستان بحث سوال مطرح شد :
همینجا بگم، هیچکس جواب درست حالت سختتر رو نداد.
۱- سوال اصلی مصاحبه خودم :
با استفاده از ساختار داده لیست؛ یک کلاس stack پیاده سازی کنید که یک عدد ورودی به اسم n بگیره و به تعداد n استک ایجاد کنه بطوری که دیتای تمام این استکها داخل فقط و فقط ۱ لیست ذخیره بشه.
سوال خیلی سادهاس اما دوتا پرسش داره :
۱- آیا طول لیست از پیش تعریف شده هست؟ (که قطعاً میگن بله)
۲- آیا طول stack ها باهم برابر هست ؟ (جواب اینم بله هست)
که خب شما لیست رو به n قسمت تقسیم میکنید و هر قسمت رو به یک استک میدید.
نسخهای که من به ذهنم رسید (خودمم توی مصاحبههام میپرسم) :
۱- فرض کنید طول لیست از قبل مشخص نیست و stack ها میتونند تا بینهایت ادامه داشته باشند (فرض کنید رم بینهایت داریم)
دوتا راهکاری که به ذهن خودم رسید و هنوز توی این چندسال راه دیگهای بهم نگفتند :
۱- هر عنصر لیست، یک tuple باشه که ایندکس اول tuple اندیس stack باشه و ایندکس دوم، دادهایی که ذخیره شده
اما بازم سختش کنیم، شما غیر از نوع دادههای اصلی :
int, float, decimal, ...
چیزی نمیتونید داخل stack نگه دارید (یعنی فقط دیتا)
راهنمای کوچیک راهکار دوم : از Remainder طول فعلی لیست بر n استفاده کنید و ببینید کدوم اندیس برای کدوم stack هست.
بحث سر راهکار من روی آخرین حالت سوال (که خب سوال مصاحبه یکی از دوستان هم بوده، کاملاً اتفاقی) من رو به اینجا رسوند که این موارد مثل جلسه امشب رو یک کاری باهاش بکنیم،
دوره آموزش : قطعاً مخالفم، با هرگونه پول گرفتن از بچههای تازهکار برای آموزش دادن سواد مخالفم بنظرم باید این سواد در دسترس همه باشه چه اونی که از والدینش پول میگیره چه کسی که درحال حاضر توان مالی نداره.
اسپانسر : چندباری پیش اومده، اما نهایتاً هدفشون یا تبلیغ برای فروش دیگر محصولات آموزشی هست، یا اینکه میخوان یک بخشی رایگان باشه و باقی بفروش برسه و ...
خلاصه درآمدی (پول خوبی هم داره)
لایو : که خب محدودیت ۱۰۰ نفر و زمان و ... داریم و خیلیها فرصت نمیکنند شرکت کنند و چون ذخیره هم نمیشه خیلی چیز قشنگی نمیشه نهایتاً
متن و کانال : برای آموزشهای این چنینی واقعاً خوب نیست و خیلی خیلی سخت هست
یوتیوب : مزایایی که داره اینه که شما با دیدن؛ کامنت؛ لایک انگار دارید دوره رو میخرید و پشتیبانی مالی میکنید.
معایب : زمان زیادی میگیره - من واقعاً بلد کار نیستم - subscribe,like,comment نداشته باشه انگیزه خیلی پایین میاد - درآمدی نداره (حداقل اوایل کار) - درصورت عدم حمایت برندسازی خودم خراب میشه - از همه بدتر با توجه به اوضاع اینترنت ایران میترسم خیلی دوستان نتونند روی یوتیوب تماشا کنند و همه موارد قبلی اتفاق بیوفته
اما خیلی دوست دارم یک راهکاری پیدا کنم که حداقل میزانی که خودم بلد هستم مطالب مورد نیاز رو منتقل کنم به دوستان.
همچنان به دنبال راهکار
داستان چیه، من چندین سال پیش با یک شرکت مصاحبه داشتم و مصاحبه کننده ازم یک سوال
Data structure & Algorithm
پرسید، من سوال رو خیلی سریع توضیح دادم و بعد خیلی سریع هم پاسخ صحیح رو نوشتم، در نهایت از تعجب مصاحبه کننده شک کردم که اشتباهی شده و توضیح دادم که من سطح جونیور نیستم و ... (اشتباه سمت HR بود، چون توی جلسه اول هم پیش اومده بود)
طرف ازم خواست که سوال دیگری رو مطرح کنه و دیدم داره طول میکشه روی همون سوال قبلی بهش یک پیشنهادی دادم که واقعاً خودمم تا اون لحظه کار نکرده بودم و برام جذاب بود چالش قضیه
در نهایت ایشون هم قبول کرد و رفتیم سراغ مسئله (کل جلسه همین سوال طول کشید و درنهایت هم من قبول شدم)
توی این هفته (شایدم ۲ هفته)، یکبار بعنوان مصاحبه کننده، دوبار دوستانه و یکبار هم راهنمایی بعد از مصاحبه برای یکی از دوستان بحث سوال مطرح شد :
همینجا بگم، هیچکس جواب درست حالت سختتر رو نداد.
۱- سوال اصلی مصاحبه خودم :
با استفاده از ساختار داده لیست؛ یک کلاس stack پیاده سازی کنید که یک عدد ورودی به اسم n بگیره و به تعداد n استک ایجاد کنه بطوری که دیتای تمام این استکها داخل فقط و فقط ۱ لیست ذخیره بشه.
سوال خیلی سادهاس اما دوتا پرسش داره :
۱- آیا طول لیست از پیش تعریف شده هست؟ (که قطعاً میگن بله)
۲- آیا طول stack ها باهم برابر هست ؟ (جواب اینم بله هست)
که خب شما لیست رو به n قسمت تقسیم میکنید و هر قسمت رو به یک استک میدید.
نسخهای که من به ذهنم رسید (خودمم توی مصاحبههام میپرسم) :
۱- فرض کنید طول لیست از قبل مشخص نیست و stack ها میتونند تا بینهایت ادامه داشته باشند (فرض کنید رم بینهایت داریم)
دوتا راهکاری که به ذهن خودم رسید و هنوز توی این چندسال راه دیگهای بهم نگفتند :
۱- هر عنصر لیست، یک tuple باشه که ایندکس اول tuple اندیس stack باشه و ایندکس دوم، دادهایی که ذخیره شده
اما بازم سختش کنیم، شما غیر از نوع دادههای اصلی :
int, float, decimal, ...
چیزی نمیتونید داخل stack نگه دارید (یعنی فقط دیتا)
راهنمای کوچیک راهکار دوم : از Remainder طول فعلی لیست بر n استفاده کنید و ببینید کدوم اندیس برای کدوم stack هست.
بحث سر راهکار من روی آخرین حالت سوال (که خب سوال مصاحبه یکی از دوستان هم بوده، کاملاً اتفاقی) من رو به اینجا رسوند که این موارد مثل جلسه امشب رو یک کاری باهاش بکنیم،
دوره آموزش : قطعاً مخالفم، با هرگونه پول گرفتن از بچههای تازهکار برای آموزش دادن سواد مخالفم بنظرم باید این سواد در دسترس همه باشه چه اونی که از والدینش پول میگیره چه کسی که درحال حاضر توان مالی نداره.
اسپانسر : چندباری پیش اومده، اما نهایتاً هدفشون یا تبلیغ برای فروش دیگر محصولات آموزشی هست، یا اینکه میخوان یک بخشی رایگان باشه و باقی بفروش برسه و ...
خلاصه درآمدی (پول خوبی هم داره)
لایو : که خب محدودیت ۱۰۰ نفر و زمان و ... داریم و خیلیها فرصت نمیکنند شرکت کنند و چون ذخیره هم نمیشه خیلی چیز قشنگی نمیشه نهایتاً
متن و کانال : برای آموزشهای این چنینی واقعاً خوب نیست و خیلی خیلی سخت هست
یوتیوب : مزایایی که داره اینه که شما با دیدن؛ کامنت؛ لایک انگار دارید دوره رو میخرید و پشتیبانی مالی میکنید.
معایب : زمان زیادی میگیره - من واقعاً بلد کار نیستم - subscribe,like,comment نداشته باشه انگیزه خیلی پایین میاد - درآمدی نداره (حداقل اوایل کار) - درصورت عدم حمایت برندسازی خودم خراب میشه - از همه بدتر با توجه به اوضاع اینترنت ایران میترسم خیلی دوستان نتونند روی یوتیوب تماشا کنند و همه موارد قبلی اتفاق بیوفته
اما خیلی دوست دارم یک راهکاری پیدا کنم که حداقل میزانی که خودم بلد هستم مطالب مورد نیاز رو منتقل کنم به دوستان.
همچنان به دنبال راهکار
🧑💻PythonDev🧑💻
توی این هفته ۴ بار، یک سوال مصاحبه قدیمی رو در موردش صحبت پیش اومده؛ داستان چیه، من چندین سال پیش با یک شرکت مصاحبه داشتم و مصاحبه کننده ازم یک سوال Data structure & Algorithm پرسید، من سوال رو خیلی سریع توضیح دادم و بعد خیلی سریع هم پاسخ صحیح رو نوشتم،…
پیشنهاد، انگلیسی بودن ویدئوها بیشترین پیشنهاد بود
ولی نه ممنون،
منبع انگلیسی به وفور پیدا میشه با آدمهایی که فن بیان و تجربه تدریس بسیار بسیار بیشتری از من دارند.
هدف من جامعه برنامهنویسی ایرانی هست، بخصوص تازهکارها و افرادی که به زبان انگلیسی مسلط نیستند (دارند یاد میگیرند یا ...)
پ.ن :
یوتیوب رو هنوز خیلی روش نیستم البته
خیلی دوس داشتم ی جای بزرگی داشتم، همه بچهها رو جمع میکردم اونجا و همونجا دور هم تمرین میکردیم (طوریکه کرایه اتوبوس تا تهران رو هم حتی خودم میدادم)
اینجوری مطمئن بودم هرکسی علاقه داره حتماً میتونه یاد بگیره (اینترنت و ... محدودیتش نیست)
پیشنهاد پلتفرم پولی به من ندید، ممنون ♥️
ولی نه ممنون،
منبع انگلیسی به وفور پیدا میشه با آدمهایی که فن بیان و تجربه تدریس بسیار بسیار بیشتری از من دارند.
هدف من جامعه برنامهنویسی ایرانی هست، بخصوص تازهکارها و افرادی که به زبان انگلیسی مسلط نیستند (دارند یاد میگیرند یا ...)
پ.ن :
یوتیوب رو هنوز خیلی روش نیستم البته
خیلی دوس داشتم ی جای بزرگی داشتم، همه بچهها رو جمع میکردم اونجا و همونجا دور هم تمرین میکردیم (طوریکه کرایه اتوبوس تا تهران رو هم حتی خودم میدادم)
اینجوری مطمئن بودم هرکسی علاقه داره حتماً میتونه یاد بگیره (اینترنت و ... محدودیتش نیست)
پیشنهاد پلتفرم پولی به من ندید، ممنون ♥️
✔️ استیبل بودن یا نبودن یک الگوریتم مرتب سازی
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
#Roadmap 2023
این پیام توی چندروز آینده، آپدیت میشه
اینبار با فرض اینکه مقدمات پایتون رو میدونید شروع میکنم، توی ایران شاید حتی باید بگم با فرض اینکه پایتون رو در سطح Senior بلد هستید (بدون تعارف ۹۸٪ ایرانیهایی که توی لینکدین میزنن
Senior Python Developer
واقعاً سطحاشون این نیست)
مهمتر اینکه، من این RoadMap رو برای پیدا کردن شغل نوشتم؛ گوشه ذهنم
۱- اول باید پایتون رو حرفهای باشید، بدون تعارف مرحله دوم مصاحبه حرفهای شما ارزیابی زبان برنامهنویسی هست که اعلام کردید و سطحی که گفتید و مهمتر از اون
Data structure & Algorithm
پس اولین کتابی که ۱۰۰٪ باید بخونید
Fluent Python 2nd Edition
و بعد از اون :
Data Structure & Algorithm in Python
این موارد که تموم شد، بخش زیادی از مرحله اول و دوم مصاحبه رو با موفقیت جلو میبرید، غیر از سوالات هوش مصنوعی (البته تمام مراحل به soft skills ها هم بستگی داره)
بعد از این باید بتونید، دیتا رو اصطلاحاً مثل موم توی دست بگیرید پس برای دیتای
رو بدونید اما توی همین راستا :
هم لازمه ولی نرید بشینید کل توابع رو حفظ، چون به لطف گوگل همرو پیدا میکنید چیزی که خیلی حرفهای باید بدونید، سرعت بخشیدن به کدها هست
توی نامپای بهتره فرق
رو بدونید،
نیست.
برای
آپدیتهای این پست وقتی تموم میشه که
Pin
بشه روی کانال
این پیام توی چندروز آینده، آپدیت میشه
اینبار با فرض اینکه مقدمات پایتون رو میدونید شروع میکنم، توی ایران شاید حتی باید بگم با فرض اینکه پایتون رو در سطح Senior بلد هستید (بدون تعارف ۹۸٪ ایرانیهایی که توی لینکدین میزنن
Senior Python Developer
واقعاً سطحاشون این نیست)
مهمتر اینکه، من این RoadMap رو برای پیدا کردن شغل نوشتم؛ گوشه ذهنم
ML Engineering
رو هم دارم، نه Researcher
حرفهای شدن؛ البته که ی سطحی از این موارد رو بدونید.۱- اول باید پایتون رو حرفهای باشید، بدون تعارف مرحله دوم مصاحبه حرفهای شما ارزیابی زبان برنامهنویسی هست که اعلام کردید و سطحی که گفتید و مهمتر از اون
Data structure & Algorithm
پس اولین کتابی که ۱۰۰٪ باید بخونید
Fluent Python 2nd Edition
و بعد از اون :
Data Structure & Algorithm in Python
این موارد که تموم شد، بخش زیادی از مرحله اول و دوم مصاحبه رو با موفقیت جلو میبرید، غیر از سوالات هوش مصنوعی (البته تمام مراحل به soft skills ها هم بستگی داره)
بعد از این باید بتونید، دیتا رو اصطلاحاً مثل موم توی دست بگیرید پس برای دیتای
tabular
لازمه که Pandas
رو بدونید اما توی همین راستا :
Numpy, Matplotlib
کتابی که برای نامپای معرفی میکنم برای سال ۲۰۱۷ هست قدیمی شاید باشه اما بسیار بسیار عالی و فوق العاده هست (خیلی دنبالش گشتم توی این سالها امروز اتفاقی پیداش کردم)
From Python to Numpyهم لازمه ولی نرید بشینید کل توابع رو حفظ، چون به لطف گوگل همرو پیدا میکنید چیزی که خیلی حرفهای باید بدونید، سرعت بخشیدن به کدها هست
توی نامپای بهتره فرق
numpy
معمول و mkl
و ... رو بدونید (ml engineer
) Array programming, vectorization
رو بدونید،
for loop
رو حذف کردن و بجاش از np.vectorize
گذاشتن اسمش Vectorization
نیست.
برای
matplotlib
هم باید بتونید باهاش storytelling
انجام بدید، کاربر عادی باید بتونه با کمترین توضیح شما هدف نمودار و ... ایی که نمایش دادید رو متوجه بشه.آپدیتهای این پست وقتی تموم میشه که
Pin
بشه روی کانال
🧑💻PythonDev🧑💻 pinned «#Roadmap 2023 این پیام توی چندروز آینده، آپدیت میشه اینبار با فرض اینکه مقدمات پایتون رو میدونید شروع میکنم، توی ایران شاید حتی باید بگم با فرض اینکه پایتون رو در سطح Senior بلد هستید (بدون تعارف ۹۸٪ ایرانیهایی که توی لینکدین میزنن Senior Python Developer…»
Snap.png
1.6 MB
Let's dig in a bit :) 🐕
سه حالت برای کش وجود داره,
در حالت اول، هیچ کشی انجام نمیشه و تنها آمار کلی از تعداد بارهایی که تابع فراخوانی شده ثبت میشه.
در حالت دوم، کش سادهای بدون محدودیت سایز وجود دارد. در این حالت، نتیجهی تابع برای ورودیهای مشابه ذخیره شده و برای بارهای بعدی فراخوانی میشود.
در حالت سوم، سایز کش محدود شده است. در این حالت، نتایج قدیمیتر ترک میشوند و به جای آنها، نتایج جدیدی که اخیرا استفاده شدهاند، ذخیره میشوند. پس وقتی maxsize پر شد بهتون ارور نمیده :)). جالبه نه؟
سه حالت برای کش وجود داره,
در حالت اول، هیچ کشی انجام نمیشه و تنها آمار کلی از تعداد بارهایی که تابع فراخوانی شده ثبت میشه.
در حالت دوم، کش سادهای بدون محدودیت سایز وجود دارد. در این حالت، نتیجهی تابع برای ورودیهای مشابه ذخیره شده و برای بارهای بعدی فراخوانی میشود.
در حالت سوم، سایز کش محدود شده است. در این حالت، نتایج قدیمیتر ترک میشوند و به جای آنها، نتایج جدیدی که اخیرا استفاده شدهاند، ذخیره میشوند. پس وقتی maxsize پر شد بهتون ارور نمیده :)). جالبه نه؟