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

Java কেন? এক কোড, সব জায়গায়

Why Java? Write Once, Run Anywhere

Taught in Bangla, this lesson introduces Java's write-once-run-anywhere promise: how source becomes bytecode run by the JVM, the JDK/JRE/JVM layers, where Java runs today in Bangladesh and worldwide, its history and six-month LTS release train, and an honest comparison with C, C++, Python, JavaScript and Kotlin.

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

  • এই কোর্স কীভাবে সাজানো — পর্ব, ডায়াগ্রাম, পাতাতেই চালানো যায় এমন কোড, কুইজ, পরীক্ষা ও সার্টিফিকেট
  • “write once, run anywhere” আসলে কীভাবে কাজ করে — .java থেকে bytecode, তারপর JVM
  • Java আজ কোথায় চলে, কীভাবে জন্মাল, আর version ও LTS-এর হিসাব
  • C, C++, Python, JavaScript, Kotlin-এর সাথে সৎ তুলনা — কোন কাজে কোন ভাষা
  • AI-এর লেখা Java কোড যাচাইয়ের প্রথম চেকলিস্ট

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

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

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

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

কনসেপ্ট আগে

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

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

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

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

শেখার প্রতি পর্বে অন্তত ৩টি

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

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

আধুনিক Java 21

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

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

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

লেখার ভেতরে ডটেড দাগ দেওয়া শব্দে মাউস রাখলে বা চাপলে তার সহজ বাংলা মানে দেখাবে; পর্বের শেষে “শব্দকোষ” অংশে সব একসাথে পাবেন। অগ্রগতির নিয়মটিও সহজ। লগইন করলে (Google বা ইমেইল দিয়ে) প্রতিটি পর্বের শেষে “পড়া শেষ” চিহ্ন দিতে পারবেন, আর সেটা যেকোনো ডিভাইস থেকে দেখা যাবে। লগইন না করেও সব পড়া, কোড চালানো আর কুইজ দেওয়া যায় — শুধু অগ্রগতি জমা থাকে না। ড্যাশবোর্ডে শেখার সাতটি মডিউলের (মডিউল ১–৭) প্রতিটির জন্য একটি করে টেস্ট (১৫টি প্রশ্ন, ২০ মিনিট) আর পুরো কোর্সের ফাইনাল পরীক্ষা (৪০টি প্রশ্ন, ৬০ মিনিট) আছে। মডিউল ৮ পরীক্ষা-প্রস্তুতির অনুশীলন, তাই সেখানে আলাদা টেস্ট নেই। মডিউল ১–৭-এর সব পর্ব পড়া শেষ করে ফাইনালে ৬০% বা তার বেশি পেলে সার্টিফিকেট পাবেন।

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

আমরা আপনাকে আধুনিক Java শেখাব — var, record, switch expression, text block, Stream আর virtual thread-এর Java, যা আজ পেশাদাররা লেখেন। কিন্তু শুধু syntax নয়: প্রতিটি পর্বে দেখব JVM ভেতরে কী করছে, কারণ যিনি ভেতরের নিয়ম বোঝেন, তিনিই AI-এর লেখা কোডের ভুল ধরতে পারেন।

২ · Java-র প্রতিশ্রুতি — এক কোড, সব জায়গায়

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

এই প্রতিশ্রুতি রাখার কৌশলটি চমৎকার। C-তে আপনার কোড compile হয় একটি নির্দিষ্ট CPU আর OS-এর জন্য — Windows-এর .exe Linux-এ চলে না। Java সেই পথে যায় না। Java-র compiler (javac) আপনার কোডকে অনুবাদ করে এমন একটি যন্ত্রের ভাষায়, যার আসলে কোনো শরীর নেই — Java Virtual Machine. সেই ভাষাকে বলে bytecode. তারপর প্রতিটি কম্পিউটারে থাকে নিজস্ব একটি JVM, যা ওই bytecode পড়ে সেই কম্পিউটারের ভাষায় চালায়।

মোবাইল রিচার্জ কার্ডের কথা ভাবুন। কার্ডের গোপন নম্বরটি একই — Samsung, Xiaomi বা পুরোনো বাটন ফোন, যেটাতেই দিন, রিচার্জ হয়ে যায়। কারণ প্রতিটি ফোনের ভেতরের সফটওয়্যার জানে ওই নম্বর কীভাবে পড়তে হয়। Java-র bytecode সেই রিচার্জ নম্বর, আর প্রতিটি কম্পিউটারের JVM হলো ফোনের ভেতরের সেই পাঠক। কার্ড বানানেওয়ালাকে প্রতিটি ফোনের জন্য আলাদা কার্ড বানাতে হয় না।

শুধু বহনযোগ্যতা দিয়ে কোনো ভাষা ত্রিশ বছর টিকে থাকে না। Java-র আরও তিনটি স্তম্ভ আছে:

🧭 Bytecode আর JVM

একবার compile, যেকোনো OS-এ চালান। JVM চলার সময় দরকারি অংশ machine code-এ বদলে নেয় (JIT), তাই গতিও ভালো।

write once, run anywhere

🛡️ কড়া static typing

প্রতিটি ভ্যারিয়েবলের টাইপ compile-এর সময়ই জানা থাকে। টাকার জায়গায় নাম বসালে প্রোগ্রাম চালানোর আগেই compiler থামিয়ে দেয়।

ভুল ধরা পড়ে আগেই

♻️ স্বয়ংক্রিয় মেমরি

C-র মতো হাতে মেমরি ফেরত দিতে হয় না। Garbage collector অব্যবহৃত object খুঁজে নিজেই জায়গা খালি করে।

মেমরির বাগ অনেক কম

🧩 বিশাল ইকোসিস্টেম

JDK-র সাথেই বিশাল standard library; তার বাইরে Maven Central-এ অগণিত library, আর Spring-এর মতো framework.

প্রায় সব কাজের টুল তৈরি

এবার একটু স্বাদ নিন। একটি দোকানের এক সপ্তাহের বিক্রি একটি List-এ রাখা আছে। মোট, গড় আর সবচেয়ে বেশি বিক্রির দিন জানতে চাই। নিচের কোডটি “Run” চেপে চালান:

import java.util.List;

class Main {
    public static void main(String[] args) {
        System.out.println("হ্যালো! আমি Java — এক সপ্তাহের বিক্রির হিসাব করছি।");

        List<Integer> sales = List.of(1200, 850, 1500, 980, 2100, 760, 1610);

        int total = 0;
        int best = 0;
        for (int s : sales) {
            total += s;
            best = Math.max(best, s);
        }
        double average = (double) total / sales.size();

        System.out.printf("Days    : %d%n", sales.size());
        System.out.printf("Total   : %d Tk%n", total);
        System.out.printf("Average : %.2f Tk%n", average);
        System.out.printf("Best day: %d Tk%n", best);
    }
}

আউটপুটে প্রথমে বাংলা শুভেচ্ছা, তারপর Days : 7, Total : 9000 Tk, Average : 1285.71 Tk আর Best day: 2100 Tk. খেয়াল করুন কয়েকটি জিনিস। প্রতিটি Java প্রোগ্রাম একটি class-এর ভেতরে থাকে, আর চলা শুরু হয় main method থেকে (পর্ব ০৪-এ প্রতিটি শব্দের মানে দেখবেন)। List<Integer> বলে দিচ্ছে তালিকায় শুধু পূর্ণসংখ্যা থাকবে — ভুল করে লেখা ঢোকাতে চাইলে compiler আপত্তি করবে। (double) total না লিখলে ভাগটা পূর্ণসংখ্যায় হতো, আর গড় আসত 1285. printf-এর %.2f মানে দশমিকের পর দুই ঘর, আর %n মানে নতুন লাইন। এই পাতার রানারে main class-এর আগে public লেখা নেই; নিজের প্রজেক্টে সাধারণত public class Main লেখা হয়, ফাইলের নাম Main.java.

এবার দেখি JVM লুপটা ধাপে ধাপে কীভাবে চালায়। ছোট করে তিন দিনের বিক্রি নিলাম। “পরে” চাপুন, আর ডান পাশে ভ্যারিয়েবলের মান খেয়াল করুন:

1List<Integer> sales = List.of(1200, 850, 1500);2int total = 0;3for (int s : sales) {4    total += s;5}6System.out.println("মোট: " + total);
ভ্যারিয়েবলের মান
sales
total
s
  1. লাইন ১: তিনটি সংখ্যা নিয়ে একটি List তৈরি হলো। <Integer> লিখে আমরা compiler-কে কথা দিলাম — এই তালিকায় শুধু পূর্ণসংখ্যা থাকবে। List.of দিয়ে বানানো তালিকা পরে বদলানো যায় না।
  2. লাইন ২: int total = 0; — টাইপ (int) আগে বলতে হলো। এখন থেকে total-এ কখনো লেখা বা দশমিক সংখ্যা রাখা যাবে না; চেষ্টা করলে compile-ই হবে না।
  3. লাইন ৩, প্রথম ঘোরা: for (int s : sales) মানে “তালিকার প্রতিটি জিনিসকে একে একে s নাম দাও।” প্রথমে s = 1200. সূচক বা দৈর্ঘ্য নিজে গুনতে হলো না।
  4. লাইন ৪: total += s মানে total = total + s, অর্থাৎ 0 + 1200 = 1200. লুপের ভেতরের অংশ চেনা যায় { } দিয়ে — indentation শুধু পড়ার সুবিধার জন্য।
  5. দ্বিতীয় ঘোরা: s হলো 850.
  6. total = 1200 + 850 = 2050.
  7. তৃতীয় ঘোরা: s হলো 1500 — তালিকার শেষ জিনিস।
  8. total = 2050 + 1500 = 3550. তালিকায় আর কিছু নেই, তাই লুপ শেষ।
  9. লাইন ৬: ফল ছাপা হলো। খেয়াল করুন, s-এর ঘর এখন ফাঁকা — লুপের ভেতরে ঘোষণা করা ভ্যারিয়েবল লুপ শেষ হলেই হারিয়ে যায়। লুপের বাইরে s লিখলে compiler error দেবে। Python-এ কিন্তু লুপের পরেও নামটা থেকে যায়; এমন ছোট পার্থক্য পর্ব ১১-এ আবার দেখবেন।

