دانشجوی مهندسی کامپیوتر و علاقه مند به مهندسی نرم افزار
برنامهنویسی به سبک سامورایی: ژاپنیها چگونه پایدارترین نرمافزارهای دنیا را میسازند؟

در دنیای پرسرعت فناوری، جایی که توسعه دهندگان غربی غرق در فریمورک های مختلف و تکنولوژی های جدید شده اند؛ توسعه دهندگان ژاپنی با تکیه بر اصولی ساده و کاربردی توانسته اند برخی از قابل اعتماد ترین و پایدارترین نرم افزارهای دنیا را بسازند.
این مقاله نشان میدهد که فلسفه های سنتی ژاپن چگونه به دنیای نرم افزار نیز راه یافته است و نتیجه آن شده: کدهایی که بعد از ۳۰ سال همچنان در حال اجرا هستند.
۱ -مونوزوکوری:فلسفه ای که همه چیز را تغییر میدهد

در فرهنگ ژاپنی مونوزوکوری «Monozukuri» به معنای هنر ساختن چیزهاست،اما مفهوم آن صرفا به تولید محصولات فیزیکی محدود نمیشود.این فلسفه بر مهارت در کاری خاص،بهبود مستمر و لذت از خلق کردن، متمرکز است.توسعه دهندگان ژاپنی صرفا یک سری کد روی مانیتور تایپ نمیکنند آنها ساخت نرم افزار را به چشم یک هنر نگاه میکنند که با کد میتوانند آن را خلق کنند.
هیروشی ناکامورا،از مهندسان ارشد یک شرکت فناوری در ژاپن، در یکی از مصاحبه هایش این طور گفت:«در غرب، هدف برنامه نویسان صرفا ارائه فیچرهای جدید و ارضا کردن نیازهای بازار است اما در ژاپن هدف برنامه نویسان نوشتن کدی است که دهه ها باقی بماند و فیچرها صرفا نقطه شروع پروژه ها هستند.»
این طرز تفکر بسیار جالب توجه و عمیق است. آنها بهجای شعار «سریع حرکت کن و همهچیز را بشکن»، رویکرد «آهسته بساز و چیزی برای خراب شدن باقی نگذار» را در پیش گرفتهاند.
۲-کایزن: اصل ۱ % بهتر شدن

در زمینه بهبود کسب و کار،کایزن یک فلسفه و روششناسی ژاپنی است که به معنای بهبود مستمر است(کای به معنای تغییر و زن به معنای خوب است).این فلسفه بر ایجاد بهبودهای کوچک، تدریجی و مستمر در فرآیندها، محصولات یا خدمات به منظور افزایش کارایی و کیفیت و بهره وری در طول زمان تأکید دارد.فلسفه ای که برنامه نویسان ژاپنی نیز برای کدنویسی از آن بهره میبرند.
به جای تعیین اسپرینت های عظیم برای بازنویسی کامل برنامه، آنها ترجیح میدهند پیشرفت های کوچک و پیوسته ایجاد کنند.
یک مثال عملی شاید مفهوم را بهتر برساند:
// رویکرد غربی :بیاید برای اسپرینت بعدی کل این ماژول رو بازنویسی کنیم
function processUserData(users) {
//اضافه کردن 200 خط کد و پیچیده تر کردن منطق ماژول
return results;
}
//رویکرد ژاپنی:بیاید امروز 1 درصد ماژول فعلی را بهبود دهیم
function processUserData(users) {
// امروز:اضافه کردن یک تابع کمکی کوچک
const validUsers = filterValidUsers(users);
// فردا : اضافه کردن یک تابع کمکی دیگر
// هفته بعد : بهینه سازی یک مورد خاص
return processValidUsers(validUsers);
}یک توسعه دهنده ژاپنی برای بهبود کد از کسی اجازه نمیگیرید. برای آنها چیزی به اسم«بدهی فنی» تعریف نشده است.آنها هر روز سعی میکنند از دیروز خود یک پله بالاتر بایستند.
۳-توسعه بههنگام(Just-In-Time)

تیم های نرم افزاری ژاپنی از سیستم تولید تویوتا (از اینجا بیشتر بخوانید) برای تولید نرم افزار بهره زیادی گرفته اند.از مفاهیم اصلی این سیستم توسعه بههنگام(Just-In-Time) است.
در این سیستم به جای ساخت فیچرهای ساختگی و ذهنی (شاید یه زمانی بعدا بهش نیاز شد)، دقیقا چیزی را که نیاز دارند را پیاده سازی میکنند، نه بیشتر و نه کمتر.
// رویکرد غربی:ساخت یک کلاس جنریک با کلی ویژگی از همان ابتدا
class DataProcessor {
constructor(options = {}) {
this.enableCaching = options.enableCaching || false;
this.enableValidation = options.enableValidation || false;
this.enableLogging = options.enableLogging || false;
this.maxRetries = options.maxRetries || 3;
this.timeout = options.timeout || 5000;
// و 15 خط دیگر برای "در صورت لزوم" شاید بکار آید
}
}
// رویکرد ژاپنی:دقیقا چیزی رو که برای الان نیاز داری پیاده سازی کن
class DataProcessor {
process(data) {
// مسئله امروز را حل میکند
return this.validateAndTransform(data);
}
// اضافه کردن کد فقط در صورت نیاز
}۴-جیدوکا : توقف خط تولید

