প্রোগ্রামিং প্যারাডাইম কি?
প্রোগ্রামিং প্যারাডাইম কি এটা বুঝার আগে আমাদের বুঝতে হবে প্যারাডাইম শব্দটা সাধারন অর্থে কিভাবে ব্যবহৃত হয়। প্যারাডাইম বলতে সাধারনত বোঝায় যে আমরা কিভাবে কোন একটা জিনিষকে দেখি বা কোন পয়েন্ট অব ভিউতে কোনো একটা জিনিষকে আমরা ইন্টারপ্রেট করি বা বুঝি। এই প্যারাডাইম টার্মটা আমরা আমাদের দৈনন্দিন জীবনে অনেক ক্ষেত্রেই ব্যবহৃত হতে দেখি।
আবার একই সাথে প্যারাডাইম শিফট শব্দটার সাথে আমরা অনেকেই পরিচিত। কোন একটা জিনিষকে যখন আমরা আগে একরকম ভাবে দেখতাম বা চিন্তা করতাম, বুঝতাম সেটা পরিবর্তন হয়ে আমরা নতুনভাবে জিনিষটাকে দেখছি বা চিন্তা করছি অথবা জিনিষটার মধ্যে নতুন ধরনের কোন পরিবর্তন আসলে, সেটাকে আমরা বলি প্যারাডাইম শিফট।
উদাহরস্বরূপ আমরা আমাদের চলমান শিক্ষাব্যবস্থাকে বিবেচনা করতে পারি। আগে শিক্ষাপদ্ধতি ছিল এক রকম, যেখানে ছাত্রছাত্রীরা একটি গতবাধা নিয়মে পড়াশোনা করত এবং পরীক্ষা দিয়ে পাশ/ফেল করত। সেটা পরিবর্তিত হয়ে চালু হল সৃজনশীল শিক্ষাপদ্ধতি। এটাকে আমরা প্যারাডাইম শিফট বলতে পারি।
আরো একটা উদাহরন দেখা যাক –
মনে করি আমরা একটা বিল্ডিং বানাব। তো এই কাজের জন্য আমরা একজন কনট্র্যাক্টরকে নিয়োগ দিতে পারি যিনি বিভিন্ন বিল্ডিং কনস্ট্রাকশনের কাজ চুক্তিভিত্তিক করে থাকেন। তো এই কাজের জন্য কন্ট্র্যাক্টর প্রথমে পুরো রিকোয়ারমেন্ট শুনল, এরপর ইঞ্জিনিয়ার, লেবার সহ অন্যান্য প্রয়োজনীয় লোকবল ভাড়া করে কাজ শুরু করে দিল। এবং পর্যায়ক্রমে কাজটা শেষ নামাল। এখানে কন্ট্র্যাক্টর নিজে লিড পজিশনে থেকে প্রথম থেকে শেষ অবধি কাজটা তদারকি করল।
এখন এই একই বিল্ডিং তৈরি করার জন্য আমরা কোন ডেভেলপার কোম্পানির সাথে চুক্তি করতে পারি। আমরা জানি একটা ডেভেলপার কোম্পানীর অনেক অনেকগুলো পৃথক পৃথক বিভাগ আছে এবং প্রত্যেক বিভাগের আলাদা আলদা দায়িত্ব কর্তব্য নির্দিষ্ট থাকে। যেমন, বিজনেস টিম ক্লায়েন্ট হ্যান্ডেল করে, আর্কিটেকচার টিম বিল্ডিং ডিজাইন করে, কন্সট্রাকশন টিম বিল্ডিং কন্সট্রাক্ট করে এবং বিল্ডিং হয়ে যাওয়ার পরে ইন্টেরিয়র টিম অভ্যন্তরিন ডিজাইন করে। প্রত্যেক টিম প্রত্যেকের সাথে কমিউনিকেশন রেখে কাজ করে।
এখন এই একই বিল্ডিং বানানোর জন্য আমরা দুইটা ভিন্ন পদ্ধতিতে চিন্তা করে পারছি, এটাই ম্মূলত প্যারাডাইম। এই উদাহরনটা মাথায় রাখলে আমাদের প্রোগ্রামিং প্যারাডাইম বুঝা সহজ হবে।
সংগা অনুযায়ী, প্রোগ্রামিং প্যারাডাইম বলতে বোঝায় যে কোন স্টাইলে বা কোন ওয়েতে আমরা একটা কম্পিউটার প্রোগ্রাম লিখি বা স্ট্রাকচার করি সেটাকে বলা হয় প্রোগ্রামিং প্যারাডাইম। আমরা যখন কোন একটা কোড লিখি বা প্রোগ্রাম লিখি তখন আমরা কি করি? আমরা আসলে অনেকগুলো ইনস্ট্রাকশন বা নির্দেশনা লিখি যেগুলো কম্পিউটার পালন করে। একটা প্রোগ্রামে একশ লাইনের কোড থাকতে পারে আবার এক লাখ লাইনের কোড ও থাকতে পারে। তার মানে যখন অনেক বড় প্রোগ্রাম লেখা লাগতেছে তখন আমার কোডকে কিভাবে অর্গানাইজ করব সেটা চিন্তা করতে হয়। কোন স্টাইলে কোড লিখলে আমার প্রব্লেমটাকে সবচেয়ে সহজ উপায়ে সমাধান হবে সেটাও চিন্তা করতে হয়। এই কারনেই প্রোগ্রামিং প্যারাডাইমের প্রয়োজনীয়তা। একেক ধরনের প্রোগ্রামিং প্যারাডাইম একেক ধরনের কাজ করার জন্য উপযুক্ত।
প্রোগ্রামিং প্যারাডাইমের শেনীবিভাগ হিসেবে একদম লো লেভেলে দুই রকম প্যারাডাইম রয়েছে।
১। ইমপ্যারেটিভ প্রোগ্রামিং (Imperative Programming)
২। ডিক্ল্রারেটিভ প্রোগ্রামিং (Declarative Programming)
Imperative Programming Imperative শব্দটি এসে ল্যাটিন Impero থেকে যার অর্থ I command. ইমপ্যারেটিভ প্রোগ্রামিং প্যারাডাইমে আমরা কম্পিউটারকে একটি কাজের প্রতিটা ধাপের জন্য নির্দেশনা বলে দেই। ছোট্ট একটা কোড এক্সাম্পল দেখে আসি,
const nums = [1,2,3,4,5,6] const result = []
for(let i = 0; i < nums.length; i++){
if(nums[i] > 5) result.push(nums[i])
}
console.log(result) // Output 6
এখানে একটি এরে থেকে লুপ চালিয়ে একটি নির্দিষ্ট কন্ডিশন মেনে ফিল্টার করে নতুন আরেকটি এরে তৈরি করছি। ফিল্টার করার জন্য যে লগিক তা আমরা এরের প্রতিটা এলিমেন্টের জন্য বলে দিচ্ছি। এই যে প্রতিটা ধাপে ধাপে আমরা বলে দিচ্ছি কি করতে হবে, প্রোগ্রামিং এর স্টাইল্টাকে আমরা বলতে পারি Imperative Programming.
Declarative Programming Declarative Programming এ আমরা কিভাবে করতে হবে তা না বলে শুধু এটা বলে দেই যে কি হবে। ধাপে ধাপে প্রোসেস না বলে শুধু এটুকু বলে দেই যে আউটপুট হিসেবে কি চাই। উদাহরন হিসেবে উপরের কোড টাকেই যদি আমরা ডিক্ল্রারেটিভ ওয়েতে লিখি, তাহলে দাড়ায় –
const nums = [1,2,3,4,5,6]
console.log(nums.filter(num => num > 5)) // output 6
এখানে আমরা ফিল্টারিং এর কন্ডিশনটা বলে দিয়ে জাস্ট একটা বিল্ট ইন মেথডকে কল করেছি। কিন্তু এই filter মেথড টা ফিল্টারিং এর জন্য কি কি ধাপ অনুসরন করবে, কিভাবে কাজ করবে সেটা কিন্তু আমরা বলে দেইনি। প্রোগ্রামিং এর এই ওয়েটা হল Declarative Programming
একটা একটা উদাহরনে আমরা আমাদের কোডটাকে ভেঙ্গে ভেঙ্গে লিখছি প্রতিটা ধাপ, অন্য আরেকটাতে আমাদের কোডের ভিতর উল্লেখ করা লাগতেছেনা যে ইন্টার্নালি কি করা হচ্ছে। একই প্রোগ্রাম কে আমরা এই যে দুইটা ভিন্ন স্টাইলে কোড লিখলাম, এটাই মূলত প্রোগ্রামিং প্যারাডাইম।
উপরের উদাহরনগুলোতে আমরা জাভাস্ক্রিপ্ট ল্যাংগুয়েজে কোড লিখছি কারন জাভাস্ক্রিপ্টে এরকম দুই ভাবেই লেখা যায়। কিন্তু আমরা যদি স্ট্রাকচার্ড কোয়েররি ল্যাংগুয়েজ (SQL) এ এরকম করতে যাই, যেমন –
SELECT * FROM students WHERE department = 'computer'
এখানে আমরা শুধু বলে দিচ্ছি যে আউটপুট টা কেমন হবে, বা কি করতে হবে। কিন্তু বিহাইন্ড দ্য সিন, কি করতে হবে বা সিলেক্ট করার প্রোসেসটা কেমন হবে তা ডাটাবেজ ইঞ্জিন নিজেই হ্যান্ডেল করে। এখানে আমাদের হাত দেওয়ার কোন সুযোগ নেই। কোয়েরি লেখার সময় আমরা শুধু Declarative ওয়েতেই লিখতে পারতেছি,Imperative ওয়েতে লিখতে পারছিনা।
যে ল্যাংগুয়েজগুলোতে শুধুমাত্র ডিক্লারেটিভ ওয়েতে কোড লেখা যায় সেগুলোকে ডিক্লারেটিভ প্রোগ্রামিং ল্যাংগুয়েজ বলে। যেমন SQL, আবার যে ল্যাংগুয়েজ গুলোতে ডিক্লারেটিভ ওয়েতে কোড লেখার খুব একটা সুযোগ নেই সেগুলোকে Imperative Programming Language বলে। যেমন – C।
Imperative Programming এর আবার একাধিক ধরন আছে। যেমন –
- Procedural Programming
- Object Oriented Programming
- Structured Programming
Declarative Programming এরও একাধিক ধরন আছে। যেমন-
- Functional Programming
- Logic Programming
- Data Drive Programming
অনেক প্রোগ্রামিং ল্যাংগুয়েজ আছে যেখানে একাধিক প্যারাডাইমে কোড লেখা যায়। এগুলোকে মাল্টি প্যারাডাইম প্রোগ্রামিং ল্যাংগুয়েজ বলে। যেমন – জাভাস্ক্রিপ্ট, পিএইচপি। যখন আমরা একটা প্রোগ্রামিং ল্যাংগুয়েজে কোড লিখব তখন আমাদের মাথায় রাখতে হবে যে এই ল্যাংগুয়েজে কোন কোন প্যারাডাইম সাপোর্ট করে। এটা মাথায় থাকলে কোড লেখা আরো সহজ হবে এবং প্রব্লেম সলভিং টা আরো সুন্দর হবে।