একই ধরনের কাজ — bKash-ধাঁচের কয়েকটি লেনদেন থেকে মোট জমা আর মোট খরচ — আধুনিক Java আর Python-এ পাশাপাশি দেখুন। (এগুলো চালানোর জন্য নয়, শুধু তুলনার জন্য।)

record Txn(String type, int amount) {}

var txns = List.of(
        new Txn("cash-in", 500), new Txn("send", -120),
        new Txn("payment", -45), new Txn("cash-in", 1000),
        new Txn("send", -300));

int received = txns.stream().mapToInt(Txn::amount).filter(a -> a > 0).sum();
int spent = -txns.stream().mapToInt(Txn::amount).filter(a -> a < 0).sum();
System.out.println("Received: " + received + ", Spent: " + spent);
// Received: 1500, Spent: 465
txns = [("cash-in", 500), ("send", -120), ("payment", -45),
        ("cash-in", 1000), ("send", -300)]

received = sum(a for _, a in txns if a > 0)
spent = -sum(a for _, a in txns if a < 0)
print(f"Received: {received}, Spent: {spent}")
# Received: 1500, Spent: 465

Python ছোট — তাতে সন্দেহ নেই। কিন্তু Java-র কোডে একটি জিনিস বাড়তি আছে: record Txn(String type, int amount) লিখে আমরা ডেটার আকৃতি নিজেই ঘোষণা করেছি। এখন কেউ ভুল করে টাকার জায়গায় লেখা পাঠালে, বা amount-এর বানান ভুল লিখলে, প্রোগ্রাম চালানোর আগেই compiler ধরবে। দশ লাইনের স্ক্রিপ্টে এটা বাড়তি ঝামেলা; দশ লাখ লাইনের ব্যাংকিং সিস্টেমে, যেখানে দুইশো জন প্রোগ্রামার একসাথে কাজ করেন, এটাই রক্ষাকবচ।

মূল লেনদেন

Java কিছুটা বাড়তি লেখার বিনিময়ে নিরাপত্তা আর দীর্ঘ আয়ু কেনে। টাইপ লিখতে হয়, class লিখতে হয় — কিন্তু বদলে compiler আর IDE আপনার হয়ে অসংখ্য ভুল ধরে, আর পাঁচ বছর পরে অন্য কেউ কোডটি খুললেও বুঝতে পারেন কোন জিনিস কী ধরনের। আধুনিক Java (var, record, Stream) সেই বাড়তি লেখার অনেকটাই কমিয়ে এনেছে।

৩ · Main.java থেকে যেকোনো মেশিনে — যাত্রাটা দেখি

“write once, run anywhere” কথাটা শুনতে স্লোগানের মতো। ভেতরে আসলে কী ঘটে, বড় ছবিটা এখানে দেখি; প্রতিটি অংশের গভীরে যাব পর্ব ০৫-এ। “পরে” চাপুন:

  1. আপনার কোডMain.javasource code
  2. Compilerjavacটাইপ ও ব্যাকরণ যাচাই
  3. BytecodeMain.classসব OS-এর জন্য একই ফাইল
  4. JVMWin · Linux · Macপ্রতিটি OS-এর নিজস্ব
  5. আউটপুটহ্যালো!সবখানে একই ফল
Main.javaআপনি (বা AI) যা লিখেছেন
public class Main {
    public static void main(String[] args) {
        System.out.println("হ্যালো, ঢাকা!");
    }
}
Terminalcompile করার কমান্ড
$ javac Main.java
# কোনো মেসেজ না এলে মানে সফল — পাশে Main.class তৈরি হয়েছে
$ ls
Main.class  Main.java
Main.class (সরল করে)javap -c দিয়ে দেখা যায়
// ফাইলের প্রথম চার byte সবসময়: CA FE BA BE
getstatic      System.out
ldc            "হ্যালো, ঢাকা!"
invokevirtual  println
return
একই Main.class, তিনটি কম্পিউটারযার যার JVM
Main.class ─► JVM (Windows, Intel/AMD)  ─► হ্যালো, ঢাকা!
Main.class ─► JVM (Linux সার্ভার, ARM)  ─► হ্যালো, ঢাকা!
Main.class ─► JVM (macOS, Apple চিপ)    ─► হ্যালো, ঢাকা!
// Android: bytecode আগে DEX-এ বদলায়, চালায় ART
Terminalচালানো হলো
$ java Main
হ্যালো, ঢাকা!
  1. Source code. আপনি Main.java ফাইলে লিখলেন। নিজের প্রজেক্টে নিয়ম হলো — public class-এর নাম আর ফাইলের নাম হুবহু এক হবে। এটি মানুষের পড়ার মতো লেখা, কোনো CPU এখনো কিছু বোঝে না।
  2. javac — কড়া পরীক্ষক। Java compiler পুরো ফাইল পড়ে ব্যাকরণ আর টাইপ যাচাই করে। ; বাদ পড়লে, নেই এমন method ডাকলে, বা int-এ লেখা রাখতে চাইলে এখানেই থামিয়ে দেয় — প্রোগ্রাম একবারও চলার আগে। এটাই Python-এর সাথে বড় পার্থক্য।
  3. Bytecode. javac machine code বানায় না, বানায় .class ফাইল — JVM-এর জন্য লেখা ছোট ছোট নির্দেশ। প্রতিটি .class ফাইল শুরু হয় চারটি byte দিয়ে: CA FE BA BE (“café babe”) — Java-র স্রষ্টাদের একটি মজা। সবচেয়ে গুরুত্বপূর্ণ কথা: এই ফাইলটি Windows, Linux, Mac — সবার জন্য একই।
  4. প্রতিটি OS-এর নিজস্ব JVM. জাদুটা এখানে। JVM নিজে একটি সাধারণ প্রোগ্রাম, যা প্রতিটি OS আর CPU-র জন্য আলাদা করে বানানো। আপনার bytecode একই থাকে, বদলায় শুধু তার পাঠক। Android-এ গল্পটা একটু আলাদা — সেখানে bytecode আগে DEX নামের আরেকটি রূপে বদলানো হয়, আর চালায় Android Runtime (ART), সাধারণ JVM নয়। কিন্তু মূল চিন্তা একই।
  5. চালানো ও আউটপুট. JVM Main.class লোড করে, আগে যাচাই করে নেয় ফাইলটি নিরাপদ কি না, তারপর চালায়। প্রথমে bytecode ধীরে ধীরে interpret করে; যে অংশ বারবার চলে, JIT compiler সেটিকে চলার সময়ই ওই CPU-র machine code-এ বদলে নেয়। তাই দীর্ঘ সময় চলা সার্ভারে Java খুব দ্রুত। বিস্তারিত পর্ব ০৫-এ।
.java → javac → .class (bytecode) → JVM → আপনার কম্পিউটার
compile একবার, চালানো যেকোনো জায়গায়

JDK, JRE, JVM — তিনটি শব্দ, তিনটি স্তর

নতুনরা প্রায়ই এই তিনটি গুলিয়ে ফেলেন, আর পরীক্ষা ও ইন্টারভিউতে এটি খুব চেনা প্রশ্ন। সহজ করে মনে রাখুন — একটি অন্যটির ভেতরে:

নামভেতরে কী আছেকার দরকার
JVM (Java Virtual Machine)bytecode চালানোর ইঞ্জিন — interpreter, JIT, garbage collectorযেকোনো Java প্রোগ্রাম চালাতে
JRE (Java Runtime Environment)JVM + standard libraryশুধু চালাতে চান, লিখতে নয় (পুরোনো ধারণা)
JDK (Java Development Kit)JRE-র সবকিছু + javac, jshell, javap, jar ইত্যাদি টুলপ্রোগ্রামার — অর্থাৎ আপনি

Java 11 থেকে আলাদা করে “JRE” ডাউনলোডের রীতি প্রায় উঠে গেছে; এখন সবাই সরাসরি JDK নামান। পর্ব ০৩-এ নিজের কম্পিউটারে JDK বসানো দেখবেন, আর পর্ব ০৫-এ JVM-এর ভেতরে — class loading, JIT আর GC — বিস্তারিত।

৪ · Java আজ কোথায় চলে

Java প্রায়ই চোখে পড়ে না, কারণ এর বড় অংশ চলে পর্দার পেছনে — সার্ভারে। আপনি যখন মোবাইল অ্যাপ থেকে টাকা পাঠান, অনলাইনে টিকিট কাটেন বা ব্যাংকের স্টেটমেন্ট দেখেন, তখন পেছনের কোনো না কোনো সার্ভারে Java চলার সম্ভাবনা যথেষ্ট। প্রধান ক্ষেত্রগুলো দেখুন:

এন্টারপ্রাইজ ব্যাকএন্ড

ব্যাংকের কোর সিস্টেম, বিমা, টেলিকমের বিলিং, ই-কমার্সের অর্ডার ব্যবস্থা — বড়, দীর্ঘজীবী, অনেক মানুষের হাতে লেখা সিস্টেমে Java বহু বছর ধরে প্রধান ভাষাগুলোর একটি।

ব্যাংক, টেলিকম, ই-কমার্স

Spring Boot ও microservice

বড় সিস্টেমকে ছোট ছোট আলাদা সার্ভিসে ভাগ করে চালানোর ধারায় Spring Boot সবচেয়ে জনপ্রিয় Java framework. পর্ব ৫০–৫১-এ এর শুরু দেখবেন।

REST API, cloud

Android

