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

আধুনিক কম্পিউটিংয়ের কেন্দ্রবিন্দুতে একটি সহজ প্রশ্ন আছে: কি কারণে একটি মেশিন বারবার নতুন করে তৈরি না করে অনেক ভিন্ন কাজ করতে সক্ষম হলো? প্রা্চীন ইলেকট্রনিক কম্পিউটার দ্রুত হিসাব করতে পারত, কিন্তু “কাজ বদলানো” প্রায়শই মানে ছিল যন্ত্রের সেট‑আপ শারীরিকভাবে বদলানো। স্টোরড-প্রোগ্রাম ধারণা সেই মোড়ল যেখানে কম্পিউটারগুলি প্রকৃতই প্রোগ্রামেবল হয়ে উঠল।
একটি স্টোরড-প্রোগ্রাম কম্পিউটার একই ধরনের অভ্যন্তরীণ মেমোরিতে কাজের নির্দেশনা (প্রোগ্রাম) এবং প্রোগ্রাম যে ডেটার উপর কাজ করে তা রাখে। হার্ডওয়্যার পুনঃসংযোগ বা প্যানেল ম্যানুয়ালি কনফিগার করার বদলে আপনি মেমরিতে নতুন নির্দেশনাসেট লোড করে অন্য কাজ চালাতে পারেন।
এটি এখন সাধারণ মনে হতে পারে, কিন্তু এটি একটি গভীর পরিবর্তন:
এটি কেবল ঐতিহাসিক কৌতুক নয়। স্টোরড-প্রোগ্রাম ধারণাই ব্যাখ্যা করে কেন “সফটওয়্যার” হার্ডওয়্যার থেকে আলাদা একটি জিনিস হিসেবে আছে, এবং কেন আজ একটি ডিভাইসের আপডেট করা হলে চিপ বদল না করেই নতুন ফিচার আনতে পারে।
পরবর্তী অংশগুলোতে আমরা দেখাবো প্রাচীন কম্পিউটারগুলো কী সমস্যার সম্মুখীন হয়েছিল, স্টোরড-প্রোগ্রাম পদ্ধতি কী বদলে দিয়েছে, কোন দল ও নথি (EDVAC রিপোর্টসহ) ধারণাটি পরিষ্কার করেছে, এবং কিভাবে “ভন-নিউম্যান আর্কিটেকচার” একটি বহুল ব্যবহৃত নকশাকে বোঝাতে শুরু করল।
যদিও জন ভন নিউম্যানের নাম স্টোরড-প্রোগ্রাম কম্পিউটিংয়ের সঙ্গে দৃঢ়ভাবে জড়িত, ক্রেডিট একটি বিস্তৃত দলের ও যুগের মধ্যে ভাগ করা। অনেক গবেষক একই সময়ে অনুরূপ ধারণায় convergence করছিল—এই প্রবন্ধ সেই প্রসঙ্গকে চোখে রাখে, কারণ দলগত প্রচেষ্টা বোঝা সহজ করে দেয় কিভাবে ধারণাটি দ্রুত ছড়িয়ে পড়ে এবং ডিফল্ট মডেল হয়ে ওঠে।
স্টোরড-প্রোগ্রাম ধারণার আগে অনেক প্রাচীন কম্পিউটার এখনকার মত “সফটওয়্যার চালাত” না। এগুলো চমৎকার গতিতে হিসাব করতে পারত, কিন্তু কী করতে হবে বলতে প্রায়শই মেশিনটিই শারীরিকভাবে বদলাতে হতো।
একটি প্রচলিত পদ্ধতি ছিল প্লাগবোর্ড, প্যাচ কেবল, এবং সুইচ প্যানেল ব্যবহার। অপারেটররা সকেটের মধ্যে ক্যাবল যুক্ত করে, সুইচ সারি সেট করে, এবং মাঝে মাঝে টাইমিং ইউনিট সামঞ্জস্য করত যাতে সিগন্যাল সঠিক ক্রমে পৌঁছায়। “প্রোগ্রাম” ছিল ফাইল নয়—এটি একটি অস্থায়ী ওয়্যারিং ডায়াগ্রাম।
এই পদ্ধতিটি কার্যকর ছিল, কিন্তু এতে লুকানো খরচ ছিল: প্রতিটি নতুন কাজ একটি ছোট প্রকৌশল প্রকল্পে পরিণত হতো। অপারেশনগুলোর ক্রম বদলাতে দরকার হলে শত শত সংযোগ জাম্প করতে হতো। একটি ভুল সংযোগ সূক্ষ্ম ত্রুটি আনতে পারত, যা খুঁজে বের করা কঠিন—কারণ লজিক হার্ডওয়্যারে ছড়িয়ে ছিল, লিখিত পদক্ষেপে নয়।
রিওয়্যারিংতে ঘণ্টা বা দিন লাগত, বিশেষ করে যদি মেশিনটি সতর্কভাবে পাওয়ারডাউন করে, রিওয়্যার করা ও পরীক্ষা করতে হতো। ফলে নমনীয়তা সীমিত ছিল: এসব মেশিন দীর্ঘ সময় একই ধরনের গণনাই করতো কারণ কাজ বদলানো এতই পরিপ্রেক্ষিত ছিল।
ধরা যাক একটি মেশিন গুলি-তালিকা (artillery firing tables) তৈরির জন্য সেট করা—দীর্ঘ, পুনরাবৃত্তিমূলক গণনা একটি স্থির সূত্র দিয়ে। যদি গবেষকরা একই মেশিন দিয়ে জনগণনার জন্য বা সম্ভাব্যতা ট্যাবুলেশনের মতো ভিন্ন কাজ করতে চায়, তা দ্রুত “প্রোগ্রাম সম্পাদনা করে পুনরায় চালানো” ছিল না। অপারেশন ক্রম, মধ্যবর্তী স্টোরেজ ধাপ, এবং শর্তচিহ্ন সবই আলাদা হতে পারে—ফলে পুরো প্লাগবোর্ড পুনরায় ডিজাইন ও যাচাই করতে হতো।
এই দুনিই ছিল সেই উদ্দেশ্য থেকে পালানোর জন্য স্টোরড-প্রোগ্রাম কম্পিউটার ডিজাইন করা হয়েছে।
স্টোরড-প্রোগ্রাম কম্পিউটার এমন একটি মেশিন যেখানে নির্দেশনাগুলো (প্রোগ্রাম) একই ওয়ার্কিং মেমোরিতেই থাকে যেখানে প্রোগ্রামটি ব্যবহৃত ডেটা রাখা আছে। অর্থাৎ, কম্পিউটার “কি করবে” এবং “কিসের উপর কাজ করবে” আলাদা ভাবে বিবেচনা করে না—দুটোই মেমোরিতে বিটের ধাঁচে সংরক্ষিত।
প্রারম্ভিক কম্পিউটার pionearরা যখন মেমরি বলত, তারা বোঝাত কম্পিউটারের দ্রুত, সরাসরি ব্যবহারযোগ্য অভ্যন্তরীণ স্টোরেজ—আজকের RAM-র মতো সেই জায়গা যেখানে প্রসেসর দ্রুত পড়া ও লেখা করতে পারে।
এটি দীর্ঘমেয়াদি স্টোরেজ (হার্থ ড্রাইভ/SSD) থেকে আলাদা। ড্রাইভ পওয়ার বন্ধ থাকা অবস্থায় ফাইল রাখে, কিন্তু সেটা প্রসেসরের পরবর্তী নির্দেশ ফেচ করার এবং মধ্যবর্তী ফলাফল আপডেট করার জন্য তাত্ক্ষণিক স্ক্র্যাচপ্যাড নয়।
একবার নির্দেশনাগুলো মেমোরিতে থাকলে, কাজ বদলানো সহজ হয়: আপনি মেমরিতে নতুন প্রোগ্রাম লোড করে চালাতে পারেন, হার্ডওয়্যার রিলেইন, রিওয়্যার বা শারীরিক কনফিগারেশন ছাড়াই। একই সাধারণ-উদ্দেশ্য মেশিন সকালে পে-রোল করতে পারে এবং বিকেলে ব্যালিস্টিক্স গণনা—কারণ কাজের “কীভাবে” কেবল বিটের একটি সেট যা বদলানো যায়।
একটি রান্নাঘর কল্পনা করুন যেখানে রেসিপি এবং উপকরণ একই প্যান্ট্রিতে আছে। রাঁধুনি (প্রসেসর) বারবার প্যান্ট্রিতে (মেমরি) গিয়ে পরবর্তী রেসিপির ধাপ (নির্দেশনা) পড়ে এবং উপকরণ (ডেটা) নেয় বা আপডেট করে।
ভিন্ন একটি খাবার বানাতে চাইলে আপনি রান্নাঘর পুনরায় নকশা করেন না—শুধু অন্য রেসিপি ব্যবহার করেন।
জন ভন নিউম্যান কম্পিউটার “আবিষ্কার” করেননি, এবং তিনি একা স্টোরড-প্রোগ্রাম ধারণা তৈরি করেননি। তিনি যা করেছেন—দক্ষভাবে—হল একটি প্রতিশ্রুতিশীল ধারণাকে পরিষ্কার নির্দেশে পরিণত করে অন্য মানুষকে বোঝানো এবং পুনরুত্পাদনের মত করে সচেতনভাবে উপস্থাপন করা।
ভন নিউম্যান ছিলেন তৎকালীন যুদ্ধকালীন ও উত্তর-যুদ্ধকালীন কম্পিউটিং প্রকল্পগুলিতে গভীরভাবে জড়িত, দলগুলোকে পরামর্শ দিতেন এবং প্রাথমিক নকশার যৌক্তিক কাঠামো তীক্ষ্ণ করতেন। জটিল প্রযুক্তিগত পছন্দগুলো সাধারণ ও সংগঠিত ভাষায় বোঝানোর তার দক্ষতা গুরুত্বপূর্ণ ছিল, কারণ প্রারম্ভিক ইলেকট্রনিক কম্পিউটিং দ্রুত অগ্রসর হচ্ছিল এবং একাধিক দল একই সমস্যার সমাধান করছিল।
আরও গুরুত্বপূর্ণ, তিনি কীভাবে প্রোগ্রাম নির্দেশনাগুলো একই মেমোরিতে রাখা যেতে পারে তা সম্পর্কে প্রভাবশালী বর্ণনা লিখেছিলেন ও ছড়িয়েছিলেন। সেই স্পষ্ট ফ্রেমিং অন্যদেরকে ঐ পদ্ধতি আলোচনা, শেখানো ও অনুকরণে সহজ করল।
কেউই প্রথম আদ্যক্ষর ধারণাটির মালিকের নাম নিয়ে স্থায়ীভাবে পিচ্ছিল করে না, বরং সেই ব্যক্তির নাম টিকে থাকে যার বর্ণনা রেফারেন্স পয়েন্ট হয়ে ওঠে। ভন নিউম্যানের নথিপত্র প্লবিত উৎস ছিল—তাই পরে পাঠকরা প্রাকৃতিকভাবেই “স্টোরড-প্রোগ্রাম” বিন্যাসটিকে তার সাথে জুড়ে দিল।
এই লেবেল ইতিহাসকে সরল করে—“ভন-নিউম্যান আর্কিটেকচার” বলা সহজ—তবে এতে বাস্তবেই কি ঘটেছিল তা ঝাপসা হতে পারে।
প্রারম্ভিক ইলেকট্রনিক কম্পিউটিং গণিতজ্ঞ, ইঞ্জিনিয়ার ও প্রোগ্রামারদের মিলিত প্রচেষ্টা ছিল। স্টোরড-প্রোগ্রাম ধারণা আলোচনা, খসড়া, প্রোটোটাইপ ও সংশোধনের মাধ্যমে পরিপক্ক হলো। ভন নিউম্যানের স্থায়ী ভূমিকা ছিল ওই ধারণাটি সঙ্কীর্ণ করে প্রচারিত করা—স্বতন্ত্রভাবে উদ্ভাবন নয়।
EDVAC (Electronic Discrete Variable Automatic Computer) ছিল সেই প্রাথমিক পরো-যুদ্ধের প্রকল্পগুলোর একটি, যা “একবার-প্রস্তুত” মেশিন ছেড়ে আরও সাধারণ-উদ্দেশ্য ডিজাইনের দিকে এগিয়েছিল। হার্ডওয়্যার চেষ্টা সমতুল্যভাবে গুরুত্বপূর্ণ ছিল, কিন্তু নকশার ধারণাগুলো স্পষ্টভাবে লিখে রাখার সিদ্ধান্তও সমানভাবে গুরুত্বপূর্ণ ছিল। তখনো কম্পিউটার নির্মাণ পরীক্ষামূলক প্রকৌশলে সীমাবদ্ধ ছিল—জ্ঞান ল্যাব নোটবুক, মিটিং ও কয়েকজন বিশেষজ্ঞের মস্তিষ্কে আবদ্ধ থাকত। একটি রিপোর্ট ঐ ছড়িয়ে ছিটিয়ে থাকা অন্তর্দৃষ্টি অন্য দলগুলোর জন্য আলোচনার, সমালোচনার এবং পুনব্যবহারের যোগ্য করে তুলতে পারে।
First Draft of a Report on the EDVAC (সাধারণত “EDVAC রিপোর্ট” বলা হয়) ধারণাটিকে সহজভাবে উপস্থাপন করল: একটি কম্পিউটার উচিত যে প্রোগ্রাম নির্দেশনাগুলো একই ধরনের অভ্যন্তরীণ মেমোরিতে ডেটার সাথে রাখে। সেই মেমরি শুধু সংখ্যাগুলো ধরে রাখার জায়গা নয়—এটি সেই ধাপগুলোও ধরে রাখে যা মেশিনকে পরবর্তী কী করতে হবে তা বলে দেবে।
এই ফ্রেমিং একটি মেশিনকে নির্দিষ্ট‑উদ্দেশ্য যন্ত্র নয় বরং একটি সাধারণ মেশিন হিসেবে বোধ করায়—মেমরির মধ্যে যা আছে তা বদলে দিয়ে মেশিনকে পুনঃকাজে লাগানো যায়।
ধারণাটির বাইরে রিপোর্টটি মানুষের মধ্যে কম্পিউটার নিয়ে কথা বলার উপায়ও মানকীভূত করল: মেমরি, কন্ট্রোল, অ্যারিথমেটিক, এবং ইনপুট/আউটপুট ভিন্ন কার্যকরী অংশ হিসেবে দেখা—এগুলো একসাথে কাজ করে। একটি সাধারণ শব্দভাণ্ডার ও বিস্তৃত পাঠকগোষ্ঠীর জন্য লিখিত বর্ণনা EDVAC-কে ব্যাখ্যা করা ছাড়াও বিস্তৃত ক্ষেত্রকে স্টোরড-প্রোগ্রাম কম্পিউটার বানানোর, তুলনা করার ও উন্নত করার একটি সাধারণ মানসিক মডেল দিল।
“কে স্টোরড-প্রোগ্রাম কম্পিউটার উদ্ভাবন করল?” বলে একটি একক নাম ভাবাটা সহজ, কিন্তু বাস্তবে বিজ্ঞান ও প্রকৌশল কমই একাই কাজ করে। ধারণাগুলো প্রায়ই একসাথে বিকশিত হয়, আলোচনা ও প্রমাণের মাধ্যমে পরিপক্ক হয়, এবং তখনই তা বিশ্বাসযোগ্য হয়ে ওঠে যখন সেটি কাজ করা হার্ডওয়্যারে প্রদর্শিত হয়।
জন ভন নিউম্যান স্টোরড-প্রোগ্রাম ধারণার সঙ্গে দৃঢ়ভাবে জড়িত, তবে শুরুতেই অনেক লোক ও দল ছিল:
স্টোরড-প্রোগ্রাম কম্পিউটার একটি একক অন্তর্দৃষ্টির ফল নয়। এটি (1) নির্দেশনাগুলোকে ডেটার মতো মেমোরিতে রাখার ধারণা, (2) নির্ভরযোগ্য মেমরি ও কন্ট্রোল ইউনিট নির্মাণের প্রকৌশল, এবং (3) ডিজাইনকে ব্যবহারযোগ্য করে তোলার প্রোগ্রামিং আচার-ব্যবহার—এসবের সমন্বয়। বিভিন্ন মানুষ বিভিন্ন অংশে অবদান রেখেছেন।
আরেকটি কারণ যার ফলে ক্রেডিট ভাগ করা হয়: কোনো ধারণা প্রস্তাব করাটা এবং একটি দৈনন্দিন কাজ করা মেশিন বানানোটা একই নয়। প্রথমদিকে রিপোর্ট ও আলোচনা ধারণাটিকে পরিষ্কার করেছে; প্রাথমিক প্রোটোটাইপ ও উৎপাদন সিস্টেমগুলো দেখিয়েছে যে তা কার্যকর। বিচক্ষণ ইতিহাস উভয় ধরনের অবদানের মর্যাদা দেয়—একটি সরল “প্রথম আবিষ্কারকারী” সিদ্ধান্ত চাপিয়ে না দিয়ে।
মানুষ যখন বলে “ভন-নিউম্যান আর্কিটেকচার,” তারা সাধারণত একটি সহজ, শিক্ষামূলক মডেল নির্দেশ করে যে কিভাবে একটি স্টোরড-প্রোগ্রাম কম্পিউটার সংগঠিত। এটা কোনো ব্র্যান্ড নয় বা একক ঐতিহাসিক মেশিন নয়—এটি একটি সুবিধাজনক লেবেল যা অনেক কম্পিউটারে একভাবে উপস্থিত হয়।
ধারণাগতভাবে ছবি দেখতে এই রকম:
কীটিগুলো হলো CPU-র জন্য আলাদা পদ্মস্থল নেই যে ‘প্রোগ্রাম’ আর ‘নম্বর’—এগুলো মেমোরি থেকে টেনে নেয়।
CPU একটি প্রোগ্রাম চালাতে প্রচলিতভাবে একটি লুপ পুনরাবৃত্তি করে, যাকে বলা হয় fetch–decode–execute:
এটি সরলীকৃত বর্ণনা, তবে মূলে রাখতে হবে: প্রোগ্রামটি মেমোরিতে সংরক্ষিত নির্দেশনাসূচক একটি সিকোয়েন্স, এবং CPU সেগুলো ধাপে ধাপে অনুসরণ করে।
নির্দেশনা ও ডেটা একই মেমোরিতে রাখলে কম্পিউটার খুবই ব্যবহারযোগ্যভাবে সাধারণ-উদ্দেশ্য হয়ে ওঠে:
একটি স্টোরড-প্রোগ্রাম কম্পিউটার সেই ধরণের মেশিন যেখানে প্রোগ্রাম নির্দেশনাগুলো একই অভ্যন্তরীণ মেমোরিতেই রাখা হয় যাকে ওই নির্দেশনাগুলো প্রক্রিয়াকরণ করে—অর্থাৎ কাজ বদলাতে আপনাকে মেশিনের হার্ডওয়্যার পুনরায় জোড়া লাগাতে হবে না, বরং মেমরিতে অন্য একটি নির্দেশনাসেট লোড করে চালাতে হবে।
স্টোরড-প্রোগ্রামের আগের যুগে অনেক মেশিনই প্লাগবোর্ড, প্যাচ কেবল, এবং সুইচ সেটিংস দিয়েই “প্রোগ্রাম” করা হতো। অপারেশনগুলোর ক্রম বদলাতে ঘণ্টা কিংবা দিনের পর দিন রিওয়্যারিং ও রিটেস্টিং লাগত, এবং একটি ভুল সংযোগ সহজে খুঁজে পাওয়া যেত না।
এখানে “মেমরি” বলতে বোঝানো হচ্ছে কম্পিউটারের সেই দ্রুত কাজের স্টোরেজ (আধুনিক RAM-এর মত) যেখানে CPU চলাকালে বারবার পড়া ও লেখা করে। এটা দীর্ঘমেয়াদি স্টোরেজ (ডিস্ক/SSD) থেকে আলাদা—ডিস্ক শক্তি বন্ধ থাকলেও ফাইল রাখে, কিন্তু CPU-র তাত্ক্ষণিক কাজের জন্য প্রয়োজনীয় দ্রুত প্যাড-স্পেস নয়।
EDVAC রিপোর্টে স্পষ্টভাবে বলা হয়েছিল যে নির্দেশনা ও ডেটা অভ্যন্তরীণ মেমোরিতে ভাগ করে রাখা যেতে পারে, এবং রিপোর্টটি কম্পিউটারের অংশগুলো (মেমরি, কন্ট্রোল, অ্যারিথমেটিক, ইনপুট/আউটপুট) নিয়ে একটি সাধারণ শব্দভাণ্ডার তৈরি করেছিল। এই পরিষ্কার ব্যাখ্যাটি অন্য দলগুলোকে আলোচনা করতে, তুলনা করতে এবং অনুরূপ সিস্টেম তৈরি করতে দ্রুত সাহায্য করেছিল।
জন ভন নিউম্যানের নামটি মুলতঃ তার বর্ণনা ও নথিপত্রের ব্যাপক প্রচারের কারণে বেশি প্রচলিত—তার মানে এই নয় যে তিনি একা সম্পূর্ণভাবে দৃষ্টি প্রবর্তন করেছিলেন। স্টোরড-প্রোগ্রাম ধারণা একটি বৃহত্তর প্ল্যাটফর্মের মধ্য দিয়ে গড়ে উঠেছিল—ইঞ্জিনিয়ার, গণিতজ্ঞ, এবং তৎকালীন প্রোগ্রামারদের সংমিশ্রণে।
“ভন-নিউম্যান আর্কিটেকচার” সাধারণত এমন একটি মডেলকে বোঝায় যেখানে:
এটি একটি আরামদায়ক শিক্ষামূলক লেবেল—একটি একক ঐতিহাসিক মেশিন বা একমাত্র উদ্ভাবকের দাবি নয়।
একটি ভন-নিউম্যান-ধাঁচের ক্ষেত্রে নির্দেশনা ও ডেটা একই মেমোরিতে থাকে (সাধারণত CPU-তে আসার জন্য একই প্রধান পথ ভাগ করে)। একটি হার্ভার্ড-ধাঁচের ক্ষেত্রে নির্দেশনার স্টোরেজ আলাদা এবং প্রায়শই আলাদা পথ ব্যবহার করে। আধুনিক অনেক সিস্টেমে উভয়ের মিশ্রিত রূপ দেখা যায়—যেমন সফটওয়্যারের জন্য একক ঠিকানা স্থান, কিন্তু সামনের দিকে আলাদা I-cache এবং D-cache।
“ভন-নিউম্যান বটলনেক” হল সেই কর্মক্ষমতার সীমা যখন CPU এবং মেমোরি একই সংকীর্ণ পথ ভাগ করে নেয়—CPU দ্রুত কাজ করতে চাইলেও মেমোরি থেকে তথ্য দ্রুত না আসলে CPU অপেক্ষা করে যায়। সাধারণ হ্রাসকরণ পদ্ধতিগুলো হল ক্যাশ, প্রিফেচিং, এবং প্যারালেলিজম (একাধিক কোর, গাণিতিক ও মেমরি অ্যাক্সেস ওভারল্যাপিং) —এগুলো অপেক্ষা কমায়, কিন্তু মূল সীমা পুরোপুরি মুছে দেয় না।
কারণ নির্দেশনাগুলোই হলো ডেটা হিসেবে মেমোরিতে থাকা তথ্য, তাই আপনি হার্ডওয়্যার বদল না করেই সফটওয়্যার বদলে আচরণ আপডেট করতে পারেন। এজন্য একই ফোন বা ল্যাপটপে অনেক ধরনের অ্যাপ চালানো যায়, এবং ফার্মওয়্যার/OS আপডেটের মাধ্যমে নতুন ফিচার যোগ করা সম্ভব হয়—চিপ ডিজাইন পরিবর্তন না করেই।
কারণ নির্দেশনাগুলো মেমোরিতে ডেটা হিসেবে থাকে, হামলাকারীরা মাঝে মাঝে অবিশ্বাস্য ডেটাকে নির্বাহী কোড হিসেবে চালানোর চেষ্টা করে (যেমন কোড ইনজেকশন)। আধুনিক প্রতিরোধমূলক ব্যবস্থা হল মেমোরি প্রোটেকশন (নন-এক্সিকিউটেবল রিজিওন), কোড সাইনিং, এবং অন্যান্য কন্ট্রোল—যেগুলো “পাঠযোগ্য ডেটা” এবং “চালানো যেতে পারে এমন কোড” আলাদা রাখতে সাহায্য করে।