Lesson পড়তে ৫ মিনিট লাগবে

সি++ (C++) কেন শিখবেন?

গেম ইঞ্জিন, ব্রাউজার এবং ট্রেডিং সিস্টেম — যেখানে পারফরম্যান্সই সব

সুপারপাওয়ারযুক্ত সি (C)

সি++ (C++) হলো সেই ভাষা যা আপনি সি (C) — পৃথিবীর দ্রুততম এবং সবচেয়ে বিপজ্জনক ভাষা — এর সাথে ক্লাস, টেমপ্লেট, স্মার্ট পয়েন্টার এবং একটি বিশাল স্ট্যান্ডার্ড লাইব্রেরি যুক্ত করলে পাবেন। ১৯৭৯ সালে বিয়ার্নে স্ট্রাউস্ট্রুপ (Bjarne Stroustrup) এটি "সি উইথ ক্লাসেস (C with Classes)" হিসেবে তৈরি করেন, এবং তখন থেকেই এটি পারফরম্যান্সের জন্য গুরুত্বপূর্ণ সফটওয়্যারগুলোর (performance-critical software) প্রধান ভাষা হয়ে উঠেছে।

সি যদি ম্যানুয়াল গিয়ার থাকা কোনো গাড়ি হয়, তবে সি++ হলো সেই একই গাড়ি, তবে এতে পাওয়ার স্টিয়ারিং, এয়ারব্যাগ এবং টার্বোচার্জার যুক্ত করা আছে। আপনার হাতে এখনও ইঞ্জিনের পুরো নিয়ন্ত্রণ রয়েছে, কিন্তু আপনি চাইলে আধুনিক নিরাপত্তার ফিচারগুলোও ব্যবহার করতে পারেন।

পারফরম্যান্সের রাজা

সি++ নেটিভ মেশিন কোডে কম্পাইল হয় — ঠিক সি-এর মতো — রানটাইমে কোনো অতিরিক্ত সময় ব্যয় ছাড়াই। কোনো ইন্টারপ্রেটার, ভার্চুয়াল মেশিন বা গার্বেজ কালেক্টর নেই। কিন্তু সি-এর বিপরীতে আপনি ఇందులో জিরো-কস্ট অ্যাবস্ট্রাকশন (zero-cost abstractions) পাবেন: যেমন ক্লাস, টেমপ্লেট এবং স্মার্ট পয়েন্টার যা আপনার কোডকে ধীর না করেই আরও নিরাপদ এবং গোছানো করে তোলে।

এটাই হলো সি++ এর মূল দর্শন: আপনি যা ব্যবহার করবেন না, তার জন্য আপনাকে কোনো মূল্য চোকাতে (পারফরম্যান্স লস দিতে) হবে না। আপনি যদি ভার্চুয়াল ফাংশন ব্যবহার না করেন, তবে তার জন্য বাড়তি কোনো খরচ নেই। এক্সেপশন (exceptions) ব্যবহার না করলে তাতে কোনো ওভারহেড যুক্ত হয় না। কম্পাইলার আপনার লেখা সব কিছুকে সম্ভাব্য সবচেয়ে দ্রুতগতিসম্পন্ন মেশিন কোডে রূপান্তর করে দেয়।

হ্যালো ওয়ার্ল্ড — মডার্ন সি++ স্টাইল

#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<std::string> languages = {
"C++", "Rust", "Go", "Java", "Python"
};
// বর্ণানুক্রমিকভাবে সাজানো (Sort alphabetically)
std::sort(languages.begin(), languages.end());
for (const auto& lang : languages) {
std::cout << lang << std::endl;
}
return 0;
}
Output
C++
Go
Java
Python
Rust

সি++ কী কাজে ব্যবহৃত হয়?

