#কম্পিটিটিভ প্রোগ্রামিং জার্নি :
Competitive programming হচ্ছে একটা মেধাভিত্তিক প্রতিযোগিতা। এখানে বিভিন্ন ধরনের সমস্যা দেয়া থাকে। এবং এসব সমস্যার সমধান করতে হয় Programming Language (C, C++, JAVA..) ব্যাবহার করে। এতে একজন programmer এর programming, algorithm, data structure, mathematical skill পরীক্ষা করা হয়। সবচেয়ে বড় কথা হল এখানে মুখস্ত করতে হয় না। প্রোগ্রামিং সমস্যাগুলো বিভিন্ন site (UVA, Lightoj, Codeforces,SPOJ) ইত্যাদিতে থাকে।
মূলত কম্পিউটারে প্রোগ্রাম লিখে সমস্যা সমাধানের জন্য যে প্রতিযোগিতাগুলো হয়ে থাকে সেগুলোই কম্পিটিটিভ প্রোগ্রামিং। এই কম্পিটিটিভ প্রোগ্রামিংকে আমরা কন্টেস্ট বলে থাকি। কম্পিউটার সায়েন্সের সবার কাছে বর্তমান এটি খুবই প্ররিচিত একটি শব্দ। কন্টেস্টগুলোতে একটা নির্দিস্ট সময় বেঁধে দেয়া হয় এবং সে সময়ের মাঝে নির্দিষ্ট সংখ্যক সমস্যার সমাধান লেখার চেষ্টা করেন প্রোগ্রামাররা। কন্টেস্ট হয় দু ধরণেরঃ ১. অনলাইন, ২. অনসাইট। অনলাইন কন্টেস্ট নাম শুনেই বুঝার কথা এই প্রতিযোগিতাটি অনলাইনে হয়। Topcoder, CodeForces, Hackerrank, CodeChef এসব অনলাইন জাজিং প্ল্যাটফর্মে নিয়মিত অনলাইন কন্টেস্ট অনুষ্ঠিত হয়। সারা বিশ্বের যে কেউ যেকোন স্থান থেকে এসব প্রতিযোগিতায় অংশগ্রহণ করতে পারেন। অনসাইট কন্টেস্ট মানে একই জায়গায় সব প্রোগ্রামাররা একই নেটওয়ার্কে বসে কন্টেস্ট করেন। অনসাইটের সময়সীমা অধিকাংশ ক্ষেত্রে ০৫ ঘণ্টা নির্ধারণ করা থাকে। ০৮ টা থেকে ১১ টা সমস্যার সমাধান চাওয়া হয় সাধারণত। অনলাইন কন্টেস্ট এর সময় site অনুযায়ী ভিন্ন ভিন্ন হয়। অনসাইট কন্টেস্টে সাধারনত Team (তিন জনের) নিয়ে জয়েন করতে হয় এবং একজন Coach থাকেন। Contest এর সবচেয়ে মজার জিনিস হচ্ছে ranklist. কোন team এর অবস্থা কি বা কোন সমস্যা সমাধান হয়েছে তা rankilst দেখে বুঝা যায়। এই র্যাঙ্কলিস্টের জন্য প্রোগ্রামরাররা দিনরাতকে এক করে প্র্যাক্টিস করেন, প্রবলেম সলভ করেন। বাংলাদেশে খুবই জনপ্রিয় একটি কন্টেস্ট হলো – ACM ICPC Contest. এই কন্টেস্ট থেকে যে দু/তিন দল ভাল করেন তারা ওয়ার্ল্ড ফাইনালে যাওয়ার সুযোগ পান। বাংলাদেশে Dhaka রিজিওনের আন্ডারে এই কন্টেস্ট আয়োজন করা হয়। এই কন্টেস্টটি সাধারণত নভেম্বরের দিকে অনুষ্ঠিত হয়ে থাকে। এছাড়াও বিশ্ববিদ্যালয়গুলো উদ্যোগে নিয়মিত ন্যাশনাল, রিজিওনাল কন্টেস্ট অনুষ্ঠিত হয়। স্কুল কলেজের ছেলেমেয়েদের জন্য আছে IOI, NHSPC।
কন্টেস্ট প্রোগ্রামিং বা প্রবলেম সলভিংয়ের আসল মজা হলো verdict এ। মানে তুমি যখন কোন একটি সমস্যার সমাধান লেখো তখন সেটি কি সঠিক নাকি ভুল, ভুল হলে কি ধরণের ভুল এসব verdict দেখে বুঝা যায়। বেশ কয়েক রকমের verdict আসতে পারে। Accepted, Wrong Answer, Time Limit Acceded, Memory Limit Exceeded সহ আরো আছে। Accepted মানে তোমার সমাধান পুরোপুরি ঠিক আছে। উত্তর ভুল থাকলে verdict দেখাবে Wrong Answer। নির্দিষ্ট সময়ের মাঝে তোমার সমাধানটি যদি আউটপুট জেনারেট করতে না পারে তাহলে দেখাবে Time Limit Exceeded। তোমার প্রোগ্রাম যদি অতিরিক্ত স্পেস খায় তাহলে দেখাবে Memory Limit Exceeded।
কন্টেস্ট প্রোগ্রামিং কেন করবে এর জন্য ভালো উত্তর কি হতে পারে? কন্টেস্ট প্রোগ্রামিংয়ের নানান দিক আছে। সবচে মজার দিক হলো কন্টেস্ট করে মজা পাওয়া যায়। এটি পুরোপুরি রোমাঞ্চিং এবং এডভেঞ্চারাস। প্রতি মুহূর্তে নিজেকে চ্যালেঞ্জ করার এমন সুযোগ আর কোথায় পাবে তুমি? কন্টেস্ট মানেই কোন সমস্যার নিখুঁত সমধান, সুক্ষ্ম ভুলের কারনেও তুমি রঙ এনসার পেতে পারো। তাই তোমাকে সমস্যা সমাধানে সবসময় সচেতন থাকতে হয়, সবচে বাজে কেস নিয়েও গভীর চিন্তা করতে হয়। প্রোগ্রামার হিসেবে অবশ্যই নন কন্টেস্টেন্ট থেকে দ্রুত, অপটিমাইজড, নির্ভুল কোড লেখার ক্ষমতা তৈরী হবে তোমার। তোমাকে সবসময় আইডিয়া নিয়ে কাজ করতে হবে, চিন্তা করতে হবে, ব্রেইন খাটাতে হবে; এই চর্চা সবসময়ই অন্য আট-দশ জনের চেয়ে তোমাকে আগিয়ে রাখবে। কে জানে, তোমার ছোট্ট একটি আইডিয়া যেকোন মুহূর্তে কম্পিউটার সায়েন্সের টার্নিং হয়ে উঠতে পারে। এছাড়াও কন্টেস্ট তোমার একাডেমিক কাজকর্মে ভালো সাপোর্ট দিবে। কন্টেস্টে কাজ করলে খুব বেশী কিছু শিখতে হয় ব্যাপারটা এমন না কিন্তু। এখানে বাধাধরা কিছু এলগরিদম আছে সেগুলোকে ঘিরেই নানান সমস্যা তৈরি হয়। ওসব নিয়েই কাজ করবে। অথচ ডেভেলপিং সেক্টরে গেলে তোমাকে সবসময় নিত্যনতুন টেকনোলজির সাথে আপডেটেড থাকতে হবে। অন্যান্য সেক্টরের চেয়ে বেশ কিছু ক্ষেত্রে কন্টেস্ট খুবই লাভজনক এবং সহজ একটি পন্থা। এছাড়াও গ্ল্যামারাস কোম্পানি গুগল, ফেসবুক, এমাজনে চাকরির স্বপ্ন তো আছেই। মোটা অঙ্কের বেতন নিয়ে আমি লিখছি না। অধিকাংশ কন্টেস্টেন্ট স্রেফ ভালোবাসার জায়গা থেকে কন্টেস্ট করে থাকেন। আমিও তাই।
এই দীর্ঘ লেখাটি পড়ার পর আমি ধরে নিচ্ছি তুমি কন্টেস্ট প্রোগ্রামিং বা প্রবলেম সলভিং যাত্রা শুরু করতে ইচ্ছুক। প্রশ্ন হলো কিভাবে ? এ নিয়ে গুগলে হাজার হাজার লেখা আছে। তবুও আমি দুয়েকটা লাইন লিখছি। সিনট্যাক্স তো জানা আছে। এবার কাজ হলো প্রবলেম সলভিংয়ে নেমে যাওয়া। এই লিঙ্কে ( https://www.cquestions.com/.../07/c-program-examples.html... ) এরকম বেশ কিছু প্রবলেম পাবে। এখানকার সবগুলো প্রোগ্রাম জানার চেষ্টা করো । এই কাজ শেষ হল । এবার তুমি অনলাইন জাজের সাথে পরিচিত হওয়ার সময় এসেছে। অনলাইন জাজ হলো – এমন একটা সাইট যেখানে অনেকগুলা প্রবলেম দেয়া থাকে – নানা ক্যাটাগরির আর সেগুলো সমাধান করে সল্যুশন পাঠালে অনলাইনেই verdict পাওয়া যায়। মূলত অনলাইন জাজগুলো একেকটি সমস্যা ভাণ্ডার যেখানে চাইলেই তুমি প্র্যাকটিস করতে পারো। বেশ কিছু জনপ্রিয় অনলাইন জাজ হলো – LighOJ, Uva, UriOj, Codeforces, Topcoder, Hackerrank … এছাড়াও আরো অনেক আছে। তোমার যে জাজ ভালো লাগে সেখান থাকে প্রবলেম সল্ভিং শুরু করতে পারো। Uva তে বেশ কিছু ইজি প্রবলেম আছে, সেগুলো সলভ করতে পারো কিংবা আমাদের বাংলাদেশের LightOJ এর বিগিনার ক্যাটাগরির প্রবলেম দিয়েও শুরু করতে পারো। এভাবে কয়েকটা জাজ মিলিয়ে ১০০ প্রবলেম সলভ করা উচিত । প্রবলেম সলভ করার সময়ে basic data structure, basic কিছু algorithm, number theory এসব নিয়ে পড়াশুনা চালিয়ে যেতে থাকো। এক ফাঁকে সি++ এর STL টা দেখে নিলে ভালো হয়, খুবই কাজের জিনিস। শখানেক প্রবলেম সলভ করা হয়ে গেলে এবার ডাটা স্ট্রাকচার আর এলগরদিম রিলেটেড প্রবলেম সলভ করা শুরু করতে পার। রেফারেন্স বুক হিসেবে CLRS এর Introduction to Algorithm দেখা যাতে পারে। এছাড়াও শাফায়েত ব্লগ, জুবায়ের ব্লগ, Topcoder টিউটরিয়াল, ইউটিউবে tushar roy, mycodecschool সহ বাংলা ও ইংরেজিতে অসংখ্য টিউটরিয়াল পাবে যেগুলো পড়লে তুমি নিজেই বুঝতে পারবে কিভাবে কি করতে হবে। গুগল করো, Quora তে যাও, ব্লগ পড়ো, ইউটিউব টিউটরিয়াল দেখো, শেখো এবং a2oj তে গিয়ে টপিক বেইজড প্রবলেম সলভ করা শুরু করতে থাকো। সব কিছুর উপর একটাই কথা, নিয়মিত প্র্যাকটিস চালিয়ে যাও। কন্টেস্ট প্রোগ্রামারদের মাঝে মাঝেই ফ্রাস্টেশন পিরিওড আসে, এসব একটু ধৈর্য্য ধরে সামাল দিতে পারলেই তুমিই হচ্ছো আগামী দিনের ওয়ার্ল্ড ফাইনালিস্ট। কনগ্রেটস ব্রো/সিস!
কতক্ষন কাজ করাবা না করবা এ নিয়ে একটি নিয়মিত প্রশ্ন আসে, শুরুর দিকের সলভারদের কাছ থেকে। আসলে বাধাধরা কাজ করা যায় না। তোমার নিজের ক্ষমতার উপর ডিফেন্ড করবে তোমার কতক্ষণ কাজ করা উচিত। নিয়মিত ৪/৫ তা প্রবলেম সলভ করার মতো কাজ কর, এটি যথেষ্ট মনে হয় আমার কাছে। সবসময়ই নতুন কিছু শেখার চেষ্টা করো। আরেকটি বিষয় কন্টেস্ট মানেই ০৩ জিনের টিম, টিম ওয়ার্ক মাস্ট লাগবে। টিম ওয়ার্ক ছাড়া এগুনো খুবই টাফ। যা শিখবে দল বেঁধে আশপাশকে সাথে নিয়ে শেখো।
পোস্টটার মধ্যে অনেক ইনফরমেশন দেওয়া আছে, আর কিছুদিন আগে আমিও ঠিক এই কথা গুলা লিখেই পোস্ট করতে চেয়েছিলাম। এই পোস্ট এর কথাগুলোর মধ্যে, আর আমার চিন্তাভাবনা অনেকটাই এক থাকার কারনে এই পোস্টটা কালেক্ট করে শেয়ার করলাম।
CQUESTIONS.COM
Comments
Post a Comment