در کارخانه های تویوتا اگر کارگری یک نقص فنی را مشاهده کند میتواند کل خط تولید را متوقف کند. تیم های توسعه دهنده ژاپنی نیز همین اصل را دنبال میکنند: اگر یک چیز اشتباه باشد،باید کل فرایند متوقف شود.خبری از تعویق آن و انتقال باگ از اسپرینت فعلی به اسپرینت بعدی نیست، یا بدون باگ ادامه میدیم یا اصلا ادامه نمیدیم.
به عنوان مثال یک تیم توسعه دهنده ژاپنی دو روز از وقت خود را صرف حل کردن یک نقص فنی کرده بود، نقصی که صرفا روی تجربه کاربری ۰.۱ درصد از کاربران اثر گذاشته بود! وقتی از آنها پرسیده شد چرا لاگ ارور را ثبت نمیکنند و به ادامه کار نمیپردازند؟
سرپرست تیم گفت:« اگر ما اجازه بدهیم عیبی در سیستم باقی بماند، در واقع نقص ها را عادی سازی کرده ایم و به زودی سیستم پر از نقص میشود.»
۵-پذیرش نقص

در فرهنگ ژاپن مفهومی وجود دارد به نام وابی-سابی «Wabi-Sabi»- یعنی یافتن زیبایی در نقص و ناپایداری.
توسعه دهندگان ژاپنی به روش های شگفت انگیزی از این مفهوم در کدنویسی استفاده میکنند.آنها به جای تلاش برای نوشتن کد بی نقص سعی میکنند کدی بنویسند که در طول زمان بتواند تکامل پیدا کند.
// رویکرد غربی: تلاش برای پوشش تمام نیازهای آینده
class DataValidator {
validate(data, rules, options, context, metadata) {
// اضافه کردن کد های بی مورد برای کنترل کردن تمام سناریوهای احتمالی
}
}
// رویکرد ژاپنی: ساده برای امروز، قابلتوسعه برای فردا
class DataValidator {
validate(data) {
// Handle today's case well
if (!data) return false;
if (!data.email) return false;
return true;
}
// با آمدن نیازمندی های جدید،کد توسعه پیدا میکند
}آنها این واقعیت را میپذیرند که نیازها به مرور زمان تغییر خواهند کرد، بنابراین به جای تلاش برای پیشبینی آینده، برای تغییرات بالقوه برنامه میسازند.
نتایج به ما چه میگوید؟
نینتندو : کدهای ۳۰ ساله هنوز در حال اجرا هستند
نینتندو در سیستم های مدرن خود همچنان از کدهایی که در دهه ۹۰ میلادی نوشته شده اند استفاده میکند.دلیل این کار این نیست که نینتندو نمیخواهد متحمل هزینه های تغییر شود یا برنامه نویسان تنبلی استخدام کرده است.این کدها چنان از ابتدا بادقت بالا و با دوراندیشی نوشته شده اند که نیازی به بازنویسی ندارند.
معیارهای کارایی
بر اساس یک مطالعه مقایسهای بین تیمهای نرمافزاری ژاپنی و تیمهای غربی، نتایج زیر بهدست آمده است:
نرمافزارهای تولیدشده توسط تیمهای ژاپنی، ۶۰ درصد خطا (باگ) کمتری در محیط عملیاتی دارند.
زمان صرفشده برای نگهداری و رفع اشکالات در تیمهای ژاپنی، به طور میانگین ۴۰ درصد کمتر است.
ویژگیهای جدید (فیچرها) در این تیمها ۲۵ درصد زودتر به کاربران تحویل داده میشوند — با اینکه روند کاری آنها از بیرون «آهستهتر» بهنظر میرسد.
توسعهدهندگان ژاپنی، در مقایسه با همتایان غربی خود، ۸۰ درصد رضایت شغلی بالاتری را تجربه میکنند.
آنچه توسعهدهندگان ژاپنی به ما نشان میدهند، این است که کیفیت، پایداری و توجه به جزئیات میتواند بر سرعت و عجله برتری داشته باشد. شاید وقت آن رسیده که ما هم در فرآیند توسعه نرمافزار، از فلسفههای شرقی الهام بگیریم.
مطلبی دیگر از این انتشارات
رزپبریپای 4!!! همه چیز در یک چیز
مطلبی دیگر از این انتشارات
پایگاهداده (دیتابیس)
مطلبی دیگر از این انتشارات
تفاوت برنامه نویس حرفه ای و آماتور