Published on

যুগে যুগে প্রোগ্রামিং ল্যাংগুয়েজ এবং এর ধরণ

Authors
  • avatar
    Name
    Md Al Mustanjid
Share on:

প্রোগ্রামিং ল্যাঙ্গুয়েজ কি?

আমি চেয়ারে বসে আরাম করে বাংলায় যে এই প্রচ্ছদটি লিখছি তা কি এমনি এমনি সম্ভব হয়েছে! প্রোগ্রামিং ল্যাঙ্গুয়েজ এর যুগে যুগে উন্নতি সাধনের ফলে আজ আমরা এত দূর এসেছি। এই লেখাতে আমি নিজেই নিজেকে জানিয়েছি প্রোগ্রামিং কি এবং যুগে যুগে কি ছিলো প্রোগ্রামিং। একেবারে যারা প্রোগ্রামিং এ নতুন তারা প্রোগ্রামিং ল্যাঙ্গুয়েজ এবং এর ধরনগুলো  সম্পর্কে ব্যাসিক ধারনা পাবেন। খুব সহজ করে বলতে গেলে, কম্পিউটার এবং মানুষের মধ্যে সম্পর্ক স্থাপনের জন্য যে ল্যাঙ্গুয়েজ ব্যবহার করা হয় তাই প্রোগ্রামিং ল্যাঙ্গুয়েজ। অর্থাৎ আমরা কিভাবে কম্পিউটারের সাথে যোগাযোগ করবো। 

এই যে আমি বাংলায় লিখছি তার জন্য আমাকে বাংলা বর্ণমালা ব্যাবহার করতে হয়েছে। শুধু কি তাই ! আমাকে অনুসরন করতে হয়েছে কিছু দিক নির্দেশনা (instructions), নিয়ম-কানুন। সব মিলেই তো এই বাংলা ভাষা। পৃথিবীর সকল ভাষাতেই এইগুলো বিদ্যমান। এখন আমি যদি ইংরেজীতে  লিখতে বসি তাহলে আমাকে তো ইংরেজী ভাষা জানতে হবে, তাই না! এখন ঠিক একই ভাবে কম্পিউটার কিভাবে কাজ করবে, কি কাজ করবে, কিভাবে আউটপুট দেবে এগুলার দিক নির্দেশনা (instructions) দেওয়া হয় এবং নিয়ম-কানুন ঠিক করা হয় প্রোগ্রামিং ল্যাঙ্গুয়েজ এর মাধ্যমে।  অর্থাৎ মানুষ  এবং  কম্পিউটার একে অপরের সাথে কিভাবে কাজ করবে । এই instructions কে statement ও বলা হয় । statement এ ব্যবহার হয় শব্দ, বর্ণ বা সিম্বল। statement  কিভাবে লিখবো তা প্রোগ্রামিং ল্যাঙ্গুয়েজের উপর নির্ভরশীল । 

‘অ’ এই অ মানে আমরা বুঝি এইটা একটা বাংলা বর্ণ (Syntax), ‘অমর’ এখন এইটা একটা শব্দ যার অর্থ যে মরেও বেচে থাকে (Semantics)। ঠিক একই ভাবে প্রোগ্রামিং ল্যাঙ্গুয়েজ এর ও থাকে দুইটা উপাদান।

Syntax (form), Semantics (meaning)

এই দুই উপাদানের উপর  statement নির্ভরশীল । এখন প্রশ্ন হলো এত ল্যাঙ্গুয়েজ ক্যান? একটা হলেই তো বেশ হতো। আমি যদি “অমর” শব্দটি অন্য ভাষায় লিখি ধরুন ইংরেজীতে, তাহলে তো এই বাংলা syntax গুলো দিয়ে কি আর কাজ হবে! হবেনা, এই জন্য আমাকে ইংরেজী ল্যাঙ্গুয়েজটা জানতে হবে। এভাবেই প্রয়োজন অনুসারে ল্যাঙ্গুয়েজ এর প্রকারভেদ হয়। পৃথিবীতে হাজার হাজার ল্যাঙ্গুয়েজ আছে। আবার একেক উদ্দেশ্যে এক একটি ল্যাঙ্গুয়েজ আছে। বিভিন্ন অংশের জন্য আবার বিভিন্ন ল্যাঙ্গুয়েজ আছে।

