Clean Code in Python
این کتاب برای تمامی دستاندرکاران مهندسی نرمافزار که به طراحی نرمافزار علاقهمندند یا میخواهند دانش پایتون خود را گسترش دهند، مناسب است. فرض بر این است که خواننده با اصول طراحی نرمافزار شیگرا آشناست و تجربه کدنویسی دارد. این کتاب برای سرپرستان تیمها، معماران نرمافزار و مهندسان ارشد نرمافزاری جذابیت دارد که میخواهند تکنیکهای خوب کدنویسی در پایتون را بیاموزند تا پروژههایی را از صفر ایجاد کنند یا بر روی سیستمهای قدیمی (Legacy) کار کنند تا هزینهها را کاهش داده و کارایی را بهبود بخشند.
این کتاب به گونهای سازماندهی شده که محتوای آن به ترتیب افزایش پیچیدگی قرار دارد. فصلهای اول به مبانی پایتون میپردازند که راهی خوب برای یادگیری اصطلاحات اصلی، توابع و ابزارهای موجود در زبان است. هدف فقط حل برخی مشکلات با پایتون نیست، بلکه انجام این کار به روشی اصیل (Idiomatic) است. برنامهنویسان باتجربه نیز از مباحث این کتاب بهره خواهند برد، زیرا برخی بخشها به موضوعات پیشرفته در پایتون مانند دکوراتورها، توصیفگرها (Descriptors) و مقدمهای بر برنامهنویسی ناهمگام میپردازند. این کتاب به خواننده کمک میکند پایتون را عمیقتر بشناسد، زیرا برخی موارد از درونمایه (internals) خود زبان تحلیل میشوند. دانشمندانی که از پایتون برای پردازش داده استفاده میکنند نیز میتوانند از محتوای این کتاب بهره ببرند و به همین منظور، بخشهای متعددی از کتاب به راهاندازی پروژهها از صفر، از نظر ابزارها، پیکربندی محیطها و شیوههای خوب برای انتشار نرمافزار اختصاص یافته است. ارزش تاکید بر کلمه «پیشگان» (Practitioners) در اولین جمله این بخش است. این کتاب رویکردی عملگرایانه دارد. مثالها محدود به مواردی است که مطالعه موردی نیاز دارد، اما همچنین در نظر است تا با زمینه یک پروژه نرمافزاری واقعی شباهت داشته باشد. این یک کتاب آکادمیک نیست و از این رو، تعاریف، نظرات و توصیههای ارائه شده باید با احتیاط مورد استفاده قرار گیرند. از خواننده انتظار میرود که این توصیهها را به جای دیدگاهی جزماندیشانه، به صورت انتقادی و عملگرایانه بررسی کند. در نهایت، عملی بودن بر خلوص مقدم است.
این کتاب چه موضوعاتی را پوشش میدهد؟
فصل ۱، مقدمه، فرمتبندی کد و ابزارها: مقدمهای بر اصلیترین ابزارهایی است که خواننده برای راهاندازی محیط توسعه در پایتون به آنها نیاز دارد. ما مباحثی را پوشش میدهیم که یک توسعهدهنده پایتون توصیه میشود برای شروع کار موثر با زبان بداند. این فصل همچنین شامل برخی راهنماییها برای حفظ کد خوانا در پروژه، مانند ابزارهای تحلیل ایستا، مستندسازی، بررسی نوع و فرمتبندی کد است. داشتن درک مشترک از استانداردهای کدنویسی امر خوبی است، اما تکیه صرف بر نیتهای خوب مقیاسپذیر نیست. به همین دلیل، این فصل با بحث در مورد ابزارهایی برای کار موثرتر به پایان میرسد.
فصل ۲، کد پایتونیک (Pythonic Code): به اولین اصطلاحات در پایتون میپردازد که در فصلهای بعدی به استفاده از آنها ادامه خواهیم داد. ما ویژگیهای خاص پایتون و نحوه استفاده درست از آنها را پوشش میدهیم و در این فصل، شروع به ساختن دانش حول ایده اینکه کد پایتونیک در کل کیفیت بسیار بالاتری دارد، میکنیم.
فصل ۳، ویژگیهای عمومی کد خوب: اصول کلی مهندسی نرمافزار را با تمرکز بر نوشتن کد قابلنگهداری بیشتر مرور میکند. با دانش به دست آمده از فصل قبل، نگاهی به اصول کلی طراحی تمیز (Clean Design) میاندازیم و نحوه پیادهسازی آنها در پایتون را بررسی میکنیم.
فصل ۴، اصول SOLID: مجموعهای از اصول طراحی برای طراحی نرمافزار شیگرا را پوشش میدهد. این مخفف بخشی از زبان یا اصطلاحات مهندسی نرمافزار است و ما میبینیم که چگونه هر کدام را میتوان در پایتون اعمال کرد. به طور خاص، خواننده یاد میگیرد که تزریق وابستگی (Dependency Injection) چگونه کد را قابلنگهداریتر میکند، مفهومی که در فصلهای بعدی بسیار مفید خواهد بود.
فصل ۵، استفاده از دکوراتورها برای بهبود کد ما: به یکی از ویژگیهای عالی پایتون میپردازد. پس از درک نحوه ایجاد دکوراتور (برای توابع و کلاسها)، آنها را برای استفاده مجدد از کد، جداسازی مسئولیتها و ایجاد توابع ریزدانهتر به کار میگیریم. نکته جالب دیگر در این فصل این است که چگونه میتوان از دکوراتورها برای سادهسازی امضاهای تابع پیچیده و تکراری به نفع خود استفاده کرد.
فصل ۶، دریافت بیشتر از اشیاء با توصیفگرها (Descriptors): توصیفگرها در پایتون را بررسی میکند که طراحی شیگرا را به سطح جدیدی میبرند. در حالی که این ویژگی بیشتر مربوط به فریمورکها و ابزارهاست، میبینیم که چگونه میتوان با توصیفگرها خوانایی کد خود را بهبود بخشیده و کد را مجدداً استفاده کرد. محتوای بازبینی شده در این فصل باعث میشود خواننده به سطح بالاتری از درک پایتون دست یابد.
فصل ۷، مولدها، تکرارکنندهها و برنامهنویسی ناهمگام: ابتدا نشان میدهد که مولدها (Generators) ویژگی فوقالعادهای از پایتون هستند. این واقعیت که تکرار (Iteration) یک جزء اصلی پایتون است، میتواند ما را به این فکر بیندازد که منجر به یک مدل برنامهنویسی جدید میشود. با استفاده از مولدها و تکرارکنندهها به طور کلی، میتوانیم به روش دیگری درباره نحوه نوشتن برنامههای خود فکر کنیم. با درسهای آموخته شده از مولدها، فراتر رفته و در مورد روالهای همروند (Coroutines) در پایتون و مبانی برنامهنویسی ناهمگام یاد میگیریم. این فصل با توضیح نحو جدید (و متدهای جادویی جدید!) برای برنامهنویسی ناهمگام و تکرار ناهمگام به پایان میرسد.
فصل ۸، تست واحد و بازسازی (Unit Testing and Refactoring): اهمیت تستهای واحد در هر پایگاه کدی که ادعای قابلنگهداری بودن را دارد، بحث میکند. ما بازسازی را به عنوان یک پیشنیاز برای تکامل و حفظ پایگاه کد بررسی میکنیم و اینکه تستهای واحد چقدر برای این امر حیاتی هستند. تمام این موارد با پشتیبانی ابزارهای مناسب (عمدتاً ماژولهای unittest و pytest) انجام میشود. در نهایت، یاد میگیریم که راز تست خوب نه در خود تستها، بلکه در داشتن کد قابلتست نهفته است.
فصل ۹، الگوهای طراحی رایج: نحوه پیادهسازی رایجترین الگوهای طراحی در پایتون را مرور میکند، نه از دیدگاه حل یک مسئله، بلکه با بررسی اینکه چگونه با ارائه راهحلی بهتر و قابلنگهداریتر مشکلات را حل میکنند. این فصل به ویژگیهای خاص پایتون که باعث شده برخی از الگوهای طراحی نامرئی شوند اشاره میکند و رویکردی عملگرایانه برای پیادهسازی برخی از آنها دارد. ما الگوهای دیگر (نه چندان «متعارف») که مخصوص پایتون هستند را نیز بحث میکنیم.
فصل ۱۰، معماری تمیز (Clean Architecture): بر ایده تمرکز دارد که کد تمیز پایه معماری خوب است. تمام جزئیاتی که در فصل اول ذکر کردیم و هر چیز دیگری که در طول مسیر بازبینی شد، در کل طراحی زمانی که سیستم مستقر میشود، نقش حیاتی خواهند داشت.