کدت اجرا میشود. تستها سبز است. همهچیز خوب پیش میرود؛ تا روزی که تابعی را باز میکنی که سه ماه پیش خودت نوشتهای و از خودت میپرسی: این data دقیقاً چیست؟ دیکشنری است؟ لیستی از دیکشنریها؟ یا یک آبجکت؟ و بعد بیست دقیقه بین فایلها بالا و پایین میروی تا فقط بفهمی چه چیزی وارد این تابع میشود و چه چیزی از آن بیرون میآید.
همین بیست دقیقه را ضرب کن در تعداد توابع پروژه، ضرب در تعداد آدمهایی که کنارت روی همان کد کار میکنند. نتیجهاش دقیقاً همان چیزی است که یک پروژهٔ پایتون را از «سریع و لذتبخش» به «کند و ترسناک» تبدیل میکند؛ جایی که هیچکس جرئت نمیکند بخشی از کد را عوض کند، چون معلوم نیست چه چیزی جای دیگری میشکند.
راهحل این مشکل سالهاست که داخل خودِ پایتون است و اسمش type hint است. این دوره، یک مسیر کامل و گامبهگام برای یادگیری type hint در پایتون است: از اولین x: int تا پروتکلها و کلاسهای ژنریک؛ همان سطحی که در پروژههای واقعی و تیمهای حرفهای از تو انتظار میرود.
تایپهینت دیگر یک انتخاب سلیقهای نیست؛ استاندارد پایتون مدرن است
سالها پیش، تایپهینت فقط یک قابلیت جانبی و «خوب است اگر باشد» به حساب میآمد. امروز داستان کاملاً فرق کرده است. کافی است به ابزارهایی نگاه کنی که بازار کار پایتون روی آنها میچرخد:
- FastAPI کل مسیریابی، اعتبارسنجی ورودی و مستندسازی خودکار API را از روی همان تایپهینتهایی میسازد که تو در امضای تابع مینویسی. اگر تایپهینت بلد نباشی، عملاً نمیتوانی FastAPI بنویسی.
- Pydantic مدلهای داده را مستقیماً از روی annotationها میسازد؛ همان چیزی که امروز زیرساخت اعتبارسنجی داده در بخش بزرگی از پروژههای پایتون است.
- SQLModel، Typer، Strawberry و بسیاری از کتابخانههای نسل جدید، تماماً روی سیستم تایپ پایتون بنا شدهاند.
- حتی در دنیای جنگو هم ابزارهایی مثل django-stubs راه افتادهاند تا همان امنیت و شفافیت را به پروژههای قدیمیتر بیاورند.
- mypy و Pyright در بسیاری از تیمها بخشی از CI هستند؛ یعنی کدی که تایپ درستی ندارد، اصلاً اجازهٔ merge شدن پیدا نمیکند.
پیام این فهرست روشن است: اگر امروز پایتون مینویسی و با تایپهینت راحت نیستی، از بخش بزرگی از اکوسیستم مدرن پایتون بیرون ماندهای، حتی اگر خودت متوجهش نشده باشی.
چرا بازار کار روی type hint در پایتون اینقدر حساس شده است؟
وقتی یک شرکت برای موقعیت پایتون آگهی میزند، در واقع دنبال کسی میگردد که بتواند وارد یک کدبیس چنددههزار خطی شود و بدون شکستن چیزی، آن را جلو ببرد. تایپهینت دقیقاً همان مهارتی است که این توانایی را میسازد. چند دلیل کاملاً عملی:
- باگها قبل از اجرا پیدا میشوند. بخش بزرگی از خطاهای رایج پایتون، از فرستادن نوع اشتباه به یک تابع میآید. با تایپهینت و یک type checker، این خطاها همان لحظه در ادیتور جلوی چشمت قرمز میشوند؛ نه ساعت سه بامداد روی سرور production.
- ریفکتور بدون ترس. تغییر دادن کدی که تایپهینت دارد، از حالت «امیدوارم چیزی نشکند» به حالت «ابزار دقیقاً میگوید کجاها باید عوض شود» تبدیل میشود. این تفاوت، تفاوت یک روز کار با یک هفته کار است.
- کد ریویو راحتتر و امتیاز بیشتر. در تیمهای حرفهای، امضای تابعِ تایپدار اولین چیزی است که ریویوکننده میبیند. کدی که خودش خودش را توضیح میدهد، سریعتر تأیید میشود و از نویسندهاش تصویر یک توسعهدهندهٔ بالغ میسازد.
- سرعت واقعی در ادیتور. وقتی تایپها مشخص باشند، VS Code و PyCharm دقیقاً میدانند چه متدها و چه فیلدهایی در دسترساند. autocomplete از حالت حدسوگمان بیرون میآید و تو دیگر لازم نیست هر بار مستندات را باز کنی.
- همکاری تیمی بدون سوءتفاهم. تایپهینت یک قرارداد رسمی بین تو و بقیهٔ تیم است. مستنداتی که هیچوقت قدیمی نمیشود، چون بخشی از خود کد است.
- ابزارهای هوش مصنوعی روی کد تایپدار بهمراتب بهتر کار میکنند. هرچه کد شفافتر و تایپدارتر باشد، پیشنهادهایی که از دستیارهای کدنویسی میگیری دقیقتر و قابلاعتمادتر است. این یعنی مهارتی که امروز یاد میگیری، بازدهی ابزارهای فردایت را هم بالا میبرد.
- عبور از فیلتر مصاحبهٔ فنی. پرسشهایی مثل «تفاوت
OptionalوUnionچیست؟»، «TypeVarکجا لازم میشود؟» یا «چرا ازProtocolاستفاده میکنیم؟» دقیقاً همان سؤالهایی هستند که مرز بین یک پایتونکار جونیور و یک توسعهدهندهٔ حرفهای را مشخص میکنند.
خلاصهاش این است: تایپهینت یک تزئین روی کد نیست. یک مهارت مستقیماً مرتبط با قابل استخدام بودن است. هزینهٔ یادگیریاش چند ساعت است و سودش را در هر پروژهای که بعد از این مینویسی پس میگیری.
در این دوره دقیقاً چه چیزی یاد میگیری؟
این دوره از صفر شروع میشود، اما در سطح صفر نمیماند. مسیر آن طوری چیده شده که در پایان، هیچ تایپهینتی در کدهای حرفهای پایتون برایت ناآشنا نباشد:
- میفهمی تایپهینت چه مشکلی را حل میکند و چرا پایتونِ داینامیک به آن نیاز پیدا کرد.
- محیط کارت را حرفهای میکنی: راهاندازی type checker در VS Code تا خطاها را همان لحظهٔ نوشتن ببینی.
- الفبای تایپهینت را کامل یاد میگیری: متغیرها، پارامترها، مقدار بازگشتی و انواع مرکب مثل لیست و دیکشنری.
- یاد میگیری وقتی یک نوع کافی نیست چه کنی:
OptionalوUnion، و تکلیف آنNoneهایی که همیشه دردسر میسازند. - تکنیک باریک کردن نوع (type narrowing) را میآموزی؛ همان چیزی که باعث میشود type checker بالاخره از سر راهت کنار برود.
- با
CallableوTypeAliasکار میکنی و توابعی که تابع میگیرند یا برمیگردانند را درست تایپ میکنی. - تایپهینت را به دنیای کلاسها میبری: اتریبیوتها، متدها و ارجاع کلاس به خودش.
TypeVarو کلاسهای ژنریک را یاد میگیری؛ همان ابزاری که کد قابلاستفادهٔ مجدد و انعطافپذیر میسازد.- با
LiteralوAnnotatedآشنا میشوی؛ ابزارهایی که در کتابخانههای مدرن مثل FastAPI و Pydantic مدام میبینی. - و در پایان با
Protocolبه سراغ duck typing ساختاریافته میروی؛ همان سطحی که کد را واقعاً تمیز و تستپذیر میکند.
این دوره برای چه کسانی ساخته شده است؟
- پایتونکارهایی که مقدمات را بلدند و میخواهند یک پله بالاتر بروند. اگر با متغیر، تابع و کلاس راحت هستی، این دوره دقیقاً همان قدم بعدی است.
- کسانی که میخواهند وارد FastAPI، Pydantic یا پروژههای بکاند مدرن شوند. بدون تایپهینت، آن دنیا برایت مبهم میماند؛ با تایپهینت، همهچیز ناگهان منطقی میشود.
- توسعهدهندههایی که تازه وارد یک تیم یا کدبیس بزرگ شدهاند و کدهایی میبینند پر از
->و[]که تا امروز جرئت نکردهاند بپرسند اینها یعنی چه. - کسانی که در حال آمادهشدن برای مصاحبهٔ شغلیاند و میخواهند در بخش کیفیت کد، حرفی برای گفتن داشته باشند.
- هر کسی که از باگهای احمقانهٔ نوع داده خسته شده است و میخواهد یک بار برای همیشه جلوی آنها را بگیرد.
روش تدریس
در این دوره خبری از تعریفهای خشک و ترجمهٔ مستندات نیست. هر فصل با یک مسئلهٔ واقعی شروع میشود: کدی که کار میکند اما مشکلی دارد. بعد میبینی که تایپهینت چطور دقیقاً همان مشکل را حل میکند. به این ترتیب هر ابزار جدید، نه بهعنوان یک قاعدهٔ حفظکردنی، بلکه بهعنوان جواب یک نیاز مشخص در ذهنت مینشیند.
ترتیب فصلها هم تصادفی نیست. از سادهترین شکل ممکن شروع میکنیم و هر فصل روی فصل قبل سوار میشود، تا جایی که مفاهیمی مثل ژنریک و پروتکل، که معمولاً ترسناک به نظر میرسند، وقتی به آنها میرسی کاملاً طبیعی و بدیهی باشند. زبان دوره فارسی و روان است، اما اصطلاحات فنی به شکل اصلی و استاندارد خودشان آورده میشوند تا در مواجهه با مستندات انگلیسی و کدهای واقعی غافلگیر نشوی.
بعد از این دوره چه چیزی در تو عوض میشود؟
- کدی مینویسی که خودش خودش را توضیح میدهد؛ بدون نیاز به کامنتهای طولانی که همیشه قدیمی میشوند.
- سورسکد کتابخانههای حرفهای پایتون را باز میکنی و میفهمی چه خبر است؛ نه اینکه از دیدن
Generic[T]صفحه را ببندی. - وارد پروژههای مدرن مثل FastAPI و Pydantic میشوی و همهچیز برایت آشناست.
- در کد ریویو، بهجای دفاع کردن از کدت، بابت کیفیتش تعریف میشنوی.
- و از همه مهمتر: از یک «کسی که پایتون بلد است» به یک «توسعهدهندهٔ پایتون» تبدیل میشوی. این تفاوت، دقیقاً همان چیزی است که کارفرما برایش هزینه میکند.
پرسشهای پرتکرار
آیا تایپهینت سرعت اجرای برنامه را کم میکند؟
نه. تایپهینت در زمان اجرا رفتار برنامه را تغییر نمیدهد؛ پایتون آنها را اجباری نمیکند. مخاطب اصلی تایپهینتها ابزارهایی مثل type checker و ادیتور تو هستند، و البته هر کسی که بعداً کدت را میخواند.
برای شروع این دوره باید چه چیزی بلد باشم؟
آشنایی با مقدمات پایتون کافی است: متغیر، تابع، لیست و دیکشنری. برای فصلهای پایانی، آشنایی اولیه با کلاسها کمک بزرگی میکند. اگر این بخش را لازم داری، پیشنهاد میکنیم قبلش سری به دورهٔ آموزش پایتون مقدماتی و دورهٔ برنامهنویسی شیءگرا در پایتون بزنی.
آیا باید کل کدهای قدیمیام را تایپهینت بزنم؟
لازم نیست. یکی از بهترین ویژگیهای سیستم تایپ پایتون این است که تدریجی است: میتوانی از همان تابعی شروع کنی که بیشترین دردسر را برایت درست کرده و بقیه را بعداً اضافه کنی. در دوره میبینی که این مسیر تدریجی در عمل چطور پیش میرود.
چقدر طول میکشد تا این دوره را تمام کنم؟
دوره یازده فصل دارد و هر فصل مستقل و کوتاه است. میتوانی روزی یک فصل جلو بروی و در کمتر از دو هفته کل مسیر را تمام کنی؛ یا اگر عجله داری، در یک آخر هفته آن را یکسره بخوانی. مهم این است که بعد از هر فصل، همان روز روی کد خودت امتحانش کنی.
همین حالا شروع کن
هر روزی که بدون تایپهینت کد مینویسی، داری بدهی فنی میسازی؛ بدهیای که خودت یا همتیمیات چند ماه بعد باید تسویهاش کند. خبر خوب این است که پرداختن این بدهی از همین امروز شروع میشود و اولین قدمش فقط یک کلیک فاصله دارد.
از فصل اول: چرا تایپهینت؟ شروع کن و ببین چطور کدهایت از همین هفته شفافتر، امنتر و حرفهایتر میشوند.
سرفصل دوره
- فصل اول: چرا تایپهینت؟
- فصل دوم: راهاندازی تایپهینت در VS Code
- فصل سوم: الفبای تایپهینت
- فصل چهارم: وقتی یک نوع کافی نیست
- فصل پنجم: باریک کردن نوع
- فصل ششم: Callable و TypeAlias
- فصل هفتم: تایپ در کلاسها
- فصل هشتم: TypeVar
- فصل نهم: Literal و Annotated
- فصل دهم: کلاسهای ژنریک
- فصل یازدهم: پروتکلها در پایتون
برای مطالعهٔ بیشتر میتوانی به مستندات رسمی ماژول typing در پایتون سر بزنی.