শুরুর ঘটনা

কেন এই বইটা অন্য প্রোগ্রামিং বই থেকে একটু আলাদা?

A problem well stated is a problem half solved.

-- John Dewey

বইটা এমনভাবে লিখতে চেয়েছি যাতে - যখন আমি ডিপ লার্নিং নিয়ে কাজ শুরু করেছিলাম তখন এ ধরনের একটা বই হলে আমার যেমন সুবিধা হত, সেই পার্সপেক্টিভ থেকেই লেখা হয়েছে বইটা। প্রচুর মেশিন এবং ডিপ লার্নিং বই পড়ে আমার যে ধারনা হলো, পুরো ব্যাপারটাই “কনসেপ্ট হেভি, কোড লাইট”। প্রোগ্রামিং এর এই উপরের লেভেলে এসে সিনট্যাক্স বা কিভাবে একটা লাইন কাজ করবে সেটার পেছনে পুরো সময় দেবার গুরুত্ব কমে গেছে। সামগ্রিকভাবে একটা সমস্যা কিভাবে মেটানো যাবে, সেটা বোঝা গেলে ওই জিনিসটাকে নিয়ে এগোলে কাজে সুবিধা হয়। প্রোগ্রামিং এর একটা বড় অংশ হচ্ছে কিভাবে একটা বড় সমস্যাকে ছোট ছোট ভাগে ভাগ করে সেটাকে সলভ করা যায়। ধরুন দুবাই এয়ারপোর্টে প্রতিটা গেট কখন খুলবে, প্লেন ল্যান্ড করার পর কানেকটিং ব্রিজ লাগবে, এরকম হাজারো মডিউল চলছে পাশাপাশি। বইটা লিখতে যে যে জিনিসটাতে বেশি জোর দিয়েছি সেটা হচ্ছে প্রবলেম সলভিং স্কিল, আস্তে আস্তে। কিভাবে সমস্যা মডিউল বাই মডিউল সল্ভ করতে হয়।

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

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

If your only tool is a hammer then every problem looks like a nail.

-- Abraham Maslow

আমরা অবশ্যই জানব কিভাবে জিনিসগুলো আলাদা আলাদাভাবে কাজ করে, তবে শুরুতে সমস্যার একটা ‘বিগ পিকচার’ পেলে সেই প্রোগ্রামিং এনভায়রনমেন্ট নিয়ে কাজ করতে মানসিকভাবে ‘কানেক্টেড’ হয়ে কাজ শুরু করা যায়। কারণ সবশেষে, আমরা প্রতিটা কম্পোনেন্ট এর কানেক্টেড আউটকাম দিয়েই একটা বড় সমস্যা সমাধান করছি। বড় সমস্যাটাকে ছোট ছোট ভাগ মানে সেই কম্পোনেন্ট অংশে ভাগ করতে গেলেও একটা হাই লেভেল ধারণা আমাদের সাথে সেই সমস্যার একটা সংযোগ তৈরি করে দেয়। আমি দেখেছি অনেকেই সিনট্যাক্স ভাল বোঝেন - তবে সমস্যাটাকে কিভাবে ভাঙতে হবে অথবা কিভাবে ছোট ছোট অংশে ভাগ করে সেটাকে সমাধান করতে হবে সেই ধারণাটা অনেকটাই অনুপস্থিত থাকে।

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

‘হাতেকলমে’ ধারণাটাই এমন যে শুরুতে একটা সমস্যাকে ঠিকমতো লজিক্যালি ভাঙতে পারা যাতে ‘স্টেপ বাই স্টেপ’ সেই জিনিসটাকে মডিউলার লেভেলে সল্ভ করে এগিয়ে যাওয়া যায়। সমস্যাটা সমাধানে আমাদের লজিক্যালি চিন্তা করতে হবে যাতে সেই ব্যাপারটাকে একটা প্রসেসে দরকারি কোডে ঠিকমতো ‘ট্রান্সলেট’ করা যায়। যে কোন সমস্যা সমাধান করতে ব্যাপারটাকে কমপ্লেক্স না করে সেটাকে কত সহজে সমাধান করা যায় সেটা একটা বড় স্কিল। তবে এই স্কিলটা এত সহজে আসবেনা কারণ আমরা যত বেশি বেশি সমস্যার সমাধান করব ততই সেই প্রবলেম সলভিং ইন্টারনাল ইনটিউশনটা তৈরি হবে মনের ভেতরে। তখন মন তক্কে তক্কে থাকবে কিভাবে সমস্যাকে ভাঙ্গা যায়। আমাদের এখানে কিওয়ার্ড হচ্ছে ১. লজিক্যালি একটা সমস্যাকে অ্যানালাইজ করতে পারা, ২. সেটাকে স্টেপ বাই স্টেপ ছোট ছোট সমস্যায় ভেঙে ব্যাপারটাকে ঠিকমত বোঝা। সবশেষ ৩. এই জিনিসটাকে কোডে ট্রান্সলেট করতে পারা। আমার ধারণা, শেষ অংশটা সবচেয়ে সোজা বলে সেখানেই গুরুত্ব দেই বেশি। তাই, আমি চেষ্টা করেছি এই বইটাতে উপরের তিনটা অংশকেই ঠিকমত কাভার করতে।