دربارهٔ این فصل
یادداشتِ همراه نوارتا حالا به این فکر کردهاید که چرا در بسیاری از شرکتهای بزرگ، توسعهدهندگان از ابزارهای ساخت کلافهاند و مدام باید منتظر تمامشدن پردازشها بمانند؟ آیا واقعاً میتوان سیستمی داشت که همزمان با رشد تیم، هم سریع باشد و هم جلوی خطاهای انسانی را بگیرد؟
در کتاب «مهندسی نرمافزار در گوگل» نوشتهٔ «تیتوس وینترز، تام مانشریک و هایروم رایت»، فصل هجدهم به موضوع سیستم ساخت (Build System) و فلسفهٔ پشت آن میپردازد و نشان میدهد چطور گوگل توانسته با بازنگری در این ابزارها، چالش مقیاسپذیری را حل کند.
بسیاری از برنامهنویسان در شروع کار یاد میگیرند که کامپایلرها را مستقیم از طریق خط فرمان صدا بزنند یا برای کارهای پیچیدهتر، اسکریپتهای پوستهای بنویسند. اما با بزرگتر شدن پروژه و افزایش تعداد توسعهدهندگان، این اسکریپتها کند میشود، مدیریت وابستگیها از دست میرود و تفاوتهای کوچک میان سیستم افراد مختلف باعث بروز خطاهای عجیب میگردد.
برای حل این مشکل، صنعت نرمافزار به سراغ سیستم ساخت (Build System) رفت که ابزاری برای تبدیل کد منبع به خروجیهای قابل اجراست. سیستمهای سنتی مبتنی بر وظیفه (Task-based Build System) به برنامهنویسان اجازه میدهند هر اسکریپتی را به عنوان یک وظیفه تعریف کنند؛ اما از آنجا که سیستم نمیداند درون این اسکریپتها چه میگذرد، نمیتواند پردازشها را به صورت موازی اجرا کند یا نتایج را به درستی ذخیره و بازاستفاده نماید.
گوگل برای غلبه بر این محدودیت، رویکرد متفاوتی را انتخاب کرد و به سمت سیستم ساخت مبتنی بر فرآورده (Artifact-based Build System) رفت. در این روش که نمونهٔ متنباز آن Bazel نام دارد، به جای نوشتن اسکریپتهای امری، فایلهای پیکربندی به صورت توصیفی نوشته میشوند تا سیستم دقیقاً بداند چه فرآوردههایی باید تولید شوند؛ در نتیجه، ابزار ساخت میتواند کنترل کامل زمانبندی را در دست بگیرد.
وقتی سیستم ساخت دقیقاً بداند هر ابزار چه ورودی و خروجی دارد، امکانات قدرتمندی مثل موازیسازی و ایجاد کش توزیعشده فراهم میشود. علاوه بر این، با استفاده از روشهایی مانند ایزولهسازی فایلها و اجبار به مدیریت دستی و صریح وابستگیها، جلوی بسیاری از خطاهای پنهان و ناسازگاریها در مخزنهای بزرگ گرفته میشود.
پیشنهاد من به عنوان میزبان این پادکست این است که حتی اگر پروژهٔ کوچکی دارید، از همین امروز ساختار وابستگیهای پروژهتان را دقیق و مستند تعریف کنید تا در آینده با رشد تیم دچار دردسرهای بازبینی و خطایابی نشوید.
امیدوارم این روایت از نگاه گوگل به سیستمهای ساخت برای شما مفید بوده باشد. تا پادکست بعدی، روزگارتان خوش.