SL3 Framework

Pseudo Code

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

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

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

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

রাকিব প্রথমেই gmail.com এ ভিসিট করলো এবং সেখান থেকে Create New Account বাটনে প্রেস করলো।

এর পরে একটা ফর্ম সামনে আসলো, রাকিব রাফির কাছে থেকে শুনে সমস্ত ইনফরমেশন দিয়ে ফর্মটা পূরণ করলো। ব্যাস, ইমেইল একাউন্ট তৈরি।

এবার রাকিব Facebook এর ওয়েবসাইটে ভিসিট করলো। সেখানে ভিসিট করার সাথে সাথেই তারা হাতের ডান পাশে একটা ফর্ম দেখতে পেল। সেই ফর্মে প্রয়োজনীয় সমস্ত ইনফরমেশন দিয়ে ফর্মটা সাবমিট করলো।

ফর্ম সাবমিট করার পরে, তার নতুন ইমেইলে একটা ভ্যারিফিকেশন ইমেইল চলে গেলো। রাকিব ইমেইল থেকে ভ্যারিকেশন ইমেইলটা ওপেন করে অ্যাকাউন্টটি ভ্যারিভাই করে দিলো।

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

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

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

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

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

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

প্রথমে আমরা যোগ করার সিস্টেমটা খাতায় লিখে ফেলি। এরপরে একে একে বাকি গুলোও লিখে ফেলবো -

যোগ করুনঃ

১। A এবং B এর মধ্যে দুইটা সংখ্যা থাকবে

২। ইউজার A এবং B ইনপুট দিবে

৩। Result এর মধ্যে A এবং B এর যোগফল থাকবে

৪। ইউজারকে Result এর ভ্যালু শো করবো।

বিয়োগ করুনঃ

১। A এবং B এর মধ্যে দুইটা সংখ্যা থাকবে

২। ইউজার A এবং B ইনপুট দিবে

৩। Result এর মধ্যে A এবং B এর বিয়োগফল থাকবে

৪। ইউজারকে Result এর ভ্যালু শো করবো।

গুণ করুনঃ

১। A এবং B এর মধ্যে দুইটা সংখ্যা থাকবে

২। ইউজার A এবং B ইনপুট দিবে

৩। Result এর মধ্যে A এবং B এর গুণফল থাকবে

৪। ইউজারকে Result এর ভ্যালু শো করবো।

ভাগ করুনঃ

১। A এবং B এর মধ্যে দুইটা সংখ্যা থাকবে

২। ইউজার A এবং B ইনপুট দিবে

৩। Result এর মধ্যে A এবং B এর ভাগফল থাকবে

৪। ইউজারকে Result এর ভ্যালু শো করবো।

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

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

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

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

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

Edit this page on GitHub