প্রোগ্রামিং শেখা

মাঝে মাঝে এমন প্রশ্ন পাই,

  • ‘প্রোগ্রামিংয়ের A টু Z শিখতে চাই, কোন বইটা কিনব?’।
  • ‘সি শিখে কী লাভ? ডেস্কটপ অ্যাপ্লিকেশন বানাতে পারছি না।’
  • ‘লুপ শেষ করে অ্যারে শুরু করে দিলাম, কিন্তু গেম কীভাবে বানাবো, এখনও তো গেমের কোনো কথাই পড়লাম না।’

এমন আরো অনেক প্রশ্ন। যেগুলোর উত্তর আমি সাধারণত দেই না, কারণ এরকম প্রশ্ন যারা করে, তাদেরকে দুই-এক কথায় কোনো কিছু বোঝানো খুবই ঝামেলার ব্যাপার। তাই প্রোগ্রামিং শিক্ষা বিষয়ক আমার মতামত সংক্ষিপ্ত আকারে লিখে দিচ্ছি।

প্রোগ্রামিং শিক্ষা একটা চলমান কার্যক্রম (continuous process)। একজন প্রোগ্রামারের কতটুকু শেখা উচিত, এই প্রশ্নের কোনো উত্তর নেই। তেমনি সব শিখে তারপরে প্রোগ্রাম বা সফটওয়্যার তৈরি শুরু করবো, এরকম ভাবাটা অযৌক্তিক। প্রোগ্রামিংয়ের A-Z শেখার জন্য কোন বইটা পড়ব? এই প্রশ্নেরও উত্তর নাই একই কারণে। ভাষা শেখার ব্যাপারটাই খেয়াল করো। আমরা যেমন প্রথমে বর্ণ শেখা শুরু করি। তারপরে ওই বর্ণগুলো দিয়ে ছোট ছোট শব্দ। তারপরে আরেকটু বড় শব্দ। বানান ভুল করি, আবার ভুল থেকে শিখি। তারপরে ছোট ছোট বাক্য তৈরি করতে শিখি। সেখানেও ভুল হয়। ভুল করতে করতে একসময় আমরা ঠিকঠাক বাক্য তৈরি করা শিখি। তারপরে প্যারাগ্রাফ লিখতে শিখি। একসময় বড় বড় রচনাও লিখে ফেলি। তারপরে একসময় হয়ত সেই ভাষায় বই লিখে ফেলতেও সমস্যা হয় না।

