UIU: Beginner Programmer’s FAQ


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

প্র: কনটেস্ট প্রোগ্রামারদের কোডে অনেক Header File include করা থাকে, যার সবগুলা ওই কোডে ব্যবহারও করা হয় না। তারপরও তারা কেন এতগুলা Header File একবারে include করে? কারণছাড়া এতগুলা Header File include করা হলে Performance Hit হয় না?

উত্তর: সময়। কনটেস্টে সময় সবচেয়ে গুরুত্বপুর্ণ বিষয়।

ধরেন, কোড করতে গিয়ে আপনি strlen() ফাংশন ব্যবহার করলেন। শুধু ব্যবহার করলেই তো হবে না, উপরে সেটার Header file ডিক্লেয়ার করে আসতে হবে। আবার কিছুক্ষন পরে isdigit() ব্যবহার করলেন এবং পুণরায় উপরে গিয়ে Header file ডিক্লেয়ার করতে হবে। এইভাবে উপর-নীচ করতে করতে ভালই সময় নষ্ট হয়।

তাই কনটেস্ট প্রোগ্রামাররা প্রয়োজনীয় সব Header file একবারে ডিক্লেয়ার করে রাখে। কনটেস্ট প্রোগ্রামারদের প্রায় সবারই একটা টেমপ্লেট ফাইল থাকে। কোড শুরু করার আগে তারা সেই টেমপ্লেট ফাইলটা কপি-পেষ্ট করে বসায়, তারপর কাজ শুরু করে। আমার টেমপ্লেট ফাইলটা || এখানে || পাবেন।

এখন কথা হল, এতগুলা হেডার ফাইল একসাথে থাকলে Performance Hit হয় কিনা। হয়তো হয়; কিন্তু সেটা মোটেই ধর্তব্য নয়। কনটেস্টের কোডগুলা সাধারনত কমবেশি ১৫০ লাইনের হয়। মাত্র একটা ফাইলে ১৫০ লাইনের কোড, এর মধ্যে কয়েকটা হেডার ফাইল থাকলে এটা কখোনই Performance Hit না। # দিয়ে শুরু হওয়া লাইনগুলোকে Pre-Processor বলে।

===================

প্র: কোড সাবমিট করতে গেলেই ভয় লাগে / হার্টবিট বেড়ে যায় / হাঁটু কাঁপে / মনিটরের দিকে তাকাতে পারি না / গরমের দিনে ঠান্ডা লাগে / ঠান্ডার দিনে গরম লাগে / বার বার মনে হয়: “এইটাও Accepted হবে না 😦 আমি সিওর” ইত্যাদি .. এমনটা কি শুধু আমারই হয় নাকি সবার হয়? এই থেকে বাঁচার উপায় কি?

উত্তর: এই কাহিনি শুধু আপনার না, সবারই হয়, সবসময়ই হয়। এর থেকে বাঁচতে হলে বেশি বেশি করে প্রবলেম সলভ করতে হবে।

তাই নাকি!! বেশি করে প্রবলেম সলভ করলে সবকিছু ঠিক হয়ে যাবে??

না না! বেশি করে প্রবলেম সলভ করলে এইগুলা অভ্যাস হয়ে যাবে।

বড় বড় প্রোগ্রামাররা এত বেশি বেশি প্রবলেম সলভ করে এবং তার ফলত এত বেশি বেশি Wrong Ans, Time Limit Exceed খায় যে, তাদের কাছে এইগুলা আর গায়েই লাগে না। তারা ভাবুক হয়ে যায়। Wrong ans খাওয়ার পর তারা ভাবে, “কি আছে দুনিয়ায়?” কিংবা Time limit exceed খাওয়ার পর ভাবে, “লাভ নাই, লাভ নাই”

===================

প্র: পেনাল্টি বলতে কি বুঝায়? আমি এবং আমর বন্ধু দুইজনই যদি ১০ টা প্রবলেম সলভ করি তাহলে কে আগে থাকবে? কন্টেস্টে ফাস্ট কোডিং বেশি ইম্পর্টেন্ট, নাকি কারেক্ট কোডিং বেশি ইম্পর্টেন্ট?

উত্তর: যদি দুইজন প্রেগ্রামার একটা প্রবলেম সলভ করে তবে যে আগে সলভ করে সে সামনে থাকে। খুবই স্বাভাবিক, তাই না? একটা প্রবলেম যত দেরিতে সাবমিট করবেন, পেনাল্টি তত বেশি। মানে, সময়ের সাথে সাথে পেনাল্টি বাড়তে থাকে। এবং যার পেনাল্টি যত বেশি সে তত পিছনে থাকে।

যেমন ধরেন, আপনি ৫ মিনিটের মাথায় একটা প্রবলেম সাবমিট করলেন এবং আপনার পেনাল্টি হল ৫০
আপনার বন্ধু ১২ মিনিটের মাথায় একটা প্রবলেম সাবমিট করলে তার পেনাল্টি হবে ১২০ .. এইভাবে

আপনি কিন্তু ৫ মিনিটের মাথায় প্রবলেমটা সাবমিট করেছেন। এখন ধরেন আপনার verdict আসলো Wrong ans
তারপর আপনি প্রোগ্রামটা ঠিকঠাক করে আবার সাবমিট করলেন ৮ মিনিটের মাথায় এবং আপনার verdict আসলো Accepted
তবে আপনার পেনাল্টি হয়ে গেল ২৫০

কিভাবে??

একটা প্রবলেম যতবেশি বার সাবমিট করবেন তত পেনাল্টি বাড়তে থাকবে।
যদি আপনার বন্ধুর প্রোগ্রাম প্রথমবারেই Accepted হয় তাহলে তার পেনাল্টি ১২০-ই থাকবে।

কাজেই প্রবলেম সলভ হয়ে গেছে মনে করার পর তাড়াহুড়া করে সাবমিট না করে একবার একটু দেখে নেয়া ভাল। তাতে সময় একটু বেশি লাগলেও বরং লাভই হয়।

তবে পেনাল্টি কোন কাজেই আসবে না যদি আপনি বেশি প্রবলেম সলভ করতে পারেন।
ধরেন, আপনি ২টা প্রবলেম সলভ করেছেন এবং আপনার পেনাল্টি ১০০০
আপনার বন্ধু ১টা প্রবলেম সলভ করেছে এবং তার পেনাল্টি ১০
তাহলে আপনি উপরে থাকবেন। যদি দুইজন সমান সংখ্যক প্রবলেম সলভ করেন তাহলে যার পেনাল্টি কম তিনি উপরে থাকবেন।

