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 iniPilihan yang pas
Baru mulai belajar C++ dari nolC++ Primer
Sudah paham bahasa lain, ingin peta modern cepatA Tour of C++
Memperbaiki kebiasaan menulis kodeEffective Modern C++
Butuh penjelasan tuntas satu topik bahasaThe C++ Programming Language
Membangun program multithreadC++ 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:

cpp
#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:

text
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:

  1. enum class Tahap dengan nilai eksplisit 1-3: enum menjadi kunci urutan sekaligus label; menambah buku tinggal menandai tahapnya tanpa menyusun ulang daftar.
  2. std::stable_sort: mengurutkan berdasarkan tahap sambil mempertahankan urutan buku yang tahapnya sama — urutan penulisan di rak tetap terlihat.
  3. Comparator lambda: membandingkan static_cast<int> dari enum karena enum class tidak membandingkan dirinya sendiri dengan < antar tipe berbeda tanpa nilai yang jelas.
  4. Fungsi label(): menerjemahkan enum ke teks di satu tempat; menambah tahap baru berarti satu case tambahan 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.