Dokumentasi online menjawab pertanyaan spesifik dalam hitungan detik, tetapi jarang menjelaskan mengapa sebuah fitur dirancang begitu dan kapan sebaiknya tidak dipakai. Buku mengisi celah itu: penulisnya menyusun materi secara berurutan, memberi konteks historis, dan menunjukkan kebiasaan yang terbukti dari pengalaman bertahun-tahun. Chapter ini mengurasi lima buku klasik yang menjadi rujukan umum di komunitas C++, menjelaskan sasaran pembaca masing-masing, dan menutup dengan program kecil yang menyusunnya menjadi rencana baca bertahap.
Lima Buku Klasik dan Sasarannya #
Kurasi berikut disusun dari yang paling ramah pemula hingga yang paling spesifik:
- A Tour of C++ (3rd edition, C++20) — Bjarne Stroustrup. Pemencil bahasa aslinya menawarkan peta cepat seluruh fitur modern dalam satu bacaan ringkas; cocok bagi kita yang sudah paham bahasa lain dan ingin melihat bentuk C++ hari ini sebelum mendalami.
- C++ Primer (5th edition, C++11) — Stanley Lippman, Josée Lajoie, dan Barbara Moo. Buku fondasi paling menyeluruh untuk pemula; pembahasannya bertahap dengan latihan per bab, meski ketebalannya menuntut komitmen.
- The C++ Programming Language (4th edition, C++11) — Bjarne Stroustrup. Referensi menyeluruh yang mencakup bahasa dan standard library; bukan bacaan urut dari depan, melainkan kamus besar saat kita butuh penjelasan tuntas satu topik.
- Effective Modern C++ (2015, C++11/14) — Scott Meyers. 42 item pendek berisi kebiasaan menulis kode idiomatik — auto, move semantics, smart pointer, dan concurrency; format per-item membuatnya layak dibaca sedikit-sedikit.
- C++ Concurrency in Action (2nd edition, C++17) — Anthony Williams. Buku spesialis untuk thread, mutex, atomic, dan desain paralel; pasangan alami section Concurrency di course ini.
Cara Memilih Sesuai Tahap #
Memilih buku bukan soal mana yang terbaik, melainkan mana yang cocok dengan tahap dan kebutuhan saat ini:
| Kebutuhan saat ini | Pilihan yang pas |
|---|---|
| Baru mulai belajar C++ dari nol | C++ Primer |
| Sudah paham bahasa lain, ingin peta modern cepat | A Tour of C++ |
| Memperbaiki kebiasaan menulis kode | Effective Modern C++ |
| Butuh penjelasan tuntas satu topik bahasa | The C++ Programming Language |
| Membangun program multithread | C++ Concurrency in Action |
Satu catatan penting tentang edisi: C++ bergerak setiap tiga tahun, sehingga periksa edisi sebelum membeli. C++ Primer dan The C++ Programming Language masih mengajarkan C++11, yang berarti fitur seperti std::expected dan <ranges> tidak ada di dalamnya — pasangannya adalah membaca edisi terbaru buku tersebut bila tersedia, lalu melengkapi dengan cppreference untuk fitur yang lebih baru.
Rencana Baca dalam Program #
Supaya kurasi di atas tidak berhenti sebagai daftar, program berikut menyusun kelima buku menjadi rencana baca tiga tahap. Kuncinya adalah enum class Tahap yang nilainya memaksa urutan, lalu std::stable_sort merapikan rak sebelum dicetak:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
// Tahap baca: urutan nilainya menentukan urutan rencana.
enum class Tahap { Fondasi = 1, Pendalaman = 2, Spesialisasi = 3 };
struct Buku {
std::string judul;
std::string penulis;
std::string fokus;
Tahap tahap;
};
std::string label(Tahap t) {
switch (t) {
case Tahap::Fondasi: return "Tahap 1 - Fondasi";
case Tahap::Pendalaman: return "Tahap 2 - Pendalaman";
case Tahap::Spesialisasi: return "Tahap 3 - Spesialisasi";
}
return "?";
}
int main() {
std::vector<Buku> rak = {
{"A Tour of C++", "Bjarne Stroustrup", "peta cepat fitur modern", Tahap::Fondasi},
{"C++ Primer", "Lippman, Lajoie, dan Moo", "fondasi bahasa bertahap", Tahap::Fondasi},
{"Effective Modern C++", "Scott Meyers", "kebiasaan kode idiomatik", Tahap::Pendalaman},
{"The C++ Programming Language", "Bjarne Stroustrup", "referensi menyeluruh bahasa", Tahap::Pendalaman},
{"C++ Concurrency in Action", "Anthony Williams", "thread dan sinkronisasi", Tahap::Spesialisasi},
};
// Urutkan stabil berdasarkan nilai enum agar kelompok tidak tercampur.
std::stable_sort(rak.begin(), rak.end(),
[](const Buku& a, const Buku& b) {
return static_cast<int>(a.tahap) < static_cast<int>(b.tahap);
});
for (const Buku& b : rak) {
std::cout << label(b.tahap) << ": " << b.judul << " - "
<< b.penulis << " (" << b.fokus << ")\n";
}
return 0;
}Output yang Dihasilkan:
Tahap 1 - Fondasi: A Tour of C++ - Bjarne Stroustrup (peta cepat fitur modern)
Tahap 1 - Fondasi: C++ Primer - Lippman, Lajoie, dan Moo (fondasi bahasa bertahap)
Tahap 2 - Pendalaman: Effective Modern C++ - Scott Meyers (kebiasaan kode idiomatik)
Tahap 2 - Pendalaman: The C++ Programming Language - Bjarne Stroustrup (referensi menyeluruh bahasa)
Tahap 3 - Spesialisasi: C++ Concurrency in Action - Anthony Williams (thread dan sinkronisasi)Bedah program di atas:
enum class Tahapdengan nilai eksplisit 1-3: enum menjadi kunci urutan sekaligus label; menambah buku tinggal menandai tahapnya tanpa menyusun ulang daftar.std::stable_sort: mengurutkan berdasarkan tahap sambil mempertahankan urutan buku yang tahapnya sama — urutan penulisan diraktetap terlihat.- Comparator lambda: membandingkan
static_cast<int>dari enum karena enum class tidak membandingkan dirinya sendiri dengan<antar tipe berbeda tanpa nilai yang jelas. - Fungsi
label(): menerjemahkan enum ke teks di satu tempat; menambah tahap baru berarti satucasetambahan dan compiler akan mengingatkan kita melalui warning-Wswitch.
Buku memberi pembingkaian yang kuat, tetapi proses penyusunannya memakan waktu — dan standar C++ terus bergerak lewat proses ISO. Chapter berikutnya membawa kita ke sumber paling hulu: bagaimana sebuah fitur lahir sebagai proposal, dan bagaimana kita mengejar perkembangannya langsung dari komite penyusun standar.