Android অ্যাপ শুরু থেকে Java-তে লেখা হতো। এখন Google নতুন অ্যাপের জন্য Kotlin-কে প্রথম পছন্দ বলে, কিন্তু Kotlin-ও একই bytecode-এ compile হয়, আর বহু পুরোনো অ্যাপ ও Android-এর নিজের বড় অংশ Java-তেই।

Java + Kotlin

বিগ ডেটা

Hadoop লেখা Java-তে; Kafka আর Spark লেখা Java ও Scala-য় — সবই JVM-এ চলে। বিশাল ডেটা নিয়ে কাজ করা অনেক টুলের শিকড় এই JVM জগতে।

Hadoop, Kafka, Spark

গেম ও ডেস্কটপ টুল

বিশ্বের সবচেয়ে বেশি বিক্রি হওয়া গেমগুলোর একটি Minecraft-এর মূল (Java Edition) Java-তে লেখা। IntelliJ IDEA-র মতো জনপ্রিয় IDE-ও চলে JVM-এ।

Minecraft, IntelliJ

সার্চ ও অবকাঠামো

Elasticsearch-এর মতো সার্চ ইঞ্জিন, নানা message queue, build টুল (Maven, Gradle) — অবকাঠামোর বহু সফটওয়্যার JVM-এর ওপর দাঁড়িয়ে।

Elasticsearch, Gradle

বাংলাদেশে Java

বাংলাদেশের চাকরির বাজারে Java-র উপস্থিতি পুরোনো এবং স্থির। ব্যাংক, মোবাইল ফাইন্যান্স, টেলিকম আর বড় সফটওয়্যার কোম্পানির সফটওয়্যার ইঞ্জিনিয়ার পদের বিজ্ঞাপনে “Java, Spring Boot, REST API, SQL” প্রায় নিয়মিত দেখা যায়। দেশের অনেক সফটওয়্যার কোম্পানি বিদেশি ব্যাংক, ই-কমার্স বা টেলিকম গ্রাহকের জন্য Java-তে সিস্টেম বানায়। বিশ্ববিদ্যালয়ে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং শেখাতেও Java বহুল ব্যবহৃত, আর অনেক চাকরির পরীক্ষা ও ইন্টারভিউতে OOP-র প্রশ্ন Java দিয়েই করা হয়। Android-এর কাজে এখন Kotlin বেশি চাওয়া হলেও Java জানা সেখানেও বড় সুবিধা।

“Java শিখলেই নিশ্চিত চাকরি” — এমন দাবি বিশ্বাস করবেন না। চাকরি দেয় দক্ষতা: সমস্যা ভাঙতে পারা, পরিষ্কার ও পরীক্ষিত কোড লেখা, ডেটাবেস আর নেটওয়ার্ক বোঝা, অন্যের কোড পড়তে পারা। Java সেই দক্ষতা দেখানোর একটি শক্ত মাধ্যম, শর্টকাট নয়।

৫ · জন্মকথা — Green প্রজেক্ট থেকে Java 25

১৯৯১ সাল। ক্যালিফোর্নিয়ার Sun Microsystems-এ কয়েকজন প্রকৌশলীকে একটি গোপন দলে আলাদা করা হলো — নাম “Green প্রজেক্ট”। নেতৃত্বে কানাডীয় প্রোগ্রামার James Gosling. লক্ষ্য ছিল টিভির সেট-টপ বক্সের মতো ঘরোয়া যন্ত্রের জন্য সফটওয়্যার। সমস্যা হলো, প্রতিটি যন্ত্রের চিপ আলাদা, আর C++-এ লেখা কোড প্রতিটির জন্য আলাদা করে compile করতে হতো; মেমরির ভুলে যন্ত্র আটকে যেত। Gosling তাই একটি নতুন ভাষা বানালেন — অফিসের জানালার বাইরের ওক গাছ দেখে নাম দিলেন Oak. যন্ত্রের বাজার তখন জমেনি, কিন্তু ঠিক সেই সময় ওয়েব ছড়াতে শুরু করল — যেখানে নানা রকম কম্পিউটার একই নেটওয়ার্কে যুক্ত। “এক কোড, সব যন্ত্র” চিন্তার জন্য এর চেয়ে ভালো মঞ্চ আর হয় না।

Oak নামটি ট্রেডমার্কের ঝামেলায় পড়ায় নতুন নাম খোঁজা হলো; শেষে বেছে নেওয়া হলো Java — ইন্দোনেশিয়ার জাভা দ্বীপের কফি থেকে, যাকে আমেরিকায় কফির ডাকনাম হিসেবেও বলা হয়। এজন্যই Java-র লোগো এক কাপ ধোঁয়া-ওঠা কফি। একটি সাধারণ ভুল ধারণাও এখানে ভাঙা দরকার: JavaScript আর Java সম্পূর্ণ আলাদা ভাষা। ১৯৯৫ সালে Netscape তাদের ব্রাউজারের scripting ভাষার নামে “Java” জুড়ে দেয় মূলত Java-র তখনকার জনপ্রিয়তার সুযোগ নিতে।

সালঘটনা
১৯৯১Sun-এ Green প্রজেক্ট; James Gosling-এর ভাষা Oak
১৯৯৫ (মে)“Java” নামে প্রকাশ্যে ঘোষণা; ব্রাউজারে applet চালানোর প্রতিশ্রুতি
১৯৯৬ (জানুয়ারি)JDK 1.0 — প্রথম আনুষ্ঠানিক সংস্করণ
২০০৪Java 5 — generics, enum, for-each লুপ
২০০৬–২০০৭Sun Java-কে ওপেন সোর্স করে — জন্ম নেয় OpenJDK
২০১০ (জানুয়ারি)Oracle, Sun Microsystems কিনে নেয়
২০১৪ (মার্চ)Java 8 — lambda আর Stream; বহু বছর সবচেয়ে প্রচলিত version (LTS)
২০১৭–২০১৮Java 9 (module system); Java 10 থেকে প্রতি ছয় মাসে নতুন version
২০১৮ (সেপ্টেম্বর)Java 11 (LTS)
২০২১ (সেপ্টেম্বর)Java 17 (LTS) — sealed class; record এসেছিল Java 16-এ
২০২৩ (সেপ্টেম্বর)Java 21 (LTS) — virtual thread, switch-এ pattern matching, record pattern
২০২৫ (সেপ্টেম্বর)Java 25 (LTS) — সবচেয়ে নতুন LTS

ছয় মাসের ট্রেন আর LTS

আগে Java-র বড় version আসত কয়েক বছর পরপর, আর একটি বড় বৈশিষ্ট্য দেরি করলে পুরো version আটকে যেত। Java 10 (২০১৮) থেকে নিয়ম বদলে গেছে — প্রতি মার্চ আর সেপ্টেম্বরে একটি নতুন version, ট্রেনের সময়সূচির মতো। যে বৈশিষ্ট্য তৈরি, সে ট্রেনে ওঠে; যে তৈরি নয়, পরের ট্রেনের অপেক্ষা করে। কিন্তু ব্যাংকের মতো প্রতিষ্ঠান প্রতি ছয় মাসে সিস্টেম বদলাতে পারে না। তাদের জন্য কিছু version-কে বলা হয় LTS (Long-Term Support) — বহু বছর ধরে নিরাপত্তা আপডেট পায়। এখন পর্যন্ত LTS: 8, 11, 17, 21 আর 25.

কে চালায় Java?

Java ভাষার মালিকানা ও ট্রেডমার্ক এখন Oracle-এর, কিন্তু ভাষার মূল কোড উন্মুক্ত — OpenJDK প্রজেক্টে Oracle-এর সাথে Red Hat, Microsoft, Amazon, SAP, IBM-সহ বহু প্রতিষ্ঠান কাজ করে। নতুন বৈশিষ্ট্য প্রস্তাব করা হয় JEP (JDK Enhancement Proposal) নামের লিখিত নথিতে, আর ভাষার আনুষ্ঠানিক নিয়ম ঠিক হয় Java Community Process (JCP)-এর মাধ্যমে। একই OpenJDK কোড থেকে নানা প্রতিষ্ঠান বিনামূল্যের JDK বানায় — Eclipse Temurin, Amazon Corretto, Microsoft Build of OpenJDK ইত্যাদি।

Version নিয়ে একটি পরিষ্কার কথা: সবচেয়ে নতুন LTS হলো Java 25 (সেপ্টেম্বর ২০২৫), আর তার পরেও প্রতি ছয় মাসে নতুন version আসছে। তবু এই কোর্সের সব কোড Java 21-এ লেখা ও পরীক্ষা করা, কারণ পাতার অনলাইন রানার Java 21 (LTS) ব্যবহার করে। চিন্তার কিছু নেই — Java পুরোনো কোডের সাথে সামঞ্জস্য রাখায় খুব সতর্ক, তাই এই কোর্সের কোড Java 25-এও চলবে। কোনো বৈশিষ্ট্য নির্দিষ্ট version থেকে এলে আমরা লিখে দেব, যেমন “record — Java 16 থেকে স্থায়ী”।

৬ · চার স্তরের ইকোসিস্টেম — ভাষা থেকে Spring

“Java জানি” বললে আসলে চারটি স্তরের কথা বোঝায়। নতুনরা প্রায়ই গুলিয়ে ফেলেন — “Spring কি Java-র অংশ?” না, এটি বাইরের একটি framework. কোন জিনিস কোন স্তরের, জানলে error পড়া, dependency যোগ করা আর AI-এর কোড যাচাই করা অনেক সহজ হয়। স্তরগুলো একে একে দেখুন:

  1. ভাষাclass, int, forমূল নিয়ম
  2. JDK libraryjava.util, java.timeJDK-র সাথেই আসে
  3. Maven CentralGson, Jacksonবাইরে থেকে আনতে হয়
  4. FrameworkSpring Bootপুরো কাঠামো