কারেক্ট কোডিং করা সবচেয়ে ইম্পর্টেন্ট, কারেক্ট কোডিং করতে থাকলে একসময় আপনার কোডিং ফাস্ট হয়ে যাবে। কাজেই প্রথমে ফাস্ট কোডিং করার চিন্তা না করে কারেক্ট কোড করার চিন্তু করা উচিত।

===================

প্র: সবাই এত ভালো পারে কেন? আমি কেন কিছু পারি না? আমার মাথায় কেন সিরাম আইডিয়া আসে না? আমি কি ভোগল / ভোদাই 😦 ?

উত্তর: শুরুতেই সবাই “The BOSS” থাকে না। শূণ্য থেকেই শুরু করতে হয়। কারও পানি একটু তাড়াতাড়ি গরম হয়, কারও একটু দেরিতে, এই যা। ওহ, পানি গরমের কাহিনি আগে বলি নাই?

দুইজন বন্ধু একসাথে বাজার থেকে একই রকম পাতিল, একই রকম চুলা কিনে আনল। একই পরিমান পানি নিজেদের পাতিলে ঢেলে তারা পানি গরম করা শুরু করল। কিছুক্ষন পর দেখা গেল এক বন্ধুর পানি গরম হয়ে ফুটতে শুরু করেছে। অন্য বন্ধুর পানি চুপচাপ। ১ম বন্ধুর পানি ফুটতে ফুটতে পাতিল থেকে উপচে পড়ছে। ২য় বন্ধুর পানি এখনও কোন কথা বলে না। এই পর্যন্ত আসার পর ২য় বন্ধু বলল, ধ্যাৎ শালা, আমার পানি জীবনেও গরম হবে না। এই বলে সে চুলা বন্ধ করে দিল।

আসলে কি তাই? তার পানি কি জীবনেও ফুটত না?

১ম বন্ধু হয়তো এমন পানি নিয়েছিল যেটা আগে থেকেই গরম ছিল। আর ২য় বন্ধু হয়তো পানি নিয়েছিল ফ্রিজ থেকে। হয়তো একারনেই ২য় বন্ধুর পানি ফুটতে সময় নিচ্ছিল।

কি পানি নেয়া হয়েছিল তাতে কিছুই আসে যায় না। আরেকটু ধৈর্য্য ধরে থাকলে ২য় বন্ধুর পানিও ফুটতে শুরু করত। হাল ছেড়ে দেয়ার কারনে এখন আসলেই তার পানি জীবনেও ফুটবে না।

সেজন্যই বললাম, কারও পানি একটু তাড়াতাড়ি ফুটে, আর কারও একটু দেরিতে, পার্থক্য এর চেয়ে বেশি কিছুই নয়।

===================

প্র: CGPA কোথায় কোথায় প্রয়োজন হয়? CGPA ভালো না, কিন্তু যদি প্রোগ্রামিং পারি তাহলে কোথাও প্রবলেম হবে? কতটা CGPA হলে সেটাকে ভালো CGPA বলা যায়?

উত্তর:

CGPA যেখানে প্রয়োজন হয়:
১. ভার্সিটিতে স্কলারশিপ পেতে হলে
২. দেশে / বিদেশে পড়াশুনা (Ms / PhD) করতে গেলে স্কলারশিপসহ।
৩. একাডেমিক লাইনে আসতে হলে (লেকচারার – প্রফেসর হতে গেলে)
৪. হুদাই ফাপর নিতে চাইলে।
বন্ধুদের সাথে দেখা হলেই জিজ্ঞেস করবেন, “দোস্ত তোর CGPA কত?” কারন আপনি জানেন, দোস্ত তার নিজেরটা বলার পর নিশ্চয়ই আপনারটা জিজ্ঞেস করবে।

মোটামুটি এইসব কাজের জন্যই আমাদের CGPA প্রয়োজন।

যদি জব করতে চান, ইন্ডাস্ট্রিতে আসতে চান তাহলে CGPA’র ভূমিকা নাই বললেই চলে। বরং যত খারাপ CGPA তত ভাল।

এখন আসি ১ নং পয়েন্টটা নিয়ে

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

আর স্বাভাবিকভাবেই যখন আপনি স্কলারশিপের জন্য পড়াশোনা করবেন তখন আপনার উপর পড়ার চাপ থাকবে। এবং চাপের কারনে হলেও আপনি পড়াশোনা করবেন; তাতে করে CSE রিলেটেড জ্ঞান বাড়বে, সেটা হলে আপনারই লাভ। চাপ না থাকলে প্রায় কেউই পড়াশুনা করতে চায় না। নিজের সাবজেক্টে যত বেশি জানবেন, বুঝবেন, শিখবেন ততই আপনার জন্য ভাল।

আমি বলেছি, জব পাবার জন্য CGPA দরকার নাই, কিন্তু CSE Knowledge তো লাগবে। অনেকে ব্যপারটা উল্টা বুঝে। তারা মনে করে, জব পাবার জন্য পড়াশুনা করার দরকার নাই। কথাটা ভুল।

CGPA এবং পড়াশুনা এক জিনিস না। জব করতে CGPA লাগবে না মনে করে যদি পড়াশুনাতে ফাকিবাজি শুরু করেন তাহলে নিজেই চিপায় পড়বেন। জব মানে আপনার knowledge practically apply করা, কিন্তু আপনার Theoritical knowledge না থাকলে কি practically apply করবেন?

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

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

ছাত্রজীবন অনেক গুরুত্বপূর্ণ সময়। সময় নষ্ট করা যাবে না এবং সময়ের কাজ সময়ে করতে হবে। একটা উদাহরন দেই। যেকোন একটা সাবজেক্ট মনে করেন, ধরেন, AI (Artificial Intelligence); আমরা জানি এআই খুবই গুরুত্বপূর্ণ একটা সাবজেক্ট। কিন্তু এই সাবজেক্ট সম্পর্কে জানার জন্য আপনি পুরো ৪ বছরে সময় পাবেন খুব বেশি গেলে ৪ মাস। এর বেশি একদমই সময় পাবেন না। নতুন সেমিস্টারে নতুন সাবজেক্ট চলে আসবে, তখন কিন্তু সেটাই পড়তে হবে। নতুন সেমিস্টারে চাইলেও আগের সেমিস্টারের সাবজেক্ট পড়তে পারবেন না। ওই যে বলে না, সময়ের এক ফোড় অসময়ের দশ ফোড়, ওইরকম আর কি।

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

