به کارگیری از مفهوم کایزن در کدنویسی

به کارگیری از مفهوم کایزن در کدنویسی

پس از جنگ جهانی دوم، ژاپنی ها مفهومی تحت عنوان Kaizen را ابداع کردند که این مفهوم تک کلمه‌ای توانست آینده ژاپن و بالتبع دنیا را دستخوش تغییرات شگرفی کند. اگر بخواهیم این واژه ژاپنی را به صورت تحت‌الفظی به زبان فارسی ترجمه کنیم، با معادلی همچون «بهبود مستمر» رو‌به‌رو خواهیم شد (واژه kai به معنی «تغییر یا اصلاح» می‌باشد و zen هم به‌معنی «خوب» است). 

از جمله شرکت‌های بزرگی از این مفهوم در مدیریت و توسعهٔ خود استفاده نموده و هم‌اکنون هم آن‌را به‌کار می‌بندند می‌توان به شرکت‌های تویوتا و کنن اشاره کرد. چنانچه بخواهیم کایزن را به‌صورت خیلی ساده توضیح دهیم، بایستی بگوییم که کایزن به سازوکاری گفته می‌شود که در آن تغییرات کوچک به منظور بهبود عملکرد، اثربخشی بیشتر، راندمان بیشتر و درعین‌حال جلوگیری از اتلاف وقت، نیرو و انرژی کمتر اعمال می‌شوند.

مکتب کایزن در مقابل فلسفهٔ اکثر کشورهای غربی قرار دارد که در آن گفته می‌شود تا زمانی‌که چیزی خراب نشده است، نیازی به تعمیر آن نیست! و این درحالی است که کایزن دقیقاً عکس این را عمل می‌کند به این شکل که حتی اگر در کار خود مشکلی ندارید، برای بهبود و تغییر مثبت آن تلاش کنید چرا که اگر این کار را نکنید، از آن‌هایی که این سیاست را دنبال می‌کنند عقب خواهید ماند.

در کشور مترقی ژاپن کایزن فقط به تجارت‌و‌کسب کار محدود نشده بلکه زندگی خصوصی افراد، روابط بین آدم‌ها و ... را نیز دستخوش تغییر ساخته است؛ به‌عبارت‌ دیگر، ژاپنی‌هایی که پیرو مکتب کایزن هستند یکسری استاندارد خواه در کسب‌و‌کار خواه در زندگی خصوصی خود تعریف کرده و دائماً در تلاش به‌منظور ارتقاء و بهبود آن استاندارها هستند.

در ادامه قصد داریم ببینیم که به چه شکل می‌توان کایزن را وارد برنامه‌نویسی کرد؛ درواقع، آنچه در میان اکثر برنامه‌نویسان تازه‌کار مشاهده می‌شود (از طراح سایت گرفته تا دولوپر ابزارهای هوشمند و ...) این است که پس از فراگیری یکسری اصول، دستورات، مفاهیم و ... در زبان برنامه‌نویسی مد‌نظر خود، دیگر تلاش چندانی برای کسب علم بیشتر در حوزهٔ مربوطه نمی‌کنند!

به‌طور‌مثال، بسیاری از دولوپرهای وب‌سایت را می‌بینیم که کماکان از نسخه‌های قبلی زبان HTML استفاده می‌کنند (اگر HTML را بتوان زبان نامید!) و این درحالی است که شاهد تغییرات شگرفی در آخرین نسخه از این زبان که HTML5 است شاهد هستیم که اگر این گروه از طراحان بتوانند خود را با تغییرات صورت گرفته در این نسخه تطبیق دهند، دست ایشان در طراحی وب اپلیکیشن‌های به‌مراتب جذاب‌تر و حرفه‌ای‌تر باز خواهد شد.

یا به‌عنوان مثال‌های دیگر، می‌توان به عدم کامنت‌گذاری در اسکریپت‌ها، کدنویسی به سبک اسپاگتی، نامگذاری متغیرها، متدها و کلاس‌ها بدون توجه به ماهیت آن‌ها و ... اشاره کرد. حال ممکن است این سؤال برای کسانی‌که به این صورت کدنویسی می‌کنند پیش بیاد که «خب! وقتی قرار نیست کسی کدهای برنامه یا اپلیکیشن ما را ببیند، پس چه لزومی دارد که تمیز کدنویسی کنیم؟»

در پاسخ به این سؤال می‌توان به یکی از گفته‌های ارزشمند استیو جابز استناد کرد که می‌گفت:

اون طرف از یک کمد دیواری که رو به دیوار هست رو هم باید به گونه‌ای طراحی و رنگ‌آمیزی کرد که اگه روزی کسی اساس‌کشی داشت و پشت آن کمد دیواری رو دید، شکه نشود!

با همین استراتژی بود که وی کامپیوترهای مکینتاش را به گونه‌ای روانهٔ بازارهای جهانی کرد که علاوه‌بر زیبایی ظاهری، زیبایی درونی هم داشتند و همین مسئله منجر به ربودن گوی سبقت از رقبای اپل گشت.

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

اگر بخواهیم از امروز کایزن را در کدنویسی به کار بندیم، با کار خیلی دشواری روبه‌رو نخواهیم بود زیرا همان‌طور که پیش از این توضیح دادیم، کایزن به معنی تغییرات شگرفت و یک‌باره نیست بلکه کایزنی کردن کدهای خود بدان معنا است که به مرور زمان سعی کنیم تمیزتر، اصولیتر، قابل ویرایش‌تر و به‌طورکلی حرفه‌ای‌تر کدنویسی کنیم. علاوه بر بهبود مستمر، یکی دیگر از اصول مکتب کایزن جلوگیری از هدر رفتن وقت و انرژی است.

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

اما اگر بخواهیم از اصل «جلوگیری از هدر رفتن وقت و انرژی» کایزن در کدنویسی استفاده کنیم، به‌سادگی خواهیم توانست تا اسکریپت‌های تکراری را در قالب کلاس‌ها و متدهای مختلف تعریف کرده و هرکجا که نیاز داشتیم، یک آبجکت جدید از روی آن کلاس ایجاد نموده و از ویژگی‌های آن کلاس و بالتبع متدهای مربوط به آن استفاده کنیم.

در این صورت، حتی اگر اسکرپیت ما نیاز به تغییر داشته باشد به‌سادگی خواهیم توانست تا این اسکریپت را ویرایش نموده و بدون نیاز به کدنویسی بیشتر و اتلاف وقت، تغییرات صورت گرفته روی هر تعداد آبجکتی که از روی اسکریپت مربوطه ساخته باشیم اعمال خواهد شد. این‌ها فقط مثال‌هایی بودند از حوزه‌هایی در برنامه‌نویسی که می‌توان با به‌اصطلاح کایزنیزه کردن آن‌ها -و مسلماً ایجاد یک فرهنگ بهبود مستر در کدنویسی خود- مهارت‌های برنامه‌نویسی خود را ارتقاء بخشیم.

به‌طور خلاصه، یک برنامه‌نویس کایزنیزه شده، برنامه‌نویسی است که موارد زیر را رعایت می‌کند:
- یادگیری دائمی در حوزهٔ زبان برنامه نویسی مدنظر خود
- کدنویسی تمیز و اصولی
- کامنت‌گذاری مؤثر
- عدم پیروی از کدنویسی به سبک اسپاگتی
- نامگذاری اصولی متغیرها، کلاس‌ها و متدها
- استفادهٔ بهینه از OOP یا شیئ‌گرایی در برنامه‌نویسی
- در تعامل بودن با سایر برنامه‌نویسان
- ثبت نام در خبرنامه‌های وب‌سایت‌ها و وبلاگ‌های مرتبط با حوزهٔ کاری خود
- در ارتباط بودن با سایر برنامه‌نویسان سراسر دنیا از طریق فوروم ها و شبکه‌های اجتماعی
- ارتقاء مهارت‌های زبان انگلیسی به‌خصوص مهارت‌های خواندن و نوشتن
- انتقادپذیری و تلاش در جهت رفع نقاط ضعف
- عدم کپی‌برداری از پروژه‌‌های غیر اپن‌سورس
- مشارکت در پروژهای اپن‌سورس
- خلاقیت به خرج دادن هم در طراحی فرانت‌اند و هم در کدنویسی بک‌اند 
- به‌کارگیری از مفاهیم طراحی UI و UX در طراحی اپلیکیشن
- دیباگ کردن کامل پروژه قبل از تحویل آن به مشتری 
- فراگیری مهارت‌های کار گروهی
- بازخورد گرفتن از کاربران و اعمال نظرات ایشان روی اپلیکیشن و ...

حال نوبت به نظرات شما می‌رسد؛ به‌نظر شما با دنبال کردن چه استراتژی‌های دیگری می‌توان مفهوم ژاپنی کایزن را در توسعهٔ نرم‌افزار نیز پیاده‌سازی کرد؟ نظرات، دیدگاه‌ها و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.