প্রোগ্রামিং ল্যাঙ্গুয়েজ এর ধরণ (Types of Programming Languages) এবং যুগে যুগে প্রোগ্রামিং ল্যাঙ্গুয়েজ (Generations of Programming Languages)

আমরা আগেই জেনেছি বিভিন্ন ধরনের কাজের জন্য বিভিন্ন ল্যাঙ্গুয়েজ আছে। প্রোগামাররা বিভিন্ন ল্যাঙ্গুয়েজ ব্যবহার করে বিভিন্ন ধরনের সফটওয়্যার/অ্যাপ্লিকেশন বানানোর জন্য।

drawing
চিত্রঃ প্রোগ্রামিং ল্যাংগুয়েজ এর ধরণ 

অ্যাপ্লিকেশনের আবার বিভিন্ন টাইপ আছে, যাই হোক প্রোগ্রামিং কে আবার দুই ভাগে ভাগ করা হয়

  1. লো লেভেল ল্যাঙ্গুয়েজ (Low level language)
  2. হাই-লেভেল ল্যাঙ্গুয়েজ (High Level Language)

লো লেভেল ল্যাঙ্গুয়েজ (Low level language) 

আমরা কখনো মেশিনের ভিতরে দেখতে পারি না, মেশিন কিন্তু ঠিক ই কাজ করে, একই সাথে আমরা বিভিন্ন ফলাফলও দেখতে পাই। মেশিনকে কাজ করার জন্য যে ভাষা বা নির্দেশনা ব্যবহার করা হয় সেটিই হচ্ছে লো লেভেল ল্যাঙ্গুয়েজ (Low level language)। যেহেতু মেশিন সর্বনিম্ন স্তরের তাই এই নাম ।হার্ডওয়্যার এবং এর বিভিন্ন উপাদানগুলো কিভাবে হ্যান্ডেল করবে, কোন ইন্সট্রাকশন এ কি কাজ হবে, কম্পিউটার এর সাথে কিভাবে সংযোগ করবে, কোন ইনপুটে কি আউটপুট হবে এসব ডিজাইন করা হয়। এক কথায় লো লেভেল ল্যাঙ্গুয়েজ মেশিন বা হার্ডওয়্যার এবং এর উপাদানগুলোর নিয়ন্ত্রক।এটিকে আবার দুই ভাগে ভাগ করা হয়েছেঃ

  1. মেশিন ল্যাঙ্গুয়েজ (Machine Language)
  2. অ্যাসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language)

 মেশিন ল্যাঙ্গুয়েজ (Machine Language)

মেশিন ল্যাঙ্গুয়েজ ই একমাত্র ল্যাঙ্গুয়েজ যা কম্পিউটার সরাসরি বোঝে কোন রকম translation ছাড়া। এটি পুরোপুরি ০ এবং ১ নিয়ে কাজ করে। আমাদের কম্পিউটার কিন্তু ০ এবং ১ ছাড়া আর কিছু বুঝে না। এই ০ এবং ১ কে আমরা বাইনারি নামেও পরিচিত। বাইনারি ইন্সট্রাকশনকে যে ল্যাঙ্গুয়েজে প্রকাশ করা হয় সেটিই হচ্ছে মেশিন ল্যাঙ্গুয়েজ (Machine Language)। মেশিন ল্যাঙ্গুয়েজ সরাসরি ট্রান্সেলেট হয় মেশিনে এবং কম্পিউটার  বুঝতে পারে কি কাজ করতে হবে এবং সেই অনুযায়ী আউটপুট পাওয়া যায়। যেহেতু মেশিনে কাজ করছে এ জন্য এটি মেশিনের উপর নির্ভরশীল। অর্থাৎ একটা মেশিনের জন্য একবার ই ইন্সট্রাকশন এবং তা পুনরায় অন্য মেশিনে ব্যবহার করা যাবে না।