স্তর ১ · ভাষাকিছু import লাগে না
int total = 0;
for (int s : new int[]{1200, 850, 1500}) {
    total += s;
}
String msg = "মোট: " + total;
স্তর ২ · JDK libraryimport করলেই হলো
import java.time.LocalDate;

LocalDate victoryDay = LocalDate.of(2026, 12, 16);
System.out.println(victoryDay.getDayOfWeek());  // WEDNESDAY
// java.util, java.time, java.net.http, java.nio.file ... সব সাথেই
স্তর ৩ · Maven Central থেকে librarybuild ফাইলে এক লাইন
// build.gradle.kts (Gradle)
dependencies {
    implementation("com.google.code.gson:gson:2.11.0")
}
// Gradle বা Maven নিজেই নামিয়ে প্রজেক্টে জুড়ে দেয়
স্তর ৪ · frameworkকাঠামো আপনার কোড ডাকে
@RestController
class BalanceController {
    @GetMapping("/balance")
    int balance() { return 975; }
}
  1. ভাষা। class, int, if, for, record, interface — Java-র মূল নিয়ম ও শব্দ, যা কোনো import ছাড়াই সবখানে চলে। String-এর মতো কিছু অতি-প্রয়োজনীয় class (java.lang প্যাকেজ) আপনাআপনি পাওয়া যায়। মডিউল ২–৪ মূলত এই স্তর।
  2. JDK library. JDK ইনস্টল করলেই সাথে আসে হাজার হাজার class — তালিকা ও ম্যাপ (java.util), তারিখ (java.time), ফাইল (java.nio.file), এমনকি HTTP client. শুধু import লিখতে হয়। উপরের উদাহরণে ২০২৬ সালের বিজয় দিবস কোন বার, সেটা এক লাইনে বেরিয়ে এলো। কিছু ইনস্টল লাগে না বলে এগুলো সবচেয়ে নির্ভরযোগ্য; মডিউল ৫–৬-এ বিস্তারিত।
  3. Maven Central. Java জগতের সবচেয়ে বড় library-র ভান্ডার — JSON, ডেটাবেস ড্রাইভার, টেস্টিং, PDF বানানো, প্রায় সবকিছু। নিজে ডাউনলোড করতে হয় না; Maven বা Gradle-এর build ফাইলে নাম আর version লিখলেই সেগুলো নিজেরাই নামিয়ে জুড়ে দেয় (পর্ব ৪৬)। সাবধানতা: বাইরের প্রতিটি library আপনার সিস্টেমের অংশ হয়ে যায় — তার বাগ বা নিরাপত্তা-ত্রুটিও।
  4. Framework. সাধারণ library-কে আপনি ডাকেন; framework উল্টো — সে পুরো কাঠামো দেয়, আর ঠিক সময়ে আপনার কোডকে ডাকে। উপরের কোডে @GetMapping("/balance") লিখে শুধু বলা হলো “কেউ /balance চাইলে এই method চালিও” — সার্ভার চালু, অনুরোধ গ্রহণ, উত্তর পাঠানো সব Spring Boot করে। পর্ব ৫০–৫১-এ শুরু করবেন। আগের তিন স্তর ভালো বুঝলে যেকোনো framework দ্রুত শেখা যায়; না বুঝলে framework একটা কালো বাক্স।

একটি গার্মেন্টস কারখানা দিয়ে ভাবুন। সেলাই মেশিন চালানোর দক্ষতা হলো ভাষা। কারখানার নিজস্ব স্টোরে থাকা সুতা, বোতাম, কাঁচি হলো JDK library — চাইলেই হাতের কাছে। বাইরের সরবরাহকারীর কাছ থেকে আনা বিশেষ কাপড় হলো Maven Central-এর library — আনতে হয়, আর মান যাচাই করে আনতে হয়। আর বিদেশি ক্রেতার দেওয়া পুরো প্রোডাকশন-লাইনের নকশা হলো framework — কাঠামো তাদের, আপনি শুধু নিজের অংশটা সেলাই করেন।

৭ · C, C++, Python, JavaScript, Kotlin — একটি সৎ তুলনা

কোনো ভাষাই “সেরা” নয় — প্রতিটি কিছু দেয়, কিছু ছাড়ে। নিচের টেবিলে স্বভাবগুলো পাশাপাশি দেখুন। “দ্রুত/ধীর” মানে সাধারণ প্রবণতা; বাস্তব গতি নির্ভর করে কাজ আর library-র ওপর।

বৈশিষ্ট্যJavaCC++PythonJavaScriptKotlin
কীভাবে চলেbytecode → JVM (JIT)machine code-এ compilemachine code-এ compilebytecode → interpreterইঞ্জিনে JIT (V8 ইত্যাদি)bytecode → JVM (Android-এ ART)
টাইপstatic, কড়াstatic, ঢিলাstaticdynamicdynamic (TypeScript-এ static)static, null-নিরাপত্তাসহ
মেমরি ফেরতgarbage collectionহাতে (free)RAII, smart pointerস্বয়ংক্রিয়garbage collectiongarbage collection
গতিদ্রুত (চালু হতে একটু সময় নেয়)খুব দ্রুতখুব দ্রুতবিশুদ্ধ লুপে ধীরমাঝারি থেকে দ্রুতJava-র মতো
কোডের দৈর্ঘ্যলম্বা (আধুনিক Java-তে কম)লম্বামাঝারিখুব ছোটছোটছোট
সবচেয়ে শক্ত জায়গাবড় এন্টারপ্রাইজ সার্ভার, বিগ ডেটা, AndroidOS, embedded, firmwareগেম ইঞ্জিন, ব্রাউজার, ট্রেডিংAI, ডেটা, অটোমেশনব্রাউজার, ফুল-স্ট্যাক ওয়েবAndroid, আধুনিক JVM সার্ভার
দুর্বল জায়গাবেশি মেমরি, ছোট স্ক্রিপ্টে ভারীনিরাপত্তা, লেখার সময়শেখা কঠিনCPU-ভারী কাজ, মোবাইলটাইপের অদ্ভুত রূপান্তরJava-র চেয়ে কম পুরোনো সম্পদ

এই তুলনা থেকেই আসল প্রশ্ন: কোন কাজে কোন ভাষা? নিচের চারটি বাস্তব কাজ একে একে দেখুন:

  1. Android অ্যাপরাইড-শেয়ারিং অ্যাপ
  2. ব্যাংকের ব্যাকএন্ডলেনদেনের সার্ভার
  3. ডেটা স্ক্রিপ্টমাসিক বিক্রির রিপোর্ট
  4. মাইক্রোকন্ট্রোলারসেচ পাম্পের সেন্সর
চারটি প্রশ্নপ্রতিটি কাজে জিজ্ঞেস করুন
১. কোথায় চলবে — সার্ভার, ফোন, ব্রাউজার, ছোট চিপ?
২. কত বছর বাঁচবে, কতজন মিলে লিখবে?
৩. কোন library/টুল তৈরি আছে?
৪. দলের মানুষ কোন ভাষা জানেন?
Android অ্যাপসিদ্ধান্ত: Kotlin (Java-ও চলে)
Google-এর প্রথম পছন্দ: Kotlin (২০১৯ থেকে)
নতুন UI টুল Jetpack Compose: Kotlin-এ
পুরোনো কোড: প্রায়ই Java — দুটো একসাথে চলে
ব্যাংকের ব্যাকএন্ডসিদ্ধান্ত: Java + Spring Boot
আয়ু: ১০–২০ বছর, শত শত প্রোগ্রামার
দরকার: কড়া টাইপ, পরীক্ষিত library, LTS
বিকল্প: Kotlin, C#, Go — দলের দক্ষতা দেখে
ডেটা স্ক্রিপ্টসিদ্ধান্ত: Python
একবার বা মাসে একবার চলবে
টুল: pandas, Jupyter, Matplotlib
Java-য় সম্ভব, কিন্তু লেখার খরচ বেশি
মাইক্রোকন্ট্রোলারসিদ্ধান্ত: C
RAM: কয়েক কিলোবাইট — JVM-এর জায়গাই নেই
বিদ্যুৎ: ব্যাটারিতে মাসের পর মাস
C: হার্ডওয়্যারের ওপর সরাসরি নিয়ন্ত্রণ
  1. আগে প্রশ্ন, পরে ভাষা। পেশাদাররা “কোন ভাষা প্রিয়” দিয়ে শুরু করেন না। শুরু করেন চারটি প্রশ্নে: কোথায় চলবে, কত বছর ও কতজনের হাতে, কী টুল তৈরি আছে, আর দলের দক্ষতা।
  2. Android অ্যাপ → Kotlin, সাথে Java. একটি রাইড-শেয়ারিং অ্যাপের নতুন কোড আজ সাধারণত Kotlin-এ লেখা হয় — Google ২০১৯ সালে Kotlin-কে Android-এর প্রথম পছন্দ ঘোষণা করেছে। কিন্তু Kotlin আর Java একই প্রজেক্টে পাশাপাশি চলে, আর পুরোনো বহু অ্যাপের বড় অংশ Java-তে। Java-র ভিত থাকলে Kotlin শেখা খুব দ্রুত হয়।
  3. ব্যাংকের ব্যাকএন্ড → Java + Spring Boot. এই সিস্টেম হয়তো ১৫ বছর চলবে, লিখবেন শত শত প্রোগ্রামার, প্রতিটি ভুলের দাম আসল টাকা। এখানে কড়া static typing, বহু বছরের পরীক্ষিত library, LTS version আর সহজে লোক পাওয়া — সবই Java-র পক্ষে। এই কোর্সের সবচেয়ে বড় লক্ষ্যও এই ধরনের সিস্টেম বোঝা।
  4. ডেটা স্ক্রিপ্ট → Python. মাসিক বিক্রির একটি রিপোর্ট, যা একজন বিশ্লেষক নিজে চালাবেন। এখানে লেখার গতিই সব, আর pandas-এর মতো টুল তৈরি। Java দিয়েও করা যায়, কিন্তু class, টাইপ আর build ফাইলের খরচ এখানে লাভের চেয়ে বেশি।
  5. মাইক্রোকন্ট্রোলার → C. ধানক্ষেতের সেচ পাম্পের সেন্সরে কয়েক কিলোবাইট RAM — JVM বসানোর জায়গাই নেই। এখানে C. মজার ইতিহাস হলো, Java-র জন্মই হয়েছিল ঘরোয়া যন্ত্রের জন্য, আর এক সময় সিম কার্ডের ভেতরেও Java Card নামে Java-র একটি অতি ছোট রূপ চলত। মূল শিক্ষা: একটি ভাষা সব কাজের জন্য নয়, আর দক্ষ প্রকৌশলী কাজ দেখে টুল বাছেন।
