1 poin oleh GN⁺ 2024-04-20 | 1 komentar | Bagikan ke WhatsApp
  • Edisi ke-3 『Programming: Principles and Practice Using C++』 terutama ditujukan untuk pembaca yang baru pertama kali belajar pemrograman, dan juga dapat digunakan oleh pembaca yang sudah memiliki sedikit pengalaman sebagai buku pengantar untuk mempelajari C++ modern serta gaya dan teknik yang lebih baik
  • Fokus buku ini bukan menghafal detail sintaks C++, melainkan prinsip dasar pemrograman dan teknik praktis, serta membahas pemrograman prosedural, berorientasi objek, dan generik sekaligus
  • PPP3 berukuran sekitar setengah dari PPP2, memperkuat bab-bab dasar yang dibahas dalam perkuliahan satu semester, serta mencerminkan C++20/C++23 dan kode Graphics/GUI berbasis Qt
  • Bab yang lebih spesialis dan materi referensi murni dipindahkan ke web agar dapat dilihat saat diperlukan, sementara informasi referensi terbaru dilengkapi dengan sumber web seperti cppreference.com
  • Tersedia PDF sampel, modul dan header PPP, kode GUI Qt, slide kuliah, panduan gaya coding, dan lain-lain, sehingga dapat dimanfaatkan baik untuk perkuliahan maupun belajar mandiri

Tujuan buku dan pembacanya

  • 『Programming: Principles and Practice Using C++ (3rd Edition)』, disingkat PPP3, adalah buku pengantar untuk orang yang belum memiliki pengalaman pemrograman
  • Pembaca yang sudah pernah sedikit memprogram juga dapat menggunakannya sebagai materi untuk memperbaiki gaya dan teknik, atau mempelajari C++ modern
  • Dirancang untuk perkuliahan, tetapi juga ditulis dengan mempertimbangkan belajar mandiri
  • Edisi sebelumnya pernah digunakan dalam kelas pemrograman pertama untuk mahasiswa teknik elektro, teknik komputer, dan ilmu komputer di Texas A&M University, serta di berbagai tempat lain

Cara mengajarkan pemrograman

  • Buku ini bertujuan membuat pembaca pada akhirnya mampu menulis program yang cukup baik untuk digunakan dan dipelihara oleh orang lain
  • Fokusnya ada pada konsep dan teknik dasar, bukan detail teknis bahasa yang terlalu sempit
  • Susunannya bukan sekadar buku pengantar bahasa C++, melainkan pengantar pemrograman secara umum
    • Pemrograman prosedural
    • Pemrograman berorientasi objek
    • Pemrograman generik
  • Selain teknik modern tingkat tinggi, buku ini juga membahas teknik tingkat rendah yang diperlukan untuk menggunakan hardware secara efisien
  • Memberikan landasan untuk menulis kode yang berguna, benar, type-safe, mudah dipelihara, dan efisien
  • Membahas secara luas konsep esensial, teknik desain dan pemrograman, fitur bahasa, serta library

Perubahan pada edisi ke-3

  • PPP3 berukuran sekitar setengah dibandingkan PPP2
  • Jumlah halaman dikurangi dengan memperkuat bab-bab dasar yang biasanya dibahas dalam perkuliahan satu semester
    • Memanfaatkan bagian inti C++20 dan C++23
    • Kode pada bab Graphics/GUI disusun ulang berbasis Qt, dengan mempertimbangkan portabilitas ke lingkungan seperti browser dan ponsel
  • Bab yang lebih spesialis, yang di PPP2 disebut “broadening the view”, ditempatkan di web agar dapat digunakan saat diperlukan
  • Materi referensi murni dihapus
    • Materi yang lebih banyak dan lebih mutakhir dapat ditemukan di web; cppreference.com disebut sebagai contoh

Cakupan standar dan library C++

  • Buku ini menggunakan C++20 dan C++23
  • Membahas desain dan penggunaan tipe bawaan maupun tipe buatan pengguna
    • Input
    • Output
    • Komputasi
    • Grafik/GUI sederhana
  • Juga mencakup pengantar container dan algoritme di C++ Standard Library

