বুক রিভিউঃ সফটওয়্যার ইঞ্জিনিয়ারিং আলাপ
December 20, 2024 by Shahriar Ahmed Shovon
বইটাকে আপনার সফটওয়্যার ইঞ্জিনিয়ার ক্যারিয়ারকে স্মুথ করতে একটা গাইডলাইন হিসেবে নিতে পারেন। সুন্দর ক্লিন কোড লেখা থেকে শুরু করে গ্রোথ মাইন্ডসেট। আবার জুনিয়র থেকে সিনিয়র ইঞ্জিনিয়ার হওয়ার ধাপগুলো থেকে শুরু করে প্রোফেশনালিজম মেইন্টেইন, এরকম গুরুত্তপুর্ণ ২০ টি টপিক নিয়ে এই বই।
ব্যক্তিগতভাবে ফেসবুকে শামীম ভাইকে ফলো করার কারণে যখন উনি বইয়ের এনাউন্সমেন্ট দেন তখন অধ্যায়গুলো দেখেছিলাম উনার পোস্টে + রকমারিতে। খুব একটা আপিলিং মনে হয়নি সত্যি বলতে। কারণ যে টপিক গুলো আছে সেগুলো সচারচর আমরা সবাই জানি। আমাদের টেস্ট কোড লিখতে হবে, কমিউনিকেশনে যত ট্রান্সপারেন্ট থাকা যায় ভালো, ওপেন সোর্সে কন্ট্রিবিউশন ভালো একটা বুদ্ধি, কোড রিডেবল হওয়া চাই এসব তো সবজায়গাতেই শুনি। ঠিক এই কারণে খুব একটা আগ্রহ জন্ম নেয়নি তখন। বইমেলা শুরু হওয়ার পরে লিংকডইনে শামীম ভাইয়ের কিছু আর্টিকেল পড়ে উনার লেখার ধরন অনেক ভালো লাগে। এরপরে বইমেলা গিয়ে বইটা কিছুক্ষণ পড়ার পরে মনে হলো আসলে টপিক গৎবাঁধা হলেও ভিতরে অনেক ইন্সাইডার ইনফো আছে।
এবং আসলে বইটি অসাধারণ। আমি পেন্সিল দিয়ে পুরো বইটি মার্ক করে পড়েছি। তবে মনে হচ্ছে বারবার পড়তে হবে, মাঝে মধ্যেই। যদি কিছু লাইন শেয়ার করি,
”ধারণার ওপর ভিত্তি করে কাজ করাটা কোনোমতেই ভালো বুদ্ধি না। এতে নিশ্চিতভাবেই ভুলভাল কাজ করার সম্ভাবনা অনেক” - এই বাজে কাজটা আমি অনেক করেছি। মনে হতো, “এমন ই হওয়া যুক্তিযুক্ত”। এভাবে নিজের বুদ্ধিমতো করে পরে ক্লায়েন্টের লজিক দেখতাম ভিন্ন। আবার নতুন করে করা লাগতো। অনেকদিন ভোগার পরে কিছুটা ঠিক হয়েছে এখন।
”অপ্রয়োজনীয় কমেন্ট না করে বরং কোড এমনভাবে করা যাতে কোড পড়েই বোঝা যায়। একান্ত দরকার পড়লে কোড ‘কী করছে’ এটা না বরং ‘কেন করছে’ অর্থাৎ লজিক বা এলগরিদমটা কোডে কমেন্ট হিসেবে যোগ করা যেতে পারে।” - এইটা আসিফ ভাই একবার বলেছিলেন। পরে রিয়ালাইজ করি আসলেই তাই। হুদাই আমি কমেন্ট করি কিভাবে কি হচ্ছে, এইটা হওয়া উচিত না। যদি কিভাবে কোড কাজ করছে সেটা লিখেই রাখতে হয় তাহলে সেটা ভালো কাজ না। বরং কমেন্ট যদি হয় হওয়া উচিত তার রেলেভেন্ট ফিচার রিকুয়ারমেন্ট নিয়ে অর্থাৎ কেন এই লাইন লেখা সেটার জন্য।
“অতএব Code quality বা Deadline- এর মধ্যে যেকোনো একটাকে ছাড় দিয়ে অন্যটায় বেশি মনোযোগ না দিয়ে বরং এ দুটোর মধ্যে ব্যাল্যান্স করাটাই আমাদের মুল লক্ষ্য হওয়া উচিত”- ক্লিন কোড বইটাতে পড়েছিলাম এইটা।
”টেকনোলজি ওয়ার্ল্ডে খুব বড় ধরনের যুগান্তকারী আবিষ্কার সচরাচর হয় না। বরং কিছু ফান্ডামেন্টাল এবং বেসিক জিনিসের ওপরই ঘুরেফিরে পরিবর্তনগুলো হয়। কেউ যদি এই ফান্ডামেন্টাল ব্যাপারগুলোতে দক্ষতা অর্জন করতে পারে, তাহলে লংটার্মে এটাই তার জন্য যথেষ্ট হবে। নতুন নতুন টূল, টেকনোলজি শেখাও তার জন্য সহজ হবে, আবার এসব পরিবর্তনের কারণে তার চাহিদাও কমবে না”- ড্যাম্ন! এইটা যে কি ভ্যালুয়েবল একটা লেসন! আমি জানিনা এটা আমি আগে কিভাবে জেনেছি বা বুঝেছি কিন্তু ছোট থেকেই এই ব্যাপারটা করে এসেছি। ফান্ডামেন্টালে এত সময় দিয়েছি যে পরে ঐ টপিক বেজড অন্য যেকোন টেকনোলজি আমি খুব দ্রুত এবং ভালোভাবে শিখতে পেরেছি আলহামদুলিল্লাহ।
“ভালো প্রোগ্রামার যেই ফিচারটা ইমপ্লিমেন্ট করেছে বা বাগটা ফিক্স করেছে, সেটা সে নিজে ভালোভাবে টেস্ট না করে, নিশ্চিত না হয়ে QA- এর কাছেও দেয় না। তবে টার্গেট থাকে তার করা কাজ যেন QA ও কোনো বাগ ধরতে না পারে। যদিও সেটা সবসময় সম্ভব হয়না।” - এই ব্যাপারটা দেখেছি শাকিল ভাইয়ের মধ্যে। উনি লিটারেলি হাইপার থাকেন যেন উনার কাজের খুত কেউ ধরতে না পারে। আবার এর জন্য উনি ওভার অপ্টিমাইজ ও করেন না। বেশ ব্যালেন্স রাখেন। আমার মধ্যে এই ব্যাপারটা নাই। গ্রো করছি ধীরে ধীরে কিন্তু সময় লাগছে মনে হচ্ছে বেশ।
এগুলো খুব অল্প একটা অংশ পুরো বইয়ের। প্রতিটা টপিক অসাধারণ ভাবে ব্যাখ্যার পাশাপাশি উনি উদাহরণ ও দিয়েছেন। বেস্ট পার্ট উনি প্রতিটা অধ্যায় যেভাবে গুছিয়েছেন প্রশংসার দাবি রাখে। প্রথমে সচারচর আমরা কি করি সেটা বলেছেন, ঐ পদ্ধতির ঝামেলা গুলো আলোচনা করেছেন। এরপরে সেটার সমাধান বলে দিয়েছেন। আর সমাধান নিয়ে সতর্ক করেছেনে ব্যালেন্স মেইন্টেইনের জন্য সঙ্গে দিয়ে দিয়েছেন ঐ রিলেটেড রেফারেন্স, রিসোর্স। অসাধারণ।
একজন ভালো সফটওয়্যার ইঞ্জিনিয়ার হতে গেলে ক্যারিয়ারের শুরুতে হোক বা মাঝে একবার বইটা পড়ে দেখতে বলবো আমি। আপনি অল্প-বেশি কিছু না কিছু অবশ্যই শিখবেন।
বইয়ের নামঃ সফটওয়্যার ইঞ্জিনিয়ারিং আলাপ
লেখকঃ আহমেদ শামীম হাসান
প্রকাশনীঃ অদম্য প্রকাশ
বিশেষ উল্লেখঃ সিনিয়র সফটওয়্যার ইঞ্জিনিয়ারের বৈশিষ্ঠ্য অধ্যায়টি আমার সবচেয়ে বেশি ভালো লেগেছে। পুরো বইয়ে লেখকের লেখার কন্সেকুয়েন্স নিয়ে সতর্ক থাকার ব্যাপারটা সুন্দর।
Categories
Recent Posts
About
This is my personal blog, where I write about various topics related to software development, technology, and my own experiences. I enjoy exploring new technologies, frameworks, and programming languages, and sharing what I learn with others.