অনেকেই এইসব বুঝেন, এবং ঠিকমত পড়াশোনা করা শুরুও করেন। কিন্তু অল্প কিছুদিন পরেই হাল ছেড়ে দেন। ফলাফল: যাহাই বাহান্ন তাহাই পয়ষট্টি।

হাল ছেড়ে দেয়ার অন্যতম প্রধান কারন, ১-২ বার পড়ার পর কোন টপিক বুঝতে না পারা, বা কঠিন মনে হওয়া।

আপনি একজন স্টুডেন্ট। জীবনে প্রথমবার এই সাবজেক্ট / টপিক পড়ছেন, আগে কোনদিন দেখেন নাই। কিভাবে আশা করেন, ১-২ বার পড়েই আপনি পুরা কাহিনি বুঝে ফেলবেন? নিজেরে সক্রেটিস মনে করেন নাকি? আরে ভাই, সক্রেটিস নিজেও তো নিজেরে সক্রেটিস মনে করে না! আর আপনি সেইদিনের পোলাপান, দিনে ২ পাতা পড়েই মনে করেন,

ওফ! আজকে তো ব্যপক পড়াশোনা করে ফেলছি, আর ১ পাতা বেশি পড়লে সেটা শরীয়ত বিরোধী কাজ হবে, যাই ফেসবুকে আজকের “পড়াশোনাময় দিন” নিয়ে একটা স্ট্যাটাস দিয়া আসি

এটা খুবই স্বাভাবিক যে, ১-২ বার পড়লে কিছুই বুঝবেন না। এই অবস্থায় হাল ছেড়ে দিলে সারাজীবন ওই টপিকে দূর্বল থাকবেন। কি করতে হবে আমি বলি

১. একটা বই নেন, একটা টপিক পড়া শুরু করেন, কিছুই না বুঝলেও পড়া থামানো যাবে না, পুরা চ্যাপ্টার পড়ে ফেলেন। পুরা চ্যাপ্টার আবার পড়েন। কিছু বুঝেন নাই? ঠিক আছে।
২. অনলাইনে ওই টপিকের একটা আর্টিকেল বের করে পড়ে ফেলেন। আর্টিকেলটা আবার পড়েন। কিছু বুঝেন নাই? ঠিক আছে।
৩. অন্য একটা বই নেন। পুরা চ্যাপ্টার পড়ে ফেলেন। পুরা চ্যাপ্টার আবার পড়েন। কিছু বুঝেন নাই? ঠিক আছে।
৪. অনলাইন থেকে আরেকটা আর্টিকেল বের করে পড়েন। আর্টিকেলটা আবার পড়েন। কিছু বুঝেন নাই? ঠিক আছে।
৫. এইবার আপনি আপনার টিচারের কাছে চলে যান এবং বলেন আপনি চিপায় পড়ছেন। বলেন, ২ টা বইয়ের চ্যাপ্টার এবং ২ টা আটর্িকেল পড়ার পরও আমি বুঝতেছি না।

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

এখন আসি ২ নং পয়েন্টটা নিয়ে

অনেকেই বলেন, তিনি বিদেশে যেতে চান না। Ms/PhD করার মত যথেষ্ট মেধা তার নাই, ইত‍্যাদি। ভবিষ‍্যতের কথা তো বলা যায় না। বিদেশে যেতে হতেও পারে। CGPA থাকলে কোন ক্ষতি নাই, পড়াশোনা শেষে যদি বাইরে যাওয়ার ইচ্ছাও হয় তাহলে রাস্তা খোলা থাকে। আমার সাজেশন হল, রাস্তা খোলা রাখা ভালো।

৩ নং পয়েন্টটা নিয়ে বিশেষ কিছু বলার নাই, একাডেমিক লাইনে ভাল করতে হলে CGPA দরকার।

৪ নং পয়েন্টটা নিয়ে কিছু বলতে হবে? নাকি নিজেই বুঝে গেছেন? 😛

CGPA ভালো না, কিন্তু যদি প্রোগ্রামিং পারি তাহলে কোথাও প্রবলেম হবে .. হুম হবে; একটু আগে CGPA কোথায় প্রয়োজন হয় সেটা নিয়ে আলাপ করলাম, সেইজায়গাগুলায় প্রবলেম হবে

কতটা CGPA হলে ভালো বলা যায় .. এটা বলা কঠিন, ভালোর তো কোনো শেষ নাই .. তারপরও আমি একটা বেসিক ধারণা দেই

3.2+: এটা না হলে কেউ আপনাকে পাত্তা দিবে না; এই CGPA নিয়ে ভালো কোথাও যেতে হলে সবার আগে যেটা লাগবে সেটা হলো কপাল (Luck); তারপরে লাগবে, CGPA ছাড়া অন্যদিকে অতীব ভালো qualification, যেমন ভালো Thesis paper কিংবা ভালো GRE score etc.

3.5+: এটা হলো একটা respectable লেভেল; এই লেভেলে আসতে পারলে সব রাস্তা খোলা

3.7+: এই লেভেলটা প্রমান করে, You have a class; মানে আপনি একটা জিনিস

3.8+: এটা extra-ordinary

===================

প্র: প্রোগ্রামিং কনটেস্ট করার কি দরকার? ঘরে বসে নিজের মত Practice করলেই তো ভালো প্রোগ্রামার হওয়া যায়, অন্যদের সাথে কম্পিটিশন কেন করতে হবে? কনটেস্ট করলে আমার কি ধরনের উন্নতি হবে?

উত্তর:

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

ঘরে বসে নিজের মত প্র্যাকটিস করলে অবশ্যই ভাল প্রোগ্রাামার হতে পারেন। তবে অন্যদের সাথে কম্পিটিশন কেন করতে হবে, এটা একটু জটিল প্রশ্ন।

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

কিন্তু এই জিনিসগুলা ভুলে গেলে চলবে? পাশ করার পর দেখা যাবে সবকিছু ভুলে গেছেন, তখন কেমন হবে?

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

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