অ্যাসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language )

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

হাই-লেভেল ল্যাঙ্গুয়েজ (High Level Language) এর থেকে লো লেভেল ল্যাঙ্গুয়েজ (Low level language) অনেক দ্রতুগতির কারন এটিকে কনভার্ট করা হয় না এবং অনেক কম সিম্বল, ওয়ার্ড ইত্যাদি ব্যবহার হয়। কিন্তু এই ল্যাঙ্গুয়েজ বুঝা, লেখা এবং সম্পাদনা করা অনেক কঠিন। 

→ যুগের সাথে তাল মিলিয়ে পরিবর্তন হয়েছে প্রোগ্রামিং ল্যাংগুয়েজ এর, বুঝতে যেন সুবিধা হয় সেই জন্য প্রোগ্রামিং এর ধরণ এবং যুগে যুগে তা কি রকম ছিলো এই বিষয় দুটি সংযুক্তভাবে উপস্থাপন করা হয়েছে ।

drawing
চিত্রঃ বিভিন্ন যুগে বিভিন্ন প্রোগ্রামিং ল্যাংগুয়েজ

আমরা মোটামুটি সবাই জানি আধুনিক কম্পিউটারের জনক চার্লস ব্যাবেজ। আডা লোভাসি (Ada Lovelace) নামের এক বিশিষ্ট মহিলা ১৮৪২-৪৩ সাল পর্যন্ত ব্যাবেজের Analytical Engine এর জন্য ইতালিয়ান গণিতবিদ Luigi Menabrea এর প্রবন্ধটি অনুবাদ করেন। আডা লোভাসি সেই প্রবন্ধটির সাথে বার্নোল্লি সূত্র মেশিনের সাহায্যে গণনা করার জন্য যথেষ্ট রসদ দেন এবং এটিই বিশ্বের সর্বপ্রথম কম্পিউটার প্রোগ্রাম । আডা লোভাসি কম্পিউটার প্রোগামিং ল্যাংগুয়েজ এর জনক এবং তার হাত ধরেই প্রোগামিং ল্যাংগুয়েজ আজ এতদূর এসেছে। কে জানে, আরো কতদূর যাবে!

প্রথম যুগ (1st Generation Programming Language)

একেবারের শুরুর দিকে মেশিনেই সব কাজ করা হতো, যেহেতু মেশিনেই সব কাজ তাই মেশিন ল্যাঙ্গুয়েজ ই ছিল একমাত্র উপায়। প্রোগ্রামাররা হাতে হাতে কোড ডিজাইন করতো (০ আর ১ দিয়ে !) এবং পাঞ্চ কার্ড, পাঞ্চ টেপ অথবা ফ্লিকিং সুইচ দিয়ে সেগুলো কম্পিউটারে ট্রান্সফার করতো। ট্রান্সেলেট করার কোন প্রয়োজন ছিল না, সরাসরি ফলাফল বের হতো। হ্যাঁ, এটা অনেক দ্রুতগতির কিন্তু অনেক কঠিন । কারন একজন প্রোগ্রামারকে সমস্ত কম্পিউটারের আর্কিটেকচার এবং এটি কিভাবে কাজ করে সে সম্পর্কে ধারনা থাকা লাগতো। কোড বহনযোগ্য ছিলো না এবং অন্য একটি মেশিনের জন্য পুনরায় লিখতে হতো।

drawing
চিত্রঃ কলসাস

ব্রিটিশ কোডব্রেকাররা ১৯৪৩-১৯৪৫ সালে একটি বিশাল মূর্তির মতো কম্পিউটার বানায়।কলসাস ছিলো বিশ্বের প্রথম ইলেক্ট্রনিক ডিজিটাল প্রোগ্রামেবল কম্পিউটার। অপারেটররা সুইচ এর মাধ্যমে সরাসরি মেশিনে কোড লিখতো । 

দ্বিতীয় যুগ (2nd Generation Programming Language)

