প্রোগ্রামিং লড়াইয়ের প্রস্তুতি

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

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

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

প্রোগ্রামিং প্রতিযোগিতায় ভালো করতে হলে দুটি কাজ পাশাপাশি চালিয়ে যেতে হয়, সমস্যার সমাধান ও লেখাপড়া। সমস্যার সমাধানের জন্য ভালো কিছু ওয়েবসাইট হলো—কোড ফোর্সেস http://codeforces.com, টপ কোডার www.topcoder.com, কোড শেফ www.codechef.com, এসপিওজে www.spoj.com, লাইট ওজে http://lightoj.com৷
প্রোগ্রামিং ভাষা শেখার পর ডেটা স্ট্রাকচার আর অ্যালগরিদম শিখে নিতে হবে৷ এগুলো ভালো বোঝার জন্য ডিসক্রিট ম্যাথ বা বিচ্ছিন্ন গণিতে ভালো দখল থাকা চাই। ডিসক্রিট ম্যাথ কম্পিউটার বিজ্ঞান বিষয়ের পাঠক্রমে আছে। নিজে নিজে শিখতে চাইলে বইয়ের সাহায্য নেওয়া যায় কিংবা অনলাইনে ডিসক্রিট ম্যাথের ওপর একটি বিনা মূল্যের কোর্স আছে, সেটিতে অংশ নিতে পারেন৷ ঠিকানা: http://discrete-math.appspot.com৷
বাংলাদেশ প্রকৌশল বিশ্ববিদ্যালয়ে পুরকৌশলে পড়ার সময় ২০১২ সালে এসিএম আইসিপিসির চূড়ান্ত পর্বে অংশ নিয়েছিলেন মীর ওয়াসি আহমেদ৷ তাঁর মতে অ্যালগরিদম ছাড়াও গণিতের বেশ কিছু বিষয়ে ভালো দখল থাকতে হবে। যেমন: জ্যামিতি, সংখ্যাতত্ত্ব, কম্বিনেটরিক্স। তবে এগুলো আলাদাভাবে না শিখে এ-সংক্রান্ত সমাধান করতে করতে শেখাটাই বেশি কার্যকরী৷ তিনি বলেন, ‘প্রথমে একটি সমস্যা নিয়ে সেটি নিজে সমাধানের চেষ্টা করতে হবে। যথেষ্ট সময় চেষ্টা করার পরে সেটি সমাধান করতে না পারলে, সেটির সমাধান দেখে শিখে নিতে হবে। নিজে প্রোগ্রামিং সংকেত বা কোড লেখার পাশাপাশি অন্যের লেখা কোড পড়ে বোঝাটাও দরকারি।’
অ্যালগরিদম শেখার ব্যাপারে একটি কথা। অ্যালগরিদমটি কীভাবে কাজ করে কেবল সেটি জানাই এখন যথেষ্ট নয়। অ্যালগরিদম-সংক্রান্ত বইয়ের অনুশীলনীর সমস্যাগুলো সমাধান করতে হবে, যাতে সেটির গভীরে প্রবেশ করা যায়। আর তার সঙ্গে সমস্যার সমাধান তো চলবেই।

চাই দলীয় দক্ষতা
ব্যক্তিগত দক্ষতা অর্জনের পরে নজর দিতে হবে দলীয় দক্ষতা বাড়ানোর প্রতি। যেহেতু তিনজন মিলে একটি দল এবং সেই দলের জন্য একটি কম্পিউটার ও একসেট প্রশ্ন, তাই দলের সদস্যদের মধ্যে চমৎকার বোঝাপড়া থাকা চাই। দল হিসেবে বিভিন্ন অনলাইন প্রতিযোগিতায় অংশ নিতে হবে। সেখানে অংশ নেওয়ার সময় তিনজন মিলে যেন একটি কম্পিউটার ব্যবহার করতে হবে৷ সমস্যাগুলোও একসেট প্রিন্ট করে সেটি ব্যবহার করা উচিত। দলের প্রত্যেক সদস্যের অপর সদস্যদের শক্তি ও দুর্বলতা সম্পর্কে জানতে হবে। যে বিষয়ের ওপর যিনি দক্ষ, সেই বিষয়ের সমাধানের দায়িত্ব তাঁকেই দেওয়া উচিত। অনেক সময় একটি সমস্যা নিয়ে দুজন মিলে আলোচনা করলে দ্রুত সমাধান চলে আসে। প্রোগ্রামিং প্রতিযোগিতায় দলগত কৌশলের ব্যাপারে একটি চমৎকার লেখা আছে, টিমওয়ার্ক ইন প্রোগ্রামিং কনটেস্ট ( http://goo.gl/wBPBON)।
এসিএম আইসিপিসির বিচারক ও মুক্তসফটের প্রধান নির্বাহী কর্মকর্তা মোহাম্মাদ মাহমুদুর রহমান বলেন, ‘প্রোগ্রামিং প্রতিযোগিতা থেকে শেখার আছে অনেক কিছু—দ্রুত ও নিখুঁত কোডিং, জটিল সমস্যার সমাধান করা, ধৈর্য, অধ্যবসায়, দলগত কাজ, চাপের মুখে মাথা ঠান্ডা রাখা ইত্যাদি৷ এটি এমন একটি বিষয় যা কর্মজীবনে ঢোকার আগেই একজন শিক্ষার্থীকে খুব গুরুত্বপূর্ণ একটি বার্তা দেয়—নিজেকে চ্যালেঞ্জ করে দেখ, তোমার পক্ষে যেকোনো কিছু জয় করা সম্ভব।’ তাঁর মতে, প্রতিযোগিতায় ভালো করতে হলে চাই পরিশ্রম, জেদ, আত্মবিশ্বাস। ধাঁধা বা গাণিতিক সমস্যা সমাধানের অভ্যাস কাজে আসবে অনেক। ইংরেজিতে দখলও জরুরি। সবচেয়ে গুরুত্বপূর্ণ—উপভোগ করতে হবে। এটাকে পরীক্ষা হিসেবে না নিয়ে খেলা হিসেবে চিন্তা করা ভালো হয়৷
প্রোগ্রামিং প্রতিযোগিতায় সাফল্য লাভের জন্য যতটুকু না মেধার প্রয়োজন, তার চেয়ে বেশি প্রয়োজন পরিশ্রম, চর্চা ও অধ্যবসায়ের। বাইরে থেকে দেখলে অনেকের মনেই প্রশ্ন জাগবে, এরা একটা প্রতিযোগিতার জন্য এভাবে নিজেকে উজাড় করে দিচ্ছে কেন? এসিএম আইসিপিসির চূড়ান্ত পর্বের বিচারক শাহরিয়ার মঞ্জুর বলেন, প্রোগ্রামিং প্রতিযোগিতায় অংশগ্রহণ ও নিয়মিত চর্চা করলে সমস্যা সমাধানের একটা দক্ষতা তৈরি হয়, সেই সঙ্গে আসে আত্মবিশ্বাস৷ এটিই প্রোগ্রামারদের অনেক বড় পাওয়া। আর সমস্যা সমাধানের দক্ষতা তৈরি হওয়ার ফলে তখন কেবল প্রোগ্রামিং সমস্যাই নয়, সমাজের বা জীবনের অন্য অনেক সমস্যাও অনেক সহজ মনে হয়। যারা ছাত্রজীবনে প্রোগ্রামিং প্রতিযোগিতার সঙ্গে যুক্ত থাকে, তারা কর্মক্ষেত্রেও অনেক সমস্যার সমাধান অন্যদের চেয়ে দ্রুত ও ভালোভাবে করতে পারে।’ তাঁর এ কথা যে সত্যি, সেটির প্রমাণ হয় যে গুগল, ফেসবুক, মাইক্রোসফটের মতো প্রতিষ্ঠানগুলোও সফটওয়্যার প্রকৌশলী নেওয়ার সময় যারা প্রোগ্রামিং প্রতিযোগিতায় খুব ভালো করেন, তাদের অগ্রাধিকার দেয়।
সুশৃঙ্খলভাবে প্রোগ্রামিং চর্চা এবং প্রোগ্রামিং প্রতিযোগিতায় অংশগ্রহণের ফলে কেবল প্রোগ্রামিং উৎকর্ষই বাড়বে না, মানুষ হিসেবে নিজেকে আরও উন্নত করে গড়ে তোলা যাবে। আর জাতি হিসেবেও আমদের এগিয়ে নেবে।

লেখক: জাতীয় ও আন্তর্জাতিক বিভিন্ন প্রোগ্রামিং প্রতিযোগিতায় অংশ নিয়েছেন, বিচারকও ছিলেন৷ ‘কম্পিউটার প্রোগ্রামিং বইয়ের লেখক; তথ্যপ্রযুক্তি উদ্যোক্তা৷

Leave a Reply

Your email address will not be published. Required fields are marked *