চ্যালেঞ্জ যখন Legacy Code!


ডেভেলপার লাইফের অনেকটা সময় কাটে কারো লেখা “পুরনো কোড” পড়েই — মানে, legacy codebase.প্রথমে মনে হতে পারে, “এত গ্যাঞ্জাম কোড কে লিখলো? আমি তো লিখিনি!” কিংবা, “এটাকে নতুন করে লিখে ফেলাই ভালো না?”
বিশ্বাস করুন আর না-ই করুন, যত বড় বা পুরনো প্রজেক্টেই কাজ করেন না কেন, legacy code পড়তে শিখলেই আপনার প্রোগ্রামিং জীবন অনেকটাই সহজ হয়ে যায়!
■ Legacy Code কী?
অবশ্য সবসময় “পুরনো” মানেই legacy না। Legacy code বলতে বুঝায় এমন কোড যা:
ভালোভাবে ডকুমেন্টেড না
টেস্ট নেই / টেস্ট করা কঠিন
যিনি লিখেছিলেন তিনি আর টিমে নেই
এমন ফ্রেমওয়ার্ক / ডিপেন্ডেন্সি ইউজ করা হয়েছে যা এখন outdated
■ Legacy Code কখন চ্যালেঞ্জ?
কোডটা অন্য mindset এ লেখা হয়েছিল
টেস্ট নেই, তাই ভরসা কম
নামগুলো obscure:
foo()
,doTask()
,process()
একেক জায়গায় একেক naming convention
কমেন্ট নেই, বা আছে কিন্তু outdated
■ 𝐇𝐨𝐰 𝐭𝐨 𝐫𝐞𝐚𝐝 𝐥𝐞𝐠𝐚𝐜𝐲 𝐜𝐨𝐝𝐞: Step by step
Run before read
কোড রান করুন। UI / project কিভাবে behave করে দেখুন। কোড না বুঝলেও output দেখলে intuition তৈরি হবে।Big picture নিন
README, architecture diagram, বা টিমমেম্বারের কাছে জেনে নিন — কী কী বড় বড় module আছে, কোনটা কী করে।Use the app like a user
প্রোডাক্ট ইউজার হিসেবে দেখুন — কোন ফিচার কোথায়, কীভাবে কাজ করে। ফিচার ফ্লো বুঝতে পারলে, কোডের flow বুঝতেও সুবিধা হবে।Find entry points
React অ্যাপে শুরুতে App.js, server অ্যাপে index.js বা main file।
যেখানে থেকে execution শুরু হয়, সেই ফাইল খুঁজুন।Draw diagrams
মডিউল, ফাংশন, ডাটাফ্লো, কম্পোনেন্ট ট্রি — যা মনে রাখতে কষ্ট হয়, স্কেচ বা draw.io তে এঁকে ফেলুন।Rename variables (locally)
VSCode rename বা comment এ লিখে রাখুন —// renamed for clarity: totalUsers
ছোট ছোট experiment
console.log, debugger, বা breakpoints সেট করে ফাংশনের ভিতর ঢুকে বোঝার চেষ্টা করুন — কী data flow হচ্ছে, কী return হচ্ছে।Ask, don’t assume
টিম মেম্বার, সিনিয়রকে জিজ্ঞাসা, বা Git blame বা commit history দেখে বুঝুন: কেন এমন লেখা হয়েছিল?
■ Hands on :
ধরা যাক, আপনার কাছে আছে এই ফাংশনাল কম্পোনেন্ট:
export default function X()
{
const [d, sD] = useState([]);
useEffect(() => {
f().then((r) => sD(r));
}, []);
return <ul>{d.map((i) => <li>{i}</li>)}</ul>;
}
দেখে বোধহয় প্রথমেই বুঝতে পারবেন না।
Step by step:
ফাংশনের নাম
X
→ মনে রাখা কঠিন, confuse করে ফেলার সম্ভাবনাও বেশিstate:
d
, setter:sD
→ likely data & setDataf()
→ মনে হয় api fetch বা data fetcherএকবার effect run করলে → data fetch করে data state এ বসায়
Refactored (even locally):
export default function UserList()
{
const [users, setUsers] = useState([]);
useEffect(() => {
fetchUsers().then((res) => setUsers(res));
}, []);
return <ul>{users.map((user) => <li>{user}</li>)}</ul>;
}
এভাবে ছোট ছোট rename আর console.log দিয়েই আমরা কোডের meaning বের করি।
■ 𝐏𝐚𝐲 𝐚𝐭𝐭𝐞𝐧𝐭𝐢𝐨𝐧 𝐭𝐨:
Naming
Entry points
Data flow
Side effects (API call, file write, DOM change)
Comment vs actual code mismatch
■ 𝐁𝐨𝐧𝐮𝐬 𝐓𝐢𝐩𝐬:
যতো পড়বেন, তত লিখে রাখুন — Notion / Google Doc
চাইলেই rewrite করবেন না — আগে read, then refactor
টেস্ট কভারেজ বাড়ানোর মাধ্যমে refactor safe করুন
■ 𝐑𝐞𝐦𝐞𝐦𝐛𝐞𝐫:
হয়তো একদিন আপনার লেখা কোডও কারো কাছে legacy মনে হবে! Legacy code মানেই খারাপ কোড না।
“Code never written by you feels complex — until you make it yours.”
References:
Subscribe to my newsletter
Read articles from Saadman Sakib directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
