Saturday, December 28, 2013

প্রোগ্রামিং এ হাতেখড়ি

কম্পিউটারের সবচেয়ে মজার ব্যাপার কি জানো?

আরে নাহ, গেইম খেলা না। গান শোনাও না। আর কিছু? ইন্টারনেট ব্রাউজিং? বলতে পারো। তবে তার চেয়েও মজার ব্যাপার হল কম্পিউটারকে প্রোগ্রামিং করা।

প্রোগ্রামিং এর মূল আকর্ষণ - “তৎক্ষণাৎ ফিডব্যাক” (Instant Feedback)। মানে তুমি একটা প্রোগ্রাম লিখে সাথে সাথে রান করে তোমার প্রোগ্রামের কাজ দেখতে পাবে। ইলেক্ট্রনিক্সের একটা সার্কিট বানিয়ে কাজ দেখতে সময় লাগে। কিন্তু প্রোগ্রামিং এ ব্যাপারটা তৎক্ষণাৎ - তুমি কম্পিউটারে বসে প্রোগ্রাম লিখবে আর সাথে সাথে রান করিয়ে কাজের ফলাফল দেখবে।  

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

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

তা, সবকিছুই যখন এই প্রোগ্রামিং দিয়ে করিয়ে নেওয়া যায়, প্রোগ্রামিং করেটা কিভাবে?

দারুণ প্রশ্ন!

তুমি যদি কাউকে দিয়ে একটা কাজ করিয়ে নিতে চাও, কিভাবে করাও? তাকে কাজের নির্দেশ দিয়ে দাও আর সে নির্দেশ মত কাজ করে, তাই না? প্রোগ্রামিং এও ব্যাপারটা একইরকম। তুমি কম্পিউটারকে দিয়ে একটা কাজ করিয়ে নিতে চাও। কাজেই প্রোগ্রামিং করার সময় কম্পিউটারকে নির্দেশ দিয়ে দিবে আর কম্পিউটার তোমার নির্দেশ মত কাজটা করবে।

একটা সুনির্দিষ্ট কাজ করার জন্য নির্দেশমালার সমষ্টি হল এক একটা প্রোগ্রাম।

এখানে একটা সমস্যা আছে - কম্পিউটার তো তোমার - আমার ভাষা বোঝে না। বুঝলে কি যে মজা হত! আমরা বাংলা বা ইংরেজিতে চটপট সব বলে দিতাম আর কম্পিউটার ঝটপট সব করে ফেলত।

তাহলে?

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

বাস্তব উদাহরণে আসি।


একটা সাধারণ ক্যালকুলেটরকে আমরা কিভাবে ব্যবহার করি? আমরা ইনপুট হিসেবে কিছু ডেটা (এখানে সংখ্যা) আর ডেটার উপর কোন অপারেটার (যেমন যোগ, গুণ ইত্যাদি) প্রয়োগ করা হবে তা নির্ধারণ করে দেই। ক্যালকুলেটর ডেটার উপর অপারেটার প্রয়োগ করে ফলাফল আউটপুট হিসেবে দেখায়।

এখন আমরা নিজেরাই যদি অপারেটার বানিয়ে দিতে পারতাম তাহলে অনেক মজা হত না? আমরা একটা অপারেটার বানাতাম কয়েকটা সংখ্যা ইনপুট হিসেবে দিলে তাদের গড় বের করার জন্য। আরেকটা বানাতাম নির্দিষ্ট সংখ্যক মৌলিক সংখ্যা আউটপুট হিসেবে দেখানোর জন্য। আরও কত কত আইডিয়া বের করতাম!

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


যেমন মাইক্রোসফট আমাদের জন্য মাইক্রোসফট ওয়ার্ড সফটওয়্যারটা বানিয়েছে। আমরা কিছু অক্ষর ইনপুট দেই। আবার কিছু অপারেটার (যেমন অক্ষর বোল্ড বা ইটালিক করা) নির্দিষ্ট করে দেই। ওয়ার্ড আমাদেরকে ফলাফল স্ক্রীনে দেখায়।

আমরা বুঝলাম, প্রোগ্রামিং করা বলতে বোঝায় কম্পিউটার বোঝে এমন ভাষায় কম্পিউটারকে কিছু করতে নির্দেশ দেওয়া।

এখন প্রশ্ন হল, এ নির্দেশগুলো কিরকম?

আমরা নিজেরাই একটু ভাবি।

ধরা যাক, আমরা কয়েকটি সংখ্যার গড় বের করতে চাইছি। এর জন্য নির্দেশমালা কেমন হতে পারে?


উপরের ফ্লো চার্টের মতই কম্পিউটারকে তার নিজস্ব ভাষায় নির্দেশ দিতে হয়।

প্রতিটা নির্দেশই কি বলে দিতে হয়?

হুম।