C/C++/Python জানলে

C-র মতো Java-তেও { }, ;, for, if আর static টাইপ আছে, কিন্তু pointer arithmetic আর হাতে free নেই — garbage collector মেমরি ফেরত দেয়, আর array-র সীমার বাইরে গেলে প্রোগ্রাম চুপচাপ ভুল না করে exception দেয়। C++-এর মতো class আছে, কিন্তু multiple inheritance (class-এর) নেই, আর সব কোডকে কোনো না কোনো class-এর ভেতরে থাকতে হয়। Python-এর তুলনায় Java লম্বা, কিন্তু টাইপের ভুল চালানোর আগেই ধরা পড়ে। তুলনা করতে C কোর্সের C কেন?, C++ কোর্সের C++ কেন? আর Python কোর্সের Python কেন? পাশাপাশি পড়ুন।

৮ · আপনার JVM কোন version? — একই কোড, ভিন্ন কম্পিউটার

“write once, run anywhere”-এর একটি মজার দিক হলো — প্রোগ্রাম নিজেই জিজ্ঞেস করতে পারে, “আমি এখন কোন JVM-এ, কোন OS-এ চলছি?” নিচের কোডটি চালান। এটি সেই কম্পিউটারের তথ্য ছাপবে, যেখানে কোডটি আসলে চলছে — এই পাতায় সেটা আমাদের অনলাইন রানার, আপনার কম্পিউটার নয়।

class Main {
    public static void main(String[] args) {
        int feature = Runtime.version().feature();
        String os = System.getProperty("os.name");

        System.out.println("এই JVM-এর Java version: " + feature);
        System.out.println("যে OS-এ চলছে: " + os);

        if (feature >= 21) {
            System.out.println("record, switch expression, virtual thread — সবই চলবে।");
        } else {
            System.out.println("পুরোনো Java — এই কোর্সের কিছু কোড চলবে না।");
        }
    }
}

এই পাতার রানারে আউটপুট আসে এই JVM-এর Java version: 21, তারপর যে OS-এ চলছে: Linux, আর শেষে “সবই চলবে” লাইনটি। কারণ রানারটি একটি Linux সার্ভারে Java 21 দিয়ে চলে। Runtime.version().feature() JVM-এর প্রধান version নম্বর দেয়, আর System.getProperty("os.name") দেয় OS-এর নাম। পর্ব ০৩-এ নিজের Windows ল্যাপটপে JDK 25 বসিয়ে একই কোড চালালে দেখবেন 25 আর Windows 11 জাতীয় কিছু — কোড একটুও বদলাতে হয়নি, বদলেছে শুধু নিচের JVM. এটাই এই পর্বের মূল কথা, নিজের চোখে।

Java-র আরেকটি কম আলোচিত গুণ পেছনের সাথে সামঞ্জস্য (backward compatibility). বিশ বছর আগে লেখা Java কোডের বড় অংশ আজকের JDK-তেও compile হয়ে চলে। ব্যাংকের মতো প্রতিষ্ঠান এজন্যই Java-কে ভরসা করে — পুরো সিস্টেম নতুন করে না লিখে ধাপে ধাপে নতুন version-এ যাওয়া যায়। তবে ভাষা নিজেও থেমে নেই; একই কাজ পুরোনো আর আধুনিক Java-তে কেমন দেখায়, দেখুন:

List<String> names = new ArrayList<String>();
names.add("Rahim");
names.add("Karim");
for (int i = 0; i < names.size(); i++) {
    String n = names.get(i);
    System.out.println(n.toUpperCase());
}
var names = List.of("Rahim", "Karim");
for (var n : names) {
    System.out.println(n.toUpperCase());
}
// অথবা: names.forEach(n -> System.out.println(n.toUpperCase()));

দুটোই আজকের JDK-তে চলে, আর দুটোরই আউটপুট RAHIM, KARIM. এই কোর্স আধুনিক রূপটা শেখাবে, কিন্তু পুরোনোটাও চিনিয়ে দেবে — কারণ অফিসের কোডবেসে আর AI-এর উত্তরে আপনি দুটোই দেখবেন।

৯ · কোর্সের মানচিত্র — কী শিখবেন, কীভাবে পড়বেন

পুরো কোর্সটি ৮টি মডিউলে ভাগ করা। প্রতিটি মডিউল আগেরটির ওপর দাঁড়িয়ে, তাই ক্রম মেনে পড়াই সবচেয়ে ভালো। যেকোনো মডিউলের প্রথম পর্বে যেতে লিংকে চাপুন:

মডিউলবিষয়পর্বশুরু করুন
১ভিত্তি — Java দিয়ে ভাবা, JDK, JVM০১–০৫Java কেন? (এই পর্ব)
২মূল ভাষা — টাইপ, String, সিদ্ধান্ত, লুপ, method, array০৬–১৩টাইপ ও ভ্যারিয়েবল
৩অবজেক্ট-ওরিয়েন্টেড Java১৫–২২class ও object
৪আধুনিক টাইপ ও ভুল সামলানো — record, enum, generics, exception২৩–২৯equals, hashCode, toString
৫Collections ও functional Java — List, Map, lambda, Stream৩০–৩৬List
৬সিস্টেম ও JVM — ফাইল, সময়, thread, GC৩৭–৪৫ফাইল I/O
৭পেশাদার Java — Maven/Gradle, JUnit, JDBC, Spring Boot৪৬–৫৫Maven আর Gradle
৮পরীক্ষা ও ইন্টারভিউ প্রস্তুতি৫৬–৫৯আউটপুট কী হবে?

পর্ব ২২-এ একটি মাঝপথের প্রজেক্ট (একটি কমান্ড-লাইন টুল) আর পর্ব ৫৫-এ একটি ক্যাপস্টোন প্রজেক্ট আছে — শেখা জিনিস দিয়ে আসল কিছু বানানোর জন্য।

যা শিখবেন

পুরো ভাষা গভীরভাবে, অবজেক্ট-ওরিয়েন্টেড নকশা, আধুনিক Java (record, sealed, pattern matching, Stream, virtual thread), JVM-এর মেমরি ও GC, টেস্টিং, build টুল, ডেটাবেস আর Spring Boot-এর প্রথম ধাপ।

ব্যাকএন্ড, Android বা যেকোনো দিকের ভিত

যা এই কোর্সে বিস্তারিত নেই

পুরো Android অ্যাপ বানানো, Spring-এর গভীর জগৎ (security, cloud), বা Java দিয়ে ডেস্কটপ GUI. এগুলোর জন্য পরের ধাপের কোর্স; এই কোর্স সেগুলোর ভিত তৈরি করবে।

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

কীভাবে পড়লে সবচেয়ে বেশি লাভ

  1. প্রতিটি ডায়াগ্রাম নিজে চালান। “পরে” চাপার আগে ভাবুন, পরের ধাপে কী হবে। অনুমান মিলল কি না দেখুন।
  2. কোড চালান, তারপর বদলান। একটি সংখ্যা বদলান, একটি ; মুছে দিন — দেখুন compiler কী বলে। Java-র error মেসেজ পড়তে শেখাও এই কোর্সের অংশ, শুরু পর্ব ০৪-এ।
  3. ভাবনার প্রশ্নগুলো এড়িয়ে যাবেন না। উত্তর দেখার আগে নিজে দুই মিনিট ভাবুন।
  4. নিয়মিত, অল্প অল্প। একদিনে দশটি পর্বের চেয়ে প্রতিদিন একটি পর্ব অনেক বেশি কাজের। প্রতিটি মডিউল শেষে ড্যাশবোর্ডের মডিউল টেস্টটি দিন।
  5. নিজের কম্পিউটারে সেটআপ করুন। পাতার “Run” দিয়ে শুরু করা যায়, কিন্তু পর্ব ০৩-এ JDK আর একটি IDE বসিয়ে নিন — বড় প্রোগ্রাম লিখতে সেটা লাগবেই।

১০ · AI-এর যুগে Java — পড়তে, চালাতে আর বিচার করতে পারা

Java লম্বা ভাষা — getter, setter, constructor, configuration, টেস্টের কাঠামো। এই ধরনের ছাঁচের কোডকে বলে boilerplate, আর ঠিক এই কাজে AI অসাধারণ দ্রুত। আজ অনেক কোম্পানিতে Java কোডের একটা বড় অংশের প্রথম খসড়া AI টুল লেখে। তাহলে Java শেখার দরকার কী?

দরকার আগের চেয়ে বেশি। AI-এর লেখা Java দেখতে প্রায় সবসময় গোছানো আর আত্মবিশ্বাসী — অথচ তাতে পুরোনো ধাঁচ, নেই এমন method, বা টাকার হিসাবে ভুল টাইপ থাকতে পারে। Java-র compiler কিছু ভুল ধরবে, কিন্তু যুক্তির ভুল ধরবে না। আর ব্যাংকের সার্ভারে ভুল কোড গেলে দায় AI-এর নয়, যিনি “merge” চেপেছেন তাঁর।

AI লেখে Java, আপনি পড়েন, চালান, বিচার করেন।
যে কোড আপনি ব্যাখ্যা করতে পারেন না, সেটা আপনার কোড নয়।

AI-এর লেখা Java-য় সাধারণ ভুল

AI-এর ভুলকীভাবে চিনবেনকোন পর্বে গভীরে
পুরোনো ধাঁচের APIDate/Calendar, Vector, new Integer(5)পর্ব ০৬, ৩৮
টাকার হিসাবে double0.1 + 0.2 ঠিক 0.3 হয় না; দরকার BigDecimalপর্ব ০৬, ০৭
নেই এমন method বা dependency বানানোcannot find symbol, Maven-এ library না পাওয়াপর্ব ০৪, ৪৬
পুরোনো javax.* import, অথচ Spring Boot 3Spring Boot 3-এ jakarta.* লাগেপর্ব ৫০
exception চেপে রাখাফাঁকা catch (Exception e) {}পর্ব ২৯

AI-কে Java কোড লিখতে বললে শুধু “কোড দাও” বলবেন না। version, শর্ত আর যাচাইয়ের উপায় চেয়ে নিন। নিচের প্রম্পটটি কপি করে নিজের কাজের মতো বদলে নিন:

আমি Java 21 ব্যবহার করি এবং নতুন শিখছি। একটি Java প্রোগ্রাম লিখে দাও যা একটি List-এ থাকা এক সপ্তাহের দৈনিক বিক্রি (পূর্ণসংখ্যা, টাকা) থেকে মোট, গড় আর সবচেয়ে বেশি বিক্রির দিন বের করবে। শর্ত: ১. শুধু JDK-র standard library, কোনো বাইরের dependency নয়। ২. আধুনিক Java 21 ধাঁচ (var, List.of, enhanced for) — কিন্তু প্রতিটি নতুন জিনিস কোন version থেকে এসেছে বলো। ৩. ফাঁকা List এলে কী হবে, সেটা সামলাবে এবং আমাকে ব্যাখ্যা করবে। ৪. প্রতিটি গুরুত্বপূর্ণ লাইনের পাশে সহজ বাংলায় comment দেবে। ৫. শেষে ৩টি উদাহরণ ইনপুট আর প্রত্যাশিত আউটপুট দেবে, যাতে আমি হাতে মিলিয়ে দেখতে পারি।

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

পরীক্ষা ও ইন্টারভিউতে
  • Java কে, কোথায় তৈরি করেন? — James Gosling-এর নেতৃত্বে Sun Microsystems-এ; কাজ শুরু ১৯৯১ সালে, প্রকাশ্যে আসে ১৯৯৫ সালে।
  • Java কেন platform independent? — javac machine code নয়, bytecode বানায়; প্রতিটি OS-এর নিজস্ব JVM সেই একই bytecode চালায়। (JVM নিজে কিন্তু platform-নির্ভর।)
  • JDK, JRE আর JVM-এর পার্থক্য? — JVM bytecode চালায়; JRE = JVM + library; JDK = JRE + javac-সহ ডেভেলপমেন্ট টুল।
  • Java compiled না interpreted? — দুটোই: আগে bytecode-এ compile হয়, তারপর JVM interpret করে, আর বারবার চলা অংশ JIT দিয়ে machine code-এ বদলায়।
  • Java কি ১০০% object-oriented? — না; int, double-এর মতো primitive টাইপ object নয়। তবে প্রতিটি কোডকে class-এর ভেতরে থাকতে হয়।

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

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

প্র ০১১৯৯৫ সালে “write once, run anywhere” এত বড় ঘটনা ছিল কেন? আর ব্রাউজারের applet হারিয়ে গেলেও প্রতিশ্রুতিটি কোথায় সত্যি হলো?

১৯৯৫ সালের কম্পিউটার জগৎ ভাবুন। অফিসে Windows 95-এর পিসি, ডিজাইনারের টেবিলে Mac, বিশ্ববিদ্যালয় আর কোম্পানির সার্ভারে Sun Solaris, HP-UX বা অন্যান্য Unix — প্রত্যেকের CPU আর OS আলাদা। একটি সফটওয়্যার সবার জন্য বানাতে হলে প্রতিটির জন্য আলাদা করে compile, আলাদা করে পরীক্ষা, আলাদা বাগ। আর ঠিক তখন ইন্টারনেট এই সব যন্ত্রকে একই নেটওয়ার্কে জুড়ে দিচ্ছে।

Java এখানে একটি সাহসী প্রস্তাব দিল: ওয়েব পাতার ভেতরেই ছোট প্রোগ্রাম (applet) পাঠাও। ব্যবহারকারী যে কম্পিউটারেই থাকুন, তাঁর ব্রাউজারের JVM সেটি চালাবে। Sun-এর নিজস্ব ব্রাউজার HotJava এটা দেখাল, আর তখনকার সবচেয়ে জনপ্রিয় ব্রাউজার Netscape Navigator Java সমর্থন যোগ করল। স্থির লেখার পাতায় হঠাৎ অ্যানিমেশন, খেলা, হিসাবের যন্ত্র চলতে শুরু করল। অচেনা জায়গা থেকে আসা কোড চালানো বিপজ্জনক — তাই JVM-এ যোগ হলো bytecode verifier আর sandbox, যাতে applet আপনার ফাইলে হাত দিতে না পারে।

Applet কেন হারাল? চালু হতে ধীর ছিল, প্লাগইন বারবার নিরাপত্তা-ত্রুটিতে পড়ত, Flash আর পরে দ্রুত হয়ে ওঠা JavaScript সেই জায়গা নিয়ে নিল। ২০১৫ সালের দিকে বড় ব্রাউজারগুলো এ ধরনের প্লাগইন বন্ধ করতে শুরু করে; Java 9-এ Applet API deprecated হয়, Java 17-এ সরিয়ে ফেলার জন্য চিহ্নিত হয়। সমালোচকেরা ঠাট্টা করে বলতেন “write once, debug everywhere” — কারণ প্রথম দিকের JVM-গুলোর আচরণে ছোটখাটো পার্থক্য ছিল।

তবু প্রতিশ্রুতিটি সত্যি হলো — সার্ভারে। একজন প্রোগ্রামার Windows ল্যাপটপে কোড লিখে পরীক্ষা করেন, আর সেই একই .jar ফাইল চলে ডেটা সেন্টারের Linux সার্ভারে; সার্ভার Intel থেকে ARM চিপে বদলালেও কোড compile করতে হয় না। বড় কোম্পানির কাছে এটা বিশাল সাশ্রয়।

মূল উপলব্ধি: একটি ভালো ধারণা প্রথম যে কাজের জন্য আসে, সবসময় সেখানে জেতে না। Java ব্রাউজারে হেরেছে, কিন্তু “মাঝখানে একটি virtual machine রেখে হার্ডওয়্যার থেকে মুক্তি” চিন্তাটি সার্ভার জগৎকে বদলে দিয়েছে — আজকের container আর WebAssembly-ও একই চিন্তার উত্তরসূরি।

প্র ০২Oracle বনাম Google মামলা কী নিয়ে ছিল? একটি API কি কারো “সম্পত্তি” হতে পারে?

২০০৮ সালে আসা Android-এর অ্যাপ লেখা হতো Java ভাষায়। কিন্তু Google Sun-এর JVM বা লাইসেন্স নেয়নি — নিজস্ব runtime বানিয়েছিল। তবে প্রোগ্রামাররা যাতে পরিচিত Java-র মতোই লিখতে পারেন, সেজন্য Java-র standard library-র কয়েক ডজন প্যাকেজের API হুবহু রেখেছিল — অর্থাৎ class, method-এর নাম আর গঠন (declaring code), যার পরিমাণ প্রায় এগারো হাজার লাইন। ভেতরের আসল কাজের কোড Google নিজে লিখেছিল।

২০১০ সালে Sun কিনে নেওয়ার কয়েক মাস পরেই Oracle মামলা করে: API-র নকশা কপিরাইটযুক্ত, আর Google অনুমতি ছাড়া তা কপি করেছে। দাবি ছিল বহু বিলিয়ন ডলারের। মামলা প্রায় এক দশক চলে — একাধিক জুরি বিচার, আপিল আদালতের রায় কখনো Oracle-এর পক্ষে, কখনো Google-এর। শেষে ২০২১ সালের এপ্রিলে মার্কিন সুপ্রিম কোর্ট ৬–২ ভোটে রায় দেয়: Google-এর এই ব্যবহার fair use (ন্যায্য ব্যবহার)। মজার ব্যাপার হলো, API আদৌ কপিরাইটযোগ্য কি না — সেই মূল প্রশ্নের সিদ্ধান্ত আদালত দেয়নি; ধরে নিয়েই বলেছে, হলেও এই ব্যবহার ন্যায্য। এর মধ্যে ২০১৬ সালে Android 7.0 থেকে Google নিজের library-র ভিত্তি হিসেবে OpenJDK-র কোড ব্যবহার শুরু করে।

কেন এটা আপনার জন্যও গুরুত্বপূর্ণ? সফটওয়্যার জগৎ চলে সামঞ্জস্যের ওপর। একটি API হলো দুই পক্ষের চুক্তি — “এই নামে ডাকলে এই কাজ হবে”। কেউ যদি সেই চুক্তির নকশার মালিক হয়ে অন্যদের একই নাম ব্যবহার থেকে আটকাতে পারে, তাহলে বিকল্প বাস্তবায়ন বানানো কঠিন হয়ে যায়। Linux-এ Windows প্রোগ্রাম চালানোর Wine, Amazon S3-র মতো API মেনে চলা অন্য ক্লাউড স্টোরেজ, এমনকি C-র standard library-র নানা বাস্তবায়ন — সবই এই স্বাধীনতার ওপর দাঁড়িয়ে। সফটওয়্যার শিল্পের বড় অংশ তাই Google-এর পক্ষে আদালতে মত দিয়েছিল।

