আর্টিকেলের উদ্দেশ্য: যারা কম্পিটিটিভ প্রোগ্রামিং এর “প”-ও জানে না কিন্তু জানতে আগ্রহী তাদের উদ্দেশ্যে একটা শর্ট ইন্ট্রো
কম্পিটিটিভ প্রোগ্রামিং/ স্পোর্ট প্রোগ্রামিং / কন্টেস্ট প্রোগ্রামিং কি সেটা শুরুতে একটু ধারনা দেই।
কম্পিটিটিভ প্রোগ্রামিং : ছোট্ট করে বলতে গেলে নির্দিষ্ট সময়ের মধ্যে দিয়ে দেয়া নির্দিষ্ট কিছু প্রবলেম সল্ভ করার উদ্দেশ্যে কম্পিউটার প্রোগ্রাম লিখাই কম্পিটিটিভ প্রোগ্রামিং। আর কোড করা প্রোগ্রাম সেই প্রবলেমের ইফেক্টিভ(অন্যভাবে বললে সঠিক) সলিউশন কিনা সেটা জাজ করে অনলাইন জাজ (OJ)।
বিস্তারিত জানতে গুগল তো আছেই।
এখন আসি কম্পিটিটিভ প্রোগ্রামিং এর প্রয়োজনীয়তায়ঃ
১) এইটা অনেকের আনন্দের খোরাক
২) ব্রেইন স্টর্মিং হয়
৩) নতুন নতুন টেকনোলজির প্রবলেম মোকাবেলা করার স্কিল তৈরী হয়। যেটাকে problem solving ability বলা হয়।
শুধু computer science পড়ুয়াদেরই যে প্রবলেম সল্ভ করা উচিত তা নয় বরং যে কারোই উচিত কেননা আমরা টেকনোলজির যুগে বসবাস করছি। প্রতিনিয়ত অনেক প্রযুক্তির সাথে যুক্ত হচ্ছি । এই যুগে সারভাইভ করার জন্য problem solving ability একটা মোক্ষম হাতিয়ার। কথা না বাড়িয়ে শুরু থেকে কি কি বই বা সোর্স ঘাটিয়ে এই কম্পিটিটিভ প্রোগ্রামিং শুরু করা করা যেতে পারে-
প্রব্লেম সল্ভের জন্য আমাদের যেকোনো একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করতে হবে নাহলে আমাদের সলিউশন সেই অনলাইন জাজ ব্যাটাকে বুঝাব কি করে? তার জন্য আমরা চাইলে C, C++, Java , Python সহ যেকোনো একটা বাছাই করতে পারি। তবে কম্পিটিটিভ প্রোগ্রামিং এর জন্য কমবেশি সবাই C/C++ কেই প্রাধান্য দেয়। কেন? সেটা কন্টেস্ট শুরু করলেই বুঝে ফেলা যবে।
C এর জন্য কিছু বইঃ
১) Teach Yourself C – Herbert Schildt
২) Programming In ANSI – L Balagurusamy
৩) কম্পিউটার প্রোগ্রামিং – তামিম শাহরিয়ার সুবিন
৪) C How to program – Deitel & Deitel
quick tips: হারডকপি কিনতে না চাইলে পিডিএফ ডাউনলোড করেও নেয়া যেতে পারে তার জন্য গুগলে বইয়ের নামের শেষে “pdf download” যুক্ত করলেই অনেক লিঙ্ক চলে আসবে। আমি চাইলেই লিংকগুলো যুক্ত করে দিতে পারি কিন্তু দিচ্ছিনা কারণ এতে একটা বিষয় খুঁজে পড়তে আলসেমি ধরে যাবে :p
সবগুলো বই সংগ্রহে থাকতে হবে এমন না । যেকোনো একটা চর্চা করলে ব্যাসিক অংশ হয়ে যাবে। আর কোন বইয়ের একটা নির্দিষ্ট অংশ বুঝতে না পারলে অন্য বইয়ের সেই অংশ পরে নিলেই হল। যেমনঃ Teach yourself C বইটা থেকে “Function” অংশ টা ঠিক মতো বুঝছি না তখন অন্য বই থেকে দেখে নিলেই হলো। আর অনলাইনে শিখতে চাইলে-
বাংলা-
১) শিক্ষক.কম
২) সিপিবুক ( তামিম শাহরিয়ার সুবিন )
৩) https://www.howtocode.com.bd/
ইংরেজি –
১) www.tutorialspoint.com**
C++ এর জন্য কিছু বই-
১) C++ Primer – Stanley Lippman, Josée Lajoie, and Barbara E. Moo
২) The C++ Programming Language – Bjarne Stroustrup
৩) C++ how to program – Deitel & Deitel
অনলাইনে –
১) www.geeksforgeeks.org **
২) www.cplusplus.com **
৩) www.tutorialspoint.com **
কম্পাইলারঃ কোন সোর্স কোড কম্পিউটারকে বুঝানোর জন্য কম্পাইল করার প্রয়োজন হয়, যেটা কম্পাইলার করে থাকে। C/C++ এর জন্য জনপ্রিয় কম্পাইলার হচ্ছে CODEBLOCKS । যদিও অনেকে .c/.cpp ফরমেটে সোর্স কোড সেইভ করে কমান্ড লাইনের মাধ্যমে কম্পাইল করতে স্বাচ্ছন্দ্যবোধ করে। তাই যেভাবেই কম্পাইল করতে ভালো লাগে সেভাবে করলেই হলো।
এখন আসি অনলাইন জাজ প্লাটফর্ম অংশে । আগেই বলেছি নির্দিষ্ট প্রবলেম সল্ভ করার উদ্দেশ্যে কোড করে তা ঠিক কিনা তা যেকোনো অনলাইন জাজের মাধ্যমে যাচাই করে দেখতে হবে। এই সম্পর্কে বিস্তারিত জানতে – *https://ktechweb.org/2016/06/30/contestrules/
কোডগুলো যখন অনলাইন জাজ দিয়ে যাচাই করা হবে তখন বিভিন্ন কারণে সেই সলিউসন সঠিক নাও হতে পারে। সেই সম্পর্কে জানতে-
* https://ktechweb.org/2017/01/16/programming-errors-and-their-solutions/
কন্টেস্টে কিছু নিয়মকানুন মেনে চলতে হয়। সে সম্পর্কে জানতে-
*https://ktechweb.org/2016/06/30/contestrules/
কিছু অনলাইন জাজ প্ল্যাটফর্ম-
১) Codeforces
২) UVA
৩) URI
৪) Lightoj
৫) Codechef
৬) Hackerrank
৭) সিপিবুক
Quick tips: এইখানে প্রব্লেম সল্ভ করে কোড যাচাই করতে হলে অবশ্যই একাউন্ট থাকা লাগবে। এক পর্যায়ে দেখা যাবে অনেক প্ল্যাটফর্মে একাউন্ট থাকার কারণে username & Password গোলমেলে হয়ে যায়। তাই একটা নোটপ্যাডে সেগুলো সেইভ করে রাখা উচিত।তাছাড়া পাসওয়ার্ড মনে রাখার জন্য গুগল তো আছেই।
এইসব প্ল্যাটফর্মের বিগিনার/ইজি লেভেলের প্রব্লেম গুলো দিয়ে শুরু করা যেতে পারে। প্রথম প্রথম সল্ভ করতে গেলে উটকো ঝামেলা ঝামেলা একটা অনুভূতি হবে তবে কয়েকটা সল্ভ করে ধাঁচ টা বুঝে গেলে আর সমস্যা হবে না আশা করি। আর হ্যা প্রব্লেম নিয়ে অনেকক্ষণ বসে থেকেও সল্ভ না করতে পারলে দ্রুত উত্তর নেট ঘেঁটে সল্ভ করে ফেলে লাভ নেই এতে বরং নিজেরই ক্ষতি। আগে যতভাবে সম্ভব নিজে চেষ্টা করে নেয়া উচিত।
ডাটা স্ট্রাকচার এন্ড অ্যালগরিদম সহায়ক বই :
১) কম্পিউটার প্রোগ্রামিং ৩য় খণ্ড : ডেটা স্ট্রাকচার ও অ্যালগরিদম পরিচিতি- তামিম শাহরিয়ার সুবিন
২) প্রোগ্রামিং কন্টেস্ট ডাটা স্ট্রাকচার ও অ্যালগরিদম – মাহবুবুল হাসান শান্ত
৩) Introduction to Algorithms- Thomas H. Cormen
৪) Data Structure and Algorithm Made Easy – Karumanchi
অনলাইন –
১) শাফায়েত প্ল্যানেট **
২) Edx *
৩) MIT Introduction to algorithms
৪) Coursera *
৫) Data Structures and Algorithms by mycodeschool
৬) Data Structure and algorithm (Github collection)
মনে রাখতে হবে যে প্রোগ্রামিং একদিনের বিষয় না। এর জন্য প্রয়োজন চেষ্টা আর লেগে থাকার মানসিকতা!! অনেকেই একে এক খাবারের মতো মনে করে যে নতুন খাবারের নাম শুনলাম আর খেয়ে দেখি কেমন …ভালো না লাগলে বাদ। এটা হয়ে থাকে ধৈর্যের আর লেগে থাকার মানসিকতার অভাবে। Peter Norvig এর একটা আর্টিকেল রয়েছে যে “Teach Yourself Programming in Ten Years!” তবে বুঝতেই পারছ যে দু’ একদিনে প্রোগ্রামিং শিখা হয় না…তবে হ্যা যদি ২-৩ সপ্তাহ প্রোগ্রামিং নিয়ে বসে থাকার পরও যদি এটাকে “তিতা মনে হয়” তবে কিছুটা সময় নিয়ে আবার পরে চেষ্টা করে দেখা যেতে পারে। তাও ভালো না লাগলে জোর করে প্রোগ্রামিং করার দরকার নেই।
যারা এতক্ষন মন দিয়ে পোস্টটি পড়ছো আর ভাবছ যে প্রোগ্রামিং টা নাহয় শিখেই ফেলি তাদের উদ্দেশ্যে বলছি একবার এতে মজা পেয়ে গেলে দেখবে এটিই তোমার একমাত্র আনন্দের খোরাক হয়ে দাঁড়াবে।
(বি দ্রঃ প্রোগ্রামিং এর জগতটা অনেক বিশাল। গুটিকয়েক বই পড়লেই এতে ভালো হওয়া যায় নাহ। তাই নতুন কিছু শিখতে হলে গুগল করে নিজে নিজে শিখার অভ্যাস থাকতে হবে। কেননা ইন্টারনেট বা বই থেকে দ্রুত শিখার অভ্যাস ই তোমাকে ভালো প্রোগ্রামার হতে সাহায্য করবে)
রেফারেন্স –
*প্রোগ্রামিং শিখা ও সমস্যা সমাধানে সহায়ক কিছু বই এবং ও ওয়েবসাইট :
*প্রোগ্রামিং কন্টেস্টে উত্তর প্রদানের নিয়ম এবং অনলাইন বিচারক :
https://ktechweb.org/2016/07/15/online-judge-answer-submission-system/
*প্রোগ্রামিং কন্টেস্টঃ রুলস্ অ্যান্ড পয়েন্ট সিস্টেম:
https://ktechweb.org/2016/06/30/contestrules/
*বিভিন্ন প্রোগ্রামিং এরর এবং তা সমাধানের উপায়:
https://ktechweb.org/2017/01/16/programming-errors-and-their-solutions/
* A complete guideline for programming contest by Online sohopathi