سْیری از اسپاگتی: لینترها و فرمترها

Photo by Alice Pasqual on Unsplash
Photo by Alice Pasqual on Unsplash

مبتدی‌تر که بودم، فکر می‌کردم هر کسی مثل موسیقی، که هر کسی صدای خودش را پیدا می‌کند، باید سبک و سیاق خودش را پیدا کند که دیگران که کدهایش را دیدند بلافاصله متوجه شوند که این‌ها دست‌رنج چه کسی است.

این تفکر در زمان خودش برای من جواب می‌داد، خیلی اوقات کد‌های من دزدیده می‌شدند (بر خلاف لایسنس‌ها) و یا تغییراتی در آن داده می‌شد و به فروش می‌رفت. حتی عده‌ای با همین کارها الان بنز و BMW سوار می‌شوند. هنوز در خیلی از افزونه‌های وردپرس در حوزه‌ی پرداخت، امضاها و سبک کدنویسی خودم را می‌توانم بشناسم.

گذشته‌ها گذشت، الان کمتر مبتدی هستم، بیشتر وارد صنعت نرم‌افزار شده‌ام و بهتر درک کرده‌ام که چه‌طور این صنعت کار می‌کند و از من چه انتظاراتی دارد. امضاها و Code Style اختصاصی، جای خودشان را به چک، سفته و فیش بانکی واریز دستمزد داده‌اند، دزدهای سابق خودشان را با ماسک «منتور کسب‌و‌کار» بزک کرده‌اند و این بار از جماعتی که فکر می‌کنند «استارتاپ مثِ دیجی‌کالا میاریم بالا و یه شبه میلیاردر میشیم» پول می‌چاپند.

با رشد فضای استارتاپی، که در حال رقابت هستند که کدامشان زودتر آن «سرمایه‌گذار خفنه» که گویا دست‌به‌نقد، دمِ در معطل است که پولش را در یک استارتاپ دیگر دور بریزد، هنر برنامه‌نویسی هم مُرد. الان دیگر مهم نیست که چه‌قدر راه‌حل شما برای فلان مسئله زیباست، اگر آن‌تایم نرسد هیچ اهمیتی ندارد. هیچ اهمیتی ندارد که کدبیس کارایی لازم را ندارد، تنها چیزی که مهم است Estimate کمتر و Time Tracking کمتر است. مدیرها انتظار «کارمند نبودن و مشارکت» دارند، با همان دستمزد «کارمندبودن و سر در گریبان‌بودن». رویکرد Agile مهم‌تر از هنری‌بودن راه‌حل است؛ و جدیداً که مُد شده توی سر برنامه‌نویس بزنند که بدقول و بی‌مسئولیت هستند و اصلاً تمام مشکلات اقتصادی کشور از جانب برنامه‌نویس‌هاست (گویا هنوز برای این دسته از تهمت‌ها کنتور نصب نشده، هر کسی هم که اعتراض می‌کند که با یک «شوخی کردیم» دهانش رو می‌بندند).


ابزارها را بیاورید!

از آن‌جایی که مثل اینترنتمان، در فضای کسب‌و‌کار کشورمان هم Latency بالایی داریم، سال‌ها پیش از این‌که ما بدانیم اصلاً اینترنت چیست، برادران، خوهران و Non-binaryهای فرنگی در استارتاپ‌هایی کار می‌کردند که راندهای سرمایه‌گذاریشان به جای ۳۵۰۰ دلار (معادل ۵۰ میلیون خودمان) حدود ۳٫۵ میلیون دلار بود؛ دقیقاً درگیر همین مسائلی شدند که ما الان تازه داریم اثرات آن را حس می‌کنیم: زمان مهم‌تر است.

از همین رو، آمدند ابزارهایی را اختراع کردند که کارشان (و کارمان) را سریع‌تر کند، همین‌هایی که ما تازه شروع به شناخت و یادگیری آن‌ها کردیم. چندتا از این ابزارها مثل Container Orchestrator، مثل Linter، مثل Formatter. و همین سه چهار سال پیش رویکردی را ابداع کردند تحت‌عنوان DevOps؛ و از آن‌جایی که جنس چینی به ما می‌رسد، بعضاً می‌بینیم که شرکت‌ها به دنبال نیروی دو‌آپس! با حداقل ۱۰ سال سابقه می‌گردند.