তেমনি প্রথমে একটা প্রোগ্রামিং ভাষা কিছুদূর শেখার পরে তুমি যদি লিনাক্সের মতো একটা অপারেটিং সিস্টেম, বা ফেসবুকের মতো ওয়েব অ্যাপ্লিকেশন তৈরির কাজ শুরু করতে চাও, তাহলে হবে না। তুমি ভার্সিটিতে যদি কম্পিউটার সায়েন্স পড়, তখন প্রথমে একটু সি শিখলে, সেগুলো দিয়ে বিভিন্ন প্রবলেম সলভ করলে, তারপরে আরেকটু শিখলে, আরো কিছু প্রবলেম সলভ করলে। এভাবে সি ল্যাঙ্গুয়েজের দরকারি জিনিসগুলো শেখার সাথে সাথে প্রোগ্রামিংয়ের লজিক তোমার মাথায় ঢুকে গেলো। এসময় যদি তুমি সি দিয়ে গেম বানাতে চাও, তাহলে হবে না। তারপরে তুমি ডিসক্রিট ম্যাথ শিখলে, ডাটা স্ট্রাকচার শিখলে।  এখন তুমি আগের চেয়ে বড় বড় প্রোগ্রাম লিখতে পারো। প্রোগ্রামগুলোর কোডও আগের চেয়ে ইফিশিয়েন্ট হয়। তারপরে তুমি জাভা (অথবা সি শার্প) শিখলে। সেখানে ল্যাঙ্গুয়েজ শেখার সাথে সাথে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের ধারণাটা পাকাপোক্ত করে নিলে। এবারে হয়ত তুমি সুন্দর একটা ডেস্কটপ অ্যাপ্লিকেশন তৈরি করে ফেললে। যেটা হয়ত তুমি সি শেখার সময়ই তৈরি করতে চাইতে… এভাবে সময়ের সাথে সাথে প্রোগ্রামিং করতে করতেই প্রোগ্রামিং শেখা হয়, সেটা কখনও থামানো যায় না। আমার নিজের কথাই বলি। আমি ২০০১ সালে প্রোগ্রামিং শেখা শুরু করি সি ল্যাঙ্গুয়েজ দিয়ে (স্ট্রাকচার্ড প্রোগ্রামিং)। এখন আমি ফাংশনাল প্রোগ্রামিং শিখছি, স্কালা (scala) ল্যাঙ্গুয়েজ শেখার সাথে সাথে (গত সপ্তাহ থেকে শুরু করেছি)। আবার পাইথন শেখার শুরু ২০০৭ সালের শেষ দিকে। কিন্তু আজকেও পাইথনের একটা বইয়ের একটা চ্যাপ্টার পড়ছিলাম, নতুন কিছু শেখার জন্য। এর মধ্যে গত কয়েক বছরে কিন্তু হাজার হাজার লাইন পাইথন কোড লিখে ফেলেছি। আবার আমি যদি বসে থাকতাম যে পাইথন পুরোপুরি শিখে তারপরে পাইথন দিয়ে কাজ করবো, তাহলে হয়ত কখনওই সেটা করা হতো না। এই পোস্টের মূল বক্তব্য আশা করি তোমরা বুঝতে পেরেছ।

ফ্লিপড ক্লাসরুম

ক্লাসরুমে শিক্ষক বেশিরভাগ সময়ই লেকচার দিবেন, তারপরে দুইটা উদাহরণ দেখিয়ে একগাদা বাড়ীর কাজ দিয়ে দিবেন। ক্লাসরুমে পড়ানোর এটাই চিরাচরিত রীতি। আমিও কালে-ভদ্রে যখন পড়াই, এভাবেই পড়াই। উন্নত দেশে এখন কিছু কিছু জায়গায় শিক্ষকরা ফ্লিপড ক্লাসরুম (flipped classroom) পদ্ধতি ব্যবহার করছেন। যেখানে শিক্ষার্থীরা বাসায় লেকচার দেখে ও পড়ে আসবে। ক্লাসে এসে আলোচনা, তর্ক-বিতর্ক ও প্রবলেম সলভিং করবে। আমরা উন্নত দেশ না, কিন্তু তাতে কী? এরকম এক্সপেরিমেন্ট করানোতে তো কোনো বাঁধা নাই।

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

