| গোলাম সারোয়ার চৌধুরী |

prog

বর্তমান যুগে সবচেয়ে জনপ্রিয় যে যন্ত্রটি তার নাম কম্পিউটার। কিন্তু মজার ব্যাপার হল কম্পিউটার কিন্তু তার নিজের বুদ্ধিতে কিছুই করতে পারে না। তাকে যা শেখানো হয় সে তাই করতে পারে এর বেশি কিছু নয়। এখন তোমার মনে হয়ত ঘুরপাক খাচ্ছে , কিভাবে কম্পউটারকে শিখাব? এর উত্তর যা হবে তাকেই বলা চলে সাধারণ ভাষায় কম্পিউটার প্রোগ্রামিং (computer programming)। বর্তমানে প্রোগ্রামিং শুধু যে কম্পিউটারে জন্যই করা হচ্ছে বাপ্যারটা কিন্তু ঠিক তা নয়। প্রোগ্রামিং মোবাইল ফোনের জন্যও হতে পারে। হতে পারে তোমার হাতে চলতে থাকা ছোট্ট ঘড়িটার জন্যও। আর সেই প্রোগ্রামিং যখন কম্পিউটারে জন্য করা হয় তখন তাকে বলা হয় কম্পিউটার প্রোগ্রামিং। অবাক করার বিষয় হল, আমরা চাইলে প্রোগ্রামিং এর সাহায্যে ৫ + ২ = ১০ (!) বানিয়েও কম্পিউটারকে দিলে সে তাই দিবে। কিন্তু আমরা নিশ্চই এমন অবাস্তব প্রোগ্রাম বানাবো না।

কম্পিউটার মানে গণনা যন্ত্র। যদিও বর্তমানে এর সাহায্যে অনেক কিছুই করা যায়। যেমন আমরা চাইলে এর সাহায্যে গান শুনতে পারি, মুভি দেখতে পারি ইত্যাদি। আসলে আমরা কম্পিউটারের সাহায্যে যা কিছুই করি না কেন এটি কিন্তু সব কিছুকেই শুন্য (০) ও এক (১) এর সম্বনয় হিসেবেই চিনে। অর্থাৎ এটি শুন্য (০) ও এক (১) ছাড়া কিছুই বুঝে না। যাকে আমরা বলি দ্বিমিক সংখ্যা। কম্পিউটার এতোটা জনপ্রিয় হওয়ার পেছনে অন্যতম কারণ হল, এর সাহায্যে বিভিন্ন ধরনের সফ্‌টওয়্যার তৈরী করে আবার এরই সাহায্যে ব্যবহার করে অনেক জটিল ও সময় সাপেক্ষ্য কাজ করে ফেলা যায় মাত্র কয়েক সেকেন্ডের মধ্যে। সফ্‌টওয়্যার কিন্তু বানানো হয় প্রোগ্রামিং করেই। তোমাকে যদি এখন বলা হয় ১ থেকে ১ লক্ষের মধ্যে মৌলিক সংখ্যাগুলো কি কি? তুমি হয়ত পারবে কিন্তু ততক্ষণে হয়ত তোমার বন্ধু ব্যাপন ম্যাগাজিনটি পড়া শেষ করে এক বেলা ঘুম দিয়ে আসতে পারবে! কিন্তু এই কাজটিই কম্পিউটার করে দিবে চোখের পলকেই। আর এটি সম্ভব হয়েছে প্রোগ্রামিং এর কল্যাণেই। সেই জন্যই কম্পিউটার প্রোগ্রামিং এ আমাদের এত বেশি  আগ্রহ।

