বোকা কম্পিউটারের চালাকি – ২

পর্ব-১

সংবিধিবদ্ধ সতর্কীকরণঃ এই লেখা কম্পিউটারবোদ্ধাদের জন্য নহে।

১ম পর্বে দেখিয়েছিলাম – কম্পিউটারকে কিভাবে ০(শূন্য) আর ১(এক) এর মাধ্যমে ইনস্ট্রাকশন দিতে হয়। বড় জটিল সে ইনস্ট্রাকশন, তাই না? এমনভাবে ইনস্ট্রাকশন দেয়া মোটেও আমাদের মতো সাধারণ মানুষের কম্মো নয়, কি বলেন? তবে শুরুটা কিন্তু ওভাবেই ছিল। একারণে তখন কিন্তু তা আমাদের নাগালের মধ্যেও ছিল না। ভাগ্য ভালো, এখন আর সেভাবে হাজার-হাজার-লাখ-লাখ ০ আর ১ লিখতে হয় না। এখন কীভাবে লিখা হয় সেদিকেই নজর দিব আজকে।

একটা অতীব সত্য কথা বলি। কম্পিউটার কিন্তু এখনো ০ আর ১ দিয়ে গঠিত ইনস্ট্রাকশন ছাড়া অন্য কিছু বুঝে না। এটাই তার ভাষা। আমরা বাঙালিরা যেমন বাংলা ছাড়া আর কোন ভাষা বুঝি না (ইংরেজি বা অন্য কোন ভাষাকে আসলে আগে বাংলায় অনুবাদ করে নেই, এরপর বুঝি), তেমনি কম্পিউটারও তার ভাষা ছাড়া অন্য কিছু বুঝে না। ভিন্নভাবে ইনস্ট্রাকশন দিলে সে আগে নিজের ভাষায় রূপান্তর করে নেয়। কম্পিউটারের এই ভাষার কেতাবি নাম হলো – মেশিন ল্যাংগুয়েজ [উইকি]।

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

চলুন কম্পাইলারের কাজটা একটু দেখে নেই। গত পর্বের আমাদের সিম্পল কম্পিউটারের ইনস্ট্রাকশনগুলোর কথা মনে আছে? ১৫ আর ২০ এর যোগের ইনস্ট্রাকশন ছিল – ০০০১ ০০১৫ ০০২০ (বাইনারিতে কনভার্শনের আগে)। এখানে প্রথম ০০০১ হলো যোগের কার্যনম্বর (কেতাবি নামঃ অপ্‌কোড [উইকি]), আর পরবর্তী ০০১৫ আর ০০২০ হলো যোগের সংখ্যা দু’টি। এই ইনস্ট্রাকশনকে আমাদের পরিচিত ইংরেজি ভাষায় লিখতে বললে হয়তো লিখতাম –

ADD 15,20

তাই না? কম্পাইলার এই ইংরেজি ভাষার ইনস্ট্রাকশনকে নিচের নিয়মে মেশিন ল্যাংগুয়েজে অনুবাদ করতে পারে-

১) প্রথমে ADD কে যোগের কার্যনম্বরে (০০০১) কনভার্ট করবে।
২) এরপর কমার দুই পাশের সংখ্যা দু’টোকে ৪ অংকের সংখ্যায় রূপান্তর করবে (০০১৫, ০০২০)
৩) এরপর তিনটা সংখ্যা একসাথে করবে – ০০০১০০১৫০০২০। ব্যস! হয়ে গেলো।

আপনি-আমি ০০১০০০১৫০০২০ লেখার চেয়ে ADD 15,20 লিখতেই স্বচ্ছন্দ বোধ করবো, তাই না? এর মূল কারণ হলো – আমরা সংখ্যার চেয়ে শব্দ মনে রাখতে পারি সহজে। এইভাবে মেশিন ল্যাংগুয়েজের সংখ্যার জায়গায় কিছু পরিচিত শব্দ বসিয়ে আরেকটা ল্যাংগুয়েজ তৈরি করতে পারি, যেটাকে কম্পাইলার আবার মেশিন ল্যাংগুয়েজে অনুবাদ করতে পারে। এই নতুন ল্যাংগুয়েজটাকে বলে অ্যাসেম্বলি ল্যাংগুয়েজ [উইকি]। এটা মূল মেশিন ল্যাংগুয়েজের অনেক কাছাকাছি, তবে মানুষের জন্যও কিছুটা বোধগম্য।

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

