ধরেন, কোডে লিখলাম:
x = 5
কয়েক মিলিসেকেন্ড পরে আরেকটা লাইন রান হলো:
print(x)
কম্পিউটার ঠিকই ৫ প্রিন্ট করল।
এখন প্রশ্ন হলো — এই কয়েক মিলিসেকেন্ড ধরে ৫ সংখ্যাটা ছিল কোথায়?
Screen-এ তো ছিল না। CPU-ও সারাক্ষণ ধরে বসে ছিল না। তাহলে? সিলিকন আর কপারের একটা physical board-এর ভেতরে ৫ সংখ্যাটা আসলে কোথায় ছিল?
কেন এই সিরিজ
এই series পড়ে আপনি নতুন CPU design করতে পারবেন না। গাড়ির engine বোঝা মানেই কেউ Toyota-র কারখানা খুলে বসে না।
কিন্তু গাড়ি হঠাৎ থেমে গেলে, বা hood-এর নিচ থেকে ধোঁয়া উঠতে শুরু করলে — অন্তত বুঝবেন সমস্যাটা কোন দিকে খুঁজতে হবে।
আপনি হয়তো এমন bug দেখেছেন:
- একই API local-এ ২০ms, production-এ ২s সময় নিচ্ছে
- সার্ভার হঠাৎ "Out of Memory" বলে ক্র্যাশ করেছে
- Chrome-এর একটা tab ৩GB RAM খেয়ে বসে আছে
- 502 Bad Gateway। কোন gateway, কোথায়, কেন bad — কিচ্ছু বুঝা যাচ্ছে না
এগুলোর প্রত্যেকটার সমাধান এই series-এ দেব — এমন কোনো প্রতিশ্রুতি দিচ্ছি না। আমার ওই দক্ষতা বা জ্ঞান কোনোটাই এখনো হয়নি। কিন্তু এগুলোর পেছনে যে পৃথিবীটা কাজ করছে, সেটা আপনার কাছে অনেক কম রহস্যময় হয়ে যাবে বলে আশা করি।
আজকালকার high-level language-এ কোড লেখার সময় আমরা পেছনের mechanism নিয়ে চিন্তা করি না। Browser, runtime, framework — সব পর্দার আড়ালে সামলে নেয়। এই আড়াল করাটাকে বলে abstraction — জটিল mechanism-কে একটা সহজ interface-এর পেছনে লুকিয়ে ফেলা।
Abstraction আমাদের অসাধারণ productive করে। কিন্তু এর একটা দামও আছে। প্রতিটা abstraction-এর নিচে আরেকটা abstraction লুকিয়ে থাকে। কোনো একদিন যদি নিচের কোনো layer ভেঙে পড়ে — তখন সেখানে কী আছে সেটা মোটামুটি জানা থাকা দরকার। অন্তত একজন ভালো সিএসই পড়ুয়া ছাত্রের ন্যূনতম পরিষ্কার ধারণা রাখা উচিত আমার মতে, হোক না যুগ এখন Artificial Intelligence এর।
বাংলাদেশের বিশ্ববিদ্যালয়ে computer science-এর hardware-related কোর্সগুলো বেশ কাঠখোট্টা। অন্তত আমার নিজের অভিজ্ঞতা তো এমনই ছিল। বইয়ে SR Latch, Virtual Memory, Cache — সব ছিল। স্যারেরাও কেমন যেন গৎবাঁধা উপায়ে পড়াতেন, মুখস্থ করা যেতো, কিন্তু আদৌ এগুলো কি বুঝায়, কানেকশন কই, আগামাথা খুঁজে পেতাম না। কিন্তু বাসায় ফিরে যখন Python-এ x = 5 লিখতাম, মনে হতো coding আর hardware দুইটা দুই জগতের বাসিন্দা।
অনেক পরে বুঝেছি — এগুলো আলাদা বিষয় না। একই গল্পের দুই প্রান্ত। এই series এ সেই মাঝখানের অংশটা দেখানোর চেষ্টা করবো।
মূল চরিত্র কে?
এই series-এ hardware, OS, compiler — কোনোটাই মূল চরিত্র না।
মূল চরিত্র একটাই — information।
একটা bit। একটা সংখ্যা। একটা keystroke। একটা instruction।
প্রতিটা article-এ আমরা এই information-এর পিছু নেব। এখন সে কোথায় আছে? কে তাকে ধরেছে? কীসে রূপান্তর হচ্ছে? পরে কোথায় যাচ্ছে?
এখানে যন্ত্র শুধু গল্পের background। মূল গল্পটা information-এর।
রোডম্যাপ
পুরো যাত্রাটা ৮টা article-এ ভাগ করা:
শেষে আপনি এই প্রশ্নগুলোর উত্তর দিতে পারবেন
- RAM আসলে কী?
- CPU কি সত্যিই একসাথে অনেক কাজ করে?
- Variable কম্পিউটারের কোথায় থাকে?
- Cache কেন এত দ্রুত?
- Compiler আসলে কী বানায়?
- Keyboard চাপলে screen-এ অক্ষর আসে কীভাবে?
- Power চলে গেলে RAM কেন সব ভুলে যায়?
একটা সময় আমি বুঝেছিলাম — আমি আসলে Python, C বা JavaScript শিখছি না। শিখছি abstraction-এর স্তরগুলো।
প্রতিটা নতুন language আমাকে আরও সমৃদ্ধ করছে, কিন্তু একই সঙ্গে মেশিন থেকে আরও দূরে সরিয়ে দিচ্ছে।
কীভাবে পড়বেন
একটা অনুরোধ।
কোথাও কিছু মুখস্থ করার চেষ্টা করবেন না।
আমি চাই, আপনি প্রতিটা article পড়ে মাথার ভেতরে একটা ছোট animation দেখতে পান।
কোথাও অতিরিক্ত গভীরে যাব না। যেখানে concept-টা অতিরিক্ত academic হয়ে যাচ্ছে বলে মনে হবে — সেখানে থামব, আর ইশারা দিয়ে দেব যে, "বস, এইটুকু জানলেই আপাতত চলবে।"
নতুন কোনো technical term দেখলে সেটার ওপর cursor রাখুন (মোবাইলে tap করুন) — যেমন এই thread। একটা ছোট popup সহজ ভাষায় সেটার মানে বুঝিয়ে দেবে।
কোথাও অতিরিক্ত গভীরে যাব না। তাহলে এবার software-এর সব আরাম-আয়েশ ছেড়ে একেবারে নিচে নেমে যাই।
Variable না।
Object না।
Function না।
Operating System-ও না।
শুধু silicon।
শুধু তার।
শুধু voltage।
সেখান থেকেই পুরো গল্পটা শুরু করা যাক।
একটা সৎ স্বীকারোক্তি
এই সিরিজে অনেক কিছু ইচ্ছাকৃতভাবে সহজ করে উপস্থাপন করা হয়েছে।
Computer Architecture, Operating System, Compiler—এর প্রতিটিই এক একটি বিশাল ও স্বাধীন বিষয়। এগুলো নিয়ে বিশ্ববিদ্যালয়ে একাধিক সেমিস্টার ধরে পড়ানো হয়, হাজার পাতার মোটা মোটা বই লেখা হয়, আর প্রতিনিয়ত নতুন গবেষণা চলছে। কয়েকটি আর্টিকেলে সেই পুরো মহাসমুদ্র তুলে আনা সম্ভব নয়, আর সেই চেষ্টাও করা হয়নি।
আমার মূল উদ্দেশ্য হলো—কম্পিউটিংয়ের প্রতিটা স্তরের (Layer) মূল আইডিয়া বা মেকানিক্সটা যেন একজন পাঠক খুব সহজে একটা স্পষ্ট Mental Model হিসেবে দাঁড় করাতে পারেন। আর সেই স্পষ্টতা ও সহজবোধ্যতার খাতিরে অনেক জায়গায় জটিল বিষয়গুলোকে কিছুটা সরলীকরণ করতে হয়েছে। যেখানে মনে হয়েছে অতিরিক্ত জটিলতা মূল গল্প পড়ার অভিজ্ঞতাকে ব্যাহত করবে, সেখানে সূক্ষ্ম অনেক ডিটেইলস এড়িয়ে যাওয়া হয়েছে।
এর মানে এই নয় যে আপনাকে বিভ্রান্ত করার চেষ্টা করা হয়েছে। বিষয়গুলোকে এমনভাবে সাজানো হয়েছে যেন বেসিক ধারণাটা একদম সঠিক থাকে, কিন্তু পড়তে সহজ হয়। তবুও, সরলীকরণ করতে গিয়ে কোথাও কোনো টেকনিক্যাল ভুল থেকে গেলে বা আপনার চোখে পড়লে অবশ্যই জানাবেন—সংশোধন করে নেওয়া হবে।
যদি কোনো নির্দিষ্ট স্তর বা বিষয় আপনার মধ্যে বাড়তি আগ্রহ তৈরি করে, তবে সিরিজের শেষে দারুণ কিছু বই ও রিসোর্সের তালিকা দেওয়া থাকবে—যা আপনাকে এই বিষয়ের গভীরে নিয়ে যেতে সাহায্য করবে।