দুশ্চিন্তার অপর নাম 'Legacy codebase'!

এক্সিস্টিং কোনো একটা প্রজেক্টে কাজ করতে গেলে বেশীরভাগ সফটওয়্যার ইঞ্জিনিয়ারদের একটা কমন অভিযোগ থাকে, ‘আর বইলেন না, কোডবেজের অবস্থা এত খারাপ যে এটায় কাজ করার কথা চিন্তা করলে জ্বর আসে। আগের ডেভেলপাররা যে কি করে রেখে গেছে! কোনোমতে এইখান থেকে বের হয়ে অন্য কোথাও যেতে পারলে বাঁচি’।

এটা কোনো কাজের কথা না। কোডবেজের অবস্থা যে কারণেই খারাপ হোক না কেন, আপনি সেই বাজে কোডবেজটাই আবার আরেকজনের ঘাড়ে চাপিয়ে দিয়ে পালিয়ে না গিয়ে বরং Boy scout rule ফলো করা উচিত।

Always ensure that you leave the code in a better state than you found it.

অর্থাৎ আপনি নিজে যেই প্রব্লেমগুলো ফেইস করতেছেন এই কোডে কাজ করতে গিয়ে, সেটা আপনার পক্ষ থেকে যতটুকু সম্ভব ইম্প্রুভ করার চেষ্টা করা উচিত যাতে করে আপনার পরে কেউ এসে সেইম একই অভিযোগ না করতে হয়।

নতুন করে স্ক্র্যাচ থেকে খুব সুন্দর করে গুছিয়ে কোনো একটা প্রজেক্ট করা সব ডেভেলপারেরই ড্রিম। আমরা মনে করি আমি যদি শুরু থেকে কোনো প্রজেক্ট করি তাহলে সেটা এত সুন্দর করে করবো যে এই প্রজেক্টে কাজ করার কথা চিন্তা করলেই শান্তি লাগবে। কিন্তু বাস্তবতা কি আসলেই তাই? সবসময়ই কি একটা প্রজেক্ট শুরু থেকে শুরু করতে পারলেই সেটা সুন্দর করে গুছিয়ে করা সম্ভব?

একটা এক্সাম্পল দেই।

মনে করুন আপনার সামনে একটা টেবিল আছে। আপনাকে কিছু জিনিস দেয়া হলো সেই টেবিলে সাজিয়ে রাখার জন্য। আপনি সাজিয়ে রাখলেন। কিছুক্ষণ পরে আপনাকে আরও কিছু জিনিস দেয়া হলো, আপনি টেবিলের বাকি জায়গায় সেগুলো সাজিয়ে রাখলেন। এভাবে কয়েক ধাপে আপনি বিভিন্ন রকম জিনিস সাজিয়ে টেবিলে রাখার পরে, আপনাকে যদি বলা হয় টেবিলটার দিকে তাকান তো। এখন সবগুলো জিনিস যখন আপনার সামনে আছে এখন কি আপনার মনে হয় যে আপনি এই সবগুলো জিনিসকে আরও ভালোভাবে সাজিয়ে রাখতে পারবেন? স্বাভাবিকভাবেই আপনার উত্তর হওয়ার কথা, ‘হ্যাঁ’। কারণ এখন যখন সব জিনিসকে আপনি একসাথে সামনে পাচ্ছেন, এখন আপনি আরও বেটার একটা প্যাটার্ন খুঁজে পাবেন এই জিনিসগুলো সাজিয়ে রাখার জন্য। যেটা হয়তো ধাপে ধাপে আলাদাভাবে জিনিসগুলো আপনার সামনে আসায় আপনি করতে পারেননি।

সফটওয়্যার ডেভেলপমেন্টেও ব্যাপারটা তাই। সময়ের সাথে সাথে আমাদের রিকোয়ারমেন্ট চেঞ্জ হয় এবং সেটার উপর ভিত্তি করে আমরা কাজ করি। যার কারণে শুরু থেকে যারা একটা প্রজেক্টে কাজ করে, তাঁরা যতই 'Good intention’ আর 'best practice’ ফলো করে কাজ করা শুরু করুক না কেন, একটা সময় পুরো কোডবেজ messy হয়ে যেতে পারে। নতুন কেউ জয়েন করে যখন পুরো জিনিসটা একসাথে Fresh eye দিয়ে দেখে তখন তাঁর কাছে মনে হওয়াটা স্বাভাবিক যে “এটা তো এভাবে না করে আরও ভালোভাবে করা যেত। এরা কি কাজ কর্ম কিছু পারে না?"

