সরাসরি পর্বে যান
পর্ব ০১ · ৫৯-এর মধ্যে · মডিউল ১

JavaScript কেন? ব্রাউজার থেকে সার্ভার — এক ভাষা, পুরো ওয়েব

Why JavaScript? From the Browser to the Server — One Language for the Whole Web

Taught in Bangla, this lesson explains why JavaScript matters: it is the only language every browser runs natively, and since Node.js it also powers servers, desktop and mobile apps. It covers the language's ten-day birth at Netscape, ECMAScript and ES2015, how V8 and JIT made it fast, an honest comparison with Python, Java and C++, career paths and the course roadmap.

এই পর্বে যা শিখবেন

  • একটি বোতামে ক্লিক থেকে পাতা বদলানো পর্যন্ত — JavaScript ভেতরে কী কী করে
  • JavaScript আজ কোথায় কোথায় চলে: ব্রাউজার, সার্ভার, মোবাইল, ডেস্কটপ, edge আর ছোট যন্ত্রে
  • Netscape থেকে ECMAScript, ES4-এর ব্যর্থতা থেকে ES2015 — ইতিহাসটি কেন আজও গুরুত্বপূর্ণ
  • JavaScript-এর আসল শক্তি আর দুর্বলতা — Python, Java, C/C++-এর সাথে সৎ তুলনা
  • এই কোর্সের ৮টি মডিউলের মানচিত্র, আর AI-এর যুগে কীভাবে শিখলে সবচেয়ে কাজে লাগবে

১ · স্বাগতম — এই কোর্স কাদের জন্য, কীভাবে চলে

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

আগে কোনো প্রোগ্রামিং জানার দরকার নেই। অনেকের কাছে JavaScript-ই প্রথম ভাষা, তাই আমরা একদম শুরু থেকে শুরু করব। যাঁরা আমাদের C, C++, Python বা Java কোর্স থেকে এসেছেন, তাঁদের জন্য মাঝে মাঝে “C/C++/Python/Java জানলে” নামে একটি ছোট বাক্স থাকবে। ওই ভাষাগুলো না জানলে বাক্সটি নিশ্চিন্তে বাদ দিন।

কোর্সে ৮টি মডিউলে মোট ৫৯টি পর্ব। প্রতিটি পর্ব একই ছাঁচে সাজানো, যাতে কয়েকটি পর্ব পড়ার পর আপনি জানেন কোথায় কী পাবেন:

কনসেপ্ট আগে

প্রথমে “কেন” আর “ভেতরে কী ঘটে” — তারপর কোড। মুখস্থ নয়, বোঝা। বাংলাদেশের চেনা উদাহরণ দিয়ে ব্যাখ্যা।

উপমা, ছবি, ইতিহাস

ধাপে ধাপে ডায়াগ্রাম

“পরে” বোতাম চেপে দেখবেন কোড, ডেটা বা ব্রাউজারের ভেতরের প্রক্রিয়া কীভাবে এগোয় — স্থির ছবিতে যা বোঝানো যায় না।

প্রতি পর্বে অন্তত ৩টি

পাতাতেই চালানো যায় এমন কোড

ছোট, এক-ধারণার কোড — “Run” চাপলে এই পাতার ভেতরেই একটি নিরাপদ জায়গায় চলে। কিছু ইনস্টল না করেও শুরু করা যায়।

আধুনিক JavaScript

কুইজ, পরীক্ষা, সার্টিফিকেট

প্রতি পর্বের শেষে কুইজ আর শব্দকোষ। ড্যাশবোর্ডে মডিউল টেস্ট আর ফাইনাল পরীক্ষা দিয়ে সার্টিফিকেট নিতে পারবেন।

সম্পূর্ণ বিনামূল্যে

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

এই কোর্সের প্রতিজ্ঞা

আমরা আপনাকে আধুনিক JavaScript শেখাব — let/const, arrow function, class, module আর async/await-এর JavaScript, যা আজ পেশাদাররা লেখেন। কিন্তু শুধু syntax নয়: JavaScript-এর অদ্ভুত আচরণগুলোকে আমরা ভয় পাব না, বুঝব — কেন এমন হয়, ইতিহাসের কোন সিদ্ধান্ত থেকে এলো, আর কীভাবে এড়াতে হয়। যিনি ভেতরের নিয়ম বোঝেন, তিনিই AI-এর লেখা কোডের ভুল ধরতে পারেন।

২ · আপনি প্রতিদিনই JavaScript চালাচ্ছেন

আজ সকালে হয়তো ফোনে Facebook খুলেছেন, Daraz-এ একটি জিনিস কার্টে রেখেছেন, কিংবা Google Docs-এ বন্ধুর সাথে একই ফাইলে লিখেছেন। এই প্রতিটি কাজের সময় আপনার ব্রাউজার চুপচাপ হাজার হাজার লাইন JavaScript চালাচ্ছিল। আপনি কোনো প্রোগ্রাম ইনস্টল করেননি, কোনো অনুমতিও দেননি — ওয়েবসাইট খোলার সাথে সাথে কোডটি ডাউনলোড হয়ে চলতে শুরু করেছে।

তিনটি চেনা দৃশ্য ভাবুন:

  • “Add to cart” চাপলেন: পুরো পাতা নতুন করে লোড হলো না। শুধু কার্টের সংখ্যাটি ০ থেকে ১ হলো, পাশে ছোট একটি বার্তা ভেসে উঠল। পাতার একটি টুকরো বদলানোর এই কাজ JavaScript-এর।
  • লাইভ ক্রিকেট স্কোর: বাংলাদেশের ম্যাচ চলছে, আপনি কিছু না চাপলেও রান আর ওভার নিজে থেকে বদলাচ্ছে। JavaScript পেছনে সার্ভারের সাথে যোগাযোগ রাখছে আর নতুন তথ্য এলেই পাতায় বসিয়ে দিচ্ছে।
  • Google Maps টেনে সরানো: আঙুল দিয়ে ম্যাপ টানলে নতুন এলাকার ছবি টুকরো টুকরো করে আসে, জুম করলে মসৃণভাবে বড় হয়। পাতা একবারও reload হয় না। ২০০৫ সালে এটি দেখে মানুষ অবাক হয়েছিল — “ওয়েবসাইট কি ডেস্কটপ সফটওয়্যারের মতো আচরণ করতে পারে?”

একটি ওয়েব পাতাকে একটি দোকানের সাথে তুলনা করুন। HTML হলো দোকানের তাক আর পণ্য — কী কী আছে। CSS হলো রং, আলো আর সাজসজ্জা — দেখতে কেমন। আর JavaScript হলো দোকানের কর্মচারী — আপনি কিছু চাইলে সাড়া দেয়, গুদাম থেকে মাল আনে, দাম হিসাব করে, তাক বদলে দেয়। কর্মচারী না থাকলে দোকান সুন্দর কিন্তু নিশ্চল। পরের পর্বে (পর্ব ০২) এই তিন স্তর বিস্তারিত দেখবেন।

এবার “Add to cart” চাপার মুহূর্তটি ধীরগতিতে দেখি। এক সেকেন্ডেরও কম সময়ে ভেতরে ছয়টি ঘটনা ঘটে। “পরে” চাপুন:

  1. ক্লিকclickevent তৈরি
  2. HandleraddToCart()আপনার ফাংশন
  3. fetchPOST /cartসার্ভারে অনুরোধ
  4. সার্ভারNode / PHP …ডেটাবেসে রাখা
  5. JSON{"count":1}উত্তর এলো
  6. DOM বদলকার্ট (১)reload ছাড়াই