অনলাইন কোর্সে আরেকটি সমস্যা হচ্ছে সার্টিফিকেশন। আমাদের হাতে আপাতত যেই টেকনোলজি আছে, সেটি দিয়ে ভেরিফাই করার উপায় নাই যে পরীক্ষা দেওয়ার সময় শিক্ষার্থী অন্য কারো সাহায্য নিচ্ছে কী না। Coursera এবং অন্য মুক (MOOC) প্রোভাইডারগুলো অবশ্য সেই চেষ্টা করছে, দেখা যাক কী হয়। সেই গবেষণায় অংশ নেওয়া বা বিনিয়োগ করার মত অর্থ আমাদের, অর্থাৎ দ্বিমিক কম্পিউটিং স্কুলের (https://www.facebook.com/DimikComputing) নাই।

বাংলাদেশে প্রোগ্রামিং শিক্ষা আরো ভালোভাবে ছড়িয়ে দিতে ফ্লিপড ক্লাসরুম যার বাংলা আমি করেছি অন্যরকম ক্লাসরুম (আরো ভালো শব্দ থাকলে কমেন্ট করুন), সেটি খুব কার্যকরী হবে বলে আমার ধারণা। কারণ আমাদের দেশে প্রোগ্রামিং শিক্ষক খুবই অপ্রতুল। কিন্তু হাজার হাজার ছেলেমেয়ে প্রোগ্রামিং শিখতে চায়। অনেকেই প্রোগ্রামিং শেখার জন্য বিভিন্ন ট্রেনিং সেন্টারে ভর্তি হয় এবং এইচটিএমএল শিখে মনের আনন্দে ফেরত আসে (HTML শেখা দোষের কিছু না, প্রোগ্রামিং শেখার মতো সবারই কমবেশি এইচটিএমএল জানা উচিত, তবে প্রোগ্রামিং শেখানোর নাম করে এইচটিএমএল শেখানো অবশ্যই দোষের)। যাই হোক, আমরা যেসব অনলাইন কোর্স তৈরি করছি (ইতিমধ্যে ৪ টা কমপ্লিট, সামনে আরো ৩টা আসছে), সেগুলোর ডিভিডিও তৈরি করেছি [১]। ডিভিডিতে কেবল ভিডিও লেকচার আছে। এই ডিভিডিগুলো শিক্ষার্থীরা কিনছে, তবে ভিডিও দেখার সময় তাদের মনে নানা প্রশ্নের উদয় হতে পারে, যেসব প্রশ্ন করার জন্য ফেসবুকে গ্রুপ তৈরি করে দিয়েছি। কিন্তু এখনও আমাদের দেশের বেশিরভাগ শিক্ষার্থী অনলাইনে কিভাবে প্রশ্ন করতে হয় বা কোনো কিছু জিজ্ঞেস করতে হয়, সেই ব্যাপারটি জানে না।

তাই আমি যেই উদ্যোগটি নিতে যাচ্ছি, সেটি হচ্ছে অন্যরকম ক্লাসরুম। দেশের বিভিন্ন জায়গায় শিক্ষার্থীরা প্রোগ্রামিং কোর্স করবে এভাবে : বাসায় ভিডিও লেকচার দেখবে, কোনো প্রশ্ন থাকলে সেটি ক্লাসে এসে করবে। ক্লাসে একজন সমন্বয়ক থাকবেন, যিনি সেই প্রশ্নের উত্তর দেওয়ার চেষ্টা করবেন, অন্য শিক্ষার্থীরাও সেই প্রশ্নের উত্তর দেওয়ার চেষ্টা করবে। আর উত্তর দিতে না পারলে সেই প্রশ্ন অনলাইনে আমাদের কাছে চলে আসবে (2nd level support)। এছাড়া আমরা অনেক প্রবলেম দিয়ে দিবো, যেগুলো শিক্ষার্থীরা সমাধানের চেষ্টা করবে এবং একটি অনলাইন প্ল্যাটফর্মে সেই সমাধানগুলো পরীক্ষা করা হবে।

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

প্রথম এক্সপেরিমেন্টটা করার জন্য ঢাকার বাইরে একটি প্রতিষ্ঠান রাজি হয়েছে। তবে তাদের কাজ শুরু করার আগে আমি একটি মিনি এক্সপেরিমেন্ট করবো কয়েকজন শিক্ষার্থী নিয়ে, যেখানে আমি নিজে ক্লাসরুমে উপস্থিত থাকবো, কিন্তু লেকচার দিবো না। কেবল প্রশ্নের উত্তর দিবো আর প্রবলেম সলভিং সেশনে সাহায্য করবো। এটি করা হবে দ্বিমিক ক্লাসরুমে (https://www.facebook.com/DimikClassroom)। বিস্তারিত দ্বিমিক ক্লাসরুমের ফেসবুক পেজে দেওয়া আছে। দেখা যাক কী হয়। নতুন কিছু করাটা সবসময়ই আনন্দদায়ক, আর সেটা যদি হয় অন্যরকম কিছু, তাহলে আনন্দের মাত্রাটা বেড়েই যায়।

[১] দ্বিমিক কম্পিউটিং থেকে প্রকাশিত ডিভিডগুলো পাওয়া যাবে রকমারি ডট কম এবং নীলক্ষেতের হক লাইব্রেরিতে।
রকমারির লিঙ্ক : http://rokomari.com/publisher/2565