کتاب Go by Example: Programmer’s guide to idiomatic and testable code (Go از طریق مثال: راهنمای برنامهنویس برای کدهای اصیل و قابل تست) یک راهنمای عملی برای یادگیری زبان برنامهنویسی گو (Go) است که به جای تمرکز بر تئوری، مفاهیم را از طریق مثالهای کد قابل اجرا و ساده آموزش میدهد.
کتاب Go by Example با رویکرد “یادگیری از طریق مثال”، به توسعهدهندگان کمک میکند تا با الگوهای رایج و شیوههای درست کدنویسی در گو (Idiomatic Go) آشنا شوند و کدهایی بنویسند که هم قابل فهم باشند و هم به راحتی قابل تست. این کتاب برای برنامهنویسانی که قصد دارند به سرعت با این زبان آشنا شوند و کدهای با کیفیت بنویسند، بسیار مفید است.
در ادامه مقدمهای از کتاب Go by Example را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Go by Example:
سادگی نهایتِ پیچیدگی است. – لئوناردو داوینچی
من فکر میکردم گو (Go) آسان است، اما داستان متفاوت بود؛ گو ساده بود. در سال ۲۰۱۲، من نیاز داشتم یک برنامه شبکه توزیعشده طراحی کنم. این برنامه باید انواع مختلفی از دادهها را از هزاران منبع خارجی دریافت و تفسیر میکرد و نتایج را به صورت لحظهای برای سرویسهای دیگر میفرستاد. به دلیل اینکه با منابع دادهای که دائماً بهروز میشدند کار میکردم و سرویسهای دیگر به نتایج بهموقع و دقیق وابسته بودند، برنامه باید سریع اجرا میشد.
من چیزهای خوبی درباره گو شنیده بودم، مثل سهولت استفاده، ایمنی نوعی قوی (strong type safety) و پشتیبانی عالی از همروندی (concurrency). بنابراین، تیم من و من شروع به نوشتن برنامه خود به زبان گو کردیم. تیم من متشکل از برنامهنویسان با تجربه بود، اما این اولین تجربه ما با گو بود. ظرف یک ماه یک نمونه اولیه (prototype) آماده کردیم. در ابتدا، همه در شرکت از کارایی برنامه راضی بودند، اما پس از مدت کوتاهی، همه چیز شروع به فروپاشی کرد.
ما به گو طوری کد میزدیم که انگار یک زبان شیءگرا بود که از قبل میشناختیم. به جای اینکه روی وظیفه اصلی تمرکز کنیم، زمان زیادی را صرف طراحی برنامهمان با انتزاعهای بیپایان کردیم. مشکلات وابستگی حلقوی (Circular dependency) همهجا دیده میشد و خواندن و کار کردن با کدهایمان دشوار شد. در نهایت، مجبور شدیم بخش زیادی از آن را دوباره بنویسیم.
به جای صرف زمان بیشتر بر روی انتزاعهای زودهنگام، تصمیم گرفتیم عادتهای کدنویسی از زبانهای دیگر را کنار بگذاریم و بر روی انجام وظیفه اصلی تمرکز کنیم. نتایج امیدوارکننده بود. اضافه کردن ویژگیهای جدید ساده شد و کدها بدون نیاز به توضیح، قابل فهم بودند.
وقتی تصمیم گرفتیم یک بار دیگر شانس خود را با برنامهمان امتحان کنیم، نه تنها یک زبان جدید را پذیرفتیم، بلکه یک فلسفه را نیز در آغوش گرفتیم که برای سادگی، صراحت و وضوح ارزش قائل بود. مجموعه ویژگیهای محدود و هدفمند گو ما را به طور طبیعی به سمت راهحلهای ساده و دور از طراحیهای بیش از حد مهندسیشده و فرضی سوق داد. موفقیت ما یک معجزه یک شبه نبود؛ بلکه از استفاده از ویژگیهای گو به همان شیوهای که طراحی شده بودند، به دست آمد.
گو یک زبان عملگرایانه (pragmatic) است. این زبان ما را به سمت حل سادهترین راهحلهای ممکن برای مشکلات امروزی سوق میدهد. این رویکرد به ما اجازه میدهد کدی تولید کنیم که میتواند به طور قابل اعتمادی تکامل یابد و با نیازهای متغیر سازگار شود، بدون اینکه بیش از حد پیچیده یا دشوار برای نگهداری شود.
با بیش از یک دهه تجربه در گو، من بخش زیادی از این خرد را در کتاب Go by Example گنجاندهام. سه سال و چندین بار بازنویسی طول کشید تا واقعاً از آن راضی شوم. شما در حال خواندن جدیدترین، خالصشدهترین و کاملترین نسخه هستید. امیدوارم این کتاب شما را در پذیرش فلسفه گو راهنمایی کند و به شما کمک کند ذهنیت صحیح برای تفکر به شیوه ایدئومیک (Idiomatic) در گو را پرورش دهید.
در اینجا ترجمه بخشهای معرفی کتاب Go by Example آمده است:
درباره کتاب Go by Example
زبانی که بر طرز تفکر شما در مورد برنامهنویسی تأثیر نگذارد، ارزش یادگیری ندارد.
—آلن پرلیس، کلمات قصار در مورد برنامهنویسی
بسیاری از برنامهنویسان در ابتدا گو را سرراست مییابند، اما به زودی کشف میکنند که درک فلسفه منحصربهفرد آن، یعنی تأکید بر سادگی و عملگرایی، سفری عمیقتر است. کتاب Go by Example راهنمای عملی و کاربردی شماست؛ نه فقط برای نوشتن کد گو، بلکه برای تفکر به شیوه گو.
کتاب Go by Example مجموعهای از تکهکدهای ساده و بیربط نیست، بلکه شما را در پروژههای واقعی غرق میکند، از ابزارهای خط فرمان و کلاینتهای همروند گرفته تا سرویسها. با این مثالها، شما نه تنها نوشتن گو را یاد میگیرید، بلکه فلسفهها و اصول اصیل آن را نیز درک میکنید:
- فراتر از نحو (syntax) رفته و ذهنیت گو را بپذیرید. تمرکز ما بر نوشتن کدی است که ساده، سرراست، عملگرایانه و برای سایر توسعهدهندگان گو به راحتی قابل درک باشد.
- کشف کنید که چگونه اصول و ابزارهای گو به ما کمک میکنند کدی بنویسیم که از ابتدا مستحکم و به راحتی قابل تست باشد و در نتیجه نرمافزاری قابل اعتمادتر و قابل نگهداریتر ایجاد شود.
- بستهها را به طور مؤثر ساختاربندی کنید، خطاها را به طور قدرتمند مدیریت کنید، برای همروندی ساختار ایجاد کنید و انواع (types) را از بلوکهای ساختاری ساده و خوشتعریف برای انعطافپذیری ترکیب کنید.
- ببینید با مجموعه بستههای غنی و داخلی گو چقدر میتوانید کار انجام دهید، و به این ترتیب تمایل به راهحلهای استاندارد را قبل از روی آوردن به وابستگیهای خارجی (external dependencies) پرورش دهید.
هر فصل کتاب Go by Example تمرینهای عملی و فعال را تشویق میکند، شما را در مسیر ساخت برنامههای کاربردی راهنمایی میکند و در عین حال بینشهای عملی، بهترین روشها و اشتباهات رایج را برای اجتناب از آنها ارائه میدهد. هدف کتاب Go by Example مجهز کردن شما به ذهنیت گو است، که برای سادگی، صراحت، ترکیبپذیری (composition) و قابلیت تستپذیری ارزش قائل است، تا بتوانید برنامههای گو باکیفیت را با اطمینان و مهارت بسازید.
چه کسی باید کتاب Go by Example را بخواند
انسانها به تغییر حساسیت دارند. دوست دارند بگویند: “ما همیشه این کار را به همین شیوه انجام دادهایم.” من سعی میکنم با این موضوع بجنگم. به همین دلیل یک ساعت روی دیوارم دارم که برعکس کار میکند.
— گریس هاپر، خبرنامه OCLC، مارس/آوریل ۱۹۸۷، شماره ۱۶۷
کتاب Go by Example برای برنامهنویسان باتجربهای است که آمادهاند اصول نوشتن کد اصیل، قابل نگهداری، کارآمد و قابل تست را با یادگیری تفکر متفاوت در مورد برنامهنویسی، به خوبی یاد بگیرند. اگر آمادهاید فراتر از نحو بروید و فلسفه منحصربهفرد گو را درک کنید، این کتاب برای شماست. این کتاب به ویژه برای موارد زیر مناسب است:
- توسعهدهندگان باتجربه: اگر پیشزمینه برنامهنویسی قوی در زبانهایی مانند جاوا، ++C، پایتون و جاوااسکریپت دارید، این کتاب به شما کمک میکند به طور مؤثر به گو مهاجرت کنید. این کتاب بر روی کنار گذاشتن عادتهایی تمرکز دارد که با طراحی گو همخوانی ندارند و به سرعت شما را در نوشتن گو به شیوه درست، بدون سرخوردگیهای رایج، به یک فرد پربازده تبدیل میکند.
- توسعهدهندگان فعلی گو که به دنبال بینشهای عمیقتر هستند: اگر با اصول اولیه گو آشنا هستید اما میخواهید مهارتهای خود را ارتقا دهید، کتاب Go by Example بینشهای عمیقتری در مورد الگوهای پیشرفته برای همروندی، طراحی API، ساختاربندی بسته و تست اصیل ارائه میدهد و به شما امکان میدهد سیستمهای پیچیدهتر، مستحکمتر و قابل نگهداریتر بسازید.
تسلط قوی بر مبانی برنامهنویسی، از جمله مفاهیم شیءگرا (حتی برای قدردانی از جایگزینهای ترکیبی گو)، برنامهنویسی تابعی و اصول همروندی، به شما امکان میدهد بیشترین بهره را از این کتاب ببرید. در اینجا راهنمایی عملی برای پرورش ذهنیت صحیح جهت نوشتن کدهای گو که اصیل، مستحکم و قابل تست باشند، پیدا خواهید کرد.
سازمانبندی کتاب Go by Example: یک نقشهراه
چیزهایی که باید قبل از انجام آنها یاد بگیریم، با انجام دادنشان یاد میگیریم.
— ارسطو
کتاب Go by Example برای خوانده شدن از ابتدا تا انتها طراحی شده است. فقط آن را مرور نکنید؛ ایدهآل این است که جلوی کامپیوتر خود بنشینید و فعالانه هر قطعه کد را دنبال کنید تا بیشترین بهره را از کتاب ببرید. هر فصل شامل تمرینهایی برای تثبیت دانش شماست، پس حتماً آنها را انجام دهید.
ضمائم (appendices) کمی متفاوت هستند؛ آنها را بر اساس دانش خود در مورد گو بخوانید. اگر در گو تازهکار هستید، با ضمیمه A شروع کنید، جایی که یاد میگیرید چگونه ماژولهای گو خود را مقداردهی اولیه کنید، و سپس از ضمیمه B تا E ادامه دهید. ضمائم مبانی زبان را پوشش میدهند تا شما به سرعت شروع کنید یا به عنوان یک مرور عمل کنند. علاوه بر مبانی، آنها شیوههای اصیل استفاده از ساختارهای اصلی زبان را توضیح میدهند.
کتاب Go by Example از ۱۰ فصل تشکیل شده است:
- فصل ۱، “شروع به کار”: توضیح میدهد که چرا کد اصیل و قابل تست اهمیت دارد و به طور خلاصه فلسفهها، اصول و ویژگیهای متمایز گو را معرفی میکند.
- فصل ۲، “الگوهای اصیل و تستینگ”: برخی از قراردادها را توضیح میدهد و به تکنیکهای تست اصیل میپردازد، و ذهنیت لازم برای فصلهای آینده را ایجاد میکند.
- فصل ۳، “پوشش تست و بهینهسازی”: ما را به چالش میکشد که فراتر از صرف پوشش تست فکر کنیم و نشان میدهد که چگونه بنچمارکها (benchmarks) و پروفایلسازی ناکارآمدیها را آشکار میکنند.
- فصل ۴، “رابطهای خط فرمان”: در مورد ساخت ابزارهای CLI قابل تست و نگهداری بحث میکند و تجزیه آرگومان، مدیریت پرچمها و اعتبارسنجی ورودی را پوشش میدهد.
- فصل ۵، “تزریق وابستگی”: تکنیکهایی را برای جداسازی کد از وابستگیهای خارجی معرفی میکند تا تست کردن را سادهتر و قابلیت نگهداری را افزایش دهد.
- فصل ۶، “APIهای همگام برای همروندی”: تکرارکنندههای فشاری (push iterators) و خطوط لوله همروند را معرفی میکند و نشان میدهد چگونه کد همروند را ساختاربندی کنیم.
- فصل ۷، “برنامههای پاسخگو و کارآمد”: پایداری برنامههای همروند را از طریق انتشار لغو (cancellation propagation) و مدیریت کارآمد ورودی/خروجی بررسی میکند.
- فصل ۸، “ساختاربندی بستهها و سرویسها”: نحوه سازماندهی بستهها برای از بین بردن پیچیدگی و چرخههای ایمپورت را بررسی میکند و ساخت یک سرویس HTTP را معرفی میکند.
- فصل ۹، “الگوهای ترکیبپذیری”: نشان میدهد که چگونه الگوهای ترکیبپذیری عملکرد ماژولار ایجاد میکنند و مواردی مانند میانافزارها، بستهبندی رابطها، انتشار مقادیر context و بررسی نوع برای استخراج ویژگیهای اختیاری و غیره را پوشش میدهد.
- فصل ۱۰، “ذخیرهسازی چندشکل”: کار با پایگاههای داده SQL و استفاده از رابطها برای سادهسازی برنامهها را پوشش میدهد، که آنها را برای تست و گسترش آسانتر میکند. همچنین الگوی درایور (driver pattern) را توضیح میدهد که از انواع بتن (concrete types) به عنوان API برای چندشکلی (polymorphism) استفاده میکند.
کتاب Go by Example در ضمائم خود یک دوره فشرده گو نیز دارد:
- ضمیمه A، “ماژولها و بستهها”: نحوه مقداردهی اولیه ماژولهای گو، اعلام بستههای قابل ایمپورت و غیرقابل ایمپورت، و اجرای برنامههای قابل اجرا را توضیح میدهد.
- ضمیمه B، “متغیرها و اشارهگرها”: متغیرها، مقادیر صفر (zero values)، اشارهگرها و مکانیسمهای «گذراندن از طریق مقدار» (pass-by-value) در گو را معرفی میکند.
- ضمیمه C، “آرایهها، اسلایسها و نقشهها”: انواع مجموعههای ضروری در گو را پوشش میدهد.
- ضمیمه D، “برنامهنویسی شیءگرا”: structها، متدها، گیرندههای متد (method receivers)، رابطها و راههای اصیل استفاده از این ویژگیها را توضیح میدهد.
- ضمیمه E، “برنامهنویسی همروند”: مفاهیم بنیادی همروندی، از جمله goroutineها، channelها، مالتیپلکسینگ (multiplexing) و سمافورها را توضیح میدهد.
- ضمیمه F، “توابع خودارجاع”: یک API جایگزین برای گزینهها ارائه میدهد.
-
ضمیمه G، “کامپایل متقاطع برنامههای گو”: نحوه کامپایل متقاطع کد گو برای پلتفرمها و معماریهای مختلف را توضیح میدهد.
سرفصلهای کتاب Go by Example:
- Go by Example Programmer’s guide to idiomatic and testable code
- copyright
- contents
- dedication
- preface
- acknowledgments
- about this book
- about the author
- about the cover illustration
- 1 Getting started
- 2 Idioms and testing
- 3 Test coverage and optimization
- 4 Command-line interfaces
- 5 Dependency injection
- 6 Synchronous APIs for concurrency
- 7 Responsive and efficient programs
- 8 Structuring packages and services
- 9 Composition patterns
- 10 Polymorphic storage
- appendix A Modules and packages
- appendix B Variables and pointers
- appendix C Arrays, slices, and maps
- appendix D Object-oriented programming
- appendix E Concurrent programming
- appendix F Self-referential options
- appendix G Cross-compiling Go programs
جهت دانلود کتاب Go by Example میتوانید پس از پرداخت، دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.