কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে? (বিস্তারিতঃ পর্ব-১)

কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে? বিস্তারিত জানতে পারবেন আজকের এই টিউটোরিয়ালে। আমরা সবাই জানি কম্পিউটার একটি সহজ সরল বোকা যন্ত্র, যাকে কাজে লাগিয়ে আমরা জটিল সমস্যার সমাধান করে ফেলতে পারি।

আর কম্পিউটারের সাথে আমাদের মনের ভাব প্রকাশের জন্য দরকার হয় প্রোগ্রামিং ভাষার। দৈনন্দিন জীবনে আমরা যেসব সফটওয়ার ব্যাবহার করি সেগুলোও মূলত হাজার থেকে মিলিয়ন লাইনের কোড।

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

মোটকথা প্রোগ্রামিং করে যা যা করতে পারবো তার কোনো সীমা নেই।

কেন কম্পিটিটিভ প্রোগ্রামিং করবো?

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

ক্রমাগত অনুশীলন করে মানুষ প্রোগ্রামিং এ তাদের মস্তিষ্ক শাণিত করছে এবং বোকা যন্ত্রগুলোকে আরো বেশি কাজে লাগানোর সবচেয়ে সুবিধাজনক উপায় বের করার চেষ্টা করে যাচ্ছে।


কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে?


এই অনুশীলনের জন্য সবচেয়ে কার্যকরী উপায় হচ্ছে কম্পিটিটিভ প্রোগ্রামিং। কারন প্রতিযোগিতার মাধ্যমেই  প্রোগ্রামিংএর কিছু কঠিন বিষয়কে দৃঢ়ভাবে বুঝতে পারা যায় এবং নিজের দক্ষতা বাড়ানো যায়।

এছাড়া কম্পিটিভ  প্রোগ্রামিং এ ভালো করলে জব সেক্টরেও ভালো কদর পাওয়া যায়। বর্তমানকালের বড় বড় টেক কম্পানিগুলো প্রোগ্রামিং প্রতিযোগিতার মাধ্যমে লোক নিয়োগ করে থাকে। এছাড়াও প্রোগ্রামিং সমস্যা সমাধানের মাধ্যমে আমাদের বাস্তব জীবনের সমস্যা সমাধানের ক্ষমতাও বৃদ্ধি পায়।

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

“Everyone should know how to program a computer because it teaches you how to think!”

– Steve Jobs

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

স্কুল এবং কলেজ পর্যায়ের প্রোগ্রামারদের উৎসাহ বাড়িয়ে দেওয়ার জন্য প্রতিবছর IOI (International Olympiad in Informatics) অনুষ্ঠিত হয়। এই অনুরূপ আমাদের দেশে BDOI  অনুষ্ঠিত হয়।

BDOIএ ভালো করলে IOIতে অংশগ্রহনের সুযোগ পাওয়া যায়। এছাড়াও প্রতিবছর জাতীয় পর্যায়ে আয়োজিত হয় NHSPC। এটাও দুইটি পর্বে ভাগ করা। আঞ্চলিক পর্বে ভালো করলে চূড়ান্ত পর্বের প্রতিযোগিতায় অংশগ্রহন করা যায়।

বিশ্ববিদ্যালয়ের শিক্ষার্থীদের অংশগ্রহনের জন্য ACM থেকে আয়োজন করে ICPC (Inter Collegiate Programing Contest)। সবার জন্য উন্মুক্ত কনটেস্ট গুলোর মধ্যে উল্ল্যেখযোগ্য ফেসবুক আয়োজিত “হ্যাকারকাপ”, গুগল আয়োজিত “কোডজ্যাম্‌”।

এছাড়াও দেশ-বিদেশের বিভিন্ন শিক্ষাপ্রতিষ্ঠান থেকে সারাবছর বিভিন্ন প্রোগ্রামিং প্রতিযোগিতার আয়োজন করা হয় যেখানে অংশগ্রহন করে শিক্ষার্থীরা নিজেদের প্রোগ্রামিং দক্ষতায় শান দিতে পারে এবং প্রোগ্রামিং এ নিজের অবস্থান সম্পর্কে জানতে পারে।


কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে?


বিগিনার পাঠকদের এখন দুইটি ভাগে ভাগ করা যায়।

  • কীভাবে প্রোগ্রামিং শেখা শুরু করব ?
  • প্রোগ্রামিং পারি, এখন কীভাবে কম্পিটিটিভ প্রোগ্রামিং শুরু করবো ?

 

১) যারা প্রোগ্রামিং শেখা শুরু করতে চায় –

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

তবে সবচেয়ে ভালো হবে সি কিংবা সি++ দিয়ে শুরু করা, বেশ কয়েকটি কারনের মধ্যে কয়েকটি হলো-

ক) মধ্যম স্তরের ভাষা হওয়ায় সি ভাষার কোড দ্বারা হার্ডওয়্যার নিয়ন্ত্রন করা যায়, পাশাপাশি উচ্চ স্তরের ভাষার সুবিধাও পাওয়া যায়।

খ) প্রায় সব প্রোগ্রামিং কম্পিটিশনেই সি ভাষায় প্রোগ্রাম লেখার সুযোগ থাকে।

গ) বেশ পুরাতন ল্যাংগুয়েজ ,তাই শেখা শুরু করলে সোর্সের কোনো অভাব হবে না।

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

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

আর ইংরেজী ভাষার বইগুলোর মধ্যে সবচেয়ে জনপ্রিয় বই হচ্ছে Herbert Schildt এর “Teach Yourself C”।
মনোযোগ দিয়ে ১ থেকে ২মাস কোর্স করলে প্রোগ্রামিং এর ব্যাসিক বিষইয়গুলি সম্পর্কে মোটামুটি ভালো ধারণা পাওয়া যাবে।

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

২) প্রোগ্রামিং সম্পর্কে ব্যাসিক ধারনা আছে, এখন যারা কম্পিটিটিভ প্রোগ্রামিং শুরু করতে চায় –

এক্ষেত্রে কয়েকটি ছোটো ছোটো ধাপে ভাগ করা যায়।

২.১ অনলাইন জাজের সাথে পরিচয়ঃ

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

সাইটগুলোতে দেওয়া সমস্যাগুলো সমাধান করে সাবমিট করলে সমাধানটি সঠিক কিংবা ভুল সেই ফলাফল প্রদর্শন করে।
বর্তমানকালের জনপ্রিয় কয়েকটি অনলাইন জাজ হলো – Codeforces, URI, HackerRank, Codechef, UVA, LightOJ।

বিগিনারদের জন্যে ইউজারফ্রেন্ডলি বলা যায় URI এবং HackerRank কে। এই দুইটি ওয়েবসাইটেই বিগিনারদের সুবিধার্থে প্রোগ্রামিং প্রবলেমগুলোকে সহজ থেকে কঠিনের দিকে সর্ট করা হয়েছে।


কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে?


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

এছাড়াও আমাদের দেশে বিখ্যাত একটি অনলাইন জাজ DimikOJ, যেখানে বাংলা ভাষায় বেশ ভালো মানের প্রব্লেম সেট করা আছে।
অনলাইন জাজগুলোতে পোক্ত হওয়ার পর অনসাইট প্রোগ্রামিং কনটেস্ট গুলোর দিকে নজর দিতে হবে।
Codeforces এ বিগিনারদের জন্য প্রতি সপ্তাহে দুইবার Div-2 এবং Div-3 কন্টেস্টের আয়োজন করা হয়।

এই কনটেস্ট গুলো হয় ২ বা ৩ ঘন্টার Individual Contest, মানে প্রতিযোগীকে এককভাবে অংশগ্রহন করতে হবে।
আবার কিছুদিন পরপর ACM ICPC অনুরুপ ৫ ঘন্টার কনটেস্ট এর আয়োজন করা হয়ে থাকে যার মাধ্যমে প্রতিযোগীরা I
CPC Standard সমস্যা সমাধান করে নিজেদের প্রস্তুতি আরো দৃঢ় করতে পারে।

২.২ বিগিনার রা কোন কোন এলগোরিদম দিয়ে শেখা শুরু করবেঃ

বিগিনার দের উচিত প্রথমেই উচ্চতর এলগোরিদমগুলোর দিকে না ঝুকে প্রোগ্রামিং এর ব্যাসিক টুলগুলোর ব্যাবহার ভালো করে শেখা। তারপর Codeforces কিংবা UVA থেকে প্রথমে Implimentation, Greedy, Ad-hok ট্যাগ এবং  ৮০০ রেটিংযুক্ত সমস্যাগুলো সমাধান করে অনুশীলন করা ভালো।

