গত ০৬ মার্চ, ২০১৭ তে প্রোগ্রামিং প্রবলেম (Programming Problem in Bengali) গ্রুপে Ami Alavola ভাইয়ের একটা জনগুরুত্বপূর্ণ পোস্ট দেখতে পাই। সেখানে তিনি জাতির উদ্দেশ্যে একটা কঠিন প্রশ্ন করে বসেন - “বিগিনারদের কি পাইথন দিয়ে প্রোগ্রামিং শেখানো উচিত?” প্রশ্নটা দেখে চিন্তা করতে লাগলাম কি উত্তর দেয়া যায়! ব্যাপক ভাবনা-চিন্তা শেষে কমেন্টে উত্তর দিতে শুরুও করেছিলাম। তারপর ভাবলাম, এরচেয়ে বরং একটা সুদীর্ঘ ব্লগপোস্ট লিখে ফেলা যাক। আমি অবশ্যই আমার নিজের কথা বলব। তবে তার আগে আবু আশরাফ মাসনুন ভাই ও অনিরুদ্ধ অধিকারী‘র কোটেশন তুলে ধরব।

এই প্রশ্নের উত্তরে আবু আশরাফ মাসনুন ভাই বলেছেন -

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

আর অনিরুদ্ধ অধিকারী বলেছে -

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

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

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

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

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

বিল্ট-ইন ফাংশনগুলোকে আমরা রেডিমেড ইংরেজি (অন্য ভাষাও হতে পারে) বাক্যের সাথে তুলনা করতে পারি। ৩০ দিনে ইংরেজি শিক্ষা‘র বই থেকে কয়েকটা বাক্য শিখে আমি হয়ত মোটামুটিভাবে কাজ চালিয়ে নিতে পারব। কিন্তু ইংরেজি ভাষায় অনর্গল কথা বলার জন্য সে ভাষার ব্যাকরণ ও শব্দভান্ডারে ভাল দখল থাকা বাঞ্ছনীয়। ঠিক তেমনি, বিল্ট-ইন ফাংশন ব্যবহার করে হয়ত আমি প্রোগ্রাম লিখতে পারব। কিন্তু প্রোগ্রামিংয়ে দক্ষ হবার জন্য ভিত্তি মজবুত করা দরকার। আর সি হতে পারে দক্ষ হবার পথে ফাউন্ডেশন স্বরূপ। আর এই ফাউন্ডেশনের চেয়েও ইম্পরট্যান্ট ব্যাপারটা হল পাইলিং, যার জন্য অ্যাসেম্বলি ল্যাঙ্গুয়েজ শেখা গুরুত্বপূর্ণ। (অ্যাসেম্বলি একটা লো লেভেল ল্যাঙ্গুয়েজ। একটা ভ্যালু/ডাটা র‍্যামের কোন রেজিস্টারে স্টোর হবে সেটা পর্যন্ত এখানে দেখিয়ে দিতে হয়। বহুত ঝামেলার জিনিস!)

আমাদের দেশের প্রেক্ষাপট নিয়ে কথা বলছিলাম। সি দিয়ে প্রোগ্রামিং শেখা শুরু করা যে অত্যন্ত শুভ সেটা নিয়ে আশা করি কারো মনে সংশয় নেই। কিন্তু শুরুতেই কার‌ো যদি সি ভাল না লাগে? অথবা সি’য়ের কাঠিন্য যদি নতুন প্রোগ্রামারের মনে ভয় ধরিয়ে দেয়? তাহলে কি সে পাইথন দিয়ে প্রোগ্রামিং শেখা শুরু করতে পারবে না? এই স্থলে আমি সহজ ভাষায় পাইথন ৩ বইয়ের ফ্লাপ থেকে কোটেশন দিতে চাই -

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

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