যেসব সফটওয়্যারে গতি কোনো অপশনাল বা ঐচ্ছিক ব্যাপার নয় — বরং সেটাই আসল উদ্দেশ্য, সেখানেই সি++ এর রাজত্ব:

  • গেম ইঞ্জিন — আনরিয়েল ইঞ্জিন (Unreal Engine - Fortnite, PUBG), ক্রাইইঞ্জিন (CryEngine), id Tech। বড় বাজেটের (AAA) গেমগুলো সি++ দিয়ে তৈরি।
  • ওয়েব ব্রাউজার — ক্রোম (V8 ইঞ্জিন), ফায়ারফক্স, সাফারির ওয়েবকিট — সবই সি++ এ লেখা।
  • অপারেটিং সিস্টেম — উইন্ডোজ, ম্যাকওএস, লিনাক্সের বেশ কিছু অংশ — সবকিছুতেই সি++ ব্যবহৃত হয়।
  • ডেটাবেস — মঙ্গোডিবি (MongoDB), মাইএসকিউএল (MySQL), লেভেলডিবি (LevelDB) — সি++ তে লেখা।
  • অর্থনীতি বা ফাইন্যান্স — হাই-ফ্রিকোয়েন্সি ট্রেডিং সিস্টেম, যেখানে এক মাইক্রোসেকেন্ডের হেরফেরে কোটি টাকার লেনদেন হয়।
  • কম্পাইলার — ক্ল্যাং (Clang), জিসিসি-এর সি++ ফ্রন্টএন্ড, এলএলভিএম (LLVM) টুলচেইন — সবই সি++ দিয়ে তৈরি।
  • এমবেডেড ও রোবটিক্স — অটোনোমাস বা চালকবিহীন গাড়ি, ড্রোন, চিকিৎসাবিজ্ঞানের বিভিন্ন ডিভাইস।
  • গ্রাফিক্স এবং ভিএফএক্স (VFX) — পিক্সারের রেন্ডারিং টুল, অ্যাডোবি ফটোশপ (Adobe Photoshop), ব্লেন্ডার — সবই সি++ এর দখলে।

মডার্ন সি++ এক অন্য রকম ভাষা

আপনি যদি সি++ নিয়ে কোনো ভয়ংকর গল্প শুনে থাকেন — যেমন ম্যানুয়াল মেমরি ম্যানেজমেন্ট, দুর্বোধ্য টেমপ্লেট এরর, বা আনডিফাইন্ড বিহেভিয়ার — সেগুলো মূলত পুরোনো সি++ এর গল্প। মডার্ন সি++ (C++17, C++20, C++23) মূলত সম্পূর্ণ নতুন এক অভিজ্ঞতা:

  • স্মার্ট পয়েন্টার (Smart pointers)unique_ptr এবং shared_ptr নিজে থেকেই মেমরি ম্যানেজ করে। new/delete এর আর কোনো দরকার নেই।
  • রেঞ্জ-বেসড ফর লুপ (Range-based for loops) — জটিল ইটারেটরের বদলে for (auto& item : collection) ব্যবহার করেই কাজ শেষ।
  • অটো (auto) কিওয়ার্ড — কোন টাইপ হবে, তা কম্পাইলারকেই খুঁজে বের করতে দিন।
  • ল্যাম্বডাস (Lambdas) — ইনলাইন ফাংশন যা নিজেদের স্কোপ থেকে ভেরিয়েবল ধরতে পারে।
  • std::optional, std::variant — নাল (null) এবং ইউনিয়নের (unions) একটি নিরাপদ বিকল্প।
  • কনসেপ্টস (Concepts - C++20) — টেমপ্লেটগুলোকে সীমাবদ্ধ করে দেয়, যাতে কোনো এরর মেসেজ পড়লে তা অন্তত বোঝা যায়।

স্মার্ট পয়েন্টার — গার্বেজ কালেক্টর ছাড়াই নিরাপদ মেমরি

