ইউনিভার্সিটি লাইফে আমরা কম্পিটিটিভ প্রোগ্রামিং নিয়ে কথা বলতে বলতে কান ঝালাফালা বানিয়ে ফেলতাম। শুরুর দিকে কার আগে কে প্রব্লেম সলভ করতে পারে এই প্রতিযোগিতায় থাকতাম। যদিও খুব সংখ্যক আমরা এই ফ্লো ধরে রাখতে পারি শেষ পর্যন্ত। আমার এখনো মনে পরে আমার বন্ধু প্রান্ত আর আমি দিন রাত এক করে ফেলতাম প্রথম বর্ষের দিকে শুধু একটা প্রব্লেম সলভ করতে৷ যাই হউক ওদিকে যাচ্ছিনা, টপিক অন্য। ওই সময় একটা কথা মাথায় ঘুরতো, মজা তো পাচ্ছি সিপি করে, কিন্তু এটার লং টাইম আউটকাম কি? এইসব করে কি হবে? এগুলোর সাথে সফটওয়্যার ইঞ্জিনিয়ারিং এর সম্পর্কটা কোনদিকে? তখন সবার মাঝে এই কমন প্রশ্ন গুলো থাকতো। নেশা ছিলো কিন্তু পেশা কি জানতাম না।
আজকে এটি নিয়েই আলাপ করা যাক। আপাত দৃষ্টিতে আমরা যারা ডেভেলপার আছি আমাদের দৈনন্দিন জীবনে আসলে এই প্রব্লেম সলভিং স্কিলটাকে আমরা খুব ভালো করে খেয়াল করতে পারি না। যেমন নরমাল বা লো স্কেল এর এপ্লিকেশন ডেভেলপমেন্টের সময় আমাদের খুব একটা প্যারায় পরতে হয় না এই প্রব্লেম সলভিং স্কিলটা না থাকলে। কিন্তু প্রব্লেম এক জায়গায় গিয়ে ঠেকে যখন আমরা লার্জ স্কেলের সফটওয়্যার নিয়ে কাজ করি তখন। সেটা হলো লজিক বিল্ডআপ। সিপিতে আমাদের ঠিক এই কাজটাই করা লাগে। প্রব্লেম আইডেন্টিফাই করে লজিক বিল্ডাআপ করা লাগে, তারপর কোড এক্সিকিউট করতে পারি। এই মূল খেলোয়ার হচ্ছে লজিক। আপনি যত বেশি প্রব্লেম সলভ করতে থাকবেন আপনার লজিক বিল্ডিং এবিলিটি বাড়তে থাকবে। না হয় খুব ভোগান্তিতে পরতে হবে আপনাকে লার্জ স্কেলের এপ্লিকেশন ডেভেলপমেন্টে। চলেন ছোট্ট দু'টো একটা উদাহারণ দিয়ে নি৷ আমার এক বন্ধু বেশ কিছুদিন ধরে NextJs দিয়ে একটি এডটেক(EdTech) প্রজেক্টে কাজ করছে। ই-লার্নিং প্লাটফর্ম নিয়ে আরকি৷ তো সে একটি প্রব্লেমে পরে যায় যেমন ইউজার যদি কোনো কোর্স কিনে ফেলে তাহলে ওই কোর্সটি তার নিজের প্রফাইলে যুক্ত হয়ে যাবে এবং কোর্স লিস্টে "Buy Course" এর জায়গাতে "Continue Course" বাটন থাকবে। এখন বন্ধু এই লজিকটা বুঝে উঠতে পারছিলো না। ঠিক এই জায়গাতেই আমাদের প্রব্লেম সলভিং স্কিলটা কাজে আসে। সিপিতে আমাদের এমন অনেক কিছু ডিল করতে হয়। যার এক্সপেরিয়েন্সগুলো এইসব প্রব্লেম সলভিং এ খুব কাজে আসে। এটার সিম্পল একটি সলিউশন হলো, আপনার ইজার ডাটাবেজের অব্জেক্টে "Courses" নামের একটি কী(Key) ডিক্লেয়ার করা থাকবে যার ভেল্যু হবে empty array। এখন আপনি যে কোর্সগুলো কিনবেন ওই কোর্স গুলো এই এম্পটি এরের ভিতরে পুশ করতে থাকবেন। এর পর এই প্রপার্টিটির উপর বেইজ করে আপনি কন্ডিশনাল রেন্ডার করতে পারবেন। দেখুন, এটা এমনি সিম্পল। এখন আপনি চাইলে এটা অনেক ভাবেই সলভ করতে পারেন। আপনার ইচ্ছা। কিন্তু এখানে মুখ্য বিষয় হচ্ছে আপনার লজিক বিল্ড করাটা। এই যে আপনি চিন্তা করলেন আমি প্রপার্টি এড করবো এই প্রপার্টিকে ম্যাপ করে ডাটার উপর বেইজ করেই আমি কম্পোনেন্ট রেন্ডার করবো। দিস ইস লজিক। এবার আপনার কোড করতে ইচ্ছে না করলে এই লজিকটা বলে দেন চ্যাটজিপিটি কে, সুন্দর করে আপনার কোড আপনাকে দিয়ে দিবে। এরপর সেম্পল কোড থেকে আপনার কাজ আপনি করে নিতে পারবেন। আশা করছি আমার বন্ধুও তার প্রশ্নের উত্তর পেয়ে গিয়েছে। আরেক্টা রিসেন্ট এক্সপেরিয়েন্স, আমি আমার ছোট ভাইয়ের ইউনিভার্সিটি প্রজেক্টে হ্যাল্প করছিলাম। ওর টাস্ক ছিলো ডেইটে অল্রেডি পিকড টাইমটা অন্য ইউজারদের কাছে যাতে শো না করে। এটার সলিউশন বের করতে তো আমার ভাইয়ের চুল ছেড়া অবস্থা। এটার একটা সিম্পল সলিউশন হলো, ডেইট এর একটা প্রপার্টি থাকবে, ওইটার মধ্যে অ্যারে থাকবে এবার যেই টাইম পিক হয়ে যাচ্ছে ওইগুলো টাইমের অ্যারের মধ্যে স্টোর হয়ে যাবে। এর পর আপনি ক্লাইন্ট সাইডে এসে কন্ডিশনাল রেন্ডার দিবেন। সিম্পল বাট ইয়ু হ্যাভ টু হ্যাভ প্রব্লেম সলভিং স্কিল দেয়ার।
ঠিক এই কারণে বড়ো বড়ো ফার্মগুলো বা কোম্পানী গুলো আপনার সিপি ব্যাকগ্রাউন্ড খুঁজতে থাকে, ইন্টারভিউতে আস্ত প্রব্লেম ধরাই দিবে যেটা সলভ করতে নাকানি চুবানি খাওয়া লাগে। সলভ হয়ে গেলে চাকরী নামক সোনার হরিণ আপনার হাতে। মোট কথা হচ্ছে কম্পিটিটিভ প্রোগ্রামিং আমাদের লজিক বিল্ডআপ স্কিল মাত্রাতিরিক্ত বারিয়ে দেয়, যার কারণে যেকোনো প্রব্লেম সলভ করতে নাকানি চুবানি খেলেও সলভ করে ফেলা যায়। ঠিক এই জায়গাতে এসেই আমরা সফটওয়্যার ইঞ্জিনিয়ারিং এর সাথে সিপির ইন্টারেকশনটা পেয়ে থাকি। আমি সিম্পল উদাহারণ দিলাম কিন্তু এর চাইতে অনেক বড় বড় প্রব্লেম পাওয়া যায় ডেভেলপমেন্ট সেক্টরে। যেমন আপনি স্টেইট মেনেজমেন্ট করবেন, তবে কোন জায়গাতে, কেনো, কোন স্টেট ডিক্লেয়ার করবেন এটা ডিপেন্ড করছে আপনার প্রব্লেম সলভিং এবিলিটির উপর।
তাই ইউনিভার্সিটি লাইফে সিপির ভবিষ্যৎ খুঁজে না পেয়ে ছেড়ে না দিয়ে আরো বেশি করে করতে থাকুন। সিপি আমাদের লাইফের সব জায়গাতে বিচরণ করে। যেখানেই Logic সেখানেই Competitive Programming! আহা, এই রিয়েলাইজেশন যদি প্রথম থেকেই থাকতো। এখন প্রব্লেম সলভিং করবো নাকি সফটওয়্যার ডেভেলপ করবো নাকি নতুন নতুন স্ট্যাক এবজর্ভ করবো? 💔