বর্তমান বেশিরবাগ ছাত্র-ছাত্রীরার এর প্রথম চয়েস কম্পিউটার রিলেটেড স্টাডি করার জন্য। কম্পিউটার সাইন্স স্টাডি করা মানে ভালো একটা প্রোগ্রামার অথবা ডেভেলপার হিসেবে নিজেকে পরিচয় করার জন্য ।
এখন বলি কিভাবে একজন ভালো প্রোগ্রামার হবেন।
মানুষের সহজাত প্রকৃতিই হচ্ছে ‘অল্প সময়ে, কম কষ্টে, ঘরে বসে’ হাওয়া বাতাস খেতে খেতে সাফল্যের শীর্ষে চলে যাওয়ার ইচ্ছা। যে কোন বিষয়ের মত প্রোগ্রামিং এ ভাল করার জন্যেও প্রয়োজন কঠোর পরিশ্রম ও সঠিক অনুশীলন। প্রোগ্রামিং এ এক্সপার্ট হবার ব্যাপারে পিটার নরভিগ (Peter Norvig) Teach Yourself Programming in Ten Years নামের একটা আর্টিকেল লিখেছিলেন। আসলেই একজন এক্সপার্ট প্রোগ্রামার হিসেবে নিজেকে প্রতিষ্ঠিত করতে একটা দীর্ঘ পথ পারি দিতে হবে।
তাহলে আপনি বলতে পারেন প্রোগ্রামার হতে হলে কোনটা সব থাকে ভালো জানতে হবে। তাই , জানতে হলে পরতে থাকুন পুরো আর্টিকলটি
প্রবলেম সলভিং এর ক্ষমতা
এই কাজটা করা বেশ কঠিন। প্রবলেম সলভিং এর স্কিল বাড়ানো বলতে আসলে ‘তোমার বুদ্ধিমত্তাকে আরো বাড়াও’ এমনটাই বুঝায়।
আর এটা করার উপায় হচ্ছে নিয়মিত কঠিন কঠিন প্রবলেম সলভ করা। আবার এমন কঠিন না যেন হতাশা এসে ভর করে। তোমার ক্ষমতার চেয়ে একটু কঠিন প্রবলেম নিয়ে পড়ে থাকলে তোমার ব্রেইনকে কাজে লাগাতে পারবে। সব সময় সহজ প্রবলেম সলভ করলে দেখবা তুমি ভুল-টুল করতেছ না, কিন্তু তোমার ব্রেইন ঐসব সহজ প্রবলেমের জন্যেই ম্যাচ হয়ে থাকবে। ব্রেইনকে কাজ না দিয়ে অলস বসিয়ে রাখলে (সব সময় সহজ প্রবলেম সলভ করলে) বুদ্ধিমত্তা বাড়ানো কথা চিন্তা করা যায় না।
এজন্য অনলাইন জাজগুলোতে নিয়মিত প্রবলেমের লেভেল দেখে দেখে সলভ করা সবচেয়ে ভাল। পুরো প্রবলেমটাকে ছোট ছোট অংশে ভাগ করে একটা একটা পার্ট করে সলভ কর। এক্ষেত্রে ছোট দরজাওয়ালা একটা বাড়ির বিরাট বড় টেবিলের উদাহরণ দেয়া যেতে পারে। বিরাট বড় গরজিয়াস একটা টেবিল কিনে নিয়ে আসলা তোমার বাড়ির দোতলার ড্রয়িং রুমে রাখবা বলে। দেখা গেল টেবিলের তুলনায় দরজাটা অনেক ছোট। সেক্ষেত্রে একটাই মাত্র কাজ করার থাকে তা হচ্ছে সাবধানে টেবিলটাকে কেটে টুকরাগুলোকে জায়গা মত নিয়ে আবার জোড়া দেয়া। প্রবলেমগুলোকেও এভাবে ভেঙ্গে ভেঙ্গে সলভ করে এরপর জোড়া দেয়ার কাজ করতে হবে।
খাতায় কোড কর আর ডিবাগ কর
যদিও এখনকার সময়ে মনে হয় না কেউ খাতায় কোড করে। এরপরেও যদি খাতায় কোড লিখে প্র্যাক্টিস করতে পার এটা তোমার জন্য বেশ ভাল কাজে দিবে। কারণ তুমি যখন IDE তে কোড করতে বসো, মাথায় এটা থাকেই যে ভুল হলে আবার সাথে সাথেই ঠিক করতে পারবো। কিন্তু কাগজে যখন লিখবা তখন লিখার আগে তোমার ব্রেইন অনেক দ্রুত কাজ করবে যথাসম্ভব নির্ভুল কোড লিখার জন্য। কারণ কাগজে কোড লিখা কঠিন।
আর অনসাইট টিম কনটেস্টের ক্ষেত্রে এই গুণের কারণে আরো সুবিধা পেতে পারো। কারণ সেখানে ৩ জনের জন্য একটাই পিসি থাকে। তাই অন্য টিমমেট পিসিতে কোড করতে থাকলে তোমাকে হয়ত খাতাতেই কোড লিখে রাখতে হতে পারে। কোড লিখে বিভিন্ন ইনপুটের জন্য কাগজেই ডিবাগ করার অভ্যাস গড়ে তুলো।
নিয়মিত কনটেস্টে অংশগ্রহণ
তুমি হয়ত বাসায় বসে ধীরেসুস্থ্যে বেশ ভাল প্রবলেম সলভ বা কোড করতে পার। কিন্তু কনটেস্টের সময়ে? বাসায় সলভ করার সময় কিন্তু নির্দিষ্ট সময় শেষ হয়ে যাবার চিন্তা থাকে না। সেই প্রেশারটা থাকে না যেটা কনটেস্ট টাইমে থাকে। তাই স্ট্রেসের মধ্যে থেকে, প্রেশারের মধ্যে থেকে কিভাবে কার্য সমাধা করতে হয় সেটায় অভ্যস্ত হবার জন্যেও যত বেশি সম্ভব কনটেস্টে অংশ নেয়া উচিত।
আর বেশি বেশি কনটেস্ট করলেই সে সময়ে করণীয় বা কী ধরনের সিদ্ধান্ত নিতে হবে সে ব্যাপারে আইডিয়া হয়ে যাবে। যেমন ৫ ঘন্টার কনটেস্টের শেষ ঘন্টায় এসে একটা নতুন প্রবলেম শুরু করা সম্ভবত ভাল সিদ্ধান্ত না। যখন তোমার সাবমিট করা unsolved ২-৩ টা প্রবলেম রয়েছে। নতুন প্রবলেম শুরু করব কি করব না, কোন একটার পিছনে আর সময় দেয়া উচিত হবে কি হবে না? এই সিদ্ধান্তগুলো নেয়া সহজ হয় বেশি বেশি কনটেস্টে অংশ নিলে।
প্রোগ্রামিং কনটেস্ট তোমার প্রোগ্রামিং এর স্কিলকে ব্যাপক ভাবে বাড়িয়ে দিবে। তুমি চিন্তা করতে পারবা না যে একেকটা কনটেস্টের পর তোমার স্কিলটা কতখানি পুশ হয়! হ্যাঁ তোমাকে অনেকেই বলবে যে রিয়েল লাইফে সফটওয়্যার ডেভেলপমেন্টের জন্য এসব প্রবলেম সলভিং এর দরকার হয় না। আসলেই তাই! তুমি খুব বেশি ভাগ্যবান হলে হয়ত তোমার কোম্পানীর কোন প্রোজেক্টে ৫-১০% কাজে তোমার শেখা ডেটা স্ট্রাকচার-অ্যালগরিদম ইমপ্লিমেন্ট করতে পারবা। বা তোমার কনটেস্টের স্কিল কাজে লাগাতে পারবা। কারণ কন্টেস্ট এরিয়াটা রিয়েল ওয়ার্ল্ডের চেয়ে ভিন্ন। কিন্তু কনটেস্ট করলে তোমার দক্ষতা যতটা বাড়বে তা অন্যান্য উপায়ে অর্জন করা কঠিন। একটা জিনিস চিন্তা করো, ছোট বেলায় আমাদেরকে গণিত শেখানো হয়। তার মানে কি আমাদের সবাইকে গণিতবিদ হতে হবে? আমাদেরকে কবিতা পড়ানো হয়, রচনা লিখা শেখানো হয়। তাই বলে আমরা সবাই কি লেখক হব? গণিত শেখানো হয় যেন ব্যক্তি জীবনে হিসাব নিকাশ করতে পারি না কোন একটা বিষয়ে ভাল অ্যানালাইসিস করতে পারি। লেখালেখি শেখানোর কারণ হচ্ছে যেন তুমি যে কোন বিষয়ে তোমার মনের ভাব সুন্দর ভাবে প্রকাশ করতে পারো। প্রোগ্রামিং কনটেস্টটাও ঠিক তেমন। তোমার ভবিষ্যতের ভীতটা গড়তে সাহায্য করবে।
কনটেস্ট তুমি তখনই করতে পারবা যখন এটাকে একটা খেলা হিসেবে নিবা। ছোট বেলায় বিকালে ক্রিকেট খেলতে বের হয়ে খেলার সময় বা খেলার পর যেই আনন্দ পেয়েছিলে, সেটা যদি এখানেও পাও তাহলে কনটেস্ট তোমার জন্যেই! কিন্তু তা না হয়ে যদি চিন্তা কর “অমুক ভাই কনটেস্ট করে এখন অমুক জায়গায় বড় জব করে। আমিও কনটেস্ট করবো” তাহলে মনে হয় না খুব বেশি দূর আগানো সম্ভব। কনটেস্ট ছাড়াও অনেক ভাল প্রোগ্রামার আছেন। অনেক বড় বড় প্রোগ্রামার আছেন যারা কনটেস্ট এর ব্যাপারে আগ্রহী না। যদি তোমার আগ্রহ না থাকে তাহলে জোর করার দরকার নাই।
This Blog Edited By Sourov Dey
ধন্যবাদ সবাইকে,
Mohammad Jubair