ধরুন আপনাকে “0111111001100110000” এই রকম আরো কিছু বাইনারি ইন্সট্রাকশন মনে রাখতে বলা হলো, আপনি পারলেও আমি একেবারেই অপারগতা প্রকাশ করছি। প্রোগ্রামারদের এই ভাবে বাইনারি কোড মনে রাখা অসম্ভব এবং অত্যন্ত কষ্টসাধ্য হয়ে পড়লো। তারা ০ আর ১ এর পরিবর্তে symbol এবং abbreviation (mnemonic) ব্যবহার করা শুরু করলো, আবির্ভাব ঘটলো অ্যাসেম্বলি ল্যাঙ্গুয়েজ এর। এতে অন্তত লম্বা লম্বা বাইনারি কোড মনে রাখার বিশাল কষ্ট লাঘব হলো। mnemonic হচ্ছে বর্ণানুক্রমিক  সংক্ষেপ, যেমন Load কে সংক্ষেপে LBranch কে সংক্ষেপে B ইত্যাদি। এতে প্রোগ্রামাদের কাজ করাটা অনেক সহজ হয়ে গেলো। সাথে কোড অনেক দ্রুতগতির এবং কার্যকর হলো, অল্প স্টোরেজ এর  কাজ  সম্পন্ন করা যেত। কিন্তু সমস্যা থেকেই গেলো-এটাও মেশিনের কাজের জন্যই তাই এটিকে আবার কনভার্ট করতে হতো মেশিনকে বোঝানোর জন্য। একজন অ্যাসেম্বেলার এই কাজ করতো।

drawing
চিত্রঃ Assembely Code vs Object code এর উদাহরণ 

হাই-লেভেল ল্যাঙ্গুয়েজ (High Level Language)

এতক্ষ্ণ আমরা জানলাম মেশিন ল্যাঙ্গুয়েজ নিয়ে কিন্তু এটি সাধারন মানুষের জন্য বোঝা কষ্টসাধ্য। তাই মানুষ যেন সহজে বুঝতে পারে এবং নিজেদের প্রয়োজন অনুসারে প্রোগ্রাম লিখতে পারে এই জন্য আসে হাই লেভেল ল্যাঙ্গুয়েজ (High Level Language)। এটি মূলত সবার উপরে স্তরে কাজ করে তাই এই নাম। 

একজন প্রোগ্রামার সহজেই হাই লেভেল ল্যাঙ্গুয়েজ কে read , write & maintain করতে পারে। হাই লেভেল ল্যাঙ্গুয়েজ একটি নির্দিষ্ট টাইপের কম্পিউটারের উপর নির্ভরশীল নয়। একই কোড সব কম্পিউটারে সামান্য পরিবর্তন অথবা অপরিবর্তনশীলভাবে ব্যবহার করা যাবে। 

এই লেভেলের যখন কোন কোড আমরা **** রান করি সেটাকে বলা হয় সোর্স কোড । এই সোর্স কোড ই কিন্তু মেশিন কোড এ পরিনত হয়ে কাজ করে কম্পিউটারে। একে execute করার জন্য আছে কম্পাইলার বা ইন্টারপ্রিটার। মেশিন হাই-লেভেল ল্যাঙ্গুয়েজ সরাসরি বুঝতে পারে না। এই জন্য ট্রান্সেলেটর অথবা কম্পাইলার এর প্রয়োজন হয় যা এই ল্যাঙ্গুয়েজকে মেশিন ল্যাঙ্গুয়েজে কনভার্ট করে যেন মেশিন বুঝতে পারে। কম্পাইলার হচ্ছে একটি সিস্টেম সফটওয়্যার যা আমাদের লিখা প্রোগামকে উপযুক্ত মেশিন কোডে কনভার্ট করে।

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

সি, সি++ , ফরটান ইত্যাদি সহ বর্তমান অনেক ল্যাঙ্গুয়েজ হাই লেভেল ।

→ এখন আমরা হাই লেভেলে ল্যাংগুয়েজ এবং একই সাথে প্রোগ্রামিং এর আরো তিনটি যুগ  সম্পর্কে জানবো।