বিভিন্ন স্তরের প্রোগ্রামিং ল্যাংগুয়েজ। ছবি কৃতজ্ঞতাঃ http://www.webopedia.com/

যোগ, বিয়োগ, গুণ, ভাগ আর মনিটরে ফলাফল দেখানোর ইনস্ট্রাকশনগুলো অ্যাসেম্বলি ল্যাংগুয়েজে কেমন হতে পারে দেখি –

অপারেশন : মেশিন ল্যাংগুয়েজ ইনস্ট্রাকশন : অ্যাসেম্বলি ল্যাংগুয়েজ ইনস্ট্রাকশন
১৫+২০ : ০০০১ ০০১৫ ০০২০ ADD 15, 20
১০০-৩৩ : ০০০২ ০১০০ ০০৩৩ SUBTRACT 100, 33
৪৫x২৯ : ০০০৩ ০০৪৫ ০০২৯ MULTIPLY 45, 29
৬০÷৪ ০০০৪ ০০৬০ ০০০৪ DIVIDE 60, 4
ফলাফল দেখানো : ০০০৫ ০০০০ ০০০০ PRINT

(উল্লেখ্যঃ এ লেখার ইনস্ট্রাকশনগুলো নমুনা মাত্র, হুবহু এভাবে মেশিন/অ্যাসেম্বলি ল্যাংগুয়েজ লেখা হয় না, তবে উদাহরণগুলো মূল ল্যাংগুয়েজের কাছাকাছি।)

এইবার এক বদলোকের কথা শুনি। সে যোগ-এর অনুবাদ ADD না করে করেছে SUM, বিয়োগের অনুবাদ করেছে DEDUCT। কমার বদলে লিখেছে AND। তার লেখা ইনস্ট্রাকশনগুলো এইরকম

SUM 15 AND 20
DEDUCT 100 AND 30

এখন কি হবে? আমাদের উপরের বানানো কম্পাইলার তো SUM/DEDUCT বুঝে না, এটা অনুবাদও করতে পারে না। আবার কমার দুই পাশের সংখ্যা দু’টো আলাদা করে, AND এর দু’পাশের না। আসলে, এখানে যার যা খুশি লিখতে পারবে না। প্রতিটা ল্যাংগুয়েজের কিছু নিয়ম-কানুন আছে, নিজস্ব শব্দভান্ডার আছে। সবাইকে এইসব নিয়ম-কানুন মেনে চলতে হবে। কম্পিউটারের ল্যাংগুয়েজের এইসব নিয়ম-কানুনই হলো তার সিন্‌ট্যাক্স [উইকি]। সিন্‌ট্যাক্স ঠিক রেখে ইনস্ট্রাকশন দিতে হবে। আমাদের স্বাভাবিক ভাষার ব্যাকরণের মতোই অনেকটা- কিছু অর্থহীন শব্দ একের পর এক বসিয়ে দিলেই হলো না, ব্যাকরণ মেনে বসাতে হবে।

সিন্‌ট্যাক্স ঠিক রেখে অ্যাসেম্বলি ল্যাংগুয়েজে কমান্ড দেয়া মেশিন ল্যাংগুয়েজের চেয়ে কিছুটা সহজতর হলেও, তা আমাদের স্বাভাবিক ল্যাংগুয়েজ থেকে অনেক দূরের ল্যাংগুয়েজ। এরকম ল্যাংগুয়েজকে বলে লো-লেভেল ল্যাংগুয়েজ [উইকি]। এই ল্যাংগুয়েজগুলো বিভিন্ন ধরনের কম্পিউটারের ক্ষেত্রে (যেমন- INTEL প্রসেসর, AMD প্রসেসর ইত্যাদি) বিভিন্ন রকম হতে পারে। আরেক ধরনের ল্যাংগুয়েজ আছে যেগুলো সব ধরনের কম্পিউটারের জন্যই একই রকম এবং আমাদের স্বাভাবিক ল্যাংগুয়েজের আরো কাছাকাছি। এগুলোকে বলে হাই-লেভেল ল্যাংগুয়েজ [উইকি]। প্রোগ্রামিং ল্যাংগুয়েজ [উইকি] বলতে মূলতঃ আমরা এই হাই-লেভেল ল্যাংগুয়েজকেই বুঝে থাকি। খুব পরিচিত আর জনপ্রিয় হাই-লেভেল ল্যাংগুয়েজের মধ্যে C, C++, Java, C#, Pascal, Fortran, HTML, JavaScript অন্যতম। আরো নাম জানার খায়েশ থাকলে এখানে দেখতে পারেন।

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

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

