دربارهٔ این فصل
یادداشتِ همراه نوارتا حالا برایتان پیش آمده که وسط یک پروژه بزرگ گم شوید و ندانید فلان تابع یا تنظیمات دقیقا کجا تعریف شده است؟ وقتی ابعاد یک پروژه نرمافزاری به اندازه کل کدهای گوگل بزرگ میشود، ابزارهای معمولی دیگر جواب نمیدهند و پیدا کردن یک تکه کد ساده به چالشی بزرگ تبدیل میشود.
کتاب «مهندسی نرمافزار در گوگل» نوشته «تیتوس وینترز، تام مانشریک و هایروم رایت» در فصل هفدهم به سراغ ابزاری میرود که دقیقا برای حل همین مشکل طراحی شده است.
اولین چالش در مقیاسهای کلان، سرعت پاسخگویی و تاخیر در جستجوی کد (Code Search) است. وقتی هزاران توسعهدهنده روزانه میلیونها جستجو انجام میدهند، حتی یک ثانیه تاخیر اضافی میتواند زمان زیادی از کل تیم تلف کند. گوگل برای حل این مشکل، به جای روشهای کند قدیمی، از نمایهسازی indexing استفاده میکند که دادهها را از پیش پردازش میکند تا نتایج در کسری از ثانیه ظاهر شوند. اگر قرار بود هر بار جستجو به صورت خام و با دستورات ساده انجام شود، به هزاران پردازنده نیاز بود، اما با یک ساختار بهینه، زمان پاسخ به زیر دویست میلیثانیه میرسد.
چالش دوم این است که در کدهایی با ابعاد عظیم، نتایج جستجو پر از موارد مشابه میشوند و توسعهدهنده در میان هزاران فایل گم میشود. راهحل گوگل استفاده از رتبهبندی ranking بر اساس سیگنالهای مختلف است. این سیستم بررسی میکند که کدام فایلها بیشتر توسط مهندسان دیده شدهاند یا چقدر ارجاع و import دارند، تا در نهایت مرتبطترین نتیجه را در بالای فهرست نشان دهد. مثلا وقتی نام یک تابع را جستجو میکنید، تعریف اصلی آن خیلی بالاتر از یک استفاده تصادفی در یک نظر یا کامنت نمایش داده میشود.
چالش سوم این است که یک جستجوی خوب باید فراتر از تطابق ساده کلمات عمل کند و روابط معنایی بین کدها را درک کند. ابزاری به نام Kythe در اینجا وارد میدان میشود تا ارجاعات متقاطع cross-references را مدیریت کند. این فناوری به توسعهدهنده اجازه میدهد با یک کلیک ساده روی نام یک تابع، مستقیماً به محل تعریف آن بپرسته یا تمام جاهایی که از آن استفاده شده را ببیند، بدون اینکه نیاز باشد کل فایلها را دستی زیر و رو کند.
چالش چهارم مربوط به حفظ تاریخچه و دسترسی به نسخههای مختلف مخزن repository است. در پروژههای بزرگ، گاهی لازم است بدانیم یک کد چرا و چه زمانی تغییر کرده یا حتی فایلهای حذفشده را بررسی کنیم. سیستم جستجوی گوگل تاریخچه تغییرات را به صورت خطی نمایه میکند تا مهندسان بتوانند در وضعیتهای مختلف کدهای گذشته جستجو کنند و بفهمند چه کسی و در چه تاریخی تغییرات را اعمال کرده است.
پیشنهاد من به عنوان میزبان این است که اگر روی پروژههای بزرگ کار میکنید، به جای اتکا به ابزارهای محلی و کند، روی ایجاد یک زیرساخت متمرکز برای جستجو و مرور کد سرمایهگذاری کنید. این کار نه تنها سرعت توسعه را بالا میبرد، بلکه مانع از دوبارهکاری و سرگردانی تیم در میان فایلهای پیچیده میشود.
امیدوارم این بخش از شوگفتار برایتان مفید بوده باشد و بتوانید با ابزارهای بهتری در کدهایتان جستجو کنید.