ব্রাউজারআপনার আঙুল বোতাম ছুঁলো
<button id="add">Add to cart</button>
↑ ব্রাউজার একটি "click" event তৈরি করল:
{ type: 'click', target: button#add, … }
app.jsআগে থেকে বলে রাখা: ক্লিক হলে এটা চালাও
button.addEventListener('click', addToCart);

async function addToCart() {
  button.disabled = true;   // দুবার চাপা ঠেকাতে
  // … পরের ধাপে সার্ভারে পাঠাব
}
app.jsপাতা না ছেড়েই সার্ভারকে জানানো
const res = await fetch('/api/cart', {
  method: 'POST',
  body: JSON.stringify({ productId: 'TSHIRT-42', qty: 1 }),
});
// অপেক্ষার সময় পাতা জমে যায় না — স্ক্রল, টাইপ সব চলে
সার্ভারঅন্য কম্পিউটারে, অন্য শহরে
// সার্ভারের কোড — হতে পারে Node.js (JavaScript!),
// হতে পারে PHP, Java বা Python
কার্টে পণ্য যোগ → ডেটাবেসে লেখা → উত্তর তৈরি
নেটওয়ার্কসার্ভারের উত্তর — JSON টেক্সট
HTTP 200 OK
{ "count": 1, "total": 450 }

const data = await res.json();   // টেক্সট → JavaScript object
পাতাশুধু যে টুকরো বদলানো দরকার
badge.textContent = data.count;   // 🛒 কার্ট (১)
button.disabled = false;
পুরো পাতা reload হয়নি — শুধু একটি সংখ্যা বদলেছে
  1. ক্লিক → event. আপনি বোতাম চাপলেন। ব্রাউজার এই ঘটনাকে একটি event হিসেবে লিখে রাখল — কোন বোতাম, কখন, কী ধরনের ঘটনা। JavaScript-এর প্রায় সব কাজ শুরু হয় এমন কোনো event থেকে।
  2. Handler চলল। পাতা খোলার সময়ই JavaScript ব্রাউজারকে বলে রেখেছিল, “এই বোতামে ক্লিক হলে addToCart ফাংশনটি চালিও।” এই আগে থেকে বলে রাখা ফাংশনকে বলে event handler. প্রথম কাজ: বোতামটি সাময়িক বন্ধ, যাতে কেউ পাঁচবার চেপে পাঁচটি অর্ডার না দেয়।
  3. fetch — সার্ভারকে জানানো। fetch দিয়ে JavaScript পাতা না ছেড়েই সার্ভারে একটি অনুরোধ পাঠাল। লক্ষ করুন await — উত্তর আসতে সময় লাগে, কিন্তু সেই সময় ব্রাউজার জমে যায় না। এই “অপেক্ষার সময় অন্য কাজ চালিয়ে যাওয়া” JavaScript-এর হৃদয়, যাকে বলে event loop — মডিউল ৫-এ গভীরে দেখব।
  4. সার্ভারে কাজ। অনুরোধটি ইন্টারনেট পেরিয়ে কোম্পানির server-এ পৌঁছাল। সেখানে কার্টের হিসাব ডেটাবেসে লেখা হলো। মজার কথা: সার্ভারের কোডটিও JavaScript হতে পারে — Node.js দিয়ে। তখন ব্রাউজার আর সার্ভার, দুই পাশেই একই ভাষা।
  5. JSON উত্তর। সার্ভার উত্তর পাঠাল JSON নামের একটি সহজ টেক্সট ফরম্যাটে — দেখতে প্রায় JavaScript object-এর মতো। JavaScript এক লাইনেই একে object-এ বদলে নেয়। আজ প্রায় সব ওয়েব API এই ফরম্যাটে কথা বলে।
  6. DOM বদল — reload ছাড়াই। শেষ ধাপে JavaScript পাতার শুধু কার্টের সংখ্যাটি বদলাল। ব্রাউজারে পাতাটি একটি গাছের মতো কাঠামো হিসেবে থাকে, যার নাম DOM; JavaScript সেই গাছের যেকোনো ডাল বদলাতে পারে। পুরো পাতা আবার লোড হয়নি — তাই অভিজ্ঞতা দ্রুত আর মসৃণ।
Event → Handler → fetch → Server → JSON → DOM
এই ছয় ধাপ বুঝলে আধুনিক ওয়েবের অর্ধেক বুঝে গেলেন।

৩ · প্রথম স্বাদ — এই পাতাতেই চালিয়ে দেখুন

এখনই সব বোঝার দরকার নেই — পর্ব ০৪-এ প্রতিটি লাইন ধরে ধরে দেখব। আপাতত শুধু অনুভব করুন JavaScript কত কম কথায় কাজের জিনিস করে। নিচের কোডটি একটি অনলাইন দোকানের কার্টের মোট দাম হিসাব করে, আর বাংলা সংখ্যায়, বাংলাদেশি নিয়মে (লাখের কমা) টাকা দেখায়। “Run” চাপুন:

const cart = [
  { name: 'টি-শার্ট', price: 450, qty: 2 },
  { name: 'বই', price: 380, qty: 3 },
  { name: 'ল্যাপটপ', price: 98500, qty: 1 },
];

const taka = new Intl.NumberFormat('bn-BD', {
  style: 'currency', currency: 'BDT', maximumFractionDigits: 0,
});

for (const item of cart) {
  console.log(`${item.name} × ${item.qty} = ${taka.format(item.price * item.qty)}`);
}

const subtotal = cart.reduce((sum, item) => sum + item.price * item.qty, 0);
const delivery = subtotal >= 2000 ? 0 : 60;
console.log('ডেলিভারি:', taka.format(delivery));
console.log('মোট:', taka.format(subtotal + delivery));

আউটপুটে দেখবেন ল্যাপটপ × 1 = ৯৮,৫০০৳ আর শেষে মোট: ১,০০,৫৪০৳. লক্ষ করুন — কমা বসেছে লাখের নিয়মে (১,০০,৫৪০), পশ্চিমা নিয়মে (100,540) নয়। এটা আমরা হাতে লিখিনি; ব্রাউজারের ভেতরের Intl নামের বৈশিষ্ট্য 'bn-BD' দেখে নিজেই বাংলা অঙ্ক আর বাংলাদেশি কমা বসিয়েছে। reduce সব পণ্যের দাম যোগ করেছে, আর ? : দিয়ে ঠিক হয়েছে ২,০০০ টাকা বা তার বেশি হলে ডেলিভারি ফ্রি। (× চিহ্নের ডান পাশের qty-টি সাধারণ ইংরেজি অঙ্কে এসেছে, কারণ ওটা আমরা ফরম্যাট করিনি।) এগুলো সব পরে বিস্তারিত শিখবেন — পর্ব ১৬-এ reduce, পর্ব ২০-এ Intl.

এবার JavaScript-এর আসল জাদু — পাতার লেখা বদলানো। নিচের কোডটি চালালে কোডের ওপরে একটি ছোট ওয়েব পাতা দেখা যাবে। কোডটি নিজেই দুবার বোতামে ক্লিক করে। চালানোর পর আপনি নিজেও বোতামটি চেপে দেখুন:

const label = document.querySelector('#label');
const button = document.querySelector('#add');
let count = 0;

button.addEventListener('click', () => {
  count = count + 1;
  label.textContent = `🛒 কার্টে ${count.toLocaleString('bn-BD')}টি পণ্য`;
  console.log('পাতা বদলাল →', label.textContent);
});

button.click();   // কোড দিয়েই দুবার ক্লিক
button.click();

আউটপুটে দুটি লাইন আসবে — পাতা বদলাল → 🛒 কার্টে ১টি পণ্য আর তারপর ২টি পণ্য — আর ওপরের ছোট পাতায় লেখাটিও বদলে যাবে। এখানে ধাপে ধাপে ঘটেছে ঠিক ওপরের stepper-এর প্রথম, দ্বিতীয় আর ষষ্ঠ ধাপ: querySelector দিয়ে DOM থেকে উপাদান খুঁজে নেওয়া, addEventListener দিয়ে handler বলে রাখা, আর textContent বদলে পাতা হালনাগাদ করা। সার্ভার নেই বলে মাঝের fetch ধাপটি বাদ — সেটি পর্ব ৩৫-এ। এখন বোতামটি নিজে চাপলে সংখ্যা বাড়তে থাকবে, আর প্রতি ক্লিকে নিচে নতুন লাইন যোগ হবে।

এই পাতার কোড চলে একটি আলাদা, সুরক্ষিত ছোট জানালার (sandbox) ভেতরে — আপনার লগইন, এই পাতা বা কম্পিউটারের ফাইল সে ছুঁতে পারে না। তাই নিশ্চিন্তে কোড বদলে বারবার চালান, ভুল করুন, দেখুন কী হয়। ভুল করাই শেখার সবচেয়ে দ্রুত পথ। নিজের কম্পিউটারে browser console আর Node.js বসানো দেখবেন পর্ব ০৩-এ।

৪ · JavaScript আজ কোথায় চলে — ব্রাউজারের বাইরেও

শুরুতে JavaScript-এর একটিই ঘর ছিল — browser. কিন্তু গত পনেরো বছরে ভাষাটি প্রায় সবখানে ছড়িয়ে পড়েছে। কারণটা সহজ: একটি ভাষা চালাতে লাগে একটি engine (যে প্রোগ্রাম কোড পড়ে চালায়)। ব্রাউজারের ভেতর থেকে engine বের করে অন্য জায়গায় বসাতে পারলেই সেখানে JavaScript চলে।

🌐 ব্রাউজার (front-end)

প্রতিটি ওয়েবসাইটের সাড়া দেওয়া অংশ — মেনু, ফর্ম যাচাই, কার্ট, চ্যাট, ম্যাপ। Google Docs বা Figma-র মতো পুরো অ্যাপও ব্রাউজারেই চলে।

Chrome, Firefox, Safari, Edge

🖥️ সার্ভার (back-end)

Node.js দিয়ে API, রিয়েল-টাইম চ্যাট, ফাইল প্রসেসিং। অনেক বড় কোম্পানি ও স্টার্টআপ সার্ভারের কিছু বা পুরো অংশ Node.js-এ চালায়।

Node.js, Deno, Bun

📱 মোবাইল অ্যাপ

React Native দিয়ে একই JavaScript কোড থেকে Android আর iPhone, দুটির অ্যাপ — বোতাম, তালিকা সব আসল native উপাদান।

React Native, Ionic

💻 ডেস্কটপ অ্যাপ

Electron দিয়ে ওয়েব প্রযুক্তিতে Windows, Mac, Linux-এর অ্যাপ। আপনি যে VS Code-এ কোড লিখবেন, সেটিও Electron-এ তৈরি; Slack আর Discord-এর ডেস্কটপ অ্যাপও তাই।

Electron, Tauri

⚡ Edge ও serverless

ব্যবহারকারীর কাছাকাছি ছড়িয়ে থাকা অসংখ্য সার্ভারে ছোট ছোট JavaScript ফাংশন — অনুরোধ এলেই চলে, কাজ শেষে থামে। নিজে সার্ভার সামলাতে হয় না।

Cloudflare Workers, AWS Lambda

🔌 ছোট যন্ত্র ও অন্যান্য

মাইক্রোকন্ট্রোলারে চলার মতো ছোট engine আছে; শখের রোবট বা সেন্সর প্রজেক্টে ব্যবহার হয়। এছাড়া ব্রাউজার extension, Google Sheets-এর স্ক্রিপ্ট, এমনকি কিছু ডেটাবেসের ভেতরেও JavaScript চলে।

Espruino, Apps Script

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

  1. একটি ফাংশনcart.jsব্যবসার নিয়ম
  2. ব্রাউজারV8 / SpiderMonkeyওয়েবসাইট
  3. Node.jsV8 + libuvসার্ভার
  4. ElectronChromium + Nodeডেস্কটপ
  5. React NativeHermes engineমোবাইল
cart.jsশুধু হিসাব — কোনো স্ক্রিন বা ফাইলের কথা নেই
export function cartTotal(items) {
  const sub = items.reduce((s, i) => s + i.price * i.qty, 0);
  return sub >= 2000 ? sub : sub + 60;
}
ব্রাউজারেক্রেতা কার্ট দেখার সময়ই মোট দাম
import { cartTotal } from './cart.js';
totalBox.textContent = cartTotal(items);   // DOM আছে
সার্ভারে (Node.js)অর্ডার নেওয়ার আগে আবার যাচাই
import { cartTotal } from './cart.js';
const total = cartTotal(order.items);   // DOM নেই, কিন্তু ফাইল, নেটওয়ার্ক, ডেটাবেস আছে
if (total !== order.claimedTotal) reject(order);
ডেস্কটপে (Electron)দোকানের কাউন্টারের POS সফটওয়্যার
// একটি জানালায় Chromium (DOM) + পেছনে Node.js (ফাইল, প্রিন্টার)
receipt.total = cartTotal(items);   → রসিদ প্রিন্ট
মোবাইলে (React Native)Android ও iPhone অ্যাপ
<Text>মোট: {cartTotal(items)} ৳</Text>
// DOM নেই — কিন্তু আসল native বোতাম আর লেখা
  1. একটি ফাংশন, শুধু নিয়ম। cartTotal জানে না সে কোথায় চলবে — সে শুধু দাম যোগ করে আর ডেলিভারির নিয়ম খাটায়। এমন “শুদ্ধ” ব্যবসার নিয়ম যত আলাদা রাখবেন, তত বেশি জায়গায় একই কোড চালাতে পারবেন।
  2. ব্রাউজারে। ক্রেতা পণ্য যোগ করার সাথে সাথে মোট দাম দেখায়। এখানে আছে DOM, event, fetch — কিন্তু কম্পিউটারের ফাইল পড়ার অনুমতি নেই (নিরাপত্তার জন্য)।
  3. Node.js-এ — সার্ভারে। একই ফাংশন সার্ভারে অর্ডার যাচাই করে। কেন আবার? কারণ ব্রাউজারের কোড ব্যবহারকারী চাইলে বদলাতে পারেন — দাম ১,০০,৫৪০ থেকে ১০ টাকা করে পাঠাতে পারেন! সার্ভার কখনো ব্রাউজারের হিসাব অন্ধভাবে বিশ্বাস করে না। এখানে DOM নেই, কিন্তু ফাইল, নেটওয়ার্ক আর ডেটাবেস আছে।
  4. Electron-এ — ডেস্কটপে। Electron একটি জানালায় Chromium ব্রাউজার আর Node.js একসাথে জুড়ে দেয়। তাই একই কোড দোকানের কাউন্টারের সফটওয়্যারে রসিদ প্রিন্টারেও কাজ করে। দাম: প্রতিটি অ্যাপ নিজের একটি ব্রাউজার বয়ে বেড়ায়, তাই মেমরি বেশি লাগে।
  5. React Native-এ — মোবাইলে। ফোনের অ্যাপেও একই হিসাব। React Native সাধারণত নিজের engine Hermes ব্যবহার করে, আর DOM-এর বদলে ফোনের আসল native উপাদান দেখায়। শিক্ষা: ভাষা এক, কিন্তু প্রতিটি ঘরে আশপাশের সুবিধা (API) আলাদা — তাই কোডের কোন অংশ কোথায় চলবে, সেটা বোঝাই আসল দক্ষতা।
মূল ধারণা

ভাষা ≠ পরিবেশ। JavaScript ভাষা নিজে খুব ছোট — variable, function, object, loop. document, fetch, setTimeout বা ফাইল পড়ার ক্ষমতা আসে যে পরিবেশে চলছে, সেখান থেকে। এই পরিবেশকে বলে runtime. ব্রাউজার একটি runtime, Node.js আরেকটি। এই পার্থক্য মনে রাখলে “Node-এ document is not defined কেন?” — এমন প্রশ্নে আর আটকাবেন না।

WebAssembly-র কথা: আজ ব্রাউজারে WebAssembly নামের একটি দ্বিতীয় প্রযুক্তিও চলে — C, C++, Rust থেকে compile করা কোড প্রায় native গতিতে চালানো যায় (যেমন ভিডিও এডিটর বা গেম)। তবে এটি JavaScript-এর বদলি নয়, সঙ্গী: সাধারণত JavaScript-ই WebAssembly ফাইল লোড করে, আর DOM বদলানোর কাজও JavaScript-এর মাধ্যমেই হয়। তাই “ব্রাউজারের নিজের প্রোগ্রামিং ভাষা” বলতে আজও JavaScript-ই।

৫ · দশ দিনে জন্ম — Netscape থেকে প্রতি বছরের নতুন সংস্করণ

JavaScript-এর অনেক অদ্ভুত আচরণ বোঝার চাবি তার ইতিহাসে। ১৯৯৫ সাল। ইন্টারনেট সবে সাধারণ মানুষের কাছে পৌঁছাচ্ছে, আর সবচেয়ে জনপ্রিয় ব্রাউজার Netscape Navigator. ওয়েব পাতা তখন স্থির কাগজের মতো — কিছু চাপলে পুরো নতুন পাতা আসে। Netscape চাইল ব্রাউজারের ভেতরে একটি সহজ স্ক্রিপ্টিং ভাষা, যা ডিজাইনার আর শখের প্রোগ্রামাররাও লিখতে পারবেন।

১৯৯৫ সালের এপ্রিলে Netscape-এ যোগ দেন Brendan Eich. মে মাসে মাত্র দশ দিনে তিনি ভাষাটির প্রথম কার্যকর সংস্করণ বানান। প্রথম নাম ছিল Mocha, সেপ্টেম্বরে বেটা ব্রাউজারে আসার সময় LiveScript, আর ডিসেম্বরে Sun Microsystems-এর সাথে যৌথ ঘোষণায় নাম হলো JavaScript. তখন Sun-এর নতুন ভাষা Java নিয়ে প্রচণ্ড হইচই; Netscape আর Sun-এর মধ্যে চুক্তি ছিল, Netscape ব্রাউজারে Java চালানোর ব্যবস্থাও রাখবে। “JavaScript” নামটি ছিল মূলত বিপণনের সিদ্ধান্ত — Java-র জনপ্রিয়তার ঢেউয়ে চড়া। সেই নামের trademark পরে Oracle-এর হাতে যায়, কারণ Oracle ২০১০ সালে Sun কিনে নেয়।

দশ দিনে একটি ভাষা বানানো মানে অনেক সিদ্ধান্ত তাড়াহুড়োয় নেওয়া। Eich নিজের পছন্দের ভাষা Scheme থেকে নিয়েছিলেন function-কে মান হিসেবে ব্যবহারের ধারণা, Self থেকে prototype-ভিত্তিক object, আর বাইরের চেহারা দিয়েছিলেন Java-র মতো — কারণ ম্যানেজমেন্ট চেয়েছিল “দেখতে যেন Java-র ছোট ভাইয়ের মতো লাগে”। এই মিশ্রণ আশ্চর্যরকম শক্তিশালী হয়েছিল, কিন্তু কিছু ভুলও থেকে গেল, যেমন typeof null হলো 'object', আর == দিয়ে তুলনায় অপ্রত্যাশিত টাইপ বদল (coercion). ভাষা একবার লক্ষ লক্ষ ওয়েবসাইটে চলে গেলে আর এসব ভুল সারানো যায় না — সারালে পুরোনো সাইট ভেঙে যাবে। ওয়েবের এই নিয়মকে বলে “don't break the web”.

এরপর এলো ব্রাউজার যুদ্ধ। Microsoft ১৯৯৬ সালে Internet Explorer 3-এ নিজের সংস্করণ বানাল, নাম JScript (নামটি আলাদা, কারণ “JavaScript” trademark তাদের ছিল না)। দুটি দেখতে প্রায় এক, কিন্তু খুঁটিনাটিতে আলাদা। ওয়েব ডেভেলপারদের জীবন হয়ে উঠল দুর্বিষহ — একই কোড এক ব্রাউজারে চলে, অন্যটিতে চলে না। সমাধান একটাই: একটি নিরপেক্ষ, লিখিত মানদণ্ড।

Netscape ১৯৯৬ সালের শেষে ভাষাটি জমা দিল ইউরোপের মানদণ্ড সংস্থা Ecma International-এ। সেখানে এর দায়িত্ব পেল একটি কমিটি — TC39. ১৯৯৭ সালের জুনে প্রকাশিত হলো প্রথম মানদণ্ড ECMAScript 1. নামটি সুন্দর নয় — trademark-এর জটিলতা এড়াতে আপসের নাম। তাই মনে রাখুন: ECMAScript হলো লিখিত নিয়মের বই, আর JavaScript হলো সেই নিয়ম মেনে বানানো ভাষা, যা ব্রাউজার আর Node.js চালায়। বাস্তবে দুটি শব্দ প্রায় একই অর্থে ব্যবহার হয়।

নিচের টাইমলাইনে বাকি গল্পটি দেখুন — বিশেষ করে মাঝের “হারানো দশক” খেয়াল করুন:

  1. ১৯৯৫Mocha → JSদশ দিনে জন্ম
  2. ১৯৯৭–৯৯ES1 … ES3মানদণ্ড
  3. ২০০০–০৮ES4 ✗হারানো দশক
  4. ২০০৮–০৯V8 · ES5 · Nodeনবজাগরণ
  5. ২০১৫ES2015 (ES6)বড় লাফ
  6. ২০১৬ →ES2016 … ES2025বার্ষিক ট্রেন
১৯৯৫ · Netscapeফর্ম যাচাইয়ের জন্য ছোট স্ক্রিপ্ট
<!-- সেই যুগের সাধারণ JavaScript -->
<form onsubmit="return checkForm()">
if (document.forms[0].name.value == "") {
  alert("নাম লিখুন!");
}
Ecma TC39লিখিত নিয়মের বই
ES1 — জুন ১৯৯৭   প্রথম মানদণ্ড
ES2 — ১৯৯৮       ছোট সম্পাদনা
ES3 — ১৯৯৯       regex, try/catch — পরের দশ বছরের ভিত্তি
ES4উচ্চাকাঙ্ক্ষী পরিকল্পনা, ঐকমত্য হয়নি
// ES4-এর খসড়ায় ছিল class, type, package …
২০০৮: ES4 পরিত্যক্ত
// এর মধ্যেই: Ajax (২০০৫), Gmail, Google Maps —
// পুরোনো ES3 দিয়েই ওয়েব অ্যাপের যুগ শুরু
২০০৮–২০০৯তিনটি ঘটনা, এক বছরের ব্যবধানে
সেপ্টেম্বর ২০০৮ — Chrome + V8   JIT, বহু গুণ দ্রুত
ডিসেম্বর ২০০৯ — ES5          "use strict", JSON, forEach/map
২০০৯          — Node.js      ব্রাউজারের বাইরে JavaScript
ES2015আধুনিক JavaScript-এর জন্ম
let / const   arrow =>   class   template `${…}`
destructuring   default parameter   Promise
import / export   Map / Set   for…of   Symbol
২০১৬ থেকে প্রতি বছরছোট, নিয়মিত হালনাগাদ
ES2016 **      ES2017 async/await   ES2020 ?. ??
ES2022 #private, top-level await   ES2023 toSorted
… প্রতি বছর একটি করে — ES2025 পর্যন্ত, এবং চলছে
  1. ১৯৯৫ — জন্ম। Netscape Navigator-এ JavaScript এলো ফর্ম যাচাই বা ছবি বদলানোর মতো ছোট কাজের জন্য। কেউ ভাবেনি একদিন এই ভাষায় পুরো অফিস স্যুট বা ভিডিও কল অ্যাপ লেখা হবে। পরের বছর Microsoft আনল JScript — শুরু হলো ব্রাউজার যুদ্ধ।
  2. ১৯৯৭–১৯৯৯ — মানদণ্ড। Ecma-র TC39 কমিটি প্রকাশ করল ES1 (১৯৯৭), ES2 (১৯৯৮) আর ES3 (১৯৯৯)। ES3-এ এলো regular expression আর try/catch. পরের প্রায় দশ বছর এটাই ছিল সবার JavaScript.
  3. ২০০০–২০০৮ — হারানো দশক। পরের বড় সংস্করণ ES4 ছিল বিশাল পরিকল্পনা — class, ঐচ্ছিক টাইপ, package. কিন্তু কমিটির সদস্যরা একমত হতে পারেননি: কেউ বলছিলেন এটি বেশি বড় ও ঝুঁকিপূর্ণ, পুরোনো সাইট ভাঙবে। ২০০৮ সালে ES4 পরিত্যক্ত হলো। মজার বিষয়, এই স্থবির সময়েই ২০০৫ সালে “Ajax” নামে নতুন ধরনের ওয়েব অ্যাপ জনপ্রিয় হলো — Gmail, Google Maps — পুরোনো ES3 দিয়েই।
  4. ২০০৮–২০০৯ — নবজাগরণ। সেপ্টেম্বর ২০০৮-এ Google Chrome এলো নতুন engine V8 নিয়ে — JavaScript হঠাৎ বহু গুণ দ্রুত। ডিসেম্বর ২০০৯-এ এলো ES5: "use strict", বিল্ট-ইন JSON, forEach/map/filter. আর একই বছর Ryan Dahl V8-কে ব্রাউজার থেকে বের করে বানালেন Node.js.
  5. ২০১৫ — বড় লাফ। বহু বছরের কাজের পর ES2015 (প্রচলিত নাম ES6) — ভাষার ইতিহাসে সবচেয়ে বড় হালনাগাদ। let/const, arrow function, class, Promise, module — আজ আমরা যে JavaScript লিখি, তার বেশিরভাগ এখান থেকেই। এই কোর্সের প্রায় সব কোড এই আধুনিক ধাঁচে।
  6. ২০১৬ থেকে — বার্ষিক ট্রেন। বড় লাফের ঝুঁকি এড়াতে TC39 নিয়ম করল: প্রতি বছর একটি সংস্করণ, তাতে যে বৈশিষ্ট্যগুলো তৈরি, শুধু সেগুলো। ট্রেন সময়মতো ছাড়ে, যে যাত্রী প্রস্তুত সে ওঠে। তাই নাম এখন সাল দিয়ে: ES2016, ES2017 (async/await), ES2020 (?., ??), ES2022 (#private field) … ES2025, এবং এই ধারা চলছে। কোনো বৈশিষ্ট্য কবে এসেছে, কোর্সে আমরা লিখে দেব — যেমন “ES2022-এ যুক্ত”।

৬ · Engine আর JIT — ধীর ভাষা কীভাবে দ্রুত হলো

প্রথম দশ বছর JavaScript-কে “খেলনা ভাষা” বলা হতো — ধীর, শুধু ছোট কাজের জন্য। তখনকার engine কোডকে machine code-এ না বদলে সরাসরি ধাপে ধাপে চালাত (interpret করত)। কিন্তু ২০০৫-এর পর Gmail আর Google Maps দেখাল, ব্রাউজারে বড় অ্যাপ চালানো সম্ভব — যদি JavaScript যথেষ্ট দ্রুত হয়। শুরু হলো ব্রাউজারগুলোর মধ্যে গতির প্রতিযোগিতা।

২০০৮ সালে Apple-এর WebKit দলের SquirrelFish আর Mozilla-র TraceMonkey কাজ করছিল, আর সেপ্টেম্বরে Google Chrome-এর সাথে এলো Lars Bak-এর দলের তৈরি V8. এদের মূল কৌশল JIT (Just-In-Time) compilation: প্রোগ্রাম চলার সময়ই engine খেয়াল করে কোন অংশ বারবার চলছে, আর সেই অংশটুকু সরাসরি machine code-এ অনুবাদ করে ফেলে। ফল — JavaScript কয়েক বছরের মধ্যে বহু গুণ দ্রুত হলো।

একটি আধুনিক engine-এর ভেতরে — এক ঝলক

Source → Parser → Interpreter → Optimizing JIT (বিস্তারিত পর্ব ০৫-এ)

  1. আপনার কোডapp.jsটেক্সট
  2. ParserASTব্যাকরণ বোঝা
  3. Interpreterbytecodeদ্রুত শুরু
  4. Optimizing JITmachine codeগরম কোড দ্রুত
ছবি ১.১ — engine প্রথমে দ্রুত চালু হয়, তারপর যে অংশ বারবার চলে (“গরম” কোড), শুধু সেটাকে machine code-এ বদলায়।
Engineকে বানায়কোথায় চলে
V8GoogleChrome, Edge, Opera, Brave; Node.js আর Deno; Electron
SpiderMonkeyMozillaFirefox — Eich-এর লেখা প্রথম engine-এর উত্তরসূরি
JavaScriptCoreAppleSafari আর iPhone-এর প্রায় সব ব্রাউজার; Bun
HermesMetaReact Native মোবাইল অ্যাপ

JIT-কে ভাবুন একজন নতুন অনুবাদকের মতো, যিনি বিদেশি অতিথির কথা লাইন ধরে ধরে অনুবাদ করছেন। কিছুক্ষণ পর তিনি খেয়াল করলেন অতিথি বারবার একই কয়েকটি বাক্য বলছেন — “চা দিন”, “ধন্যবাদ”। তখন তিনি ওই বাক্যগুলোর অনুবাদ মুখস্থ করে ফেলেন, আর শোনামাত্র বলে দেন। কিন্তু অতিথি হঠাৎ অন্যরকম কিছু বললে মুখস্থ অনুবাদ ফেলে আবার ধীরে অনুবাদে ফিরতে হয়। Engine-এর এই “ফিরে যাওয়া”-কে বলে deoptimization — পর্ব ০৫-এ দেখবেন কেন একই ফাংশনে বারবার ভিন্ন টাইপের মান দিলে কোড ধীর হতে পারে।

আজকের V8 এতটাই দ্রুত যে অনেক কাজে JavaScript Python-এর চেয়ে উল্লেখযোগ্যভাবে দ্রুত চলে, যদিও ভালোভাবে লেখা C, C++ বা Rust-এর গতিতে সাধারণত পৌঁছায় না। গতির এই বিপ্লবই JavaScript-কে “খেলনা” থেকে গুরুতর প্রকৌশলের ভাষা বানিয়েছে।

৭ · Node.js, npm, TypeScript — আর JavaScript কেন Java নয়

২০০৯ সালে Ryan Dahl একটি সহজ কিন্তু বৈপ্লবিক কাজ করলেন: V8 engine-কে ব্রাউজার থেকে বের করে তার সাথে জুড়ে দিলেন ফাইল, নেটওয়ার্ক আর প্রসেস সামলানোর ক্ষমতা। জন্ম নিল Node.js. তাঁর মূল চিন্তা ছিল — সার্ভার বেশিরভাগ সময় অপেক্ষা করে (ডেটাবেসের উত্তর, ফাইল পড়া, নেটওয়ার্ক)। অপেক্ষার সময় হাত গুটিয়ে না বসে অন্য অনুরোধ সামলালে একটি প্রসেসই হাজারো সংযোগ একসাথে চালাতে পারে। JavaScript ব্রাউজারে ঠিক এভাবেই event দিয়ে কাজ করত, তাই মিলটা নিখুঁত হলো।

২০১০ সালে এলো npm — Node.js-এর package manager. কেউ একটি কাজের কোড (package) লিখে প্রকাশ করলে বাকিরা এক কমান্ডে নিজের প্রজেক্টে নিতে পারেন। আজ npm registry বিশ্বের সবচেয়ে বড় package ভান্ডারগুলোর একটি, যেখানে লক্ষ লক্ষ package আছে। সুবিধা বিশাল: প্রায় যেকোনো কাজের জন্য তৈরি কোড আছে। ঝুঁকিও আছে: অন্যের কোড মানে অন্যের ভুল বা দুষ্ট উদ্দেশ্যও আপনার প্রজেক্টে ঢুকতে পারে। পর্ব ৪৬-এ npm আর সাপ্লাই-চেইন নিরাপত্তা দেখব।

🟢 Node.js (২০০৯)

সবচেয়ে প্রতিষ্ঠিত, সবচেয়ে বড় ইকোসিস্টেম। এই কোর্সের সার্ভার-অংশ Node.js-এ — মডিউল ৭-এ (পর্ব ৪৯–৫২)।

V8 · Ryan Dahl

🦕 Deno (২০১৮ ঘোষণা)

Ryan Dahl নিজেই Node-এর কিছু নকশাগত আফসোস থেকে বানান — ডিফল্টভাবে অনুমতি ছাড়া ফাইল বা নেটওয়ার্ক ছোঁয়া যায় না, TypeScript সরাসরি চলে।

V8 · Rust

🥟 Bun (১.০: ২০২৩)

গতির ওপর জোর দেওয়া runtime — package ইনস্টল, test, bundling সব এক টুলে। Node-এর সাথে বেশিরভাগ ক্ষেত্রে সামঞ্জস্য রাখার চেষ্টা করে।

JavaScriptCore · Zig

JavaScript ≠ Java

নতুনদের সবচেয়ে সাধারণ ভুল ধারণা: “JavaScript বুঝি Java-র কোনো রূপ।” একদমই না। একজন অভিজ্ঞ ডেভেলপারের বিখ্যাত রসিকতা — “Java আর JavaScript-এর সম্পর্ক car আর carpet-এর মতো।” নামের মিল শুধু ১৯৯৫ সালের বিপণন। দুটি ভাষার মিল বলতে { }, if, for-এর মতো C-ধাঁচের বাইরের চেহারা।

বিষয়JavaJavaScript
টাইপstatic — টাইপ আগে ঘোষণা, compile-এর সময় যাচাইdynamic — মানের টাইপ চলার সময় ঠিক হয়
চলে কোথায়JVM-এ (bytecode)ব্রাউজার বা Node.js-এর engine-এ
Object মডেলclass-ভিত্তিকprototype-ভিত্তিক (class শব্দটি তার ওপরে সুন্দর মোড়ক)
Functionmethod সবসময় class-এর ভেতরেfunction নিজেই মান — variable-এ রাখা, পাঠানো যায়
সাধারণ ব্যবহারবড় এন্টারপ্রাইজ সার্ভার, ব্যাংকিং, Androidওয়েব front-end, Node সার্ভার, ক্রস-প্ল্যাটফর্ম অ্যাপ

TypeScript — টাইপসহ JavaScript

বড় প্রজেক্টে JavaScript-এর dynamic টাইপ সমস্যা তৈরি করে: ভুল টাইপের মান পাঠালে ভুলটা ধরা পড়ে কেবল চলার সময়, হয়তো ব্যবহারকারীর সামনে। এর সমাধানে Microsoft ২০১২ সালে আনে TypeScript — JavaScript-এর ওপর টাইপের একটি স্তর। আপনি লেখেন function total(price: number), আর কোড চালানোর আগেই টুল সতর্ক করে দেয় কোথাও string পাঠালে। চালানোর আগে TypeScript থেকে টাইপগুলো মুছে সাধারণ JavaScript তৈরি হয়। আজ অনেক পেশাদার প্রজেক্ট TypeScript-এ লেখা। কিন্তু মনে রাখুন — TypeScript আসলে JavaScript-ই; JavaScript ভালো না বুঝে TypeScript শেখা মানে ভিত ছাড়া দোতলা বানানো। পর্ব ৪৭-এ TypeScript শুরু করব।

৮ · একটি সৎ তুলনা — JavaScript কোথায় সেরা, কোথায় দুর্বল

কোনো ভাষাই সব কাজে সেরা নয়। একজন ভালো প্রকৌশলী জানেন কোন কাজে কোন টুল। তাই JavaScript-এর প্রশংসার পাশাপাশি তার দুর্বলতাও খোলাখুলি দেখি:

ভাষাযেখানে সবচেয়ে শক্তিশালীযেখানে দুর্বল
JavaScriptব্রাউজার (প্রতিদ্বন্দ্বীহীন), পুরো ওয়েব স্ট্যাক এক ভাষায়, I/O-নির্ভর সার্ভার, বিশাল ইকোসিস্টেমঢিলেঢালা টাইপ, coercion-এর ফাঁদ, ভারী গণনায় একটি thread, ইকোসিস্টেম খুব দ্রুত বদলায়
Pythonডেটা সায়েন্স, মেশিন লার্নিং, অটোমেশন, শেখার সহজতাব্রাউজারে সরাসরি চলে না; সাধারণ কোডে তুলনামূলক ধীর
Javaবড় এন্টারপ্রাইজ সিস্টেম, ব্যাংকিং, দীর্ঘমেয়াদি রক্ষণাবেক্ষণ, Android-এর ঐতিহ্যকোড লম্বা; ছোট স্ক্রিপ্ট বা দ্রুত প্রোটোটাইপে ভারী
C / C++অপারেটিং সিস্টেম, গেম engine, embedded — সর্বোচ্চ গতি ও হার্ডওয়্যার নিয়ন্ত্রণ (V8 নিজেই C++-এ লেখা!)মেমরির ভুলে নিরাপত্তা-ঝুঁকি, শেখা ও লেখা কঠিন

JavaScript-এর চারটি আসল দুর্বলতা

  • ঢিলেঢালা টাইপ আর coercion: "5" - 2 দেয় 3, কিন্তু "5" + 2 দেয় "52". ভাষা নিজে থেকে টাইপ বদলে ফেলে, আর ভুল চুপচাপ ঘটে। সমাধান জানা আছে — ===, সতর্ক রূপান্তর, TypeScript — পর্ব ০৬-এ পুরোটা।
  • একটি main thread: JavaScript সাধারণত একবারে একটি কাজই চালায়। I/O-র অপেক্ষায় এটা সমস্যা নয় (event loop সামলায়), কিন্তু ভারী গণনা চললে পাতা জমে যায়। সমাধান Web Worker (পর্ব ৪২) বা কাজটি অন্য ভাষায় করা।
  • ইকোসিস্টেমের দ্রুত বদল: framework আর টুল প্রতি কয়েক বছরে বদলায়; একে মজা করে বলা হয় “JavaScript fatigue”. সমাধান: ভাষার মূল ধারণা শক্ত করে শেখা — framework বদলায়, ভিত বদলায় না।
  • পুরোনো ভুল চিরকাল থাকে: “don't break the web”-এর কারণে typeof null === 'object' বা var-এর অদ্ভুত scope মুছে ফেলা যায় না। আধুনিক JavaScript এদের পাশ কাটানোর পথ দেয় (let/const, strict mode), কিন্তু পুরোনো কোড পড়তে এগুলো জানতে হয়।
C/C++/Python/Java জানলে

C, C++ আর Java-র মতো JavaScript-এও { }, ;, if, for, while আছে, তাই কোড দেখতে চেনা লাগবে। কিন্তু টাইপের দিক থেকে JavaScript অনেকটা Python-এর মতো dynamic, আর Python-এর মতোই function প্রথম শ্রেণির মান। বড় পার্থক্য দুটি: Python-এর চেয়েও বেশি স্বয়ংক্রিয় টাইপ রূপান্তর (Python-এ "5" + 2 হলো TypeError, JavaScript-এ "52"), আর একটি event loop-নির্ভর asynchronous মডেল — Python-এর asyncio-তে কাছাকাছি ধারণা আছে, কিন্তু JavaScript-এ এটাই প্রতিদিনের সাধারণ ধাঁচ। তুলনা করতে Python কেন? আর Java কেন? পর্ব দুটি পাশাপাশি পড়ুন।

৯ · ক্যারিয়ারের পথ আর এই কোর্সের মানচিত্র

বাংলাদেশে সফটওয়্যার কোম্পানি, ই-কমার্স, ফিনটেক আর আউটসোর্সিং — সবখানেই ওয়েব অ্যাপ লাগে, আর ওয়েব অ্যাপ মানেই JavaScript. চাকরির বিজ্ঞাপন আর ফ্রিল্যান্স মার্কেটপ্লেসে JavaScript-সংশ্লিষ্ট কাজের চাহিদা অনেক, দেশে ও বিদেশে দুই জায়গাতেই। বহু বছর ধরে আন্তর্জাতিক ডেভেলপার জরিপে JavaScript সবচেয়ে বেশি ব্যবহৃত ভাষাগুলোর শীর্ষে থেকেছে। তবে একটি সৎ কথা: চাহিদা বেশি বলে প্রতিযোগিতাও বেশি। শুধু “একটু JavaScript পারি” দিয়ে আলাদা হওয়া কঠিন; যিনি ভেতরের নিয়ম বোঝেন, তিনিই এগিয়ে থাকেন।

🎨 Front-end ডেভেলপার

ব্যবহারকারী যা দেখেন ও ছোঁন — পাতা, ফর্ম, ড্যাশবোর্ড। JavaScript, DOM, একটি framework (React/Vue), পারফরম্যান্স আর accessibility.

মডিউল ২–৬, পর্ব ৫৪

⚙️ Back-end ডেভেলপার

সার্ভার, API, ডেটাবেস, নিরাপত্তা। Node.js আর Express, অথবা অন্য ভাষার সাথে JavaScript মিলিয়ে।

মডিউল ৫, ৭

🔗 Full-stack ডেভেলপার

দুই পাশেই কাজ — এক ভাষায় পুরো অ্যাপ। স্টার্টআপ আর ছোট দলে বিশেষ চাহিদা।

ক্যাপস্টোন: পর্ব ৫৫

📱 মোবাইল ও ডেস্কটপ

React Native বা Electron দিয়ে ক্রস-প্ল্যাটফর্ম অ্যাপ — ওয়েবের জ্ঞান সরাসরি কাজে লাগে।

কোর্সের পরের ধাপ

৮টি মডিউল — কোন পথে এগোব

মডিউলবিষয়পর্ব
১ · ভিত্তিJavaScript কেন, ওয়েবের তিন স্তর, সেটআপ, প্রথম প্রোগ্রাম, engine কীভাবে চালায়০১–০৫
২ · মূল ভাষামান, টাইপ ও coercion, scope, অপারেটর, string, number, সিদ্ধান্ত, লুপ, function০৬–১৩
৩ · ডেটা স্ট্রাকচারobject, array ও তার method, destructuring, Map/Set, JSON, তারিখ — শেষে মাঝপথের প্রজেক্ট১৪–২১
৪ · ফাংশন ও অবজেক্ট গভীরেclosure, functional programming, this, prototype, class, generator, Proxy, error, regex২২–৩০
৫ · Asynchronousevent loop, callback, Promise, async/await, fetch, async-এর কৌশল৩১–৩৬
৬ · ব্রাউজার ও DOMDOM, event, form, storage, Web API, Worker, নিরাপত্তা, PWA৩৭–৪৪
৭ · পেশাদার JavaScriptmodule, npm ও টুল, TypeScript, টেস্টিং, Node.js, Express, real-time, ডেটাবেস, পারফরম্যান্স, framework, ক্যাপস্টোন৪৫–৫৫
৮ · পরীক্ষা ও ইন্টারভিউআউটপুট অনুমান, MCQ, লিখিত-মৌখিক প্রশ্ন, কোডিং ইন্টারভিউ৫৬–৫৯

প্রথম চারটি মডিউলের প্রায় সব কোড এই পাতার ভেতরেই চলবে। মডিউল ৬-এ পাতার ছোট উইন্ডোতে আসল DOM বদলাবেন, আর মডিউল ৭-এর Node.js পর্বগুলোতে কোড চলবে একটি অনলাইন Node.js সার্ভারে — তখনো কিছু ইনস্টল না করেই। কীভাবে পড়বেন: ক্রম মেনে পড়ুন, প্রতিটি stepper নিজে চালান, প্রতিটি কোড একটু বদলে আবার চালান, আর ভাবনার প্রশ্নের উত্তর দেখার আগে নিজে দুই মিনিট ভাবুন।

১০ · AI-এর যুগে JavaScript — কী আপনাকে বুঝতেই হবে

আজ AI টুলগুলো সম্ভবত অন্য যেকোনো ভাষার চেয়ে বেশি JavaScript লেখে — কারণ ইন্টারনেটে JavaScript কোডের পরিমাণ বিপুল, আর ওয়েবের প্রায় প্রতিটি কাজে এটি লাগে। একটি React পাতা বা Express API চাইলে কয়েক সেকেন্ডে পেয়ে যাবেন। তাহলে শেখার দরকার কী?

উত্তর: AI-এর লেখা JavaScript প্রায়ই প্রথম দেখায় চলে — আর সেখানেই বিপদ। কারণ JavaScript-এর বেশিরভাগ গুরুতর ভুল চুপচাপ ঘটে: কোনো error দেখায় না, শুধু কখনো কখনো ভুল ফল দেয়, ধীর হয়ে যায় বা নিরাপত্তার ফাঁক রেখে দেয়। এগুলো ধরতে লাগে চারটি বোঝাপড়া:

যা বুঝতে হবেAI-এর সাধারণ ভুলকোর্সে কোথায়
Event loop ও asyncawait ভুলে যাওয়া, লুপের ভেতরে একটির পর একটি অপেক্ষা, error-এর catch না রাখামডিউল ৫
DOMপ্রতি বারে পুরো তালিকা নতুন করে আঁকা, event listener জমতে থাকা (memory leak)পর্ব ৩৭–৩৮, ৫৩
নিরাপত্তাব্যবহারকারীর লেখা সরাসরি innerHTML-এ বসানো (XSS), গোপন key ব্রাউজারের কোডে রাখা, শুধু ব্রাউজারে দাম যাচাইপর্ব ৪৩
পারফরম্যান্স ও টাইপ== দিয়ে তুলনা, টাকার হিসাবে দশমিকের ভুল (0.1 + 0.2), অপ্রয়োজনীয় বিশাল packageপর্ব ০৬, ১০, ৫৩

AI-কে কোড লিখতে বলার সময় শুধু “বানিয়ে দাও” নয় — পরিবেশ, সীমা আর যাচাইয়ের দাবি স্পষ্ট করুন। নিচের কাঠামোটি কপি করে ব্যবহার করুন:

আমি JavaScript শিখছি। আধুনিক JavaScript (let/const, async/await) দিয়ে একটি "Add to cart" বোতামের কোড লিখে দাও, যা ব্রাউজারে চলবে, কোনো framework ছাড়া। শর্ত: ১. ব্যবহারকারীর দেওয়া কোনো লেখা innerHTML দিয়ে বসাবে না — textContent ব্যবহার করবে। ২. fetch ব্যর্থ হলে কী হবে, সেটা সামলাবে, আর বোতাম দুবার চাপা ঠেকাবে। ৩. প্রতিটি অংশ ব্রাউজারের কোন ধাপে চলে (event, handler, fetch, DOM বদল) — সহজ বাংলায় মন্তব্যে লিখবে। ৪. শেষে বলবে: এই কোডে কোন অংশ সার্ভারেও আবার যাচাই করা উচিত, আর কেন।

AI-এর লেখা JavaScript হাতে পেলে — যাচাইয়ের চেকলিস্ট

AI লেখে কোড, আপনি বোঝেন ব্রাউজার আর event loop.
যিনি সিস্টেম বোঝেন, AI তাঁর হাতেই সবচেয়ে কার্যকর।
পরীক্ষা ও ইন্টারভিউতে
  • JavaScript কে, কবে তৈরি করেন? — Brendan Eich, Netscape-এ, ১৯৯৫ সালে (প্রথম সংস্করণ প্রায় দশ দিনে)।
  • JavaScript আর ECMAScript-এর সম্পর্ক কী? — ECMAScript হলো Ecma-র TC39 কমিটির লেখা মানদণ্ড; JavaScript সেই মানদণ্ডের সবচেয়ে পরিচিত বাস্তবায়ন।
  • JavaScript আর Java কি একই? — না; নামের মিল বিপণনের। JavaScript dynamic টাইপ ও prototype-ভিত্তিক, Java static টাইপ ও class-ভিত্তিক, JVM-এ চলে।
  • Node.js কী — ভাষা না framework? — কোনোটিই নয়; এটি একটি runtime: V8 engine আর ফাইল-নেটওয়ার্কের API মিলিয়ে ব্রাউজারের বাইরে JavaScript চালানোর পরিবেশ।
  • JavaScript compiled না interpreted? — আধুনিক engine দুটোই করে: প্রথমে bytecode তৈরি করে interpret করে, তারপর বারবার চলা অংশ JIT দিয়ে machine code-এ বদলায়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন। এগুলোই আপনাকে কোড-লেখক থেকে সিস্টেম-চিন্তক বানাবে।

প্র ০১দশ দিনে তাড়াহুড়োয় লেখা একটি ভাষা কীভাবে পুরো পৃথিবী জয় করল — যেখানে অনেক “ভালো নকশার” ভাষা হারিয়ে গেছে?

উত্তরের মূলে একটি কঠিন সত্য: প্রযুক্তির জগতে বিতরণ (distribution) প্রায়ই নকশার চেয়ে বেশি শক্তিশালী।

  • বিনা খরচে প্রতিটি কম্পিউটারে: ১৯৯০-এর দশকের মাঝামাঝি Netscape Navigator ছিল সবচেয়ে জনপ্রিয় ব্রাউজার। JavaScript তার সাথে এলো, ফলে লক্ষ লক্ষ মানুষের কম্পিউটারে কোনো ইনস্টল ছাড়াই পৌঁছে গেল। Microsoft-ও প্রতিযোগিতায় টিকতে JScript রাখল। একজন ওয়েব ডেভেলপারের কাছে প্রশ্নটা কখনো “কোন ভাষা সবচেয়ে সুন্দর?” ছিল না — ছিল “কোন ভাষা সবার ব্রাউজারে চলে?” উত্তর একটাই।
  • প্রতিদ্বন্দ্বীরা কেন হারল: Java applet, Microsoft-এর VBScript, পরে Adobe Flash-এর ActionScript আর Google-এর Dart — সবাই কোনো না কোনো সময় ব্রাউজারে জায়গা চেয়েছিল। কোনোটির জন্য আলাদা প্লাগইন লাগত, কোনোটি শুধু এক কোম্পানির ব্রাউজারে চলত। আর ২০১০-এর পর iPhone-এ Flash না চলার সিদ্ধান্ত প্লাগইন যুগের শেষ ঘণ্টা বাজায়। মানদণ্ড-ভিত্তিক, সব ব্রাউজারে চলা JavaScript থেকে যায়।
  • নেটওয়ার্ক ইফেক্ট: যত বেশি সাইট JavaScript ব্যবহার করে, ব্রাউজার তত বেশি এটিকে দ্রুত করতে বিনিয়োগ করে; যত দ্রুত হয়, তত বড় অ্যাপ লেখা যায়; তত বেশি ডেভেলপার শেখে, টুল আর library বানায়। এই চক্র একবার ঘুরতে শুরু করলে থামানো প্রায় অসম্ভব।
  • ভেতরের নকশাও খারাপ ছিল না: তাড়াহুড়োর ক্ষত সত্ত্বেও Eich-এর বেছে নেওয়া মূল ধারণাগুলো — function-কে মান হিসেবে ব্যবহার আর closure (Scheme থেকে), নমনীয় prototype object (Self থেকে) — আশ্চর্যরকম শক্তিশালী ছিল। এই ভিতের ওপরই পরে Promise, module আর React-এর মতো ধারণা গড়ে উঠেছে।

একই গল্প প্রযুক্তিতে বারবার দেখা যায় — কিবোর্ডের QWERTY বিন্যাস, ভিডিও ক্যাসেটে VHS — যেটি আগে সবার হাতে পৌঁছায়, সেটি প্রায়ই মানদণ্ড হয়ে যায়, তারপর তাকে উন্নত করা হয়।

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

প্র ০২“JavaScript” নামটি বিপণনের সিদ্ধান্ত — Sun আর Netscape-এর এই চুক্তি থেকে ভাষাটি কী পেল, আর কী হারাল?

১৯৯৫ সালে Java ছিল প্রযুক্তি জগতের সবচেয়ে আলোচিত বিষয় — “একবার লেখো, সবখানে চালাও”-এর প্রতিশ্রুতি। Netscape আর Sun Microsystems তখন Microsoft-এর বিরুদ্ধে একরকম মিত্র; Netscape তার ব্রাউজারে Java applet চালানোর ব্যবস্থা রাখছিল। এই প্রেক্ষাপটে ডিসেম্বর ১৯৯৫-এ দুই কোম্পানি একসাথে ঘোষণা করল LiveScript-এর নতুন নাম — JavaScript. পরিকল্পনা ছিল দুই ভাষার ভূমিকা ভাগ: বড়, পেশাদার উপাদান লেখা হবে Java-তে, আর ডিজাইনার ও শখের প্রোগ্রামাররা পাতায় সেগুলো জোড়া দেবেন সহজ JavaScript দিয়ে — অনেকটা “বড় ভাই আর ছোট ভাই”।

কী পেল: তাৎক্ষণিক মনোযোগ। একটি অচেনা স্ক্রিপ্টিং ভাষা রাতারাতি পরিচিত নামের ছায়ায় এলো। বাইরের চেহারাও Java-র মতো রাখা হয়েছিল ({ }, if, for), তাই C/Java জানা প্রোগ্রামারদের কাছে অচেনা লাগেনি।

কী হারাল:

  • তিরিশ বছরের বিভ্রান্তি: আজও নতুনরা ভাবেন দুটি একই, এমনকি চাকরির বিজ্ঞাপনেও গুলিয়ে ফেলা হয়।
  • “খেলনা ভাষা”-র তকমা: “Java-র ছোট ভাই” পরিচয়ের কারণে বহু বছর গুরুতর প্রোগ্রামাররা একে তুচ্ছ ভাবতেন — যতদিন না Gmail আর V8 প্রমাণ করল উল্টোটা।
  • নামের মালিকানা: trademark ছিল Sun-এর, ২০১০ সালে Sun কিনে নেওয়ার পর থেকে Oracle-এর। এজন্যই Microsoft-কে নিজের সংস্করণের নাম দিতে হয়েছিল JScript, আর মানদণ্ডের নাম হলো আপসের “ECMAScript”. সম্প্রতি Deno-র নির্মাতাসহ ওয়েব সম্প্রদায়ের অনেকে নামটি সবার জন্য মুক্ত করার দাবি তুলেছেন — বিষয়টি আইনি প্রক্রিয়ায় গেছে।

পরিহাস হলো, যে Java applet-এর “সঙ্গী” হিসেবে JavaScript-এর জন্ম, সেই applet ব্রাউজার থেকে বহু আগেই বিদায় নিয়েছে; আর “ছোট ভাই” আজ ওয়েবের একমাত্র ভাষা।

মূল উপলব্ধি: নাম, ব্র্যান্ড আর আইনি মালিকানা প্রযুক্তির ইতিহাসকে কোডের মতোই গভীরভাবে প্রভাবিত করে। কোনো প্রযুক্তি বিচার করুন তার আসল আচরণ দিয়ে — নামের মিল দিয়ে নয়।

প্র ০৩ES4 কেন ব্যর্থ হলো, আর ২০০৮ সালের “Harmony” সমঝোতা ভাষা পরিচালনা (governance) সম্পর্কে কী শেখায়?

ES3 (১৯৯৯)-এর পর TC39 একটি বিশাল লাফের পরিকল্পনা করে — ES4. খসড়ায় ছিল class, interface, package, ঐচ্ছিক static টাইপ, আরও অনেক কিছু; অনেকটা নতুন একটি ভাষা। Adobe-এর Flash-এ ব্যবহৃত ActionScript 3 এই খসড়ার ধারণার ওপর অনেকটা দাঁড়িয়ে ছিল, আর Mozilla-সহ কয়েকটি পক্ষ এর জোর সমর্থক ছিল।

অন্যদিকে Microsoft আর Yahoo (যেখানে তখন Douglas Crockford কাজ করতেন) আপত্তি তুলল: এত বড় পরিবর্তন জটিল, বাস্তবায়ন কঠিন, আর পুরোনো ওয়েবের সাথে সামঞ্জস্য রাখা ঝুঁকিপূর্ণ। তারা চাইল ছোট, ধাপে ধাপে উন্নতি — যার নাম দেওয়া হয়েছিল ES3.1. কয়েক বছর ধরে কমিটি দুই ভাগে বিভক্ত থাকল, আর ভাষা কার্যত স্থির রইল।

২০০৮ সালের জুলাইয়ে অসলোর একটি বৈঠকে সমঝোতা হলো, যা পরিচিত “Harmony” নামে। সিদ্ধান্ত:

  • ES4 পরিত্যক্ত; ছোট ES3.1-এর কাজ এগোবে — সেটিই পরে ES5 (২০০৯)। (ES4 নামটি আর কখনো ব্যবহার হয়নি, তাই ES3-এর পর সরাসরি ES5.)
  • ES4-এর কিছু ভালো ধারণা — যেমন class আর module — ধীরে, সাবধানে, বাস্তব অভিজ্ঞতা দেখে পরে আনা হবে। সেগুলোই এলো ES2015-এ।
  • কিছু ধারণা, যেমন ঐচ্ছিক static টাইপ, ভাষায় আনা হয়নি — সেই শূন্যস্থান পরে পূরণ করেছে TypeScript, ভাষার বাইরে একটি টুল হিসেবে।

এই অভিজ্ঞতা থেকেই আজকের প্রক্রিয়া: স্তরে স্তরে প্রস্তাব, বাস্তব engine-এ পরীক্ষা, ঐকমত্যে সিদ্ধান্ত, আর ২০১৬ থেকে বার্ষিক ছোট সংস্করণ। বড় এক লাফের বদলে নিয়মিত ছোট পদক্ষেপ — যাতে কোনো এক বৈশিষ্ট্যের বিতর্ক পুরো ভাষা আটকে না রাখে।

মূল উপলব্ধি: যে ভাষা বা সফটওয়্যার কোটি মানুষ ব্যবহার করে, তার পরিবর্তন প্রযুক্তিগত প্রশ্নের পাশাপাশি সামাজিক প্রশ্নও — কে সিদ্ধান্ত নেবে, পুরোনো ব্যবহারকারীর কী হবে। ছোট, পরীক্ষিত, ধাপে ধাপে পরিবর্তন প্রায়ই বড় বিপ্লবের চেয়ে বেশি টেকসই। নিজের প্রজেক্টেও “বড় rewrite”-এর আগে এই শিক্ষা মনে রাখুন।

প্র ০৪Ajax, ২০০৮ সালের ব্রাউজার-গতির প্রতিযোগিতা আর V8 মিলে কীভাবে ওয়েব অ্যাপের যুগ সম্ভব করল?

গল্পটা দুই ভাগে — আগে এলো ধারণা, তারপর গতি।

ধারণা — Ajax: ১৯৯৯ সালে Microsoft তাদের ওয়েব-ইমেইল (Outlook Web Access)-এর জন্য Internet Explorer-এ XMLHttpRequest নামের একটি সুবিধা আনে — পাতা না বদলেই পেছনে সার্ভার থেকে ডেটা আনা। কয়েক বছর এটি প্রায় অব্যবহৃত ছিল। তারপর ২০০৪ সালে Gmail আর ২০০৫ সালে Google Maps এটি দিয়ে এমন অভিজ্ঞতা দেখাল, যা আগে শুধু ডেস্কটপ সফটওয়্যারে সম্ভব ছিল — ইমেইল খুলতে পুরো পাতা লোড হয় না, ম্যাপ টানলে নতুন অংশ নিজে থেকে আসে। ২০০৫ সালে Jesse James Garrett এক প্রবন্ধে এই কৌশলের নাম দেন Ajax. হঠাৎ সবাই বুঝল — ব্রাউজার শুধু দলিল দেখার যন্ত্র নয়, অ্যাপ চালানোর প্ল্যাটফর্মও হতে পারে।

বাধা — গতি: কিন্তু তখনকার engine কোডকে machine code-এ না বদলে শুধু interpret করত। বড় অ্যাপ লিখলে ব্রাউজার হাঁপিয়ে উঠত। Google নিজের ক্রমবর্ধমান ওয়েব অ্যাপগুলোর জন্য একটি দ্রুত ব্রাউজার চাইল।

বিপ্লব — ২০০৮: সেপ্টেম্বর ২০০৮-এ Chrome এলো V8 নিয়ে, যা JavaScript-কে সরাসরি machine code-এ compile করত, সাথে দ্রুত object অ্যাক্সেসের কৌশল আর দক্ষ garbage collector. একই বছর WebKit-এর SquirrelFish আর Mozilla-র TraceMonkey-ও JIT-এর দিকে এগোল। ব্রাউজারগুলো benchmark-এ একে অপরকে হারানোর প্রতিযোগিতায় নামল, আর কয়েক বছরে JavaScript-এর গতি বহু গুণ বাড়ল।

ফল: দ্রুত engine ছাড়া আজকের Google Docs, Figma, ব্রাউজারে ভিডিও কল বা জটিল ড্যাশবোর্ড অকল্পনীয়। আর V8-এর গতি ও আলাদা করে ব্যবহারযোগ্য নকশাই পরের বছর Ryan Dahl-কে Node.js বানাতে প্রেরণা দেয়। একটি engine-এর উন্নতি তাই ব্রাউজার আর সার্ভার — দুই জগতই বদলে দিল।

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

প্র ০৫Douglas Crockford-এর বই “JavaScript: The Good Parts” (২০০৮) বলে ভাষার একটি ভালো অংশ বেছে নিয়ে ব্যবহার করুন। এই ধারণা কতটা ঠিক, আর আজও কি প্রাসঙ্গিক?

২০০৮ সালে, যখন অনেকে JavaScript-কে তুচ্ছ ভাবতেন, Douglas Crockford একটি ছোট বই লেখেন — JavaScript: The Good Parts. তাঁর যুক্তি: ভাষার ভেতরে একটি সুন্দর, শক্তিশালী ভাষা লুকিয়ে আছে — function, closure, object literal, প্রথম শ্রেণির মান হিসেবে function — কিন্তু তার চারপাশে কিছু বিপজ্জনক অংশ জড়িয়ে আছে। তাই ভাষার একটি “ভালো উপসেট” বেছে নিন, বাকিটা এড়িয়ে চলুন। তিনি এড়াতে বলেছিলেন == (বদলে ===), with, eval, global variable-এর অপব্যবহার ইত্যাদি। এই নিয়মগুলো স্বয়ংক্রিয়ভাবে যাচাই করতে তিনি JSLint নামের টুলও বানান — আজকের ESLint-এর পূর্বসূরি। (Crockford-ই JSON ফরম্যাটকে নাম দিয়ে জনপ্রিয় করেন।)

ধারণাটি কেন শক্তিশালী:

  • যে ভাষা থেকে পুরোনো ভুল মুছে ফেলা যায় না, সেখানে নিজের ব্যবহার সীমিত করাই একমাত্র উপায়। এ চিন্তা শুধু JavaScript-এ নয় — C++-এর বড় কোম্পানিগুলোর style guide বা C-র MISRA নিয়মও ভাষার উপসেট বেঁধে দেয়।
  • ভাষা নিজেও এই পথে গেছে: ES5-এর "use strict" বিপজ্জনক কিছু আচরণ বন্ধ করে, ES2015 আনে let/const, আর module ও class-এর ভেতরের কোড স্বয়ংক্রিয়ভাবে strict mode-এ চলে।

সমালোচনা ও সীমা: বইটির কিছু পরামর্শ আজ পুরোনো — যেমন তিনি new আর class-ধাঁচের নকশা নিয়ে সন্দিহান ছিলেন, অথচ ES2015-এর class এখন ব্যাপক ব্যবহৃত। আর “শুধু ভালো অংশ শিখব” মনোভাবের একটি ঝুঁকি আছে: অন্যের লেখা বা পুরোনো কোডে খারাপ অংশগুলো থাকবেই, AI-ও মাঝে মাঝে সেগুলো লিখবে। না জানলে পড়ে বুঝতে পারবেন না।

তাই এই কোর্সের পথ একটু ভিন্ন: অদ্ভুত অংশগুলো আমরা বুঝব (যেমন পর্ব ০৬-এ coercion-এর নিয়ম), কিন্তু নিজে লেখার সময় আধুনিক, নিরাপদ উপসেট ব্যবহার করব — আর ESLint-এর মতো টুল দিয়ে সেটা স্বয়ংক্রিয়ভাবে নিশ্চিত করব (পর্ব ৪৬)।

মূল উপলব্ধি: পরিণত প্রকৌশলী ভাষার সব বৈশিষ্ট্য ব্যবহার করেন না — জেনে-বুঝে একটি নিরাপদ উপসেট বেছে নেন, আর বাকিটা চেনেন যাতে অন্যের কোডে দেখলে বিপদ ধরতে পারেন।

অনুশীলন

এগুলোর বেশিরভাগে কোড লিখতে হবে না — হাতে-কলমে দেখা আর ভাবাই আসল কাজ।

  1. JavaScript বন্ধ করে দেখুন: কম্পিউটারের Chrome বা Edge-এ Settings → Privacy and security → Site settings → JavaScript-এ গিয়ে কিছুক্ষণের জন্য JavaScript বন্ধ করুন। তারপর YouTube, Google Maps আর একটি সংবাদপত্রের সাইট খুলুন। কী কী কাজ করে, কী করে না? (শেষে আবার চালু করতে ভুলবেন না।)

    সাধারণত দেখবেন: সংবাদপত্রের লেখা আর ছবি অনেকটা দেখা যায় (কারণ সেগুলো HTML), কিন্তু মেনু, “আরও দেখুন”, মন্তব্য বা ভিডিও কাজ করে না। YouTube আর Google Maps-এর মতো অ্যাপ প্রায় পুরোপুরি অচল — কারণ এগুলো মূলত JavaScript অ্যাপ। এই পরীক্ষা দেখায় HTML হলো বিষয়বস্তু, আর JavaScript হলো আচরণ। ভালো ওয়েবসাইট JavaScript ছাড়াও মূল লেখাটুকু দেখানোর চেষ্টা করে — একে বলে progressive enhancement, পর্ব ০২-এ আবার আসবে।

  2. কার্টের কোডে খেলুন: ওপরের প্রথম কোডে ল্যাপটপের লাইনটি মুছে দিন (বা qty বদলান) আর আবার চালান। ডেলিভারির খরচ কখন ৬০৳ হয়? তারপর 'bn-BD'-কে 'en-US' করে চালান — কী বদলাল?

    ল্যাপটপ বাদ দিলে subtotal হয় ৯০০ + ১,১৪০ = ২,০৪০ টাকা — এখনো ২,০০০-এর বেশি, তাই ডেলিভারি ফ্রি। ল্যাপটপ ছাড়া বইয়ের qty ৩ থেকে ২ করলে subtotal হয় ১,৬৬০, তখন ডেলিভারি ৬০৳ আর মোট ১,৭২০৳. 'en-US' দিলে অঙ্ক ইংরেজিতে আসে, কমা পশ্চিমা নিয়মে বসে, আর মুদ্রার চিহ্ন সামনে চলে যায় (যেমন BDT 100,540 বা অনুরূপ রূপে — ব্রাউজারভেদে চিহ্ন একটু আলাদা হতে পারে)। শিক্ষা: সংখ্যা দেখানোর নিয়ম ভাষা ও দেশের ওপর নির্ভর করে, আর Intl সেটা আপনার হয়ে সামলায় — নিজে হাতে কমা বসানোর দরকার নেই।

  3. কোথায় চলবে — চিহ্নিত করুন: নিচের প্রতিটি কাজ ব্রাউজারে, সার্ভারে (Node.js), না দুই জায়গাতেই করা উচিত? (ক) পাসওয়ার্ড ঠিক কি না যাচাই করে লগইন করানো (খ) ফর্মে ইমেইলের ঘর খালি থাকলে সাথে সাথে লাল লেখা দেখানো (গ) অর্ডারের মোট দাম হিসাব (ঘ) ডার্ক মোড চালু-বন্ধ করা

    (ক) সার্ভারে — আসল পাসওয়ার্ড যাচাই কখনো ব্রাউজারে নয়; ব্রাউজারের কোড যে কেউ দেখতে ও বদলাতে পারেন।

    (খ) ব্রাউজারে (আর সার্ভারেও) — তাৎক্ষণিক সাহায্যের জন্য ব্রাউজারে, কিন্তু নিরাপত্তার জন্য সার্ভারেও আবার যাচাই।

    (গ) দুই জায়গাতেই — ব্রাউজারে দেখানোর জন্য, সার্ভারে চূড়ান্ত সিদ্ধান্তের জন্য। ঠিক যেমন “এক কোড, চার ঘর” stepper-এ দেখেছেন।

    (ঘ) ব্রাউজারে — এটি শুধু চেহারার বিষয়, নিরাপত্তার নয়।

    নিয়মটি মনে রাখুন: সুবিধার জন্য ব্রাউজার, বিশ্বাসের জন্য সার্ভার।

  4. AI অডিট: যেকোনো AI-কে বলুন “JavaScript দিয়ে একটি to-do list বানাও, যেখানে ব্যবহারকারী কাজ লিখে যোগ করতে পারবে।” উত্তর পাওয়ার পর ওপরের চেকলিস্ট দিয়ে যাচাই করুন — বিশেষ করে, লেখাটি পাতায় বসানো হয়েছে innerHTML দিয়ে, না textContent দিয়ে?

    প্রায়ই দেখা যায় AI কিছুটা এমন লেখে: li.innerHTML = task বা টেমপ্লেট স্ট্রিং দিয়ে পুরো HTML বানিয়ে innerHTML-এ বসায়। সাধারণ লেখায় এটি ঠিকঠাক চলে, তাই ভুলটা চোখে পড়ে না। কিন্তু কেউ কাজের নামে HTML ট্যাগ লিখলে ব্রাউজার সেটাকে লেখা নয়, পাতার অংশ হিসেবে বসিয়ে দেবে — আর ক্ষতিকর ট্যাগ হলে এটাই XSS নামের নিরাপত্তা-ত্রুটির পথ খোলে। নিরাপদ বিকল্প textContent, যা যেকোনো লেখাকে শুধু লেখা হিসেবেই দেখায়। আরও খেয়াল করুন: কাজ খালি থাকলে যোগ হয় কি না, আর পাতা reload করলে তালিকা হারিয়ে যায় কি না (storage — পর্ব ৪০)। পর্ব ৪৩-এ XSS আর তার প্রতিরোধ বিস্তারিত দেখব।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমJavaScript-এর ইতিহাসের ঘটনাগুলো সময়ের ক্রমে সাজান (▲▼ চেপে সরান)

  1. 🐣 Netscape-এ Brendan Eich-এর হাতে ভাষাটির জন্ম
  2. 📜 Ecma প্রকাশ করল প্রথম মানদণ্ড ECMAScript 1
  3. 🚀 Google Chrome-এর সাথে V8 engine প্রকাশ
  4. 🟢 Ryan Dahl-এর Node.js আর ES5 প্রকাশ
  5. ✨ ES2015 (ES6) — let, const, class, module

পৃথিবীর সব প্রধান ওয়েব ব্রাউজার কোনো প্লাগইন ছাড়াই সরাসরি কোন প্রোগ্রামিং ভাষা চালায়?

  • Java
  • JavaScript
  • Python
  • PHP

JavaScript আর ECMAScript-এর সম্পর্ক কোনটি?

  • দুটি আলাদা প্রতিদ্বন্দ্বী ভাষা
  • ECMAScript হলো JavaScript-এর একটি library
  • ECMAScript হলো লিখিত মানদণ্ড; JavaScript সেই মানদণ্ডের বাস্তবায়ন
  • ECMAScript হলো JavaScript-এর নতুন নাম, পুরোনো নাম বাতিল

Node.js সবচেয়ে সঠিকভাবে কী?

  • ব্রাউজারের বাইরে JavaScript চালানোর একটি runtime
  • JavaScript থেকে আলাদা একটি নতুন প্রোগ্রামিং ভাষা
  • Google-এর তৈরি একটি ওয়েব ব্রাউজার
  • React-এর মতো একটি front-end framework

২০০৮ সালের পর JavaScript নাটকীয়ভাবে দ্রুত হওয়ার প্রধান কারণ কী?

  • ভাষার syntax পুরোপুরি বদলে ফেলা হয়েছিল
  • ইন্টারনেটের গতি বেড়ে যাওয়া
  • ব্রাউজার JavaScript-কে Java-তে রূপান্তর করে চালাতে শুরু করে
  • V8-এর মতো engine-এ JIT compilation — চলার সময়ই machine code তৈরি

একটি ই-কমার্স সাইটে “Add to cart” চাপলে পুরো পাতা reload না হয়ে শুধু কার্টের সংখ্যাটি বদলায়। এখানে JavaScript কোন কাজটি করে?

  • সার্ভার থেকে পুরো নতুন HTML পাতা এনে বসানো
  • ক্লিকের event ধরে পেছনে সার্ভারে অনুরোধ পাঠায়, তারপর DOM-এর শুধু দরকারি অংশ বদলায়
  • CSS ফাইল নতুন করে লোড করে
  • সার্ভারের সাথে কোনো যোগাযোগ ছাড়াই শুধু ব্রাউজারে সব হিসাব চূড়ান্ত করে

Java আর JavaScript সম্পর্কে কোন কথাটি সঠিক?

  • নামের মিল বিপণনের কারণে; দুটি সম্পূর্ণ আলাদা ভাষা
  • JavaScript হলো Java-র হালকা সংস্করণ
  • দুটিই JVM-এ চলে
  • দুটিতেই একই রকম static টাইপ ব্যবস্থা

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. JavaScript সব ব্রাউজারের নিজস্ব ভাষা; Node.js-এর পর থেকে সার্ভার, ডেস্কটপ, মোবাইল — সবখানে।
  2. একটি ক্লিকের যাত্রা: Event → Handler → fetch → Server → JSON → DOM.
  3. ভাষা ≠ runtime: document আসে ব্রাউজার থেকে, ফাইল পড়ার ক্ষমতা Node.js থেকে।
  4. ১৯৯৫-এ দশ দিনে জন্ম → ১৯৯৭-এ ECMAScript → ২০০৮-এ V8/JIT → ২০০৯-এ ES5 ও Node.js → ২০১৫-এ ES2015 → তারপর প্রতি বছর।
  5. JavaScript-এর দুর্বলতা (coercion, এক thread, দ্রুত বদলানো ইকোসিস্টেম) জেনে-বুঝে চলুন; AI-এর কোড যাচাইয়ে event loop, DOM, নিরাপত্তা বোঝা অপরিহার্য।

পরের পর্বে: একটি ওয়েব পাতা আসলে তিনটি স্তরে তৈরি — HTML, CSS আর JavaScript. কে কোন দায়িত্ব নেয়, ব্রাউজার কীভাবে একটি পাতা সাজিয়ে দেখায়, আর JavaScript ঠিক কোথায় ঢোকে — সেই মানসিক ছবিটি গড়ব।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান