কম্পিউটার প্রোগ্রাম

কম্পিউটার প্রোগ্রাম হলো একটি ধারাবাহিক বা নির্দেশনাগুচ্ছের সেট, যা কম্পিউটারকে কোনো প্রোগ্রামিং ভাষায় দেয়া হয় এবং তা অনুসরণ করে কম্পিউটার কার্য সম্পাদন করে। এটি সফটওয়্যারের একটি অংশ, যেখানে আরও থাকে ডকুমেন্টেশন এবং অন্যান্য বিমূর্ত উপাদান।
কম্পিউটার প্রোগ্রাম-এর মানুষের পড়ার উপযোগী রূপকে বলা হয় সোর্স কোড। তবে কম্পিউটার কেবলমাত্র তার নিজস্ব মেশিন নির্দেশনা (মেশিন ইনস্ট্রাকশন) কার্যকর করতে পারে, তাই সোর্স কোডকে চালানোর জন্য অন্য একটি কম্পিউটার প্রোগ্রামের প্রয়োজন হয়। এজন্য সোর্স কোডকে সংশ্লিষ্ট ভাষার জন্য লেখা একটি কম্পাইলার ব্যবহার করে মেশিন নির্দেশনায় অনুবাদ করতে হয়। (অ্যাসেম্বলি ভাষার প্রোগ্রামগুলিকে অনুবাদ করতে ব্যবহার করা হয় অ্যাসেম্বলার) অনুবাদিত ফাইলটিকে বলা হয় এক্সিকিউটেবল বা পরিচালনাযোগ্য। বিকল্পভাবে, সোর্স কোড সরাসরি সেই ভাষার জন্য তৈরি একটি ইন্টারপ্রেটার দ্বারা চালানো যেতে পারে।
যদি এক্সিকিউটেবল ফাইল চালানোর অনুরোধ করা হয়, তবে অপারেটিং সিস্টেম তা মেমোরিতে লোড করে এবং একটি প্রক্রিয়া তথা প্রসেস শুরু করে। এরপর সেন্ট্রাল প্রসেসিং ইউনিট (CPU) সেই প্রক্রিয়াতে স্যুইচ করে এবং প্রতিটি মেশিন নির্দেশনা ফেচ, ডিকোড, এবং এক্সিকিউট করতে শুরু করে।
আর যদি সোর্স কোড চালানোর অনুরোধ করা হয়, তবে অপারেটিং সিস্টেম সংশ্লিষ্ট ইন্টারপ্রেটারকে মেমোরিতে লোড করে এবং একটি প্রক্রিয়া শুরু করে। ইন্টারপ্রেটার তখন সোর্স কোড মেমোরিতে নিয়ে প্রতিটি স্টেটমেন্ট অনুবাদ ও কার্যকর করে। সোর্স কোড চালানো এক্সিকিউটেবল প্রোগ্রাম চালানোর তুলনায় ধীর গতির হয়। এছাড়াও, ইন্টারপ্রেটারটি অবশ্যই কম্পিউটারে ইনস্টল করা থাকতে হবে।
"Hello, world!" নামে পরিচিত একটি প্রোগ্রাম প্রায়শই কোনো একটি প্রোগ্রামিং ভাষার মৌলিক সিনট্যাক্স বা পদপ্রকরণ হিসাবে ব্যবহৃত হয়। BASIC (১৯৬৪) ভাষার সিনট্যাক্স ইচ্ছাকৃতভাবে সীমিত রাখা হয়েছিল, যাতে ভাষাটি শেখা সহজ হয়। উদাহরণস্বরূপ, এ ভাষায় ভ্যারিয়েবলগুলো ব্যবহারের আগে অ্যাসাইন বা ঘোষণা করতে হয় না। এছাড়াও, ভ্যারিয়েবলগুলোর মান প্রথমে স্বয়ংক্রিয়ভাবে শূন্য(0) হিসাবে নির্ধারিত হয়।
নিচে BASIC ভাষায় একটি নমুনা কম্পিউটার প্রোগ্রাম দেওয়া হলো, যা একটি সংখ্যার তালিকার গড় নির্ণয় করে।
10 INPUT "How many numbers to average?", A
20 FOR I = 1 TO A
30 INPUT "Enter number:", B
40 LET C = C + B
50 NEXT I
60 LET D = C/A
70 PRINT "The average is", D
80 END
কম্পিউটার সফটওয়্যার উন্নয়নের অগ্রগতি মূলত কম্পিউটার হার্ডওয়্যারের উন্নতির ফল। হার্ডওয়্যার উন্নয়নের প্রতিটি পর্যায়ে কম্পিউটার প্রোগ্রামিং-এরও কাজের ধরণ পরিবর্তিত হয়েছে। 
১৮৩৭ সালে, জ্যাকার্ড লুমের অনুপ্রেরণায় চার্লস ব্যাবেজ অ্যানালিটিক্যাল ইঞ্জিন তৈরির চেষ্টা করেন, যার বাংলা নাম দেওয়া যেতে পারে বিশ্লেষণযন্ত্র। এ হিসাবযন্ত্রটির বিভিন্ন উপাদানের নাম টেক্সটাইল শিল্প থেকে ধার নেওয়া হয়েছিল। টেক্সটাইল শিল্পে যেভাবে সুতো মজুত থেকে তাঁতে আনা হতো, তেমনই এই যন্ত্রে একটি "স্টোর" ছিল, যা ৫০ দশমিক অঙ্কের ১,০০০টি সংখ্যা ধারণ করতে পারত। স্টোর থেকে সংখ্যা "মিল"-এ পাঠানো হতো প্রক্রিয়াকরণের জন্য। যন্ত্রটি দুটি সেটের ছিদ্রযুক্ত কার্ডের মাধ্যমে প্রোগ্রাম করা হতো — এক সেট নির্দেশনা দিত এবং অন্য সেট পরিবর্তনশীল উপাদান ইনপুট দিত। তবে হাজার হাজার দাঁতওয়ালা চাকাগুলি একত্রে কার্যকরভাবে কাজ করতে পারেনি।
অ্যাডা লাভলেস চার্লস ব্যাবেজের জন্য কাজ করেছিলেন এবং ১৮৪৩ সালে অ্যানালিটিক্যাল ইঞ্জিনের একটি বিবরণ তৈরি করেন। এই বিবরণে "নোট জি" অন্তর্ভুক্ত ছিল, যেখানে বার্নুলি সংখ্যা গণনার একটি পূর্ণাঙ্গ পদ্ধতি বর্ণনা করা হয়। ইতিহাসবিদদের অনেকের মতে, এই নোটটিই বিশ্বের প্রথম কম্পিউটার প্রোগ্রাম হিসেবে স্বীকৃতি দেয়া যেতে পারে।
১৯৩৬ সালে, অ্যালান টিউরিং ইউনিভার্সাল টিউরিং মেশিন প্রস্তাব করেন, এমন একটি তাত্ত্বিক যন্ত্র যা প্রতিটি ধরনের গণনা বা হিসাব একটি নির্দিষ্ট মডেল অনুযায়ী করতে সক্ষম। এটি একটি সীমিত-অবস্থা সম্পন্ন যন্ত্র (finite-state machine), যার সঙ্গে একটি অনন্ত দৈর্ঘ্যের টেপ যুক্ত থাকে যা পড়া বা লেখার কাজ করে থাকে। এই যন্ত্রটি টেপকে সামনে-পেছনে সরাতে পারে এবং একটি অ্যালগরিদম কার্যকর করার সময় টেপের উপাদান পরিবর্তন করতে পারে। যন্ত্রটি একটি প্রাথমিক অবস্থা থেকে শুরু করে, একের পর এক ধাপ সম্পন্ন করে এবং halt (বন্ধ) অবস্থায় পৌঁছালে থেমে যায়। আজকের দিনের সকল কম্পিউটারই Turing complete (এটি সকল গণনাকারী যন্ত্র বিশেষ করে কম্পিউটারের জন্য একটি মানদণ্ডস্বরূপ), অর্থাৎ তারা টিউরিং মেশিনের মতো সবধরনের গণনাযোগ্য সমস্যা সমাধান করতে সক্ষম।
ইলেকট্রনিক নিউমেরিকাল ইন্টিগ্রেটর অ্যান্ড কম্পিউটার (ENIAC) নির্মিত হয়েছিল জুলাই ১৯৪৩ থেকে ১৯৪৫ সালের মধ্যে শরৎকালে। এটি একটি টিউরিং কমপ্লিট যন্ত্র ও সাধারণ উদ্দেশ্যযুক্ত কম্পিউটার ছিল, যা সার্কিট তৈরির জন্য ১৭,৪৬৮টি ভ্যাকুয়াম টিউব ব্যবহার করত। মূলত এটি ছিল একাধিক Pascaline যন্ত্র একসাথে সংযুক্ত করে তৈরি একটি সিস্টেম। এর ৪০টি ইউনিটের মোট ওজন ছিল ৩০ টন যা ১,৮০০ বর্গফুট (১৬৭ বর্গমিটার) জায়গা দখল করত, এবং যখন এটি নিষ্ক্রিয় অবস্থায় থাকত, তখনও প্রতি ঘন্টায় ১৯৪০-এর দশকের হিসেবে ৬৫০ ডলারের বিদ্যুৎ খরচ করত। এতে ছিল ২০টি দশমিক ভিত্তিক অ্যাকুমুলেটর। ENIAC প্রোগ্রাম করতে প্রায় দুই মাস সময় লাগত। এর তিনটি ফাংশন টেবিল চাকার ওপরে বসানো ছিল এবং সেগুলোকে নির্দিষ্ট ফাংশন প্যানেলের সামনে গড়িয়ে আনতে হতো। এই ফাংশন টেবিলগুলিকে প্লাগবোর্ডে ভারী কালো কেবল লাগিয়ে ফাংশন প্যানেলের সঙ্গে সংযুক্ত করতে হতো। প্রতিটি ফাংশন টেবিলে ছিল ৭২৮টি ঘুরানো যায় এমন নক। ENIAC প্রোগ্রাম করার অংশ হিসেবে ৩,০০০টি সুইচের কিছু নির্দিষ্টভাবে সেট করতে হতো। এর কোনো প্রোগ্রামে সমস্যা দেখা দিলে তা খুঁজে বের করে ঠিক করতে প্রায় এক সপ্তাহ সময় লেগে যেত।
ENIAC কম্পিউটারটি ১৯৪৭ থেকে ১৯৫৫ সাল পর্যন্ত Aberdeen Proving Ground-এ চালু ছিল এবং এই সময়ে এটি হাইড্রোজেন বোমার হিসাব, আবহাওয়ার পূর্বাভাস, এবং আর্টিলারি বন্দুক তাক করার জন্য প্রয়োজনীয় ফায়ারিং টেবিল তৈরি করতে ব্যবহৃত হয়েছিল।
তারযুক্ত সংযোগ বসানো ও সুইচ চালু করার পরিবর্তে, একটি সংরক্ষিত-প্রোগ্রাম কম্পিউটার নির্দেশনাগুলিকে মেমোরিতে লোড করে, ঠিক যেমনভাবে এটি ডেটাও মেমোরিতে লোড করে। ফলস্বরূপ, কম্পিউটার দ্রুত প্রোগ্রাম করা যেত এবং অত্যন্ত দ্রুতগতিতে গণনা করতে পারত। প্রেসপার একার্ট এবং জন মক্লি ENIAC তৈরি করেছিলেন। এই দুই প্রকৌশলী ১৯৪৪ সালের ফেব্রুয়ারিতে একটি তিন পৃষ্ঠার স্মারকে সংরক্ষিত-প্রোগ্রাম ধারণাটি প্রস্তাব করেন। পরে, ১৯৪৪ সালের সেপ্টেম্বরে, জন ভন নিউম্যান ENIAC প্রকল্পে কাজ শুরু করেন। ১৯৪৫ সালের ৩০ জুন, ভন নিউম্যান “EDVAC-এর একটি রিপোর্টের প্রথম খসড়া” প্রকাশ করেন, যেখানে কম্পিউটারের গঠনকে মানুষের মস্তিষ্কের গঠনের সঙ্গে তুলনা করা হয়। এই নকশাটি "ভন নিউম্যান আর্কিটেকচার" নামে পরিচিত হয়। ১৯৪৯ সালে এই আর্কিটেকচারটি EDVAC এবং EDSAC কম্পিউটারের নির্মাণে ব্যবহার করা হয়।
IBM System/360 (১৯৬৪) ছিল একটি কম্পিউটার পরিবার, যার প্রতিটি মডেলের একই নির্দেশ সেট আর্কিটেকচার ছিল। Model 20 ছিল সবচেয়ে ছোট এবং সস্তা। গ্রাহকরা উন্নত সংস্করণে রূপান্তর করতে পারতেন এবং একই অ্যাপ্লিকেশন সফটওয়্যার ব্যবহার করতে পারতেন। Model 195 ছিল সবচেয়ে উন্নত সংস্করণ। প্রতিটি System/360 মডেলে মাল্টিপ্রোগ্রামিং বৈশিষ্ট্য ছিল—একাধিক প্রসেস একইসাথে মেমোরিতে থাকতে পারত। যখন একটি প্রসেস ইনপুট/আউটপুটের জন্য অপেক্ষা করত, অন্যটি কম্পিউট করতে পারত।
IBM পরিকল্পনা করেছিল প্রতিটি মডেল PL/1 ভাষা ব্যবহার করে প্রোগ্রাম করা হবে। একটি কমিটি গঠন করা হয়েছিল, যেখানে COBOL, Fortran এবং ALGOL প্রোগ্রামাররা ছিলেন। লক্ষ্য ছিল এমন একটি ভাষা তৈরি করা যা বিস্তৃত, ব্যবহারবান্ধব, প্রসারযোগ্য এবং COBOL ও Fortran-এর বিকল্প হিসেবে কাজ করবে। ফলাফল ছিল একটি বৃহৎ ও জটিল ভাষা, যার কম্পাইল হতে দীর্ঘ সময় লাগত।
১৯৭০-এর দশক পর্যন্ত নির্মিত কম্পিউটারগুলিতে সামনে-প্যানেলে ম্যানুয়াল প্রোগ্রামিংয়ের জন্য সুইচ ছিল। কম্পিউটার প্রোগ্রামটি কাগজে লিখে রেফারেন্স হিসেবে রাখা হতো। একটি নির্দেশ ছিল চালু/বন্ধ অবস্থার একটি নির্দিষ্ট বিন্যাস। এই বিন্যাস সেট করার পরে, একটি এক্সিকিউট বোতাম চাপা হতো। এই প্রক্রিয়াটি বারবার করা হতো। কম্পিউটার প্রোগ্রামগুলো কাগজের ফিতা, পাঞ্চ কার্ড বা চৌম্বকীয় টেপের মাধ্যমে স্বয়ংক্রিয়ভাবে ইনপুটও দেওয়া হতো। মিডিয়াটি লোড করার পর, শুরু ঠিকানা সুইচের মাধ্যমে নির্ধারণ করা হতো এবং এক্সিকিউট বোতাম চাপা হতো।
সফটওয়্যার বিকাশে একটি বড় মাইলফলক ছিল ভেরি লার্জ স্কেল ইন্টিগ্রেশন (VLSI) বা অতি বৃহৎ পরিসরে একীভূতকৃত এমন সার্কিটের উদ্ভাবন (১৯৬৪)। দ্বিতীয় বিশ্বযুদ্ধের পর, টিউব-ভিত্তিক প্রযুক্তির পরিবর্তে ব্যবহার শুরু হয় পয়েন্ট-কন্ট্যাক্ট ট্রানজিস্টর (১৯৪৭) এবং পরে সার্কিট বোর্ডে বসানো বাইপোলার জাংশন ট্রানজিস্টর-এর (১৯৫০-এর দশকের শেষ)। ১৯৬০-এর দশকে, মহাকাশ শিল্প সার্কিট বোর্ডের বদলে ইন্টিগ্রেটেড সার্কিট চিপ ব্যবহার করতে শুরু করে।
রবার্ট নয়েস, ফেয়ারচাইল্ড সেমিকন্ডাক্টর (১৯৫৭) ও ইন্টেল (১৯৬৮) এর সহ-প্রতিষ্ঠাতা, ১৯৬৩ সালে ফিল্ড-ইফেক্ট ট্রানজিস্টর উৎপাদনের পদ্ধতিকে উন্নত করেন। লক্ষ্য ছিল একটি সেমিকন্ডাক্টর জংশনের বৈদ্যুতিক প্রতিরোধ ও পরিবাহিতা পরিবর্তন করা। প্রথমে, প্রাকৃতিক সিলিকেট খনিজ পদার্থকে সিমেন্স প্রক্রিয়ায় পালিশিলিকন রডে রূপান্তর করা হয়। তারপর Czochralski প্রক্রিয়ায় এই রডগুলোকে একক স্ফটিক সিলিকনে রূপান্তর করা হয়। এই স্ফটিককে পাতলা করে কাটা হয়, যাতে ওয়েফার সাবস্ট্রেট তৈরি হয়। তারপর ফটোলিথোগ্রাফির প্ল্যানার প্রক্রিয়ায় এই ওয়েফারে ইউনিপোলার ট্রানজিস্টর, ক্যাপাসিটর, ডায়োড ও রেজিস্টর যুক্ত করে একটি মেটাল–অক্সাইড–সেমিকন্ডাক্টর (MOS) ট্রানজিস্টরের ম্যাট্রিক্স তৈরি করা হয়। MOS ট্রানজিস্টরই ইন্টিগ্রেটেড সার্কিট চিপের প্রধান উপাদান।
প্রাথমিকভাবে, ইন্টিগ্রেটেড সার্কিট চিপগুলোর কার্যকারিতা উৎপাদনের সময় নির্ধারণ করা হতো। ১৯৬০-এর দশকে, বৈদ্যুতিক প্রবাহ নিয়ন্ত্রণ করার কাজটি রিড-অনলি মেমোরি (ROM) ম্যাট্রিক্স প্রোগ্রাম করার মাধ্যমে পরিচালিত হতে থাকে। এই ম্যাট্রিক্সটি ছিল একটি ফিউজের দুই-মাত্রিক বিন্যাসের মতো। নির্দেশাবলি স্থাপন করতে অপ্রয়োজনীয় সংযোগগুলো পুড়িয়ে ফেলা হতো। সংযোগের সংখ্যা এত বেশি ছিল যে, ফার্মওয়্যার প্রোগ্রামাররা অন্য একটি চিপে একটি প্রোগ্রাম লিখতেন যা পুড়িয়ে ফেলার কাজটি তদারকি করত। এই প্রযুক্তিকে বলা হতো প্রোগ্রামেবল ROM। ১৯৭১ সালে, ইন্টেল এই প্রোগ্রামটিকে সরাসরি চিপে স্থাপন করে এবং তার নাম রাখে Intel 4004 মাইক্রোপ্রসেসর।
আজকের দিনে "মাইক্রোপ্রসেসর" এবং "সেন্ট্রাল প্রসেসিং ইউনিট (CPU)" শব্দদুটি প্রায় সমার্থকভাবে ব্যবহৃত হয়। তবে, CPU-র আবির্ভাব মাইক্রোপ্রসেসরের আগে। যেমন, IBM System/360 (১৯৬৪) ছিল একটি CPU, যা তৈরি হতো সিরামিক সাবস্ট্রেটে পৃথক উপাদানবিশিষ্ট সার্কিট বোর্ড থেকে।
Intel 4004 (১৯৭১) ছিল একটি ৪-বিট মাইক্রোপ্রসেসর, যা Busicom ক্যালকুলেটরের জন্য ডিজাইন করা হয়েছিল। এর পাঁচ মাস পর, Intel 8008 নামে একটি ৮-বিট মাইক্রোপ্রসেসর প্রকাশ করে। বিল পেন্টজ স্যাক্রামেন্টো স্টেট-এ একটি দলকে নেতৃত্ব দেন, যারা Intel 8008 ব্যবহার করে প্রথম মাইক্রোকম্পিউটার তৈরি করেন—যার নাম ছিল Sac State 8008 (১৯৭২)। এর উদ্দেশ্য ছিল রোগীদের চিকিৎসা সংক্রান্ত তথ্য সংরক্ষণ করা। কম্পিউটারটি একটি ডিস্ক অপারেটিং সিস্টেম সমর্থন করত, যা একটি Memorex, ৩-মেগাবাইট, হার্ড ডিস্ক ড্রাইভ চালাতে পারত। এতে একটি রঙিন ডিসপ্লে ও কিবোর্ড ছিল, যা একক কনসোলে প্যাকেজ করা হয়েছিল। ডিস্ক অপারেটিং সিস্টেমটি প্রোগ্রাম করা হয়েছিল IBM-এর Basic Assembly Language (BAL) ব্যবহার করে। চিকিৎসা সংক্রান্ত রেকর্ড অ্যাপ্লিকেশনটি প্রোগ্রাম করা হয়েছিল BASIC ইন্টারপ্রেটার ব্যবহার করে। তবে, এই কম্পিউটারটি ছিল বিকাশগতভাবে একটি অচল পথ ছিল, কারণ এটি ছিল অত্যন্ত ব্যয়বহুল এবং একটি সরকারি বিশ্ববিদ্যালয়ের ল্যাবে একটি নির্দিষ্ট উদ্দেশ্যের জন্য তৈরি করা হয়েছিল। তবুও, এই প্রকল্পটি Intel 8080 (১৯৭৪) নির্দেশ সেটের বিকাশে অবদান রাখে।
১৯৭৮ সালে আধুনিক সফটওয়্যার ডেভেলপমেন্টের যুগ শুরু হয়, যখন ইন্টেল তাদের Intel 8080 মাইক্রোপ্রসেসর উন্নত করে Intel 8086 তৈরি করে। ইন্টেল এরপর Intel 8086 সহজীকরণ করে কম দামে তৈরি করে Intel 8088। IBM যখন ১৯৮১ সালে ব্যক্তিগত কম্পিউটার বাজারে প্রবেশ করে, তখন তারা Intel 8088 ব্যবহার করে। ব্যক্তিগত কম্পিউটারের জন্য ভোক্তাদের চাহিদা বাড়ার সঙ্গে সঙ্গে ইন্টেলের মাইক্রোপ্রসেসর উন্নয়নও ত্বরান্বিত হয়। এই ধারাবাহিক উন্নয়নের ধারাটিকে বলা হয় x86 সিরিজ।
x86 অ্যাসেম্বলি ভাষা এমন একটি নির্দেশনা পরিবার, যা পূর্ববর্তী সংস্করণের সঙ্গে সামঞ্জস্যপূর্ণ। পূর্ববর্তী মাইক্রোপ্রসেসরগুলিতে তৈরি মেশিন নির্দেশনাগুলো পরবর্তী উন্নয়নগুলোতেও সংরক্ষিত থাকে। এতে করে গ্রাহকরা নতুন কম্পিউটার কিনলেও আগের অ্যাপ্লিকেশন সফটওয়্যার আবার নতুন করে না কিনেই ব্যবহার করতে পারেন।
প্রধান নির্দেশনা বিভাগগুলো হলো:
VLSI সার্কিট প্রযুক্তি প্রোগ্রামিং পরিবেশকে উন্নত করেছে, যেখানে কম্পিউটার টার্মিনাল (১৯৯০-এর দশক পর্যন্ত) থেকে গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) কম্পিউটারে রূপান্তর ঘটে। কম্পিউটার টার্মিনাল ব্যবহারকারীদের একটি মাত্র শেলের মাধ্যমে কমান্ড-লাইন পরিবেশে প্রোগ্রাম লেখার সীমাবদ্ধতা তৈরি করত। ১৯৭০-এর দশকে টেক্সট-ভিত্তিক ইউজার ইন্টারফেসের মাধ্যমে পূর্ণ পর্দার সোর্স কোড এডিটিং সম্ভব হয়। যেকোনো প্রযুক্তি ব্যবহৃত হোক না কেন, মূল লক্ষ্য থাকে একটি প্রোগ্রামিং ভাষায় প্রোগ্রাম লেখা।