در این نوشته، دوتا ابزار را معرفی می‌کنم که به نظرم آشنایی آن‌ها برای هر کسی که می‌خواهد وارد این صنعت بشود، از نان شب واجب‌تر است، تا اگر خدای‌ناکرده بدون این ابزارها و علم به آن‌ها، وارد شرکتی شد، به جای کد، اسپاگتی ایتالیایی تحویل ندهد.

این دو ابزار زیاد با هم اشتباه گرفته می‌شوند و اتفاقاً زیاد هم به جای هم استفاده می‌شوند (حداقل آن چیزی که من دیدم). پس توضیح مختصری از هر کدام می‌دهم:

لینتر (Linter)

لینتر کد شما را می‌خواند، مثل یک Code Reviewer باتجربه و آموزش‌دیده، حتی اگر لازم باشد کد شما را در یک محیط مجازی اجرا می‌کند و اشتباهات احتمالی که باعث کاهش کارایی یا خوانایی کد می‌شود را به شما تذکر می‌دهد؛ مثل اگر جایی از console.log استفاده کردید، به شما تذکر می‌دهد که ممکن است این لاگ، اطلاعات حساسی را به بیرون نشت دهد، یا جایی که می‌توانید از const به جای var/let استفاده کنید، یا از === به جای ==. اما لینتر جادویی نیست، در خطاهای منطقی کم می‌آورد، Business Logic برایش تعریف نشده است و در خیلی مواقع خودتان باید زحمت درست‌کردن خطاهایتان را بکشید. پس زیاد جای خوشحالی ندارد، اما استفاده‌نکردن از آن، جداً جای ناراحتی دارد.

لینتر هم‌چنین به اسامی دیگری مثل CodeSniffer (که نام ابزار معادل آن در PHP/Hack است) هم خوانده می‌شود.

فرمتر (Formatter)

فرمتر یا Prettier یا Beautifier اصلاً نمی‌فهمد کد شما چیست، برایش اهمیتی ندارد که === کارایی بهتری دارد یا ==، فرمترها فقط به زیبایی کد شما فکر می‌کنند. کد شما را جلویشان می‌گذراند، نازیبایی‌هایش را پیدا می‌کنند و در بعضی موارد هم، خودشان ترتیب زیباکردن کدتان را می‌دهند.

اهل Indent گذاشتن نیستید؟ بین شما و مدیرتان اختلاف وجود دارد که Tab بهتر است یا Space؟ بین همکارانتان اختلاف است که سایز Indentها باید ۲ باشد یا ۴؟ کارآموز برای جلب‌توجه در vim کد می‌زند؟ مشکلی نیست. فرمترها در این اختلاف سلیقه‌های جزئی به داد تیم‌های فنی می‌رسند: هر کسی هر جور که می‌خواهد کد بزند، هنگام کامیت یک دور Formatter را اجرا کند و تمام.

این روزها حتی پروژه‌های بزرگ‌تری مثل WordPress هم از Formatterها استفاده می‌کنند تا سبک و سیاق کدزدن در میان این انبوه مشارکت‌کننده‌ها حفظ شود و مثلاً یک فایل با Indent نباشد و فایل دیگر با Tab 6 باشد.


این نوشته، خلاصه‌ای بود روی دو ابزاری که به عقیده‌ی من حیاتی‌تر نان شب در شرکت‌های نرم‌افزاری هستند. منابع و رفرنس برای راه‌اندازی این فایل‌ها فراوان هستند. راه‌اندازی آن‌ها سخت هم نیست، کمی همت می‌خواهد و شجاعت. دوران امضاکردن کدها و سبک اختصاصی به پایان رسیده، دوران «اسپاگتی می‌زنم تا نتونن اخراجم کنن» هم تمام شده: همین فرمترها در عرض چند ثانیه اسپاگتی را تبدیل به هلو می‌کنند؛ دوران «این باگ لعنتی...» هم تمام شد.

لینتر استفاده کنید دیگر.