چرا برنامهنویسهای ارشد، کدهای احمقانه مینویسند و چگونه یک برنامهنویس تازهکار را از یک کیلومتری شناسایی کنیم؟
“برایان گوتز”، یکی از بزرگان دنیای جاواست و یکی از کارهای مهمش همکاری در تالیف کتاب “Java Concurrency in Practice” بودهاست.
همواره این نقلقول از وی یکی از نقلقولهای محبوب من بوده است. این نقل قول قسمتی از مصاحبهای است که اوراکل با موضوع «کد احمقانه بنویسید» منتشر کرد. از گوتز پرسیدهشد که چطور کدی بنویسیم که خوب کار کند و جواب او این است:
بعضی مواقع، یکی از راههای نوشتن کد سریع در برنامههای جاوایی، این است که کد احمقانه بنویسید. کدی که سرراست و تمیز باشد و از واضحترین اصول شیگرایی پیروی کند.
ادامهی این متن صَرفِ تشریح این موضوع شده که چرا تلاش برای بهینهسازی کد و تلاش برای هوشمندانه کد زدن، یک اشتباه رایچ برنامهنویسی است. در واقع یک اشتباهِ مخصوصِ تازهکارها.
کدهای یک برنامهنویس ارشد
اگر شما هم مثل من، روزی یک برنامهنویس تازهکار بودید، ممکن است اولین تجربهتان از نگاه کردن به کُدِ یک برنامهنویس ارشد را به خاطر داشته باشید که با خودتان گفتهاید: «من هم میتوانم این کد را بنویسم، پس چرا من ارشد نیستم؟»
با این وجود من برای مدت زیادی تلاش کردم کدی مثل آن بنویسم و خب، موفق نشدم.
رازی که در کد برنامهنویس ارشد وجود داشت این نبود که من آن را نمیفهمیدم، بلکه برعکس، من به سادگی آن را متوجه میشدم. کد از پایه احمقانه بود. به نظرم میرسید که باید کد بیشتری وجود داشته باشد. «بقیهی کد کجاست؟» من درست خاطرم هست که فکر میکردم که «چطوری این کدِ کم همهی آن کار را انجام میدهد؟»
به مرور که با اصول کدنویسی مثل «تو قرار نیست بهش نیاز پیدا کنی» (YAGNI)، اصل تک وظیفگی، اصل خودت را تکرار نکن (DRY)، اصل یک مرحله انتزاع (SLA)، اصل وابستگی کم (low coupling) و غیره آشنا شدم، به همان ترتیب هم تبدیل به یک برنامهنویس ارشد شدم.
مهمترین درسی که گرفتم این است که نوشتن کد احمقانه واقعا سخت است ولی ارزشش را دارد.
چگونه یک برنامهنویس تازهکار را از یک کیلومتری شناسایی کنیم؟
“کنت بِک” در کتاب “Refactoring: Improving the Design of Existing Code” میگوید:
هر احمقی میتواند کدی بنویسد که کامپیوتر بفهمد. برنامهنویس خوب کدی مینویسد که انسانها بفهمند.
همیشه میشود اینطوری یک برنامهنویس تازهکار را شناسایی کرد: طولِ کد، پر است از تکخطیهای هوشمندانه، انتزائیسازیهای ناشفاف و یا استفاده افراطی از قابلیتهای زبان. به نظر من که آخری رایجتر است.
مثل این است که کُد تلاش دارد بگوید: “به من نگاه کنید! برنامهنویسِ من واقعا زبان را میشناسد من از default interface thread-local JavaBean copy constructors with custom generic unchecked excpetions and cross-functional securityhardened JAXB Lombok code generation استفاده میکنم!”
درسته! حرفهای من به نظر بیمعنی میاد چون «بیمعنی» دقیقا چیزی است که کد به آن تبدیل میشود وقتی دست کسی باشد که به جای توجه به دید انسانی، فقط به طرف کامپیوتری چیزها فکر میکند.
کد، هم درباره «ارتباط با انسانهای دیگر است» و هم «دادن دستورات به یک کامپیوتر». ولی امروزه بیشتر درباره ارتباط با انسانهاست تا دومی. کامپایلرهای امروز مراقب ترجمه چیزی که برنامهنویس مینویسد به زبان ماشین هستند.
بعضی اوقات این ترجمه به زبان ماشین چندین مرحله دارد، مثلا برنامهای که به زبان جاوا نوشته شده، ابتدا به بایتکد کامپایل میشود سپس این بایتکد توسط JVM در زمان اجرا خوانده میشود و درنهایت به صفر و یک تبدیل میشود.
ولی کد، زبان انسانهاست. کد باید در مورد شخص، چرایی، چیستی، زمان و مکانِ انجام یک وظیفه بین انسانها ارتباط برقرار کند. کد باید طوری باشد که پنج سال بعد، زمانی که شرکت یک تیم جدید را برای کار بر روی این کد به کار گذاشت که تاکنون این کد را ندیدهاند، بتوانند آن را به راحتی بهبود دهند و یا باگی را اصلاح کنند.
بله! نوشتن کد احمقانه سخت است. من احساس میکنم هرچه زمان بیشتری میگذرد بیشتر به آن مسلط میشوم. وقتی در code reviewها روی کدهایم کامنتی مثل «کد تمیز!» دریافت میکنم حس خرسندی میکنم. من میدانم که بهترین کاری که برای تیمم و نگهدارندگان بعدی کد میتوانم انجام دهم، نوشتن کدهای احمقانه است.
شما را با یک جمله از «دیو کارهارت» تنها میگذارم:
همیشه طوری کد بزنید که انگار کسی که کار نگهداری یا تست کد شما را انجام میدهد، یک بیمار روانی خشن است که خانه شما را بلد است!
منبع: hackernoon
با ما همراه باشید
آدرس کانال تلگرام: JavaCupIR@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers
ممنون بابت پست خوب. اگر امکانش هست و اگر پست از جایی ترجمه شده متبع روقرار بدید حس میکنم بعضی جاها مفهوم بخوبی رسونده نمیشه. با تشکر
سلام
لینک منبع در انتهای مطلب درج شده است.