Computer Science-এ পড়েন কিন্তু প্রোগ্রামিংয়ে দূর্বল, কথাটা শুনতে কেমন লাগে? আজিব না?
যারা এই সহজ হিসাব বুঝে না, তাদেরকে বেশি বুঝাতেও চাই না।

বাসায় বসে বই কিনেই তো পড়া যায়, শুধু শুধু স্কুল, কলেজ, ভার্সিটির দরকার কি?
দরকার হল, একটা নিয়ম বা পরিবেশের মধ্যে পড়াশোনা করা।
নিয়মের বাইরে যেয়ে পড়াশুনা করে ভাল করার উদাহরন আছে। তারা জিনিয়াস, আপনি জিনিয়াস? তাহলে হিসাব আলাদা

এবার আসি, যারা মাসের পর মাস, বছরের পর বছর প্রোগ্রামিং কনটেস্ট করল, তাদের উন্নতি কি হয়

১. প্রবলেম সলভ করার জন্য প্রবলেম পড়তে হয়। তারা প্রচুর প্রবলেম সলভ করে। প্রবলেম পড়তে পড়তে এতই এক্সপার্ট হয়ে যায় যে, যেকোন সমস্যা (প্রোগ্রাামিং হোক বা রিয়েল লাইফ) তাদের পুরো পড়তে হয় না, চোখ বুলালেই তারা বুঝে ফেলে কাহিনি কি

২. প্রবলেম খালি পড়লেই হয় না। প্রবলেমের মধ্যে অনেক চিপা থাকে, সেগুলা খুজে বের করতে হয়। এই চিপা খুজে পড়াটাকে বলে Effective Reading; ওই যে বললাম, তারা পুরো প্রবলেম পড়ে না, চোখ বুলালেই এই চিপাগুলা তাদের নজরে চলে আসে। প্রবলেম পড়তে পড়তে English Reading Skill-ও অনেক বেড়ে যায়।

৩. একেকটা অ্যালগরিদমের উপর তারা প্রচুর প্রবলেম সলভ করে। এতে করে সবগুলা অ্যালগরিদম তারা খুব ভালভাবে বুঝে এবং অ্যপ্লাই করতে পারে। প্রবলেম পড়তে পড়তেই তারা বুঝে যায় এইখানে কোন অ্যালগরিদম হবে।

৪. কোডিং যে কত ফাস্ট করা যায় এটা কন্টেস্ট প্রোগ্রামারদের না দেখলে বুঝা মুশকিল। প্রায়ই দেখা যায়, প্রবলেমের সাবমিশন টাইম < ২ মিনিট। মানে হল, ২ মিনিটের মধ্যে প্রবলেমটা পড়া শেষ, চিন্তুা করা শেষ, কোডিং করা শেষ, ডিবাগ করা শেষ এবং সাবমিটও করা হয়ে গেছে।

৫. কিছু কন্টেস্টের ফরম্যাট এমন যে, কন্টেস্ট শেষ হবার পর আপনি সবার কোড দেখতে পাবেন। এবং অন্যদের কোডে ভুল খুজে বের করতে পারলে আপনি পয়েন্ট পাবেন। পয়েন্ট পেলেন কিনা সেটা তো পরে। এই কাজটার ফলে Code Reading Skill অনেক অনেক বৃদ্ধি পায়। কোড পড়ে অনেক শর্টকাট টেকনিক শিখতে পারবেন। সংক্ষেপে আমি বলি, লেখক হতে গেলে যেমন অন্য লেখকদের বই পড়তে হয়, ঘটনাটা এইখানেও একই।

৬. কম সময়ের মধ্যে কনটেস্ট করতে হয়। কাজেই, প্রেশারের মধ্যে কিভাবে কাজ করতে হয়, এটাও শিখে যাবেন।

৭. নিশ্চয়ই জানেন, একটা কোডে কতরকম ভুল থাকতে পারে, যার কারনে আমরা WA / TLE / RTE / MLE / OLE / PE ইত্যাদি খাই। একটা কোড পারফেক্ট হলেই কেবল সেটা Accepted হয়। যতই বেশির থেকেও বেশি প্র্যকটিস করবেন, ততই বেশির থেকেও বেশি Perfect Programmer হতে থাকবেন।

এই যে এতগুলা কাহিনি বললাম, এগুলার কোনটাই এক-দুইদিনে হবে না। অনেক অনেক শ্রমের ফলে এই অবস্থানে আসতে পারবেন। যেদিন আসতে পারবেন, সেদিন আপনার নিজের কাছেই অনেক বেশি ভাল লাগবে, কারন সেদিনই আপনার শ্রম সার্থক হবে 🙂

===================

প্র: আউটপুট দেয়ার শেষে কেন নিউলাইন দিতে হয়? এই কারণে আমি অনেক অনেক অনেক Wrong Answer খাইছি? কেন কেন কেন?

উ: উত্তর আসিতেছে .. অপেক্ষায় থাকুন — মোটামুটি ​সবাই ​

===================

প্র: বার বার Time Limit Exceed এরর পাই কেন? কিভাবে বুঝব একটা কোড Time Limit Exceed এরর পাবে কিনা?

উত্তর:

Time Limit Exceed মানে হলো, আপনার কোড অনেক সময় নিচ্ছে আউটপুট দিতে। হয়ত আপনার algorithm ভালো না কিংবা আরো ভালো algorithm apply করতে হবে

সবচেয়ে ভালো হয়, যদি আপনি এমন কোনো লুপ না চালান যেটা 10^6 (1000000) বারের বেশি ঘুরবে।
তবে আপনি এইরকম একাধিক লুপ চালাতে পারেন। যেমন

#define N 1000000

for ( int i = 0; i < N; i++ ) {

}

for ( int i = 0; i < N; i++ ) {

}

for ( int i = 0; i < N; i++ ) {

}

উপরের কোড ভালো করে লক্ষ্য করেন। এই প্রোগ্রাম কতবার ঘুরছে?

প্রতিটা লুপ N বার ঘুরছে; এবং এইরকম ৩টা লুপ আছে; তাহলে প্রোগ্রামটা মোট 3 * 10 ^ 6 times ঘুরছে

এই 3-কে বলা হয় constant factor, এটা যত ছোট রাখা যায়, ততই ভালো

আপনার প্রোগ্রাম যদি 10^7 (10000000) বার ঘুরে তাহলেও মেনে নেয়া যায়;
কিন্তু 10^8 (100000000) বার ঘুরলে সেটা Accepted হবার সম্ভবনা নেই বললেই চলে