মূল উপলব্ধি: প্রোগ্রামিং শুধু প্রযুক্তি নয় — লাইসেন্স, কপিরাইট আর আইনও এর অংশ। আপনি যখন কোনো library বা API ব্যবহার করেন, তখন তার লাইসেন্স জানা পেশাদারির অংশ; আর AI যখন কোড লিখে দেয়, সেই কোডের উৎস ও লাইসেন্স নিয়েও প্রশ্ন তোলার অভ্যাস রাখুন।

প্র ০৩ত্রিশ বছর পরেও বড় প্রতিষ্ঠানে Java কেন শীর্ষে? নতুন ভাষা কেন সহজে জায়গা নিতে পারে না?

প্রযুক্তি জগতে প্রতি বছর নতুন ভাষা আসে, তবু ব্যাংক, বিমা, টেলিকম আর বড় ই-কমার্সের সার্ভারে Java আজও প্রধান ভাষাগুলোর একটি। কারণগুলো প্রযুক্তিগত যতটা, ব্যবসায়িকও ততটা।

  • পেছনের সাথে সামঞ্জস্য: Java খুব সতর্কভাবে পুরোনো কোড ভাঙা এড়ায়। পনেরো বছর আগের সিস্টেম নতুন JDK-তে তুলতে সাধারণত পুরো কোড নতুন করে লিখতে হয় না। একটি ব্যাংকের কাছে “আবার লেখা” মানে কয়েক বছর আর বিপুল ঝুঁকি।
  • JVM-এর পরিপক্বতা: দুই যুগের বেশি সময় ধরে বিশ্বের সেরা প্রকৌশলীরা JIT compiler আর garbage collector উন্নত করেছেন। G1, ZGC-র মতো GC বিশাল মেমরিতেও খুব ছোট বিরতি দেয়; Java Flight Recorder-এর মতো টুল দিয়ে চলন্ত সিস্টেমের ভেতরটা দেখা যায়।
  • ইকোসিস্টেম আর মানুষ: Spring, Hibernate, Kafka-র মতো পরীক্ষিত টুল, আর বাজারে লক্ষ লক্ষ Java প্রোগ্রামার। নতুন সদস্য নিয়োগ সহজ, প্রশ্নের উত্তর অনলাইনে পাওয়া সহজ।
  • নিরাপত্তা ও পূর্বানুমেয়তা: কড়া টাইপ, পরিষ্কার exception ব্যবস্থা, বছরের পর বছর LTS আপডেট — ঝুঁকি এড়াতে চাওয়া প্রতিষ্ঠানের কাছে এগুলো সোনার মতো।
  • ভাষা নিজেও বদলেছে: Java 8-এ lambda ও Stream, Java 10-এ var, Java 16-এ record, Java 17-এ sealed class, Java 21-এ virtual thread আর switch-এ pattern matching. “পুরোনো আর লম্বা” অভিযোগের অনেকটাই এখন আর খাটে না।

দুর্বলতাও আছে: JVM চালু হতে সময় নেয় আর মেমরি বেশি খায় — ছোট cloud function-এ এটা অসুবিধা। এর উত্তরে এসেছে GraalVM native image-এর মতো প্রযুক্তি। আর Kotlin, Go-র মতো ভাষা কিছু জায়গায় সত্যিই জায়গা নিচ্ছে। এছাড়া বিশাল ইকোসিস্টেমের ঝুঁকিও আছে: ২০২১ সালের ডিসেম্বরে বহুল ব্যবহৃত logging library Log4j-তে “Log4Shell” নামের গুরুতর ত্রুটি ধরা পড়ে, আর সারা বিশ্বের অসংখ্য Java সিস্টেমকে তড়িঘড়ি আপডেট করতে হয়।

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

প্র ০৪Java কেন প্রতি ছয় মাসে নতুন version আনা শুরু করল, আর LTS কেন দরকার? কোন version শিখবেন, কোনটা চালাবেন?

একটি সময় ছিল যখন Java-র বড় version আসত কয়েক বছর পরপর: Java 6 (২০০৬), Java 7 (২০১১), Java 8 (২০১৪), Java 9 (২০১৭)। প্রতিটি version একটি বা দুটি বড় বৈশিষ্ট্যের জন্য অপেক্ষা করত। Java 9-এর module system (প্রজেক্ট Jigsaw) এতটাই জটিল ছিল যে version বারবার পিছিয়েছে — আর তার সাথে আটকে ছিল অন্য সব তৈরি হয়ে যাওয়া ছোট উন্নতিও। এদিকে অন্য ভাষাগুলো দ্রুত এগোচ্ছিল।

২০১৭ সালে Java-র প্রধান স্থপতি Mark Reinhold নতুন পদ্ধতির প্রস্তাব দেন, আর Java 10 (মার্চ ২০১৮) থেকে তা চালু হয়: প্রতি ছয় মাসে একটি ট্রেন। বৈশিষ্ট্য তৈরি হলে ট্রেনে ওঠে, না হলে পরেরটায়। বড় বৈশিষ্ট্য অনেক সময় আগে “preview” হিসেবে আসে — ব্যবহার করে মতামত দেওয়া যায়, তারপর এক বা একাধিক version পরে স্থায়ী হয়। যেমন record কয়েকবার preview থাকার পর Java 16-এ স্থায়ী হয়, আর virtual thread স্থায়ী হয় Java 21-এ।

LTS কেন? কোনো ব্যাংক প্রতি ছয় মাসে তার সিস্টেম নতুন version-এ তুলে পুরো পরীক্ষা চালাতে পারে না। তাই কিছু version-কে Long-Term Support দেওয়া হয় — বহু বছর ধরে নিরাপত্তা ও বাগ-সংশোধন আপডেট আসে। শুরুতে LTS ছিল প্রতি তিন বছরে (11, 17); ২০২১ সালে তা দুই বছরে নামানো হয়, ফলে এল 21 (২০২৩) আর 25 (২০২৫)। মাঝের version-গুলো ছয় মাস পরেই পুরোনো হয়ে যায়। Oracle ছাড়াও Adoptium (Temurin), Amazon, Microsoft, Azul, Red Hat-এর মতো প্রতিষ্ঠান OpenJDK থেকে বিনামূল্যের LTS build দেয়।

আপনার জন্য ব্যবহারিক পরামর্শ: আসল সিস্টেমে LTS চালান। শিখুন আধুনিক Java — এই কোর্সে Java 21, কারণ পাতার রানার সেটাই চালায়। Java 22–25-এ কিছু নতুন সুবিধা এসেছে; যেমন Java 25-এ ছোট প্রোগ্রাম class ছাড়াই সরল void main() দিয়ে লেখা যায়, যা Java 21-এ কেবল preview ছিল। তাই এই কোর্সে আমরা চিরাচরিত class Main লিখব — যা সব version-এ চলে। অফিসে গিয়ে Java 8 বা 11-এর পুরোনো কোডও দেখবেন; সেটা পড়তে পারাও দক্ষতা।

মূল উপলব্ধি: নিয়মিত, ছোট, অনুমানযোগ্য আপডেট বড় ও অনিশ্চিত আপডেটের চেয়ে নিরাপদ — এটা শুধু Java নয়, যেকোনো সফটওয়্যার প্রকাশের একটি মৌলিক শিক্ষা। আর “দ্রুত বদল” ও “দীর্ঘ স্থিতি” — দুই চাহিদা একসাথে মেটাতে LTS একটি চমৎকার আপস।

প্র ০৫Google যখন Android-এর জন্য Kotlin-কে প্রথম পছন্দ বলেছে, তখন Android শিখতে চাইলে Java শেখা কি সময় নষ্ট?

ঘটনাক্রমটা আগে দেখি। Kotlin বানিয়েছে JetBrains — চেক প্রজাতন্ত্রের প্রাগে প্রতিষ্ঠিত সেই কোম্পানি, যারা IntelliJ IDEA বানায়। ২০১১ সালে প্রকাশ্যে ঘোষণা, ২০১৬ সালে 1.0. লক্ষ্য ছিল Java-র চেয়ে সংক্ষিপ্ত, নিরাপদ একটি ভাষা, যা JVM-এ চলবে এবং Java-র সাথে এক প্রজেক্টে মিলেমিশে কাজ করবে। ২০১৭ সালের Google I/O-তে Google Kotlin-কে Android-এর আনুষ্ঠানিক ভাষা ঘোষণা করে, আর ২০১৯ সালের I/O-তে বলে Android উন্নয়ন এখন “Kotlin-first”. এরপর আসা নতুন UI টুল Jetpack Compose Kotlin-এ লেখা হয়।

Kotlin কেন জনপ্রিয় হলো? null-নিরাপত্তা (কোন ভ্যারিয়েবল null হতে পারে, তা টাইপেই লেখা থাকে — Android অ্যাপ crash-এর একটি বড় কারণ NullPointerException), কম boilerplate, coroutine দিয়ে সহজ asynchronous কোড। তাছাড়া Android-এ Java-র নতুন version-এর সব সুবিধা সাথে সাথে পাওয়া যায় না, কারণ Android নিজস্ব runtime (ART) চালায়; Kotlin সেই ফাঁক পূরণ করেছে।

তাহলে Java কেন?

  • Kotlin আর Java একই JVM-এর জগতের — একই bytecode, একই library, একই ধারণা (class, interface, generics, exception, garbage collection). Java ভালো জানলে Kotlin শেখা কয়েক সপ্তাহের ব্যাপার।
  • Android-এর নিজের বিশাল অংশ আর বহু পুরোনো অ্যাপের কোড Java-তে। চাকরিতে প্রায়ই এমন কোডবেসে কাজ করতে হয়, যেখানে দুটো ভাষাই আছে।
  • Android-এর বাইরে — ব্যাংক, টেলিকম, বিগ ডেটা, Spring Boot সার্ভার — Java-র চাহিদা অনেক বড়। Java শিখলে আপনার দরজা একটি নয়, অনেকগুলো।
  • অনেক চাকরির পরীক্ষা ও ইন্টারভিউতে OOP আর ডেটা স্ট্রাকচারের প্রশ্ন এখনো Java দিয়েই আসে।