কে না চায় কম্পিউটারকে তার নিজের মত কথা শোনাতে। এখন হয়ত তোমার মনে প্রশ্ন আসবে, কম্পিউটার কি আমার ভাষা বুঝবে? হ্যাঁ বুঝবে কিন্তু আমরা যে ভাষায় কথা বলি তা অবশ্য বুঝবে না। কারণ আমরা জানলাম যে, কম্পিউটার শুন্য (০) ও এক (১) ছাড়া কিছুই বুঝে না। একটা সময় ছিল যখন শুধু ০ আর ১ লিখেই কম্পিউটার প্রোগ্রামিং লিখতে হত। কারণ কম্পিউটারকে কাজ করাতে চাইলে তো তার ভাষায় কথা বলতে হবে। ০ ও ১ দিয়ে যে প্রোগ্রামিং করা হয় তাকে বলে মেশিন ল্যাঙ্গুয়েজ (Machine Language)। তারপর আসল অ্যাসেম্বলি ল্যাঙ্গুয়েজ যা কিছুটা সহজ ও অধিক বোধগম্য। অ্যাসেম্বলি ল্যাঙ্গুয়েজকে কম্পিউটারের ভাষায় রূপান্তরের জন্য তৈরী করা হল অ্যাসেম্বলার (এক ধরনের কম্পিউটার প্রোগ্রাম)। প্রয়োজন যেহেতু আবিষ্কারের জননী, তাই কাজকে আরো সহজ করতে তৈরী হলো বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ। যেমন- বেসিক (Basic), ফোরট্রান (Fortran), প্যাসকেল (Pascal), সি (C)। মানুষের আবিষ্কারের শেষ নেই, তৈরী হতে থাকল নতুন নতুন প্রোগ্রামিং ল্যাঙ্গুয়েজ, যার মধ্যে সি প্লাস প্লাস (C++), জাভা (Java), ভিজ্যুয়াল বেসিক (Visual Basic), সি শার্প (C#), পাইথন (Python), পিএইচপি (PHP), রুবি (Ruby) অন্যতম। শুধু এখানেই শেষ নয়, এখনো তৈরী হচ্ছে নতুন নতুন প্রোগ্রামিং ল্যাঙ্গুয়েজ। আর এসব ল্যাঙ্গুয়েজের জন্য আছে আলাদা আলাদা কম্পাইলার (এক ধরনের বিশেষ সফ্‌টওয়্যার) যা ঐ সব ভাষায় লিখিত প্রোগ্রামকে কম্পিউটারের ভাষায় রূপান্তরের জন্য তৈরী করা হয়েছে। তাই এখন আর আমাদেরকে রূপান্তরের বিষয়টি নিয়ে ভাবতে হয় না। শুধু যে কোন প্রোগামিং ল্যাঙ্গুয়েজে প্রোগ্রাম লিখে দিলেই চলে।

আমরা সাধারণ কথায় বলতে পারি, যে ল্যাঙ্গুয়েজের সাহায্যে আমাদের দেয়া নির্দেশনা ও কম্পিউটারের মধ্যে একটি সমন্বয় তৈরী করা যায় এবং যার সাহায্যে প্রোগ্রাম বা কম্পিউটার প্রোগ্রাম তৈরী করা যায় তাকেই বলা হয় প্রোগ্রামিং ল্যাঙ্গুয়েজ।

তোমাকে আপাতত সবগুলো প্রোগ্রামিং ল্যাঙ্গুয়েজ না শিখলেও চলবে। এখন যে কোন একটি ভালভাবে শিখে নিলেই হবে। তবে সি প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখাটাই অধিক যুক্তিযুক্ত বলে আমি মনে করি। কারণ সি ল্যাঙ্গুয়েজটা ভালমত রপ্ত করতে পারলে অন্যগুলো তুমি যে কোন সময় চাইলেই শিখে নিতে পারবে। তাছাড়া সি ল্যাঙ্গুয়েজ এর নিয়ম-কানুন অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজের সাথে মিল আছে। এমনকি প্রোগ্রামিং প্রতিযোগিতায় যে সকল প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করা হয় সেগুলোর মধ্যে সি অন্যতম। প্রোগ্রামিং প্রতিযোগিতায় অংশ গ্রহনের মাধ্যমে তুমি নিজেকে এক জন দক্ষ প্রোগ্রামার হিসেবে তৈরী করার সুযোগ পাবে। আর সেই সাথে পরিচিত হতে পারবে পৃথিবী বিখ্যাত প্রোগ্রামারদের সাথে। এমনকি প্রোগ্রামিং প্রতিযোগিতায় ভাল করতে পারলে চাকুরি পেয়ে যেতে পার গুগল (Google), মাইক্রোসফট (Microsoft), ফেসইবুক (Facebook), অ্যাপল (Apple) প্রভৃতি পৃথিবী বিখ্যাত প্রতিষ্ঠানগুলোতে। চিন্তার কারণ নেই, নির্দিষ্ট কিছু বিষয় নিয়ে আলোচনা করা হয়ে যাওয়ার পর প্রোগ্রামিং প্রতিযোগিতা নিয়ে বিস্তারিত আলোচনা করা হবে ইনশা-আল্লাহ।

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

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

প্রোগ্রাম লেখার ধরণ, সহজ ও বোধগম্যতা প্রভৃতি বৈশিষ্ট্যের উপর ভিত্তি করে প্রোগ্রামিং ল্যাঙ্গুয়েজকে সাধারণত দুই স্তরে বিন্যস্ত করা হয়ঃ

১। নিম্নস্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজ (Low-level programming language) এবং

২। উচ্চস্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজ (High-level programming language)

নিম্নস্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজ (Low-level programming language)

এখানে নিম্ন (low) মানে কম (small)। অর্থাৎ যে প্রোগ্রামিং ভাষা ও মেশিনের (কম্পিউটারের) ভাষার মধ্যে পার্থক্য খুব কম বা কাছাকাছি। প্রোগ্রাম লিখার সর্ব নিম্নস্তরের ভাষা হল মেশিন ভাষা (Machine Language) । এই মেশিন প্রোগ্রামিং ভাষাগুলো শূন্য (০) ও এক (১) এর সমন্বয়ে গঠিত। সুতরাং এই ভাষা ব্যবহার করে প্রোগ্রাম লিখতে গেলে ০ এবং ১ নিয়ে প্রোগ্রাম লিখতে হয়। এই ভাষা ব্যবহার করে কম্পিউটারের হার্ডওয়্যারের প্রোগ্রাম লিখা যায় এবং এর ভেতরকার বিভিন্ন ত্রুটি দূর করা যায়। তাই এই ভাষাকে মেশিন ল্যাঙ্গুয়েজ (Machine Language) বা হার্ডওয়্যারের নিকটবর্তী ভাষা (close to hardware language) বলা হয়। যেহেতু এই ভাষা সরাসরি  কম্পিউটারের ভাষায় লিখিত, তাই এই ভাষায় লিখিত প্রোগ্রাম খুব কম সময়ে আউটপুট (output) দেয় কোন প্রকারের কম্পাইলার বা ইন্টারপ্রিটার ছাড়াই। এই ভাষার সব চেয়ে বড় অসুবিধা হল, এক ধরনের মেশিনের জন্য লিখিত প্রোগ্রাম অন্য ধরনের মেশিনে ব্যবহার (run) করা যায় না। তাই এই ভাষাকে বলা হয় মেশিন নির্ভরভাষা (machine dependent language)। এই ভাষায় প্রোগ্রাম লিখা খুবই সময় সাপেক্ষ এবং আগে থেকেই মেশিনের অভ্যন্তরীন গঠন ও কার্যাবলি সম্পর্কে পুরোপুরি ধারণা থাকতে হয়। তাই প্রোগ্রামারগণ খুব বেশি প্রয়োজন না হলে এই ভাষায় প্রোগ্রাম লিখেন না।

এই স্তরের আরেক প্রকারের ভাষা আছে, যাকে বলে অ্যাসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language)। এই ভাষায় ০ এবং ১ এর পরিবর্তে কিছু ইংরেজী শব্দ ব্যবহার করে প্রোগ্রাম লিখা হয়। এই শব্দগুলোকে বলা হয় ‘symbolic operation code’। যেমন যোগের জন্য ব্যবহার করা হয় ‘ADD’ শব্দ। এই  গাণিতিক শব্দগুলোকে মেশিনের ভাষায় রূপান্তরের জন্য ব্যবহার করা হয় অ্যাসেম্বলার (Assembler)। এই ভাষা মেশিন ল্যাঙ্গুয়েজের তুলনায় কিছুটা সহজতর হলেও অনেক কষ্টসাধ্য ও সময় সাপেক্ষ। তাই যথার্থ প্রোয়োজন না হলে এই ভাষায় প্রোগ্রাম না লেখাই শ্রেয়।