তাহলে ছোটখাট কাজ করতেও তো অনেক বড় প্রোগ্রাম লিখতে হবে - এমনটা ভাবছ?

প্রোগ্রামিং সহজ এবং ছোট করার জন্য কম্পিউটার বিজ্ঞানীরা সমাধান বের করেছেন এবং এই বিষয়ে এখনও কাজ চলছে। মূল আইডিয়াটা হল অ্যাবস্ট্রাকশান (abstraction) তৈরি করা।

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

প্রথমে ডান পা টা ফেলবে। তারপর বাম পা টা। এভাবে ১০ ধাপ। তারপর ডানদিকে। …… তারপর ডান পা উপরে তুলে বাসে উঠবে। ………

এই লক্ষ লক্ষ নির্দেশ দেওয়ার কাজটা সহজ করার উপায় কি?

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

এরপর কাজের নাম বলে দিলেই হল - সে কাজটা করে দিতে পারবে।

উদাহরণে ফিরে আসি।

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

প্রথমে একটা রিকশা নিয়ে বাসস্টান্ডে। (লক্ষ লক্ষ নির্দেশ দিয়ে এই অ্যাবস্ট্রাকশানটা তুমি তৈরি করেছ বা কেউ তোমাকে তৈরি করে দিয়েছে। )

বাস নিয়ে চিটাগং। (এটাও একটা অ্যাবস্ট্রাকশান। একইভাবে তৈরি করা। )

চিটাগং পৌঁছে রিকশা নিয়ে বাড়িতে। (এটা আরেকটা অ্যাবস্ট্রাকশান। এটাও লক্ষ নির্দেশের সমষ্টি।)


এবার অনেক সহজ হয়ে গেছে না?


ছোট কাজগুলো আলাদা আলাদা ভাবে ভাগ করে নাম দিয়ে দেওয়াই অ্যাবস্ট্রাকশান (abstraction) তৈরি করা। অ্যাবস্ট্রাকশান তৈরি করে নিতে পারলে শুধু কাজের নাম জানলেই হবে, ভেতরের ডিটেইলস জানা লাগবে না।

কাজের পাশাপাশি আরও অনেক ব্যাপার অ্যাবস্ট্রাকট করা যায়। কম্পিউটার কিভাবে ডেটা গুছিয়ে রাখবে তারও অ্যাবস্ট্রাকশান আছে।

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

এভাবে অ্যাবস্ট্রাকশান ব্যবহার করে প্রোগ্রামিং সহজ এবং ছোট করা যায়।

মজার না?


এবার আমরা আমাদের ধারণাগুলো কম্পিউটারে কিভাবে প্রয়োগ করা যায় তা দেখবো।

কয়েকটি সংখ্যার গড় বের করার নির্দেশগুলো আমরা লিখেছিলাম।

এই নির্দেশগুলোকে কম্পিউটারে প্রোগ্রাম হিসেবে কিভাবে লিখে?


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

ব্যাপারটা কিভাবে সম্ভব - তা ভাবছ?

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


তুমি নিজে একটা ভাষা বানিয়ে সেই ভাষায় কম্পিউটারকে নির্দেশ দিতে চাইলে তোমার সৃষ্টি ভাষাটার জন্য একটা কম্পাইলার বা ইন্টারপ্রেটার বানাতে হবে।

ব্যাপারটা অনেকটা বাস্তব “ইন্টারপ্রেটার” এর মতই। ধর, তুমি চায়নায় গিয়েছ। তুমি ওদের ভাষা “মান্দারিন” পারো না। একজন ইন্টারপ্রেটার জোগাড় করতে পারলে, সে তোমার বাংলাকে মান্দারিনে রূপান্তরিত করে দেবে।


বোঝা যাচ্ছে, এবার আমাদের কম্পিউটারের ভাষাগুলো কেমন তা বুঝতে হবে।


অনেকগুলো নির্দেশ নিয়েই তো আমাদের প্রোগ্রাম।

এক একটা প্রোগ্রামিং ভাষা বলে দেয় -

১. এক একটা নির্দেশ কিভাবে লিখতে হয়।

২. নির্দেশগুলো কিভাবে সাজিয়ে রাখতে হয় যাতে একটার পর একটা নির্দেশ পালিত হয়।

৩. অ্যাবস্ট্রাকশান কিভাবে তৈরি করতে হয়।



প্রথমে দেখি, এক একটা নির্দেশ কিভাবে লিখতে হয়

এক একটা নির্দেশকে ধরি এক একটা বাক্য।

ধরি, একরকম বাক্য গঠিত হয় Noun Phrase এর পর Verb Phrase বসিয়ে।

বাপারটাকে আমরা লিখি এভাবে-

বাক্য -> Noun Phrase + Verb Phrase

Noun Phrase গঠিত হয় Noun দিয়ে।

Noun Phrase -> Noun

Noun হতে পারে তাহসিন, শামিতা, আলিফ, মাইশা, রাইসা এসব।

Noun -> তাহসিন অথবা শামিতা অথবা আলিফ অথবা মাইশা অথবা রাইসা

একইভাবে আমরা সংক্ষেপে লিখি -

Verb Phrase -> Adjective + Verb Phrase অথবা Verb

Adjective -> দশপা অথবা সামনে

Verb -> এগুবে

এই ভাষা ব্যবহার করে আমরা লিখতে পারিঃ

তাহসিন দশপা সামনে এগুবে।

কিভাবে?

বাক্য -> Noun Phrase + Verb Phrase ->

Noun + Adjective + Verb Phrase ->

Noun + Adjective + Adjective + Verb Phrase ->

Noun + Adjective + Adjective + Verb ->

তাহসিন দশপা সামনে এগুবে।

একটা প্রোগ্রামিং ভাষায় সম্ভাব্য সবরকম বাক্য কিভাবে লেখা যায় তা নির্ধারিত থাকে। আর প্রত্যেক রকম বাক্য কিভাবে কম্পিউটার ইলেকট্রনিক্স বোঝে এমন ভাষায় রূপান্তরিত করা যায় তার উপায় থাকে কম্পাইলার বা ইন্টারপ্রেটারে।

কম্পাইলার বা ইন্টারপ্রেটার করে কি

  • বাক্যটা কি ধরণের বাক্য তা বোঝার চেষ্টা করে। এই ধাপটাকে বলে Parsing।
  • চেনার পর, এই ধরণের বাক্যকে কিভাবে কম্পিউটার ইলেকট্রনিক্স বোঝে এমন ভাষায় রূপান্তরিত করা যায় তার যে নিয়ম আছে, সেই নিয়ম অনুসারে বাক্যটাকে অনুবাদ করে।  

তারপর কম্পিউটার ইলেকট্রনিক্স নিজেই বোঝে বাক্যটা দিয়ে প্রোগ্রামার কি বোঝাতে চেয়েছিল।
ওই যে বলেছিলাম, ব্যাপারটা অনেকটা বাস্তব “ইন্টারপ্রেটার” এর মতই।


কাজেই আমরা দেখলাম, এক একটা নির্দেশ কিভাবে লিখতে হয়।


এবার দেখবো, নির্দেশগুলো কিভাবে সাজিয়ে রাখতে হয় যাতে একটার পর একটা নির্দেশ পালিত হয়


নির্দেশ সাজানোর অনেক উপায় আছে। ভিন্ন ভিন্ন ধাঁচের প্রোগ্রামিং ভাষায় ব্যাপারটা ভিন্ন ভিন্ন।

আমাদের দেখবো Structured Programming এ কিভাবে নির্দেশগুলো সাজিয়ে রাখে।


নির্দেশ সাজানোর একটা উপায় বোঝা যাচ্ছে - কাজের কোন ধাপের পর কোন ধাপ পালন করতে হবে তা একটার পর একটা লিখব। এভাবে আমরা একটার পর একটা নির্দেশ লিখব।

প্রথমে ক কাজটা করবে,

তারপর করবে খ কাজটা,

এভাবে।


মাঝে মাঝে অবস্থার উপর নির্ভর করে তাকে সিদ্ধান্ত নিতে হবে। এমন ক্ষেত্রে নির্দেশ দিতে হবে, কখন কি করতে হবে।

যদি ক ঘটে

       তবে খ করতে হবে, 

আর যদি গ ঘটে

       তবে ঘ করতে হবে,

এভাবে।


আবার কখনও একই কাজ বেশ কয়েকবার করতে হবে। এমন ক্ষেত্রে নির্দেশ দিতে হবে কোন কাজগুলো বারবার করতে হবে।

যতক্ষণ ক হচ্ছে

        ততক্ষণ খ করতে থাকো।


Structured Programming মডেলে এই তিনরকম নির্দেশ এর সমাবেশ এর মাধ্যমে কম্পিউটারকে দিয়ে বিভিন্ন কাজ করিয়ে নেওয়া হয়।

১. একটার পর একটা ধারাবাহিক নির্দেশগুলোকে Structured Programming এর ভাষায় বলে Sequential instructions.

২. অবস্থার সাপেক্ষে সিদ্ধান্ত নেওয়া ব্যাপারটাকে Structured Programming এ বলে Branching

৩. একই কাজ বারবার করাকে বলে লুপিং (Looping)


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


মোটামুটিভাবে, এগুলোই হল প্রোগ্রামিং এর মূল ব্যাপার।



কি? এখনও বসে আছ? আর দেরি না করে নিজে প্রোগ্রাম লেখা শুরু কর। নিজের একটা গেইম বানাতে ইচ্ছা করে না বুঝি!


দেখতে পারো

No comments:

Post a Comment