পরামর্শ: শুধু Android অ্যাপ বানানোই লক্ষ্য হলে শেষ পর্যন্ত Kotlin শিখতেই হবে। কিন্তু এই কোর্সে শেখা অবজেক্ট-ওরিয়েন্টেড নকশা, collections, exception, concurrency আর JVM-এর ধারণা সরাসরি Kotlin-এ কাজে লাগবে।

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

অনুশীলন

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

  1. আগে অনুমান, পরে Run: অংশ ২-এর প্রথম কোডে শেষ দিনের বিক্রি 1610-এর বদলে 3610 করুন। চালানোর আগে খাতায় লিখুন — Total, Average আর Best day কত হবে? তারপর চালিয়ে মিলিয়ে নিন।

    মোট ২০০০ বাড়বে: Total : 11000 Tk. গড় হবে ১১০০০ ÷ ৭ = 1571.43 Tk (দশমিকের পর দুই ঘরে গোল করা)। সবচেয়ে বেশি বিক্রি এখন শেষ দিনের: Best day: 3610 Tk. আগে অনুমান করে পরে মেলানো — এই অভ্যাসটিই পরে AI-এর কোড যাচাইয়ের মূল দক্ষতা হবে। চাইলে (double) অংশটি মুছে দেখুন, গড় কেন 1571.00 হয়ে যায় — পূর্ণসংখ্যার ভাগে দশমিক হারিয়ে যায়।

  2. চাকরির বিজ্ঞাপন পড়ুন: যেকোনো চাকরির ওয়েবসাইটে “software engineer” বা “Java developer” লিখে ৫টি বিজ্ঞাপন খুলুন। প্রতিটিতে কোন কোন প্রযুক্তি চাওয়া হয়েছে লিখুন। কোন শব্দগুলো বারবার এলো, আর সেগুলো এই কোর্সের কোন মডিউলে আছে?

    সাধারণত দেখবেন: Java, Spring Boot, REST API, SQL/ডেটাবেস (MySQL, PostgreSQL, Oracle), Git, Maven/Gradle, JUnit, কখনো microservice, Docker বা Kafka. এদের মধ্যে Java ভাষা আর OOP পাবেন মডিউল ২–৪-এ, collections ও Stream মডিউল ৫-এ, thread ও JVM মডিউল ৬-এ, আর Maven/Gradle, JUnit, JDBC ও Spring Boot মডিউল ৭-এ। খেয়াল করুন, প্রায় কোনো বিজ্ঞাপনই শুধু “Java” চায় না — চায় একটি পুরো দক্ষতার সেট। বিজ্ঞাপনের তালিকাটি রেখে দিন; কোর্স এগোলে একটা একটা করে টিক দিন।

  3. ভাষা বাছাই করুন: নিচের চারটি কাজের জন্য কোন ভাষা বেছে নেবেন, এক লাইনে কারণসহ বলুন — (ক) একটি ই-কমার্স কোম্পানির পেমেন্ট সার্ভিস (খ) একটি ছোট কলেজের ফলাফল এক্সেল থেকে গ্রাফ বানানো, একবারের কাজ (গ) একটি স্মার্টওয়াচের হার্টবিট সেন্সরের firmware (ঘ) নতুন একটি Android খাবার-ডেলিভারি অ্যাপ।

    (ক) Java + Spring Boot (বা Kotlin) — দীর্ঘজীবী, টাকার লেনদেন, বড় দল, কড়া টাইপ আর পরীক্ষিত library দরকার।

    (খ) Python — একবারের ছোট কাজ, pandas আর Matplotlib তৈরি; Java-র class ও build ফাইল এখানে বাড়তি খরচ।

    (গ) C (বা C++) — অতি সীমিত মেমরি আর ব্যাটারি; JVM বসানোর জায়গা নেই।

    (ঘ) Kotlin — Android-এর জন্য Google-এর প্রথম পছন্দ; তবে Java জানলে পুরোনো library ও কোড বুঝতে সুবিধা। খেয়াল করুন, প্রতিটি উত্তরে আমরা ভাষার “ভালো-মন্দ” নয়, কাজের চাহিদা দেখে সিদ্ধান্ত নিয়েছি।

  4. AI অডিট: অংশ ১০-এর প্রম্পটটি যেকোনো AI-কে দিন। উত্তর পেলে চেকলিস্ট ধরে যাচাই করুন, আর কোডটি এই পাতার রানারে চালান (দরকার হলে main class-এর আগের public সরিয়ে দিন)। কোন কোন জায়গায় সমস্যা পেলেন?

    সাধারণত যা দেখা যায়:

    • ফাঁকা List-এ গড় বের করতে গিয়ে শূন্য দিয়ে ভাগ — int হলে ArithmeticException, আর double হলে NaN. AI প্রায়ই এটা সামলানোর কথা বলে, কিন্তু কোডে রাখতে ভুলে যায়।
    • “Java 21 ধাঁচ” বললেও মাঝে মাঝে new ArrayList<>() বানিয়ে একটা একটা করে add — ভুল নয়, কিন্তু পুরোনো ধাঁচ।
    • “কোন version থেকে” প্রশ্নে ভুল তথ্য — যেমন var-কে Java 8-এর বলা (আসলে Java 10). এজন্যই তথ্য নিজে মিলিয়ে নেওয়া জরুরি।
    • প্রত্যাশিত আউটপুটে হিসাবের ভুল — হাতে মেলালেই ধরা পড়ে।

    এই ভুলগুলো ধরতে পারাটাই আসল দক্ষতা — কোড লেখা নয়, কোড বিচার করা।

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

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

ক্রমএকটি Java প্রোগ্রাম লেখা থেকে আউটপুট পর্যন্ত ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. ✍️ Main.java ফাইলে source code লেখা
  2. 📐 javac ব্যাকরণ ও টাইপ যাচাই করে compile করে
  3. 📦 Main.class ফাইলে bytecode তৈরি হয়
  4. 🖥️ JVM ক্লাস লোড ও যাচাই করে চালায়, দরকারে JIT
  5. ✅ ফলাফল স্ক্রিনে আসে

javac Main.java কমান্ড সফল হলে কী তৈরি হয়?

  • Windows-এর জন্য একটি Main.exe ফাইল
  • Main.class ফাইল, যার ভেতরে bytecode
  • নির্দিষ্ট CPU-র assembly কোড
  • কিছুই তৈরি হয় না, প্রোগ্রাম সরাসরি চলে যায়

Java-র “write once, run anywhere” প্রতিশ্রুতি মূলত কীসের ওপর দাঁড়িয়ে?

  • প্রতিটি CPU-র জন্য আলাদা machine code আগেই বানিয়ে রাখা
  • সব প্রোগ্রাম ব্রাউজারের ভেতরে চালানো
  • একই bytecode, আর প্রতিটি OS ও CPU-র জন্য আলাদা JVM
  • সব কম্পিউটারে একই অপারেটিং সিস্টেম থাকা

নিচের কোনটি Java-র একটি LTS (Long-Term Support) version?

  • Java 17
  • Java 19
  • Java 22
  • Java 23

Java প্রোগ্রাম লিখে compile করতে চাইলে কম্পিউটারে কমপক্ষে কোনটি লাগবে?

  • শুধু JVM
  • শুধু JRE
  • ব্রাউজারের Java plugin
  • JDK

২০১৯ সালে Google Android অ্যাপ উন্নয়নের জন্য কোন ভাষাকে “প্রথম পছন্দ” (first) ঘোষণা করে?

  • Java
  • Kotlin
  • Dart
  • C++

AI একটি Java প্রোগ্রাম লিখে দিল, যা compile হয় এবং চলে। এরপর সবচেয়ে দায়িত্বশীল পদক্ষেপ কোনটি?

  • compile হয়েছে, তাই কোড নিশ্চয়ই ঠিক — সরাসরি ব্যবহার করা
  • AI-কেই জিজ্ঞেস করা, “কোডটা ঠিক আছে তো?”
  • warning আছে কি না দেখা, নানা ইনপুটে চালানো আর অন্তত একটি ফল হাতে মিলিয়ে দেখা
  • কোড লম্বা ও জটিল হলে ধরে নেওয়া যায় এটা পেশাদার মানের

শব্দকোষ

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

মনে রাখুন

  1. Java-র প্রতিশ্রুতি write once, run anywhere: javac বানায় bytecode, আর প্রতিটি OS-এর নিজস্ব JVM সেটি চালায়।
  2. Java-র চার স্তম্ভ: JVM, কড়া static typing, garbage collection, বিশাল ইকোসিস্টেম — বড় ও দীর্ঘজীবী সিস্টেমের জন্য উপযুক্ত।
  3. JDK ⊃ JRE ⊃ JVM; প্রোগ্রামারের লাগে JDK. ইকোসিস্টেমের চার স্তর: ভাষা → JDK library → Maven Central → framework.
  4. James Gosling, Sun, ১৯৯১ সালে শুরু, ১৯৯৫ সালে প্রকাশ্যে; Oracle ২০১০ থেকে; প্রতি ছয় মাসে নতুন version, LTS: 8, 11, 17, 21, 25. এই কোর্স চলে Java 21-এ।
  5. কাজ দেখে ভাষা বাছুন, আর AI-এর লেখা Java সবসময় পড়ুন, চালান, হাতে মিলিয়ে বিচার করুন।

পরের পর্বে: কোড লেখার আগের কাজ — একটি সমস্যাকে “কে কী দায়িত্ব নেবে” হিসেবে ভাঙা। bKash-এর মতো একটি ব্যবস্থাকে object দিয়ে ভাবতে শিখবেন, যা Java-র পুরো দর্শনের কেন্দ্রে।

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

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