You are currently viewing বিগিনারদের জন্য কম্পিটিটিভ প্রোগ্রামিং গাইডলাইন এবং প্রয়োজনীয় রিসোর্সসমূহ

বিগিনারদের জন্য কম্পিটিটিভ প্রোগ্রামিং গাইডলাইন এবং প্রয়োজনীয় রিসোর্সসমূহ

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

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

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

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

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

“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 অনুরুপ ৫ ঘন্টার কনটেস্ট এর আয়োজন করা হয়ে থাকে যার মাধ্যমে প্রতিযোগীরা ICPC Standard সমস্যা সমাধান করে নিজেদের প্রস্তুতি আরো দৃঢ় করতে পারে।

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

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

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

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

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

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

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

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

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

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

এরপর Codeforces থেকে ‘Math’ ট্যাগের প্রব্লেম গুলো সমাধান শুরু করতে হবে।

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

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

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

প্র্যাকটিস-প্র্যাকটিস-প্র্যাকটিস

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

এর এই লেখা পড়ে যারা প্রোগ্রামিং কিংবা প্রোগ্রামিং প্রতিযোগিতার জগতে প্রথম প্রবেশ করলেন তাদের জন্য রইলো অনেক অনেক শুভ কামনা।

“হ্যাপী কোডিং!”

প্রোগ্রামিং শেখার জন্য উপকারী কিছু লিংকঃ

  1. সুবিন ভাইয়ের কম্পিউটার প্রোগ্রামিং বই – http://cpbook.subeen.com/
  2. সি++ এর রেফারেন্স সম্বলিত সাইটhttp://cplusplus.com/ 
  3. শাফায়েত আশরাফ ভাইয়ের প্রোগ্রামিং বিষয়ক ব্লগ – https://www.shafaetsplanet.com/ 
  4. ইকরাম ভাইয়ের সংখ্যাতত্ত্ব নিয়ে আলোচনা – http://www.progkriya.org/gyan/basic-number-theory.html
  5. রোবোআড্ডার ব্যাসিক সি প্রোগ্রামিং কোর্স – https://roboadda.com.bd/courses/c-programming/
  6. https://www.geeksforgeeks.org/
  7. https://albatrossmohoshi.blogspot.com/ 
  8. https://turing13.com/
  9. https://hellohasan.com/

প্রোগ্রামিং অনুশীলনের জন্য কয়েকটি অনলাইন জাজঃ

  1. https://uva.onlinejudge.org/
  2. http://www.lightoj.com/
  3. https://www.urionlinejudge.com.br/
  4. https://codeforces.com/
  5. https://www.codechef.com/
  6. https://www.topcoder.com/
  7. https://www.spoj.com/
  8. https://www.hackerrank.com/
  9. https://dimikoj.com/
  10. https://acm.timus.ru/
  11.  

গণিতের দক্ষতা বাড়ানোর জন্যঃ

  1. https://projecteuler.net/
  2. https://gonitzoggo.com/

প্রোগ্রামিং সম্পর্কিত যে কোনো জিজ্ঞাসার জন্যঃ

  1. https://programabad.com/
  2. https://stackoverflow.com/

এই আর্টিকেলটিতে ব্যবহৃত সোর্সসমূহঃ

  1. https://www.programiz.com/c-programming
  2. https://www.geeksforgeeks.org/why-learning-c-programming-is-a-must/
  3. https://codeforces.com/blog/entry/49157
  4. প্রয়োজনীয় রিসোর্স ভান্ডার from Talha Chowdhury Razz 
  5. http://subeen.com/
  6. https://en.wikipedia.org/wiki/Competitive_programming
  7. https://en.wikipedia.org/wiki/Competitive_programming