===================

প্রশ্ন: প্রথমে Project Euler তারপর ACM তারপর USACO তারপর TopCoder, এইভাবে কেন সাজানো হলো? একটা থেকে আরেকটা বেশি কঠিন? কতটা কঠিন? সবগুলা সম্পর্কে একটু বিস্তারিত জানতে চাই

উত্তর:

এইভাবে সাজানোর কারণ আছে। তবে একটা থেকে আরেকটা কঠিন, এটা বলা যায় না
Project Euler-এ অনেক কঠিন কঠিন প্রবলেম আছে
তেমনি TopCoder-এ অনেক সহজ প্রবলেম আছে
এইভাবে সাজানোর কারণ হলো সাবমিশন করার স্টাইল

1. Project Euler
খুব ছোট এবং সুন্দর করে বলা আছে, প্রবলেমটা কি এবং আপনাকে কি করতে হবে
কোনো ধরনের হাংকি-পাংকি নাই, জাস্ট উত্তরটা জায়গামত বসায়ে দিলেই সে খুশি
উত্তর জায়গামত বসানোর পর আপনি খুশি হবেন কিনা সেটা একদমই অন্য ব্যাপার : প
শুরু করার জন্য এটা খুবই ভালো, সাইটটাও অনেক সুন্দর এবং খুবই সিম্পল

2. ACM
আগের সবগুলা কনটেস্টের প্রবলেম এইখানে পাওয়া যাবে
কনটেস্ট-এ ভালো করতে হলে আগের কনটেস্ট প্রবলেমগুলা সলভ তো করতেই হবে
এইখানে কোড সাবমিট করতে হবে, যেটা Project Euler-এ ছিল না
কোড সাবমিট করার জন্য কিছু জিনিস খেয়াল রাখতে হবে
সেই জিনিসগুলা শিখার জন্যই Project Euler-এর পর ACM করতে হবে
সারারণত প্রবলেমগুলা একটু বড়, আজাইরা গল্প থাকে, আসলেই কি করতে হবে সেটা খুঁজে বের করতে হয়
ধীরে ধীরে এক্সপার্ট হয়ে গেলে, প্রবলেম একনজর দেখেই বুঝে ফেলবেন এইটার কাহিনি কি

3. USACO
প্রব্লেমগুলা ACM-এর মতই .. তবে নিজের ইচ্ছামত প্রবলেম সিলেক্ট করা যায় না
প্রথমে আপনাকে ৪টা প্রবলেম দেয়া হবে .. সেই ৪টা শেষ হলে পরের ৪টা দেয়া হবে
প্রথম ৪টা সলভ না হলে পরের ৪টা লক থাকবে
প্রবলেমগুলা সহজ থেকে আস্তে আস্তে কঠিনের দিকে যায়
একটা প্রবলেম সলভ হলেই সেটার একটা টিউটোরিয়াল পাবেন, খুবই উন্নতমানের
সেই টিউটোরিয়াল পড়ে অনেক কিছু শেখা যায়। আরেকটা মজার ব্যাপার আছে
ধরেন, একটা প্রবলেম সলভ করার কোড সাবমিট করলেন, এবং ধরা খেলেন
সেইক্ষেত্রে সে আপানকে বলে দিবে কোন ইনপুটের জন্য আপনি ধরা খেলেন
আজকে যারা বড়লোক তারা সবাই একসময় USACO সলভ করত
ACM করার টিউটোরিয়াল USACO, তাই আগে ACM তারপর USACO

4. TopCoder
পৃথিবীর সবসেরা এলগরিদম জানা প্রোগ্রামারদের আড্ডাখানা হলো TopCoder
১০-১৫ দিন পর পর একটা করে কনটেস্ট হয়, সেখানে সবাই অংশগ্রহণ করে

আপনারা কোড সাবমিট করলে কি হয়? ACC / WA / TLE / PE / RTE পান, তাই না?
এই নিয়ে তো আপনাদের অভিযোগের কোনো অন্ত নাই
আমার সাথে দেখা হলে বা ফেসবুকে আমি আপনাদের মেলা অভিযোগ পাই

ভাইয়া, আমাকে খালি WA দেয় 😦 😦 😦
TLE খাইতে খাইতে আমার জান UIU গেট দিয়ে ঢুকে আসাদগেট দিয়ে বের হইছে 😦
আমি তো কিছু করি নাই, আমাকে কেন বার বার RTE দেয়, আমার কি দোষ 😦

TopCoder-এ কোড সাবমিট করলে আপনাকে কোনো রিপ্লাই দিবে না
কোডটা ঠিক হইলো নাকি ভুল হইলো, জানার কোনো উপায় নাই
আপনি খালি প্রবলেম পড়বেন এবং কোড করে সাবমিট করবেন
কনটেস্ট শেষ হওয়ার পর আপনাকে বলবে, কোড ঠিক ছিল নাকি ভুল!

ACM-এ চাইলে একটা কোড ১০বার সাবমিট করা যায়, সলভ হলেই পয়েন্ট
TopCoder-এ একটা কোড ২য় বার সাবমিট করলে ২০% পয়েন্ট কাটা
৩য় বার সাবমিট করলে আরো ২০% পয়েন্ট কাটা!

কনটেস্ট শেষ হবার পর, রেজাল্ট দেয়ার আগে একটা সময় থাকে, Challenge Phase
ওইসময় আপনি সবার কোড দেখতে পারবেন, এখনো কেউ জানে না, কার কোড ঠিক / ভুল
আপনি যদি কারো কোডে ভুল বের করতে পারেন তাহলে আপনি পয়েন্ট পাবেন
কেউ যদি আপনার কোডে ভুল বের করতে পারে, সে পয়েন্ট পাবে, আপনি জিরো পাবেন!

সবশেষে যেয়ে রেজাল্ট দিবে, তখন সবাই জানতে পারবে, কার কোড ঠিক হলো / ভুল হলো

এখন একটু চিন্তা করেন, আপনারা যখন আমাকে বলেন, “ভাইয়া, আমাকে WA দেয় :(”
তখন আমার কেমন লাগে? আমাকে তো কিছুই দেয় না 😦 WA দিলেও তো আমি খুশি 😀
কোড সাবমিট করার পর পুরাই টেনশন, কোডটা ভুল হলো নাতো কোথাও?
কনটেস্ট শেষ হবার আগে জানার কোনো উপায় নাই, চুপচাপ বসে থাকতে হবে!
আর আপনারা সাবমিট করার সাথে সাথে রিপ্লাই পান! এইটা কিছু হইলো? :/

===================

প্রশ্ন: আমরা কেন এখনো C/C++ ব্যবহার করি? অনেক আধুনিক Language যেমন Python, PHP, Javascript ইত্যাদি, এইগুলা কেন ব্যবহার করি না? Practical / Real Life Project গুলাতে কোথাও কি C/C++ এখনো ব্যবহার হয়? শুনা যায়, C/C++ নাকি সবচেয়ে ফাস্ট, নতুন Language গুলার চেয়েও, এটার কারণ কি?

উত্তর:

প্রথম কথা হলো, Language দিয়ে আমরা কি করি?

Language দিয়ে আমরা কম্পিউটারকে ইন্সট্রাকশন দেই। মানে, আমরা যা করতে চাই, সেটা কম্পিউটারকে বলি। যতযাই বলি না কেন, শেষপর্যন্ত কম্পিউটার কিন্তু 0 এবং 1 ছাড়া আর কিছু বুঝতে পারে না। কাজেই আপনি যদি কম্পিউটারকে 0 এবং 1 দিয়ে ইন্সট্রাকশন দিতে পারেন তাহলে সেটা কম্পিউটার-এর জন্য সবচাইতে ভালো, যদিও সেটা আমাদের জন্য একটু কষ্টের। তাই আমরা নিজেদের প্রয়োজনে Language ব্যবহার করি।

Level অনুসারে Language ৩ রকম:

1. Low Level: যেই Language কম্পিউটার খুব ভালো বুঝতে পারে কিন্তু আমাদের জন্য বুঝতে / লিখতে একটু কষ্ট। যেমন Assembly Language

2. Middle Level: কম্পিউটার এবং আমরা, দুইজনের জন্যই মোটামুটি বুঝতে সহজ। যেমন C / C++

3. High Level: আমাদের জন্য বুঝতে সহজ, কিন্তু কম্পিউটার-এর জন্য একটু কঠিন। যেমন Java, Python

চলেন আমরা Low Level Language (Assembly Language)-এর একটা কোড দেখে আসি


DATA SEGMENT
DATA ENDS
CODE SEGMENT
        ASSUME DS:DATA,CS:CODE
        START :
                MOV AX,DATA
                MOV DS,AX

        MOV BL,00H
        MOV CH,00H
        MOV CL,0AH
        
        
    L1   :  MOV DH,00H
        MOV DL,BL
        ADD DL,'0'
        MOV AH,02H
        INT 21H
        INC BL
        LOOP L1
    
                MOV AH,4CH
                INT 21H
CODE ENDS
        END START

এই অসাম ছালা কোডটার আউটপুট কি জানেন?

আউটপুট হলো:


0123456789

যেটা আমরা C Language দিয়ে করলে printf ("0123456789"); এইভাবে করি

সুন্দর না?

উপরের কোডটায় একটা লুপও আছে, লাইন 14 থেকে 20 পর্যন্ত

কাহিনি বুঝা গেল? 0 to 9 প্রিন্ট করতে আমাদের Assembly Language দিয়ে কি কোড করা লাগলো!
আমাদের ১২টা বাজলেও কম্পিউটার কিন্তু এই জিনিস খুব ভালোভাবে বুঝতে পারে এবং ফাস্ট কাজ করতে পারে

আপনি একসময় বড় হবেন, অনেক বিশাল বিশাল সফটওয়্যার বানাবেন .. 0 to 9 প্রিন্ট করতেই যদি আপনার “গন্ড ভিজিয়া যায় নয়নের জলে” তাহলে দেশ ও জাতির কি অবস্থা হবে একবার ভেবে দেখেন 😦
*গন্ড মানে cheek (গাল)

সেইজন্যই Practical / Real Life Project গুলাতে আমরা High Level Language ব্যবহার করি, যাতে করে অনেক বড় কমপ্লেক্স কাজ সহজে করা যায়।

একটু আগেই বললাম, High Level Language বুঝতে কম্পিউটার-এর একটু কষ্ট হয় তাই সেগুলা slow হয়। কিন্তু অন্যদিকে Assembly Language দিয়ে কোড করলে আমাদের ১২টা বেজে যাবে, কিন্তু কম্পিউটার কাজ করবে ফাস্ট।

চিপায় পড়ে গেলাম তো! কি করা যায়?

সেইদিক থেকে C / C++ কিন্তু বেশ ভালো .. বেশ ভালো মানে হলো, খুবই ভালো
C / C++ Middle Level Language, মানে কম্পিউটার এবং আমরা, দুইদলের জন্যই সুবিধা
এইজন্যই যতই পুরানো হোক না কেন, আমরা C / C++ ছাড়া চলতে পারি না

আরেকটা পদ্ধতি এখন অনুসরণ করা হয়, সেটা হলো, কোড করা হয় High Level Language দিয়ে কিন্তু
যেখানে Performance slow হয় সেখানে C / C++ ব্যবহার করা হয়

আমি আমার নিজের দিক থেকে উদাহরণ দিতে পারি। যেমন, আমি স্মার্ট ফোন এপ্লিকেশন ডেভেলপ করি
Android app Develop করতে হয় Java দিয়ে, কিন্তু ওদের NDK আছে
NDK = Native Development Kit, এটায় কাজ করতে হয় C++ দিয়ে
মানে হলো, Java দিয়েই কোড করতে হয় .. কিন্তু যদি চিপায় পড়ি তখন C++

আর iOS app Develop করতে হয় Objective-C দিয়ে
এখানে C / C++ Default ব্যবহার করা যায়, কাজেই চিপায় পড়লেই C / C++

Mobile Platform-এ Huge Number of Game Framework পাবেন C / C++-এর
কারণ Games স্বাভাবতই বেশ Costly অপারেশন, তাই High Performance এর জন্য C / C++ ব্যবহার হয়
আর আপনি হয়ত Open GL-এর নাম শুনে থাকবেন
যেকোনো গ্রাফিক্স (গেম গ্রাফিক্স, অ্যানিমেশন) যাই বলেন না কেন, অ্যাডভান্স গ্রাফিক্স মানেই Open GL
মোবাইল Open GL ভার্সন-এর নাম Open GL ES
যেকোনো Language দিয়ে Open GL করা যায়, তবে পারফরমেন্স-এর জন্য প্রায় সবাই C++ ব্যবহার করে

অন্য Language গুলা আসলে C / C++ থেকেই inspired
যদি C / C++-এ BOSS হতে পারেন, তাহলে অন্য Language আপনার জন্য পান্তাভাত
আমি মজা নিতেছি না .. আপনি নিজেই দেখেন, Python কোড দেখেন এবং C / C++ কোড দেখেন
আপনি নিজেই বলেন, যেই লোক C / C++-এ BOSS তার কাছে Python শিখা কোনো ব্যপার?

আমি বলি না High Level Language দরকার নাই .. অবশ্যই দরকার আছে
সবখানে High Level Language ব্যবহার হয়, এটা ছাড়া কাজ করতে পারবেন না
কিন্তু High Level Language-এ যাবার আগেই যত বেশির থেকেও বেশি C / C++ শিখতে পারবেন,
আপনার ভ্যালু তত বেশি, কারণ চিপায় পরলেই আপনার C / C++ লাগবে

সেইহিসেবে আপনি যদি ভার্সিটির থার্ড ইয়ারের পরে High Level Language শিখা শুরু করেন তাহলেই যথেষ্ট
C / C++ ভালমত জানা থাকলে অন্য Language শিখতে একদম বেশি গেলে ২ সপ্তাহ লাগতে পারে

===================

প্রশ্ন: আমার কোড আমার কম্পিউটারে কাজ করে, কিন্তু সাবমিট করলে কম্পাইলার এরর দেয় কেন? আমার কোড Visual Studio-তে চলে কিন্তু Code::Blocks-এ চলে না কেন? সহীহ পদ্ধতিতে কিভাবে কোড লিখতে হয়, যেন সব কম্পাইলার সাপোর্ট করে?

উত্তর:

কোড রান করলেই সেটাকে সুন্দর কোড বলা যায় না, কোড করার কিছু নিয়ম / কনভেনশন আছে, যেটা সব প্রোগ্রামার ফলো করে এবং ওইভাবে কোড করলে সব কম্পাইলার দিয়ে কোড রান করার কথা ..

যদি Visual Studio 6.0 ব্যবহার করেন তাহলে একটু সমস্যা হতে পারে। আমার পরামর্শ হল, Code::Blocks ব্যবহার করেন। কিংবা, Visual Studio 2005 বা তারপরের যেকোন ভার্সন ব্যবহার করতে পারেন। যেহেতেু Visual Studio বেশ ভারী সফটওয়্যার তাই Code::Blocks ব্যবহার করতে বললাম।

এছাড়া, Eclipse, NetBeans ব্যবহার করা যেতে পারে। অনেকের সমস্যা হয়, Eclipse বা NetBeans-এর সাথে কম্পাইলার থাকে না। তাই আলাদা করে কম্পাইলার ইন্সটল করে নিতে হয়। সেইদিক থেকে Code::Blocks ব্যবহার অনেক সহজ। একটা সমস্যা আছে, Code::Blocks -কে Kaspersky Like করে না। সমাধান ২টা:

১. Code::Blocks-কে Kaspersky Exception হিসেবে সেট করে দিতে পারেন। আমি আপাতত বলতে পারছি না সেটা কিভাবে করতে হয়, কারন আমি Code::Blocks বা Kaspersky তো দূরে, মাইরি Windows পর্যন্ত ব্যবহার করি না, সে ম্যালা দিন হইছে। একটু নেট ঘেটে দেখে নেন কিভাবে Kaspersky Exception সেট করতে হয়।

২. কিছুক্ষণ Kaspersky বন্ধ করে রাখতে পারেন। (এইটা কিছু হইলো? :-/)

Code::Blocks ইন্সটল থেকে শুরু করে কোড করা পর্যন্ত কিভাবে কি করতে হবে এই নিয়ে আমার অতি চমকপ্রদ একটা টিউটোরিয়াল আছে, দেখতে পারেন।

তাহলে এখন আমরা ধরে নিব আপনি Code::Blocks ব্যবহার করছেন। আসলে GCC Compiler ব্যবহার করছেন। GCC Compiler, Code::Blocks-এর সাথেই দেয়া আছে। তাই কোন অতিরিক্ত কাজ করতে হল না। যদি Eclipse বা NetBeans ব্যবহার করেন তাহলে তার সাথে GCC Compiler ইন্সটল করে নিলেও একই কাজ হবে। মোট কথা আপনি এখন GCC Compiler ব্যবহার করছেন।

C যেহেতু Platform Independent না, তাই কম্পাইলার ভেদে ছোটখাটো কিছু ব্যতিক্রম থাকতে পারে ..
যেমন কিছু Header File হয়ত সবখানে সাপোর্ট করবে না, কিংবা কিছু Function সবখানে থাকবে না, তারজন্যই ANSI-C বলে একটা স্ট্যান্ডার্ড আছে। সবাই এই স্ট্যান্ডার্ড ফলো করে। এই স্ট্যান্ডার্ড অনযায়ী, Header File-গুলার একটা লিস্ট আছে এবং Supported Function লিস্টও আছে। আপনি যদি এই লিস্টের Header File এবং Supported Function-গুলা ব্যবহার করেন তাহলে সব কম্পাইলার সাপোর্ট করবে। উদাহরন হিসেবে বলা যায়, conio.h Header File এবং strrev() Function লিস্টে নাই, তাই ব্যবহার করা যাবে না।

আমি এখন কোড দিয়ে উদাহরণ দিব .. কোনটা করা উচিত, কোনটা করা উচিত না
আশা করা যায় এইভাবে কোড করলে আর কোনো অসুবিধা হবে না
কোডটা C++ দিয়ে করা, বুঝতে প্রবলেম হলে C and C++ related পোস্টটা পড়ে আসতে পারেন
কোড সাবমিট করার সময় অবশ্যই C++ সিলেক্ট করে দিবেন, যদিও আপনি C দিয়ে কোড করেছেন
সমস্ত C কোডকে C++ কম্পাইলার দিয়ে রান করানো যায়, কাজেই সবসময় C++ সিলেক্ট করবেন


// @BEGIN_OF_SOURCE_CODE

#include <cstdio>
#include <cstring>

using namespace std;

// main function return type int হতে হবে
int main (int argc, char *argv[])
{
    // strrev() ব্যবহার করা যাবে না, ANSI-C স্ট্যান্ডার্ড না

    int i = 0;

    for ( i = 0; i < 10; i++ ) {

    }

    // i হলো লুপ ভ্যারিয়েবল
    // for loop-এর ভিতরে i ডিক্লেয়ার করবেন
    // যতবার for loop লিখবেন ততবার i ডিক্লেয়ার করবেন

    for ( int i = 0; i < 10; i++ ) {

    }

    for ( int i = 0; i < 10; i++ ) {

    }

    
    double squareRoot = sqrt (5);
    // Code::Blocks সাপোর্ট করলেও Visual Studio সাপোর্ট করবে না। 

    // Visual Studio-কে সাপোর্ট করানোর জন্য এইভাবে করতে হবে
    double squareRoot = sqrt (5 * 1.0);
    // সোজা কথায় sqrt-এর argument হিসেবে double দিতে হবে। 
 
    // একদম শেষে return 0 দিতে হবে
    return 0;
}

// @END_OF_SOURCE_CODE

প্রশ্ন: ভার্সিটিতে পরীক্ষা এবং CGPA নিয়ে কতটা সিরিয়াস হওয়া দরকার?

উত্তর:

SSC এবং HSC পরীক্ষার সময় আমরা সাধারণত ব্যপক সিরিয়াস থাকি। সারাদিন পড়াশুনা, নোট কালেক্ট করা, প্রাইভেট পড়া, স্যারের বাসায় পড়া, মডেল টেস্ট ইত্যাদি ক্যারিকেচার। প্রশ্ন হল, কেন?

উত্তরটা সহজ, SSC হল ১০/১১ বছরের পড়াশুনার পর প্রথম চিপায় পড়া
(এখন অবশ্য ক্লাস ৫ম এবং ৮ম-এ চিপায় পড়ার দুইটা মিনি ভার্সন আছে। আমি বিস্তারিত জানি না সেগুলার গুরুত্ব কেমন)
HSC-তে সিরিয়াসলি পড়তেই হয় কারন, পরীক্ষার সাথে সাথে পরবর্তীতে ভর্তি পরীক্ষার সময়ও সেগুলা কাজে লাগে।

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

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

ঘটনা ভুল!!

একটু চিন্তা করে দেখেন,
ভার্সিটিতেও সুযোগ মাত্র একবারই আসবে। একটা কোর্স কিন্তু আপনি বারবার করতে পারবেন না। কোন কোর্সে যদি খারাপ করেন তাহলে সেটাই ফাইনাল। যেমন: জাভা কোর্সে B grade পাওয়া মানে হল, ভার্সিটি লাইফে আপনি জাভা কোর্সে B grade পাইছেন এবং এটাই ফাইনাল।
(রিটেক করা যায় অবশ্য, কিন্তু কতগুলা রিটেক করবেন? ১/২/৪/৫ টা? আর রিটেক করলেই যে ভাল হবে তা কে বলতেছে? রিটেক মানেই আবার সেই শ্রম + সময় + অর্থ ব্যয় করা, যেটা আগেই একবার করা হয়েছে)

যদিও প্রতি সেমিস্টারেই মিড / ফাইনাল আসে, কিন্তু এইগুলার কিউমিউলেটিভ যোগফলই কিন্তু আপনার মূল রেজাল্ট। গুরুত্বের বিচারে প্রতিটা মিড / ফাইনালই আসলে একটা করে ছোটখাট SSC / HSC

ভুল করলে শুধরানোর সুযোগ এইখানেও নাই বললেই চলে। একটা সেমিস্টারে খারাপ করা মানে বাকী ১১ সেমিস্টারে সেইটার বোঝা টানতে হবে।
চলেন একটা উদাহরন দেখি।

ধরি, ১ম সেমিস্টারে আপনার GPA 3.5
২য় সেমিস্টারে আপনার GPA 3.5
৩য় সেমিস্টারে আপনার GPA 3.5

তাহলে ৩টা সেমিস্টার পর আপনার CGPA হল 3.5

৪র্থ সেমিস্টারে যেকোন কারনেই হোক আপনার GPA আসলো 1

এখন আপনার CGPA কত? (3.5 + 3.5 + 3.5 + 1) / 4 = 11.5 / 4 = 2.875

৪র্থ সেমিস্টারে আপনি ভুল করে খারাপ করলেন এবং ঠিক করলেন বাকী সেমিস্টারগুলাতে কঠিন পড়াশোনার মাধ্যমে এটা ঠিক করবেন। দেখা যাক ঘটনা কেমন দাড়ায়

৫ম সেমিস্টারে আপনার GPA 4; এখন আপনার CGPA কত? (11.5 + 4) / 5 = 15.5 / 5 = 3.1
৬ষ্ঠ সেমিস্টারে আপনার GPA 4; এখন আপনার CGPA কত? (15.5 + 4) / 6 = 19.5 / 6 = 3.25
৭ম সেমিস্টারে আপনার GPA 4; এখন আপনার CGPA কত? (19.5 + 4) / 7 = 23.5 / 7 = 3.35
৮ম সেমিস্টারে আপনার GPA 4; এখন আপনার CGPA কত? (23.5 + 4) / 8 = 27.5 / 8 = 3.43
৯ম সেমিস্টারে আপনার GPA 4; এখন আপনার CGPA কত? (27.5 + 4) / 9 = 31.5 / 9 = 3.5

দেখা যাচ্ছে, প্রথম ৩টা সেমিস্টার পরে আপনার CGPA ছিল 3.5; তারপরের সেমিস্টারে খারাপ করার কারনে CGPA কমে গেল। এবং সেই CGPA কে আবার আগের যায়গায় নিয়ে যেতে আপনাকে পরের (৫ম + ৬ষ্ঠ + ৭ম + ৮ম + ৯ম) = ৫টা সেমিস্টারে টানা 4 out of 4 পেতে হবে।

এইটাকে বলা যায়, ১:৫ থিওরী। মানে হল, একটা সেমিস্টারে সেইরাম খারাপ করলে সেটার ক্ষতি পুষাতে পরবর্তী ৫ সেমিস্টারে সেইরাম ভাল করা লাগবে

দিন দিন আতেঁল হয়ে যাইতেছি! এইগুলা কি লিখছি 😦

Advertisements

3 thoughts on “UIU: Beginner Programmer’s FAQ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s