শাহরিয়ার মনজুর – ইন্টারভিউ

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

ACM ICPC World Finals 2016 – Phuket, Thailand.

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

সুবিন : আপনি তো এবারেও এসিএম আইসিপিসি’র চূড়ান্ত পর্ব বিচারক হিসেবে যাচ্ছেন। এ নিয়ে আপনার আইসিপিসির চূড়ান্ত পর্বে কত বার যাওয়া হবে?
শাহরিয়ার মনজুর : বিচারক হলাম ত্রয়োদশতম বারের মতো কিন্তু যাচ্ছি এগারতম বার, প্রথম দুবার ভিসা পাইনি।

সুবিন : আইসিপিসির চূড়ান্ত পর্বের বিচারক হিসেবে নির্বাচনের প্রক্রিয়াটি কী?
শাহরিয়ার মনজুর : ডিরেক্টর অফ জাজিং কাছে প্রবলেম পাঠাতে হয় ইমেইলের মাধ্যমে। একটি কমিটি প্রবলেম সেটারের নাম না দেখে প্রবলেম বাছাই করে। যাদের প্রবলেম বাছাই করা হয় তাদের মধ্য থেকেই বিচারক নির্বাচন করা হয়। তবে একদম অপরিচিত কারো প্রবলেম নেয়া হয় না হয়ত। আমি যখন প্রথমবার প্রবলেম দেই তখন কিছু কারণে পরিচিত ছিলাম অনেকের কাছেই। যেমন : UVa Online Judge-এর সাথে জড়িত থাকা, ওয়ার্ল্ড ফাইনালস্ ওয়ার্মআপ আয়োজন করা, স্কিয়েনা-রেভিল্লা এর প্রোগ্রামিং চ্যালেঞ্জেস (Programming challenges) বইতে আমার নাম থাকা ইত্যাদি। তাই বলা যায়, আমি চূড়ান্ত পর্বের বিচারক হয়েছিলাম অনেকটা ভাগ্যের জোরেই।

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

সুবিন : এসিএম আইসিপিসি’র চূড়ান্ত পর্ব ছাড়া আর কোন কোন প্রতিযোগিতার জন্য আপনি প্রোগ্রামিং সমস্যা তৈরি করেন?
শাহরিয়ার মনজুর : ভবিষ্যতে কোথায় করব জানিনা কারণ বয়স হচ্ছে। কিন্তু এখন পর্যন্ত ঢাকা, ফুকেট (থাইল্যান্ড), কুয়ালালামপুর (মালয়েশিয়া), SWERC এবং কিছু চাইনিজ রিজিওনালের জন্য প্রোগ্রামিং সমস্যা তৈরি করেছি।

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

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

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

সুবিন : দেশের প্রোগ্রামারদের মানের উন্নয়ন ঘটানোর জন্য সরকারীভাবে এবং ব্যাক্তিপর্যায়ে কী ধরণের উদ্যোগ নেওয়া যেতে পারে?
শাহরিয়ার মনজুর : সরকার দেশের শিক্ষার মান বাড়াতে পারে যাতে করে মানুষের বিশ্লেষণ করার ক্ষমতা আরো বাড়ে। এছাড়া প্রোগ্রামিং ক্যাম্প, জাতীয় প্রোগ্রামিং প্রতিযোগিতা এর মত ইভেন্ট আরো বাড়ানো যেতে পারে।

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