Materi sampel yang tersedia

  • Preface: membahas apa yang dijanjikan dan tidak dijanjikan oleh buku ini
  • Table of Contents: PDF daftar isi
  • Chapter 0: Notes to the Reader: panduan pendekatan buku ini
  • Chapter 10: A Display Model: bab sampel
    • Pemula sepenuhnya sebaiknya belum membacanya
    • Bab ini dimaksudkan untuk menunjukkan kepada pengajar dan pembaca berpengalaman tingkat yang dicapai buku ini sekitar minggu ke-5, dengan asumsi 2 bab per minggu
    • Juga bertujuan memperlihatkan sebagian dari C++ modern

Materi pendukung dan kode

Bab PPP2 yang masih tersedia di web

Status terjemahan

  • Edisi terjemahan PPP3 belum tersedia
  • Terjemahan edisi sebelumnya dapat dilihat di book covers page

1 komentar

 
GN⁺ 2024-04-20
Pendapat Hacker News
  • Menurut saya cukup bermasalah bahwa “program pertama klasik” dalam buku ini memakai import std; sejak baris pertama. Sejauh yang saya tahu, selain mungkin MSVC, tidak ada compiler yang mendukungnya dengan benar secara default
    Di Debian, g++ --std=c++23 -fmodules-ts pun tidak bisa, dan jika melihat https://en.cppreference.com/w/cpp/23, proposal terkaitnya adalah P2465R3, sementara clang++ 17 pun masih “dukungan parsial”. Bahkan setelah memasang clang++17, yang muncul adalah module 'std' not found
    Saya paham bahwa import std; adalah fitur yang sangat baru, tetapi buku ini ditujukan untuk pemula C++, jadi saya penasaran bagaimana reaksi pemula pada umumnya. Saat membaca “Tour of C++” 1–2 tahun lalu, saya juga melihat masalah yang sama

    • Poin yang bagus, dan saya juga mengalami hal yang sama. g++ saya mengeluarkan galat dan petunjuk yang persis sama
      Saya belum membaca edisi terbaru Stroustrup yang sedang dibahas ini, tetapi saya membaca edisi lama saat masih memakai C++ setiap hari. Bahkan 20 tahun kemudian, saya masih lebih menyukai Accelerated C++ karya Koenig dan Moo. Mungkin saja setelah itu ada buku yang lebih baik, tetapi saya belum membacanya
      Seingat saya, Hello World di buku itu berbentuk seperti #include, int main(), std::cout << "Hello, world!" << std::endl;, dan bahkan sekarang di Arch Linux, jika dibangun dengan g++ a.cpp lalu menjalankan ./a.out, masih bekerja apa adanya
      Secara keseluruhan, buku itu punya susunan yang sangat baik: dengan C++ modern, ia meniru gaya yang sederhana dan rapi, nyaris seperti pseudocode, tanpa aritmetika pointer C. Rasanya juga mirip kerapian Python awal, meski di sisi Python unsur seperti itu belum ada sampai kemudian pandas menarik pustaka pembungkus C++ seperti numpy dan scipy
      Dalam praktik kerja, saya hampir tidak pernah melihat kode C++ yang rapi. Saya tidak bekerja di FAANG, dan dalam prototipe cepat code review juga jarang, jadi saya tidak tahu seberapa luas pendekatan pengajaran ala Koenig dan Moo di luar dunia greenfield yang saya alami. Bidang seperti terapi radiasi, yang tidak ingin menjadi Therac-25 berikutnya, mungkin merupakan pengecualian
    • Dokumentasi GCC 13.2.1 saat ini mengatakan bahwa pustaka standar tidak disediakan sebagai header unit yang bisa di-import. Untuk meng-import unit seperti itu, Anda harus membangunnya secara eksplisit terlebih dahulu, dan jika tidak hati-hati, bisa muncul deklarasi duplikat yang harus digabungkan oleh mekanisme modul, sehingga penggunaan sumber daya compiler dapat dipengaruhi oleh cara header file dipecah
      Jadi untuk saat ini, import baru akan bekerja jika Anda terlebih dahulu menulis file modul yang sesuai. Namun pembaruan pustaka C++ standar GCC tampaknya tidak akan memakan waktu terlalu lama, jadi nanti buku baru ini kemungkinan bisa langsung digunakan apa adanya
      Bagi orang yang sudah mengenal C++ lama dan hanya ingin memperbarui pengetahuan, menulis sendiri file modul tersebut bisa menjadi pengalaman belajar yang baik
    • Sekarang sudah tidak realistis mempertahankan program C++ yang menarik tanpa build system. Meski begitu, pemanggilan g++ yang dicontohkan kemungkinan besar suatu saat akan bekerja lewat perlakuan khusus compiler jika ada seseorang yang mengirim patch ke GCC
      Secara umum, kecuali untuk contoh riset, merangkai pemanggilan g++ secara langsung sudah tidak realistis lagi. Bahasa terkompilasi lain pun memakai sistem seperti gobuild, cargo, Maven, alih-alih menyentuh langsung gccgo, rustc, atau javac
      https://www.kitware.com/import-std-in-cmake-3-30/
    • Dokumen yang dirujuk dari halaman buku ini mungkin membantu untuk masalah modul: https://www.stroustrup.com/module_use.html
  • Di bab GUI, FLTK diganti dengan Qt. Karena Qt banyak dipakai di industri, ini perubahan yang cukup besar dan tampaknya akan mendapat respons positif, tetapi saya tidak tahu bagaimana kurva belajarnya akan berubah

    • Saya penasaran apa pendapat Stroustrup tentang Meta Object Compiler. Dalam beberapa hal, Qt terasa seperti dialek C++ tersendiri
    • Karena Qt punya Qt Creator, menurut saya ini jadi lebih baik
    • Karena menggunakan pustaka wrapper khusus pengguna, saya tidak yakin seberapa banyak Qt yang sebenarnya terekspos
    • Saya meminta empat asisten coding AI yang pernah saya coba (claude3, gemini, gpt4, deepseek) untuk menulis boids dan Game of Life dalam C++, dan semuanya memakai SFML untuk grafis
      Saya penasaran apakah itu karena lintas platform, atau karena di kode yang dipelajari model-model ini ada lebih banyak contoh penggunaan SFML. SFML tampaknya relatif lebih baru daripada Qt atau FLTK, jadi aneh kalau data latihnya lebih banyak; juga agak janggal bahwa keempatnya sepakat menyarankan SFML untuk grafis C++
  • Yang saya suka dari kode Stroustrup adalah using namespace std;. Kebiasaan menempelkan std:: di depan segala sesuatu, seperti std::every std::last std::bloody std::thing, benar-benar bikin orang gila

    • Tergantung situasinya. Di file header, using namespace untuk namespace apa pun sama sekali tidak boleh dimasukkan. Karena justru itu langsung menciptakan benturan nama yang dibuat untuk dihindari oleh namespace
      Bahkan di file implementasi pun, secara pribadi saya tidak suka using namespace std;. Menurut saya itu menurunkan keterbacaan kode, dan karena isi std:: sangat besar serta terus bertambah, saya ingin menghindari kemungkinan benturan nama itu sendiri
      Kode ditulis sekali tetapi dibaca berkali-kali, jadi memilih nama pendek dengan menghilangkan namespace tampak seperti pilihan yang buruk dari sisi efisiensi
    • Bagus kalau tidak ada benturan nama. Tapi entah bagaimana bahasa lain berhasil menyelesaikan masalah ini
    • Kalau modul C++ sudah benar-benar mapan, saya rasa ini tidak akan lagi menjadi bahan perdebatan
    • Dibanding std itu sendiri, titik dua ganda :: jauh lebih buruk rupa. Saya tidak pernah mengerti mengapa tidak bisa memakai satu titik saja seperti bahasa lain
    • Sepertinya belajar pemrograman di Windows
  • Saya sudah lebih dari 10 tahun tidak memakai C++, tetapi masih ingat pernah mempelajari edisi sebelumnya dari buku ini dengan sangat mendalam. Padahal itu setelah 4 tahun di universitas hampir 99% menggunakan C++
    Ini benar-benar buku yang bagus. Kalau meluangkan waktu untuk benar-benar memahami C++ di dalam buku ini, sampai terasa agak sedih menyadari mengapa dunia begitu takut pada C++
    Tentu saja setelah itu saya bertemu banyak sekali orang yang tidak pernah membaca buku seperti ini dan menulis kode C++ yang mengerikan

  • Saya rindu masa-masa bekerja dengan C++. Rasanya seperti turun ke lapisan stack pengembangan yang lebih rendah dibanding dulu. Dulu UI, parsing API, hampir semuanya ditangani dengan C++

    • Saya sempat rindu Fortran, tetapi setelah menulisnya sekitar 30 menit, langsung sembuh. Coba saja parsing JSON dengan C++ dan lihat apakah rasa rindu itu bisa bertahan melewati prosesnya
    • Saya juga benar-benar rindu. Belum terlalu lama juga, ada aplikasi yang klien dan servernya sama-sama C++, UI, API, semuanya C++. Rasanya benar-benar seperti bahasa serbaguna akhirnya tiba
      Saya tidak akan bilang itu sempurna, tetapi pekerjaannya menyenangkan, dan menyenangkan bisa bekerja bersama orang-orang berlevel tinggi yang mampu bekerja di stack itu. Tidak ada jam makan siang yang lebih menggairahkan daripada saat kami menjalankan distcc di blade server dan membuat build jauh lebih cepat. Menyenangkan juga karena saya bukan satu-satunya pengguna Linux yang antusias
    • Di perusahaan kami, hampir semuanya C++ kecuali UI. Menurut saya satu-satunya alasan UI bukan C++ adalah agar tetap ada sebagian codebase yang bisa langsung dikerjakan lulusan baru sebelum mereka mendapat pelatihan C++
    • Untuk mengobati dahaga akan C++, saya masih sedikit-sedikit mengutak-atik game engine sebagai proyek pribadi. Terlepas dari segala kritiknya, saya benar-benar suka memakai C++
    • Saya hanya berharap tidak bekerja dengan Python
  • Selama 1 tahun terakhir saya menyelesaikan sebagian besar edisi ke-2. Ini buku yang benar-benar luar biasa, dan membantu saya melewati berbagai hambatan mental yang saya temui selama bertahun-tahun dalam pemrograman
    Alasan utama edisi ini menjadi lebih ringkas adalah karena Part IV: Broadening the View dihapus. Bagian yang membahas topik tambahan seperti pemrosesan teks, komputasi numerik, dan sistem tertanam ini kini tersedia online. Bab-bab tersebut masih relevan dan menggunakan C++11/14, jadi tidak diperbarui dari edisi ke-2

  • Saya juga membagikan C++ Annotations, buku yang terus diperbarui untuk C++ modern: http://www.icce.rug.nl/documents/cplusplus/

    • Saya penasaran apakah untuk proyek emulator, pendekatan memakai C dengan class lalu menambahkan smart pointer dan auto saja sudah cukup baik
      Dulu saya pernah mendengar bahwa C++ punya empat komponen. Pertama adalah “C”, kedua adalah berorientasi objek, ketiga adalah produktivitas dan fleksibilitas seperti STL dan template, dan yang terakhir adalah untuk situasi khusus seperti volatile, asm. Ia menyarankan agar nomor 1 dipakai dengan hati-hati dan menghindari situasi yang mengharuskan memakai nomor 4, tetapi saya penasaran apakah itu masuk akal
    • Muncul 404
  • Saya kira ini akan menjadi buku bata yang lebih tebal, tetapi mengejutkan ternyata menyusut setengahnya
    Edisi ke-2 paperback 1312 halaman dengan berat 4,81 pon, sedangkan edisi ke-3 paperback 656 halaman dengan berat 2,71 pon

    • Kalau melihat kata pengantarnya, tampaknya cukup banyak materi referensi dikeluarkan dari buku dan dialihkan ke dokumentasi C++ di internet
      “Programming: Principles and Practice Using C++” edisi ke-3 ukurannya kira-kira setengah dari edisi ke-2, dan disebutkan bahwa mahasiswa yang harus membawa buku ini akan menyambut baik bobotnya yang lebih ringan. Alasannya, kini ada lebih banyak informasi tentang C++ dan pustaka standar di web
    • Senang melihat pengetahuan C++ dihitung dalam satuan pon
    • Secara harfiah tepat setengahnya. Saya penasaran apakah mereka memilih font yang lebih kecil
  • Saya penasaran mengapa Bjarne kadang memberi spasi setelah #include dan kadang tidak
    https://www.stroustrup.com/PPPheaders.h

    • Bisa saja itu campuran antara header yang diketik manual dan header yang disisipkan otomatis oleh IDE, ditambah pengaturan yang melipat import secara default, atau kalau clang-format tidak dijalankan saat menyimpan, hal seperti ini bisa terlewat
  • Saya benar-benar antusias versi baru ini keluar. Bahkan kalau tidak tertarik pada C++ atau sudah menjadi programmer berpengalaman, buku ini tetap layak dibaca
    Sejauh yang saya tahu, ini salah satu contoh terbaik dalam penulisan teknis dan pendidikan pemrograman komputer