নাহ, এটা কিন্তু সবসময় পুরনো ডেভেলপারদের স্কিলের ঘাটতি বা অসচেতনতা না। কখনো কখনো পরিবেশ, পরিস্থিতি বা রুঢ় বাস্তবতার কারণেই এমনটা হয় থাকতে পারে। যেই বাস্তবতা বা পরিস্থিতিটা হয়তো পরে যিনি জয়েন করছেন তিনি উপলদ্ধি করা সম্ভব না। এ কারণে হুট করেই অন্যদের কাজটা ছোট করা বা তাঁদের ব্যাপারে অভিযোগ করা উচিত হবে না।

সফটওয়্যার ইঞ্জিনিয়ারিং এ একমাত্র ধ্রুব সত্য হলো ‘Change’.

অর্থাৎ একটা সফটওয়্যার প্রোডাক্টে নিত্যনতুন চেঞ্জ আসতেই থাকবে। এবং এই চেঞ্জগুলো যে সবসময় শুরুতে একটা প্রোডাক্টের ভিশন বা প্ল্যানিং যেমন ছিল তাঁর উপর ভিত্তি করেই হবে এমন না। কখনো কখনো খুব বড় ধরনের পরিবর্তনও আসতে পারে। এটাই বাস্তবতা। এই যে সময়ের সাথে ছোট, বড় যেই পরিবর্তনগুলো আসবে সেটার সাথে কিভাবে মানিয়ে নিয়ে সফটওয়্যার ডেভেলপ করা যায় সেটার জন্যই কিন্তু 'Software engineering’ একটা আলাদা ট্র্যাক হিসেবে প্রতিষ্ঠিত হয়েছে। এখানে যে কেবল কাঠখোট্টা টেকনিক্যাল কথাবার্তাই হয় তা না, বরং এর মধ্যে সফটওয়্যার ডেভেলপমেন্ট প্রসেস, বেস্ট প্র্যাকটিস এবং বিভিন্ন গাইডলাইন সময়ের সাথে প্রতিষ্ঠিত হয়েছে যাতে করে আমরা অবস্থা অনুযায়ী কিভাবে ডেভেলপমেন্ট ভালোভাবে চালিয়ে নিতে পারবো সেটা নিয়ে আলোচনা আছে।

এই সমস্যা থেকে পরিত্রাণের সবচাইতে ভালো বুদ্ধি হচ্ছে, রেগুলারলি ইম্প্রুভমেন্টের জায়গাগুলো খুঁজে বের করে যতটুকু সম্ভব ইম্প্রুভ করা। এক্ষেত্রে নতুন কেউ টীমে জয়েন করলে তাকে উৎসাহ দেয়া উচিত যে তার যদি কোনো ইম্প্রুভমেন্ট সাজেশন থাকে সেটা যেন সে নিশ্চিন্তে শেয়ার করে। এছাড়াও অনেক ভালো ভালো কোম্পানী সপ্তাহের কয়েক ঘণ্টা বা মাসের কয়েক ঘণ্টা ডেভেলপারদের জন্য আলাদাভাবে বরাদ্দ রাখে যেই সময়টা তাঁরা বর্তমান কোডবেজের ইম্প্রুভমেন্ট নিয়ে কাজ করবে, কোনো টেস্ট মিসিং থাকলে সেটা লিখবে, কোনো সিকিউরিটি ফ্ল আছে কিনা সেটা খুঁজে বের করার চেষ্টা করবে, কোনো টেকনিক্যাল ডকুমেন্টেশন যুক্ত করার প্রয়োজন থাকলে যুক্ত করবে। এভাবে নিয়মিতভাবে ইপ্রুভ করলে কোডবেজ সহজে Legacy হবে না এবং নতুন কেউ জয়েন করলেও তার জন্য কাজ করা সহজ হবে!

48 Likes

চমৎকার পরামর্শ। এটা অনেকেরই উপকারে আসবে।

অনেক ধন্যবাদ ভাইয়া। খুবি কার্যকরী কিছু স্টেপ উল্লেখ করেছেন। কোডের ডকুমেন্টেশন করা নিয়ে বিস্তৃত একটা গাইডলাইন আব্দার করছি আপনার কাছ থেকে। :slightly_smiling_face::heart:

আমি পুরাতন কোডবেস এ কাজের সময় ভালো করার পাশাপাশি এর ভালো দিকটি আয়ত্বকরে নেয়ার চেষ্ঠা করি। এতে করে এখন খূবই আত্মবিশ্বাসের সাথে কোড লিখতে পারি। যদিও শেখা শেষ করিনি তবুও মোটামুটি মানের দুটি প্রজেক্ট এ কাজ করে চলেছি।

আপনাকে পেয়ে আমি দারুণ খুশি হয়েছি ভাই। শুকরিয়া

2 Likes

পরামর্শ গুলো সামনে কাজে লাগানোর চেষ্টা করব।

ধন্যবাদ ভাইয়া। সুন্দর পোস্ট।

অসাধারণ উপস্থাপনা, মাশাহ আল্লাহ

গুরুত্বপূর্ণ বিষয়ে আলোচনা পেলাম। ধন্যবাদ