উচ্চস্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজ (High-level programming language)

বর্তমানে প্রোগ্রামিং ভাষা বলতে সাধারণত উচ্চস্তরের প্রোগ্রামিং ভাষাকেই বোঝায়। সাধারণ (ordinary/natural) ভাষার (যেমন-ইংরেজি) কাছাকাছি, সহজে বোধগম্য, সার্বজনীন প্রভৃতি বৈশিষ্ট্য সম্বলিত প্রোগ্রামিং ল্যাঙ্গুয়েজকে উচ্চস্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজ বলা হয়। যেমন-Fortran, Ada, Pascal, C, C++, Java ইত্যাদি। এই প্রোগ্রামিং ল্যাঙ্গুয়েজগুলো সাধারণ ভাষার (ইংরেজি) কাছাকাছি হওয়ায় যে কেউ মোটামোটি ইংরেজি জানলেই এই প্রোগ্রামিং ভাষা দিয়ে খুব সহজে প্রোগ্রাম লিখে ফেলতে পারে। কম্পাইলার বা ইন্টারপ্রেটারের সাহায্যে এই ভাষায় লিখিত প্রোগ্রাম মেশিন ভাষায় রূপান্তর করা হয়। তাই এই ভাষায় লিখিত প্রোগামগুলো মেশিন নির্ভর নয় (machine independent)। অর্থাৎ এক মেশিনের জন্য লিখিত প্রোগ্রাম অন্য মেশিনে ব্যবহার করা যায় খুব সামান্য পরিবর্তন করে বা কোন পরিবর্তন ছাড়াই। যেহেতু কম্পাইলার মেশিনের ভাষায় রূপান্তরের কাজ করে দিচ্ছে, তাই মেশিন কোড (Code) নিয়ে আমাদের কোন চিন্তা করতে হয় না। শুধু কম্পাইলারে প্রোগ্রাম লিখে দিলেই চলে। এমনকি এই স্তরের ভাষায় প্রোগ্রাম লিখার সময় মেশিনের অভ্যন্তরীন গঠন নিয়ে কোন প্রকার চিন্তা করতে হয় না। সে জন্যই এই স্তরের ভাষাগুলো খুব বেশি জনপ্রিয়। কিন্তু যেহেতু এই স্তরের ভাষাগুলোতে কম্পিউটারের ভাষা যেমন, অ্যাসেম্বলি বা মেশিন ভাষার তুলনায় অনেক বেশি পার্থক্য বিদ্যমান, তাই প্রোগ্রাম নির্বাহ (execute) হতে অ্যাসেম্বলি বা মেশিন ভাষার তুলনায় কিছুটা বেশি সময় নেয়।

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

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

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