#include <iostream>
#include <memory>
struct Player {
std::string name;
int score;
Player(std::string n, int s) : name(n), score(s) {
std::cout << name << " তৈরি হয়েছে" << std::endl;
}
~Player() {
std::cout << name << " ধ্বংস হয়েছে" << std::endl;
}
};
int main() {
// unique_ptr: নিজে থেকেই ক্লিনআপ হয়, কোনো মেমরি লিক নেই
auto player = std::make_unique<Player>("Alex", 100);
std::cout << player->name << ": " << player->score << std::endl;
// player এখান থেকে নিজে নিজেই ধ্বংস হয়ে যায় — কোনো delete এর দরকার নেই!
return 0;
}
Output
Alex তৈরি হয়েছে
Alex: 100
Alex ধ্বংস হয়েছে
Note: সি++ এর শেখাটা বেশ কঠিন — এখানে কোনো লুকোছাপা নেই। কয়েক দশকের ফিচারের ওপর ভর করে দাঁড়িয়ে থাকা এই ভাষাটি বিশাল। কিন্তু আপনাকে এর সবকিছু শিখতে হবে না। মডার্ন সি++ (C++17+) দিয়ে শুরু করুন, স্মার্ট পয়েন্টার ব্যবহার করুন, সরাসরি new/delete এড়িয়ে চলুন এবং এসটিএল (STL)-এর ওপর নির্ভর করুন। প্রতিদিন আপনি সি++ এর যে ২০% ব্যবহার করবেন, তা দিয়েই আপনার ৯৫% কাজ হয়ে যাবে।

সি++ এ ক্যারিয়ার বা জবের বাজার

সি++ জবগুলো সাধারণত উচ্চ-বেতনের এবং বিশেষায়িত (specialized) হয়ে থাকে:

  • গেম ডেভেলপার — আনরিয়েল ইঞ্জিন, কাস্টম ইঞ্জিন এবং পারফরম্যান্স-নির্ভর গেমপ্লে সিস্টেম।
  • সিস্টেমস প্রোগ্রামার — অপারেটিং সিস্টেম কার্নেল, ড্রাইভার এবং ফার্মওয়্যার।
  • কোয়ান্ট (Quant) / এইচএফটি (HFT) ডেভেলপার — ফাইন্যান্স জগতে হাই-ফ্রিকোয়েন্সি ট্রেডিং। এখানে সি++ ডেভেলপাররা শীর্ষ পর্যায়ের বেতন পান।
  • গ্রাফিক্স / ইঞ্জিন প্রোগ্রামার — রেন্ডারিং ইঞ্জিন, শেডার, জিপিইউ প্রোগ্রামিং।
  • এমবেডেড ইঞ্জিনিয়ার — অটোমোটিভ, অ্যারোস্পেস, রোবটিক্স, আইওটি।
  • ইনফ্রাস্ট্রাকচার ইঞ্জিনিয়ার — ডেটাবেস, কম্পাইলার, ব্রাউজার, ক্লাউড ইনফ্রাস্ট্রাকচার।

কারা সি++ ব্যবহার করে?

  • এপিক গেমস (Epic Games) — আনরিয়েল ইঞ্জিন, যা বিশ্বের অন্যতম বৃহত্তম গেম ইঞ্জিন।
  • গুগল (Google) — ক্রোম, টেনসরফ্লো (TensorFlow)-এর কোর অংশ এবং সার্চ ইনফ্রাস্ট্রাকচার।
  • মাইক্রোসফট (Microsoft) — উইন্ডোজ, অফিস, ভিজ্যুয়াল স্টুডিও এবং অ্যাজিউর অবকাঠামো (Azure infrastructure)।
  • অ্যাডোবি (Adobe) — ফটোশপ, প্রিমিয়ার প্রো, আফটার ইফেক্টস — সবই সি++ এ তৈরি।
  • ব্লুমবার্গ / সিটাডেল / জেন স্ট্রিট — ফাইন্যান্সের দুনিয়া পুরোটাই সি++ এ চলে।
  • টেসলা (Tesla) — অটোপাইলট এবং সেলফ-ড্রাইভিং সিস্টেমে সি++ ব্যবহার করে।

ছোট কুইজ

পারফরম্যান্সের ব্যাপারে সি++ এর মূল দর্শন কী?

পড়া চালিয়ে যান

Variables & Data Types