তৃতীয় যুগ (3rd Generation Programming Language)

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

যেহেতু এটি উপরের স্তরে (হাই লেভেল) কাজ করে তাই এটি সরাসরি মেশিনে কাজ করতে পারে না। যেহেতু মেশিন এই যুগের ভাষা বুঝে না, সে শুধু বোঝে ০ আর ১ (মেশিন ল্যাঙ্গুয়েজ), এই জন্য প্রয়োজন হয় কম্পাইলার অথবা ইন্ট্রারপ্রিটর যা কোডগুলোকে মেশিন ল্যাঙ্গুয়েজে কনভার্ট করে। 

লাইন বাই লাইন কোড এক্সিকিউশন এর কারনে imperative code ও বলা হয় । আর একটি ব্যাপার হলো এই যুগের ল্যাঙ্গুয়েজ পদ্ধতিগত (procedural) উপায়ে কাজ করে । অর্থাৎ কম্পিউটারকে কি করতে হবে এবং কিভাবে করতে হবে সেই নির্দেশনা দেয় । সি , সি++, ফরটান , জাভা, জাভাস্ক্রিপ্ট ইত্যাদি বর্তমানের ল্যাঙ্গুয়েজগুলো তৃতীয় যুগ বা থার্ড জেনারেশন ল্যাঙ্গুয়েজ । 

চতুর্থ যুগ (4th Generation Language) 

এই যুগ তৃতীয় যুগের কাছাকাছি, পার্থক্য হলো এই যুগে কম্পিউটার কে শুধু বলতে হয় কি করতে হবে, কিভাবে করতে হবে তার কোন প্রয়োজন নেই (non-procedural)। মানুষ যে স্টেট্মেন্ট গুলো ব্যবহার করে সেগুলো প্রোগ্রামিং এ নিয়ে আসা হলো, এতে কি হলো আরো সহজে হয়ে গেল কোড লিখা। এই যুগে কোডিং এর চেয়ে অ্যাপ্লিকেশন এর প্রতি গুরুত্ব দেওয়া হয়েছে, যার ফলে প্রোগ্রামারের দক্ষতার গুরুত্ব কম।  এই যুগের টাইপ হচ্ছে declarative (স্টেট্মেন্ট )।এই যুগের ল্যাঙ্গুয়েজ একটি নির্দিষ্ট উদ্দেশ্য নিয়ে বানানো-যেমন ডাটাবেস এর কাজ (query) , রিপোর্ট বানানো (oracle reports), user interface (XUL) ইত্যাদি  এর জন্য । SQL, Perl, CSS সহ আরো অনেক ল্যাঙ্গুয়েজ আছে ।

drawing
চিত্রঃ বিভিন্ন যুগের ল্যঙ্গুয়েজের উদাহরণ  

পঞ্চম যুগ (5th Generation Language)

Natural language অর্থাৎ আমরা নিজেদের মধ্যে নিজেরা যে ভাষার আদান প্রদান করি-এটাই হলো এই যুগের ভিত্তি। ধরুন আমি কম্পিউটারে টাইপ না করে কথা বলে যোগাযোগ করছি, তাকে নির্দেশ দিচ্ছি যে অমুক ফাইল টা তুমি ওপেন করো। এখন আমি ওপেন না বলে ওয়েকেন বললাম, এই ভুলটা যেন মেশিন নিজে নিজে ঠিক করে নিতে পারে, আরো  অনেক কাজ ই হচ্ছে এই যুগে। যাকে আমরা বলতে পারি আবার **Artificial Intelligence (**কৃত্তিম বুদ্ধিমত্তা)। হ্যাঁ, কম্পিউটারকে দেওয়া হচ্ছে কৃত্তিম বুদ্ধিমত্তা।  আমরা রোবট এর নাম নিশ্চয় শুনেছি যেমন সোফিয়া। 

drawing
চিত্রঃ একটি রোবট 

সূত্রঃ

  1. Computer_Components, Wikibooks
  2. generation-programming-languages
  3. History of programming languages, Wiki
Share on: