Wednesday, October 24, 2012

একটু খানি প্রোগ্রামিং (প্রথম প্রচেষ্টা)

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

(নিচের লেখায় সিদ্ধান্ত নেওয়ার ব্যাপারটা লেখা জাবে না। বলতে হবে কম্পিউটার যাচাই করতে পারে কোনো সংখ্যা সহজ কোনো  শর্ত পূরণ করছে কি না। )

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

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

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

আসুন আমরা একট উদাহরণের মাধ্যমে পুরো ব্যাপারটা বুঝতে চেষ্টা করি।
ধরা যাক অনেক কষ্টে একটা কম্পিউটার বানানো হলো এবং ১ আর ০ ব্যবহার করেই তাকে শিখিয়ে দেওয়া হলো মাত্র চারটা কাজ,
১) যোগ করা,
২) বিয়োগ করা,
৩) আর সিদ্ধান্ত নেওয়া!

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

১) প্রাপ্ত সংখ্যাটি ধনাত্বক হলে আমি ক কাজটি করবো।
২) ঋণাত্বক হলে আমি খ কাজটি করবো।
৩) আর শূন্য হলে আমি গ কাজটি করবো।

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

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

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

সেটা খুবই সহজ। কম্পিউটারকে শিখিয়ে দিতে হবে।

১) ক বিয়োগ খ  (// ধরি ক আর খ হচ্ছে, আমাদের সংখ্যা দুটি। এই লাইনে এদেরকে বিয়োগ করতে বলা হচ্ছে।)
২)  যদি শূন্য হয় উত্তর "না"। (// এখানে একটা সিদ্ধান্ত গ্রহন করছি। বিয়োগফল শূন্য হবার অর্থ সংখ্যাদুটি সমান, প্রথমটা তাই দ্বিতীয়টার বড় হতে পারে না। )
৩) যদি বিয়োগফল ঋণাত্বক হয় উত্তর "না"। (// বিয়োগফল ঋণাতক হবার অর্থ দ্বিতীয় সংখ্যাটি বড়। )
৪) যদি বিয়োগভল ধনাত্বক হয় উত্তর "হ্যা"। (//ক খ -এর চেয়ে বড় হলে বিয়োগ ফল অবশ্যই ধনাত্বক হবে)

বোঝাই যাচ্ছে এই তিনটি কাজ কম্পিউটার করতে পারবে। কারণ এগুলো তাকে বানানোর সময়ই শিখিয়ে দেওয়া হয়েছে।


http://plus.maths.org/content/lagrange-and-interplanetary-superhighway
http://www.bbc.co.uk/news/science-environment-20033940

















No comments:

Post a Comment