কয়েকটি বিষয় অবশ্যই মনে রাখতে হবে,

ক) অনলাইন জাজগুলোর সমস্যার সমাধানগুলো অনলাইনেই পাওয়া যায় –

এটা প্রব্লেম সল্ভিং এর সময় সম্পূর্নভাবে ভুলে যেতে হবে। অর্থাৎ সমস্যাগুলো সম্পুর্ন নিজে নিজে সমাধানের চেষ্টা করতে হবে।

খ) নিজে সমাধানের পর বড় বড় প্রোগ্রামারদের কোড পড়ে বুঝার চেষ্টা করতে হবে।

গ) অন্য প্রোগ্রামারদের কোডে ব্যাবহৃত এলগোরিদমগুলো বুঝে নিজে ইমপ্লিমেন্ট করার চেষ্টা করতে হবে।


কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে?


২.৩ গণিত অনুশীলনঃ

প্রোগ্রামিং কম্পিটিশনের প্রব্লেম সল্ভ ব্যাপারটা করা অনেকটা গাণিতিক সমস্যা সমাধানের মতই। তাই নির্ভুল ভাবে সমস্যা সমধানের দক্ষতা বাড়ানোর জন্য গাণিতিক অনুশীলনের জুড়ি নেই।

আমাদের জাতীয় পাঠ্যক্রমের ক্লাস ৬ থেকে ক্লাস ১০ এর  পাঠ্য গণিত বইয়ের টপিকগুলোতে ভালো আয়ত্তে রাখলে অনেক ভালো হয়।
এছাড়াও বিগিনারদের উচিত গণিতের প্রাথমিক বিষয়গুলো যেমনঃ গসাগু, লসাগু, মৌলিক সংখ্যা,যৌগিক সংখ্যা সম্পর্কে ভালো ধারণা রাখা।

প্রোগ্রামিং প্রতিযোগিতার জন্য গাণিতিক দুর্বলতা দূর করার জন্য অনলাইনের কিছু সাইটে অনুশীলন করা যেতে পারে।
এজন্য ProjectEuler বেশ জনপ্রিয় একটি মাধ্যম। আমাদের দেশে GonitZoggo নামে একটি ওয়েবসাইট চালু হয়েছে যেখানে স্কুল পর্যায়ের গাণিতিক সমস্যা পাওয়া যায়।

অনলাইন জাজগুলোর মত এখানেও উত্তর জমা দিলে ফলাফল পাওয়া যায়। এরপর Codeforces থেকে ‘Math’ ট্যাগের প্রব্লেম গুলো সমাধান শুরু করতে হবে।

কম্পিটিটিভ প্রোগ্রামিং কি? কেন? কিভাবে?

২.৪ প্রোগ্রামিং প্রবলেম বুঝতে সমস্যা হলেঃ

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

এই সমস্যা দূর করার জন্য ইংরেজী পড়ার দক্ষতা গড়ে তুলতে হবে। ইংরেজী বই, আর্টিকেল এবং প্রব্লেম স্টেট্মেন্টগুলো নিয়মিত পড়ার মাধ্যমে এই সমস্যা দূর করা যেতে পারে।

“Theory and practice sometimes clash. And when that happens, theory loses. Every single time.”
― Linus Torvalds

 

উক্ত বিষয় সম্পর্কে কিছু জানার থাকলে কমেন্ট করতে পারেন।
আমাদের সাথে ইউটিউব চ্যানেলে যুক্ত হতে এখানে ক্লিক করুন এবং আমাদের সাথে ফেইজবুক পেইজে যুক্ত হতে এখানে ক্লিক করুন
গুরুত্বপূর্ণ আপডেট ও তথ্য পেতে আমাদের ওয়েবসাইটে ভিজিট করুন।

Check Also

পিএইচপি প্রোগ্রামিং

পিএইচপি প্রোগ্রামিং ল্যাংগুয়েজ (ইন্টারভিউ প্রশ্নোত্তর) পর্বঃ ৩

পিএইচপি প্রোগ্রামিং ল্যাংগুয়েজ (ইন্টারভিউ প্রশ্নোত্তর) এর প্রথম এবং পর্বে আমরা আলোচনা করেছি কিছু ব্যাসিক প্রশ্ন …

Leave a Reply

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