About the Author:

মুক্তমনা ব্লগার

মন্তব্যসমূহ

  1. অনিরুদ্ধ আগস্ট 13, 2012 at 5:33 অপরাহ্ন - Reply

    অনেক ভাল লাগল।প্রোগ্রামিং শিখছি আর প্রোগ্রামিং সম্পর্কে এই টুকু না জানলেই যে হত না।

  2. ফাহাদ জুলাই 11, 2011 at 7:31 অপরাহ্ন - Reply

    ইশ!পাঠ্যবইগুলো কেন এমন হয় না!কেন কেন কেন?
    চলুক! (Y)

    • প্রতিফলন জুলাই 12, 2011 at 6:45 অপরাহ্ন - Reply

      @ফাহাদ,

      একবার একটা ডায়লগ শুনেছিলাম… কার জানি না… ডায়লগটা ছিল এরকম – “যদি কোন বইকে জনপ্রিয় করতে চাও, তবে সেটাকে নিষিদ্ধ করে দাও; আর অজনপ্রিয় করতে চাইলে সেটাকে শিক্ষাপ্রতিষ্ঠানে পাঠ্য করে দাও”।

      ধন্যবাদ, কষ্ট করে লেখাটা পড়া ও উৎসাহব্যঞ্জক মন্তব্যের জন্য। 🙂

  3. রামগড়ুড়ের ছানা জুলাই 7, 2011 at 12:55 অপরাহ্ন - Reply

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

    markup languages, and more generally data description languages (not necessarily textual markup), are not programming languages[12] (they are data without instructions)

    লেখা ভালো হয়েছে,সামনে ইন্টারপ্রিটার আর কম্পাইলারের তুলনামূলক পোস্ট আশা করছি।

    • প্রতিফলন জুলাই 7, 2011 at 7:35 অপরাহ্ন - Reply

      @রামগড়ুড়ের ছানা,

      মার্কআপ ল্যাংগুয়েজ আর প্রোগ্রামিং ল্যাংগুয়েজ এর মধ্যে পার্থক্য উল্লেখ করার জন্য ধন্যবাদ।

      সামনে ইন্টারপ্রিটার আর কম্পাইলারের তুলনামূলক পোস্ট আশা করছি।

      শেষ পর্যন্ত কী আসে কিংবা আদৌ কিছু আসে কিনা সময়েই দেখা যাবে। 🙂

  4. রনবীর সরকার জুলাই 7, 2011 at 12:09 পূর্বাহ্ন - Reply

    লেখাটির কিছু কিছু জানা থাকলেও আপনি চমৎকারভাবে পুরো বিষয়টা উপস্থাপন করেছেন। এটা খুব ভাল লাগল।

    আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজের তালিকাতে সব ল্যাঙ্গুয়েজ দেখলাম। কিন্তু ম্যাটল্যাব নেই কেন? 🙁

    • প্রতিফলন জুলাই 7, 2011 at 12:28 পূর্বাহ্ন - Reply

      @রনবীর সরকার,
      লেখাটি পড়েছেন জেনে আমারও ভাল লাগলো। 🙂

      আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজের তালিকাতে সব ল্যাঙ্গুয়েজ দেখলাম। কিন্তু ম্যাটল্যাব নেই কেন? 🙁

      এটা নজরে আনার জন্য ধন্যবাদ। লিংকটা পরিবর্তন করে উইকিপিডিয়ার লিংক দিয়ে দিলাম, এটাতে ম্যাটল্যাবও আছে।

      • আল্লাচালাইনা জুলাই 7, 2011 at 12:56 পূর্বাহ্ন - Reply

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

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

        • প্রতিফলন জুলাই 7, 2011 at 1:36 পূর্বাহ্ন - Reply

          @আল্লাচালাইনা,

          পাইটনের স্পেসালিটি কি?

          পাইথন নিয়ে আমি কাজ করিনি কখনো। তাই এর উত্তর দিতে http://www.webdotdev.com/nvd/content/view/1073/ এর শরণাপন্ন হলাম।

          ম্যাটল্যাব একটা প্রোগ্রামিং ল্যাঙ্গু্যেজ যদিও, তারপরও এর প্রয়োগ বোধহয় সফটওয়্যার বানানোর চেয়ে অন্যান্য কাজকর্ম যেমন- পপুলেশন ডায়নামিক সিমুলেশন, স্ট্যাটিস্টিক্স, ভিজুয়ালাইজেশন এইসব করতেই বেশী ব্যাবহৃত হয়

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

          টেক্সট লিখে লিখে কমান্ড দেওয়া লাগে যদিও।

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

        • রামগড়ুড়ের ছানা জুলাই 7, 2011 at 12:43 অপরাহ্ন - Reply

          @আল্লাচালাইনা,

          পাইটনের স্পেসালিটি কি?

          পাইথন একটি হাই-লেভেল ল্যাংগুয়েজ। লিনাক্সে অ্যাপ্লিকেশন ডেভেলপারদের মধ্যে পাইথন খুব জনপ্রিয়। পাইথনের সবথেকে বড় বৈশিষ্ট মনে হয় সোর্স কোডের readability. পাইথনের সিনট্যাক্স এমন যে আপনি সঠিক ভাবে indentation করতে বাধ্য হবেন,এবং লুপ-ফাংশন ইত্যাদির সিনট্যাক্সগুলোও খুব সহজে বোঝা যায়। আপনি ওয়েব প্রোগ্রামিং এ পাইথন ব্যবহার করতে পারেন,ডেস্কটপ অ্যাপ্লিকেশন এও। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং সাপোর্ট করে পাইথন তবে জাভার মত strict না।

          ভূল কিছু বললে কেও ধরিয়ে দিয়েন,পাইথনে আমি এখনো নতুন,শুধু বেসিক জিনিসগুলো পারি।

      • রনবীর সরকার জুলাই 7, 2011 at 2:21 পূর্বাহ্ন - Reply

        @প্রতিফলন,
        এখন তো প্রোগ্রামিং ল্যাঙ্গুয়েজের সাগর দেখতে পারছি। 🙂
        এখানে latexকেও প্রোগামিং ল্যাঙ্গুয়েজ হিসেবে দেখতে পারছি।
        latex কে কি প্রোগ্রামিং ল্যাঙ্গুয়েজ বলা যায়?

        • প্রতিফলন জুলাই 7, 2011 at 8:56 পূর্বাহ্ন - Reply

          @রনবীর সরকার,

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

          Latex মূলতঃ Markup Language, HTML এর মতো। বৃহত্তর অর্থে প্রোগ্রামিং ল্যাংগুয়েজ বলা যায়। তবে এই লিস্টে HTML নেই, Latex অথচ আছে! এর কোন ব্যাখ্যা নেই আসলে।

  5. শাহ আলম বাদশা জুলাই 6, 2011 at 10:24 অপরাহ্ন - Reply

    আপনার লেখাটি খুব কাজের এবং আমি বেশ উপকৃত হলা–অজানা অনেক কিছু জানলাম। ধন্যবাদ আপনাকে।

    • প্রতিফলন জুলাই 6, 2011 at 10:56 অপরাহ্ন - Reply

      @শাহ আলম বাদশা,

      আপনার লেখাটি খুব কাজের এবং আমি বেশ উপকৃত হলা–অজানা অনেক কিছু জানলাম।

      আপনার উপকারে এসেছে জেনে খুশি হলাম। এই লেখা থেকে যেটুকু জানলেন, সেটুকু কেবল শুরুর কথা; আরো জানতে হলে আপনাকে নিজেকেই পড়তে হবে কিন্তু। 🙂

  6. মইনুল রাজু জুলাই 6, 2011 at 8:35 অপরাহ্ন - Reply

    চমৎকার লেখা। চালিয়ে যান।

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

    ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং এ এটা নিয়ে কাজ হচ্ছে। কিছু রুল বেসড্‌ এক্সপার্ট সিস্টেমেও এটা করা হয়ে থাকে, তবে পুরোপুরি করা হয়তো খুব কষ্টসাধ্য।

    • প্রতিফলন জুলাই 6, 2011 at 10:52 অপরাহ্ন - Reply

      @মইনুল রাজু,

      ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং এ এটা নিয়ে কাজ হচ্ছে। কিছু রুল বেসড্‌ এক্সপার্ট সিস্টেমেও এটা করা হয়ে থাকে, তবে পুরোপুরি করা হয়তো খুব কষ্টসাধ্য।

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

      চমৎকার লেখা। চালিয়ে যান।

      এমন মন্তব্য পেয়ে ভাল লাগলো। 🙂

মন্তব্য করুন