সুবিন : ভালো সফটওয়্যার প্রকৌশলী হতে গেলে প্রোগ্রামিংয়ে দক্ষ হতে হয়, আবার প্রোগ্রামিংয়ে দক্ষতা অর্জনের জন্য চর্চার কোনো বিকল্প নেই। এখন যারা প্রতিযোগিতামূলক প্রোগ্রামিং করে না, বা অনলাইন জাজেও প্রবলেম সলভ করে না, তাদের জন্য প্রোগ্রামিং চর্চা করার বিকল্প উপায় কী হতে পারে?
শাহরিয়ার মনজুর : মোটামুটি ভালো প্রোগ্রামার হবার জন্য যেকোনো ভালো বই এর অনুশীলনীর সব সমস্যা নিজে নিজে সমাধান করলেই যথেষ্ট। এমন লেখক নামের মধ্যে “শাহরিয়ার” সাবস্ট্রিং (substring) আছে তাদের লেখা বই পড়াও ভালো।
সুবিন : একজন কম্পিউটার বিজ্ঞানের শিক্ষার্থীর জন্য প্রথম প্রোগ্রামিং কোর্সটা খুবই গুরুত্বপূর্ণ। তো এই কোর্সটি আপনি দীর্ঘদিন পড়িয়ে আসছেন। যারা নতুন শিক্ষক হবেন এবং এই কোর্সটি পড়াবেন, তাদের জন্য আপনি কিছু পরামর্শ দেন।
শাহরিয়ার মনজুর : যে কাউকে প্রোগ্রামিং শেখাতে পারব এই বিশ্বাস আমার আছে। কিন্তু মূল সমস্যা হলো প্রোগ্রামিং শেখানোর জন্য যত সময় প্রত্যেক শিক্ষার্থীকে দেওয়া দরকার সেটা সম্ভব হয়ে ওঠে না ক্রেডিট আওয়ার (credit hour)-এর দোলাচলে। এটাও ঠিক যে সবার খুব ভালো প্রোগ্রামার হবার ক্ষমতা থাকে না কিন্তু মোটামুটি মানের প্রোগ্রামার সবাই হতে পারে। শিক্ষক হিসাবে আমি কিছু ভালো প্রোগ্রামার তৈরী করতে পেরেছি কিন্তু আরো অনেক বেশি পারলে ভালো লাগত। আবার সাউদইস্ট ইউনিভার্সিটির একমাত্র গুগলার আমার সি এর কোর্স করেই নি, নিজে নিজেই প্রোগ্রামিং শিখেছে।

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

সুবিন : আপনি ছোটবেলায় কোন কোন স্কুল-কলেজে পড়েছেন?
শাহরিয়ার মনজুর : বনানী বিদ্যানিকেতন (কেজি), লিটল এঞ্জেলস স্কুল (৩-৫), ইঞ্জিনিয়ারিং ইউনিভার্সিটি স্কুল (৬-১০), ঢাকা কলেজ। আমার দেখা সবচেয়ে ভালো শিক্ষা প্রতিষ্ঠান ঢাকা কলেজ কারণ সেখানে মুক্ত চিন্তা করার অনেক সুযোগ।

সুবিন : আমাদের স্কুলের লেখাপড়া নিয়ে তো নিয়মিতই বিভিন্ন পরীক্ষা-নিরীক্ষা করা হয়। সিলেবাস, বই ইত্যাদি পরিবর্তন করা হয়। আপনার পর্যবেক্ষণে আমাদের স্কুলের শিক্ষাব্যবস্থায় কি মৌলিক কোনো পরিবর্তন প্রয়োজন বলে আপনি মনে করেন?
শাহরিয়ার মনজুর : খুব ধীরে হলেও সব দেশের শিক্ষার মান বাড়ে, আমরা কেন জানি উল্টা দিকে হাঁটলাম। নতুন যদি কিছু করতে না পারি, আগে যেমন ছিল সেখানে তো অন্তত ফেরত যেতে পারি? SSC , HSC -তে গ্রেডিং সিস্টেম যদি রাখতেই হয় তাহলে ৯০% এ A+ করা যেতে পারে এবং গ্রেড এর ধাপ আরো বাড়ানো উচিত। মনে রাখা দরকার যে শিক্ষা ব্যবস্থা কোনো সার্কাস না যে সবাইকে এসেই চমৎপ্রদ কোনো খেলা দেখাতে হবে।

সুবিন : আপনি প্রোগ্রামিং শেখা শুরু করলেন কবে এবং কিভাবে প্রোগ্রামিং-এর প্রতি আকৃষ্ট হয়েছিলেন?

শাহরিয়ার মনজুর : প্রোগ্রামিং শেখা শুরু করি বুড়ো বয়সে, অর্থাৎ আমার বয়স যখন ঊনিশ, তখন। হুজুগে পরে বুয়েটের কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগে ভর্তি হই। শুরুতে প্রোগ্রামিং খুবই ভয় পেতাম। ১০,০০০+ লাইন এর একটি টার্ম অ্যাসাইনমেন্ট করে নিজেকে খুব ভালো প্রোগ্রামার ভাবা শুরু করি, ভাল্লাদলিদ (ইউভিএ) সাইট-এ প্রোগ্রামিং সমস্যা সমাধান করতে গিয়ে সেই ভুল ভাঙ্গে, এরপর ওইখানে বেশ কিছু সমস্যা সমাধান করে আবার নিজেকে ততক্ষণ ভালো প্রোগ্রামার ভাবা শুরু করি যতক্ষণ কিসমান এর সাথে আলাপ হয়নি। সার করা হলো : একমাত্র বোকারাই নিজেদের ভালো প্রোগ্রামার ভাবে।

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

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

“আজি হতে শত বর্ষ পরে ,
কে তুমি খাবি খাচ্ছ আমার প্রবলেম নিয়ে
আজি হতে শত বর্ষ পরে”

এই সাক্ষাৎকারটিসহ মোট এক ডজন সাক্ষাৎকার নিয়ে প্রকাশিত হয়েছে প্রোগ্রামিং ক্যারিয়ার গাইডলাইনঃ এক ডজন প্রোগ্রামারের কথা। বইটি পাওয়া যাচ্ছে রকমারি ডট কম-এ।

প্রোগ্রামিং কনটেস্ট

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

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

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

বাংলাদেশ ১৯৯৮ সাল থেকে নিয়মিত এসিএম আইসিপিসি’র চূড়ান্ত পর্ব অর্থাৎ ওয়ার্ল্ড ফাইনালসে অংশ নিয়ে আসছে। এবছরও রাশিয়ায় অনুষ্ঠিতব্য এসিএম আইসিপিসি ওয়ার্ল্ড ফাইনালসে বাংলাদেশ থেকে অংশ নেওয়ার যোগ্যতা অর্জন করেছে সাস্ট (শাহজালাল বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়) ও বুয়েট (বাংলাদেশ প্রকৌশল বিশ্ববিদ্যালয়) থেকে একটি করে দল। এখন পর্যন্ত বাংলাদেশ একবারই সেরা ২০টি দলের মধ্যে ঢুকতে পেরেছিল। ১৯৯৯ সালে বুয়েটের একটি দল সেটি সম্ভব করেছিল বিশ্বের বড় বড় অনেকগুলো বিশ্ববিদ্যালয়কে পেছনে ফেলে ১১তম স্থান অর্জন করে। অনেকদিন ধরে অংশ নিয়ে আসলেও বাংলাদেশে প্রোগ্রামিং প্রতিযোগিতা এখনও খুব জনপ্রিয় হয়ে উঠতে পারে নি, সেটি প্রোগ্রামিং সম্পর্কে না জানার কারণেই হোক, কিংবা কষ্ট করে নতুন কিছু শেখার প্রতি তরুণ প্রজন্মের অনীহার কারণেই। কিন্তু ডিজিটাল বাংলাদেশ বিনির্মাণে প্রোগ্রামিং প্রতিযোগিতা একটি বিশেষ গুরুত্ব বহন করে।

প্রোগ্রামিং প্রতিযোগিতায় আসলে কী হয়? এসিএম আইসিপিসি বা এই ধরনের প্রতিযোগিতায় তিনজন প্রোগ্রামার মিলে একটি দল হিসেবে অংশগ্রহন করে। প্রতিটি দলকে দেওয়া হয় একটি কম্পিউটার, এক সেট প্রোগ্রামিং সমস্যা (৯ থেকে ১২ টি) এবং সেগুলো সমাধানের জন্য ৫ ঘণ্টা সময়। নির্দিষ্ট সময়ের মধ্যে যেই দল সবচেয়ে বেশি সংখ্যক সমস্যার সমাধান করতে পারে, সেই দল বিজয়ী হয়। সমান সংখ্যক সমস্যার সমাধান করলে যারা কম সময়ে করেছে এবং পেনাল্টি কম (সমাধান ভুল হলে ২০ মিনিট পেনাল্টি হয়), তারা rank-list-এ ওপরে থাকে। সমস্যাগুলোর মধ্যে একটি সমস্যা এমন দেওয়া হয় যেন সেটি সব দলই সমাধান করতে পারে, আরেকটি থাকে এমন যাতে কোনো দলই সমাধান করতে না পারে।

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

প্রোগ্রামিং প্রতিযোগিতায় অংশ নিতে কী জানা লাগবে? প্রথমেই একটি প্রোগ্রামিং ভাষায় উপর ভালো দখল প্রয়োজন। সি (C) বা সি প্লাস প্লাস (C++) এক্ষেত্রে সবচেয়ে ভালো। কারণ এ দুটি ভাষা মোটামুটি সব ধরণের প্রোগ্রামিং প্রতিযোগিতায় ব্যবহার করা হয়। অনেকক্ষেত্রে জাভাও ব্যবহার করা যায়, তবে কিছু কিছু সমস্যার সমাধান জাভা দিলে লেখা হলে সেগুলো রান করতে বেশি সময় লাগে। সি এর চেয়ে সি প্লাস প্লাস ব্যবহার করা বুদ্ধিমানের কাজ এই জন্য যে সেখানে এসটিএল (STL : স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি) বলে খুব কার্যকরী লাইব্রেরি আছে, যেটির ব্যবহার কিছু কিছু ক্ষেত্রে অনেক সময় বাঁচিয়ে দেয়। তবে সি এবং সি প্লাস প্লাস-এর মধ্যে মিল অনেক বেশি এবং সি দিয়ে প্রোগ্রামিং শেখা শুরু করলে সি প্লাস প্লাস শিখতে খুব একটা সময় লাগবে না। প্রোগ্রামিং প্রতিযোগিতায় যারা অংশগ্রহন করতে ইচ্ছুক, তাদের কথা মাথায় রেখে অনলাইনে একটি প্রোগ্রামিং কোর্স তৈরি করা হয়েছে, সেটিতে অংশ নেওয়ার জন্য যেতে হবে এখানে : http://dimikcomputing.com/course/introduction-to-programming-online-course/ , কোর্সটি সবার জন্য বিনামূল্যে দেওয়া আছে এবং নিজের সুবিধামতো সময়ে সেটি করা যাবে। তারপর কোর্সটি করা শেষ হলে কিংবা প্রোগ্রামিং ভাষা মোটামুটি শেখা হলে প্রবলেম সলভ করা শুরু করতে হবে। শুরুটা করার জন্য এখানে কিছু প্রোগ্রামিং সমস্যা আছে যেগুলোর বর্ণনা বাংলাতে লেখা : http://goo.gl/wsJPQV

প্রোগ্রামিং প্রতিযোগিতায় ভালো করতে হলে দুটি জিনিস পাশাপাশি চালিয়ে যেতে হয়, প্রবলেম সলভিং ও লেখাপড়া। প্রবলেম সলভ করার জন্য ভালো কিছু ওয়েবসাইট হচ্ছে :

CodeForces (http://codeforces.com/)
TopCoder (http://www.topcoder.com/)
CodeChef (https://www.codechef.com/)
SPOJ (http://www.spoj.com/)
LightOJ (http://lightoj.com)

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

বিভিন্ন ওয়েবসাইটে প্রবলেম সলভ করার সময় অনেকে একই রকম অনেক প্রবলেম সলভ করে। সেটি না করে বিভিন্ন রকম প্রবলেম সলভ করার পেছনে সময় দেওয়াটাই শ্রেয়। অনেক সময় কঠিন কিছু প্রবলেমের পেছনে বেশ কয়েকদিন লেগে থাকতে হয়। সমস্যা সমাধানের জন্য এই লেগে থাকার ব্যাপারটা বিরক্তিকর ঠেকালেও হতাশ হওয়া চলবে না।

প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার পরে শিখতে হবে ডাটা স্ট্রাকচার আর অ্যালগরিদম। এগুলো ভালো বুঝার জন্য আবার ডিসক্রিট ম্যাথ বা বিচ্ছিন্ন গণিতের উপর ভালো দখল থাকা চাই। ডিসক্রিট ম্যাথ বিশ্ববিদ্যালয়গুলোর কম্পিউটার বিজ্ঞান বিভাগের সিলেবাসে আছে। আর নিজে নিজে শিখতে চাইলে বইয়ের সাহায্য নেওয়া যায় কিংবা অনলাইনে ডিসক্রিট ম্যাথের উপর একটি ফ্রি কোর্স আছে, সেটিতে অংশ নেওয়া যায় : http://dimikcomputing.com/course/discrete-mathematics-online-course/। ডাটা স্ট্রাকচার এবং  অ্যালগরিদম শেখার সময় বেশ কয়েকটি বই পড়তে হবে। আর প্রতিটি অ্যালগরিদম শেখার পরে সেই অ্যালগরিদম ব্যবহার করে কয়েকটি সমস্যা সমাধান করে ফেলতে হবে। ইন্টারনেটে এরকম কিছু তালিকা পাওয়া যায় যে একটি অ্যালগরিদম দিয়ে কোন কোন ওয়েবসাইটে কোন কোন সমস্যাগুলো সমাধান করা যায়। অ্যালগরিদম ছাড়াও গণিতের বেশ কিছু বিষয়ে ভালো দখল থাকতে হবে। যেমন : জ্যামিতি, সংখ্যাতত্ত্ব, কম্বিনেটরিক্স। তবে এগুলো আলাদাভাবে না শিখে এই সংক্রান্ত প্রবলেম সলভ করতে করতে শেখাটাই বেশি কার্যকরি – এমন মতামত দিয়েছেন মীর ওয়াসি আহমেদ, যিনি বুয়েটে সিভিল ইঞ্জিনিয়ারিংয়ের ছাত্র থাকাকালীন অংশ নিয়েছেন এসিএম আইসিপিসি’র চূড়ান্ত পর্বে (২০১২ সালে)। তাঁর মতে প্রথমে একটি সমস্যা নিয়ে সেটি নিজে সমাধানের চেষ্টা করতে হবে। যথেষ্ট সময় চেষ্টা করার পরে সেটি সমাধান করতে না পারলে, সেটির সমাধান দেখে শিখে নিতে হবে। নিজে কোড লেখার পাশাপাশি অন্যের লেখা কোড পড়ে বোঝাটাও অনের দরকারি।

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

ব্যক্তিগত দক্ষতা অর্জনের পরে নজর দিতে হবে দলীয় দক্ষতা বাড়ানোর প্রতি। যেহেতু তিনজন মিলে একটি দল এবং সেই দলের জন্য একটি মাত্র কম্পিউটার ও একসেট প্রশ্ন, তাই দলের সদস্যদের মধ্যে চমৎকার বোঝাপড়া থাকা চাই। দল হিসেবে বিভিন্ন অনলাইন প্রতিযোগিতায় অংশ নিতে হবে। সেখানে অংশ নেওয়ার সময় খেয়াল রাখতে হবে যে তিনজন মিলে যেন একটি কম্পিউটার ব্যবহার করে। সমস্যাগুলোও একসেট প্রিন্ট করে সেটি ব্যবহার করা উচিত। দলের প্রত্যেক সদস্যের অপর সদস্যদের শক্তি ও দুর্বলতা সম্পর্কে জানতে হবে। যেই বিষয়ের উপর যে দক্ষ, সেই বিষয়ের সমাধানের দায়িত্ব তার উপরই দেওয়া উচিত। আর অনেক সময় একটি প্রবলেম নিয়ে দুজন মিলে আলোচনা করলে দ্রুত সমাধান চলে আসে। প্রোগ্রামিং কনটেস্টের দলগত কৌশলের ব্যাপারে একটি চমৎকার লেখা আছে, টিমওয়ার্ক ইন প্রোগ্রামিং কনটেস্ট (লিঙ্ক : http://goo.gl/wBPBON)। এটি সবার পড়া আবশ্যক।

২০০৭ সালের আইসিপিসি ওয়ার্ল্ড ফাইনালসে অংশগ্রহনকারী, বিগত সাত বছর ধরে এসিএম আইসিপিসির বিচারক ও মুক্তসফটের সিইও মোহাম্মাদ মাহমুদুর রহমান এর মতে – “প্রোগ্রামিং কনটেস্ট এমন একটি কো-কারিকুলার অ্যাক্টিভিটি যা থেকে শেখার আছে অনেক – দ্রুত ও নিখুত কোডিং, জটিল সমস্যার সমাধান করা, ধৈর্য্য, অধ্যবসায়, টিমওয়ার্ক, চাপের মুখে মাথা ঠান্ডা রাখা এরকম আরো অনেক কিছু। সবচেয়ে যেটা জরুরি, এটি এমন একটি ইভেন্ট যা কর্মজীবনে প্রবেশের আগেই একজন শিক্ষার্থীকে খুব গুরুত্বপূর্ণ একটি বার্তা দেয়, নিজেকে চ্যালেঞ্জ করে দেখ​, তোমার পক্ষে যেকোন কিছু জয় করা সম্ভব। কনটেস্টে ভালো করতে হলে চাই পরিশ্রম, জেদ, আত্নবিশ্বাস। শুধুমাত্র গতবাধা কোডিং-এর চেয়ে অনেক চিন্তা করে একটি কঠিন প্রবলেম সলভ করা লাভজনক। ধাঁধাঁ বা গাণিতিক সমস্যা সমাধানের অভ্যাস কাজে আসবে অনেক। ইংরেজিতে দখল-ও জরুরি। সবচেয়ে যেটা গুরুত্বপূর্ণ, উপভোগ করতে হবে। কনটেস্টকে পরীক্ষা হিসেবে না নিয়ে খেলা হিসেবে চিন্তা করতে পারলে ভালো হয় – কম্পিটিটিভ লার্নিং-এর মূল কথা কিন্তু এটিই।”

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

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

বি.দ্র. আমার এই লেখাটি প্রথম আলো’র প্রজন্ম ডট কম পাতায় প্রকাশিত হয় ২০ জুন ২০১৪ তারিখে।

প্রোগ্রামিং প্রতিযোগিতার প্রস্তুতির জন্য দ্বিমিক প্রকাশনীর তিনটি বই –