Edisi Revisi ke-3 『Programming: Principles and Practice Using C++』 karya Stroustrup
(stroustrup.com)- 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
- Links: tautan implementasi C++ dan lingkungan pengembangan, serta saran singkat untuk memulai
- How to use modules?: mencakup cara membangun module PPP menggunakan
PPP_support.h - module PPP: modul PPP yang digunakan saat modul dapat dipakai
- header "PPP.h": header untuk menggunakan modul
stddanPPPdengan cara paling mudah - header "PPPheaders.h": header yang digunakan saat harus kembali memakai file header
- GUI support: mencakup library antarmuka pengguna Graphics/GUI untuk bab 10–14 PPP3
- Untuk menjalankannya, Qt harus diinstal
- The User Manual juga tersedia
- Sample code from the various chapters: kode sampel dari berbagai bab, ditandai sebagai TBD
- Errata: daftar koreksi
- Lectures based on PPP: slide kuliah yang diperbarui untuk PPP3
- PPP Coding Style Guide
- Exercise Material: ditandai sebagai TBD
Bab PPP2 yang masih tersedia di web
- Sebagian bab PPP2 ditulis menggunakan C++14, tetapi masih benar dan memberikan pengantar yang masuk akal untuk topik terkait
- Materi PPP2 yang tersedia:
Status terjemahan
- Edisi terjemahan PPP3 belum tersedia
- Terjemahan edisi sebelumnya dapat dilihat di book covers page
1 komentar
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 defaultDi Debian,
g++ --std=c++23 -fmodules-tspun 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 memasangclang++17, yang muncul adalahmodule 'std' not foundSaya 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 samag++saya mengeluarkan galat dan petunjuk yang persis samaSaya 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 dengang++ a.cpplalu menjalankan./a.out, masih bekerja apa adanyaSecara 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
Jadi untuk saat ini,
importbaru 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 adanyaBagi orang yang sudah mengenal C++ lama dan hanya ingin memperbarui pengetahuan, menulis sendiri file modul tersebut bisa menjadi pengalaman belajar yang baik
g++yang dicontohkan kemungkinan besar suatu saat akan bekerja lewat perlakuan khusus compiler jika ada seseorang yang mengirim patch ke GCCSecara 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 langsunggccgo,rustc, ataujavachttps://www.kitware.com/import-std-in-cmake-3-30/
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 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 menempelkanstd::di depan segala sesuatu, sepertistd::every std::last std::bloody std::thing, benar-benar bikin orang gilausing namespaceuntuk namespace apa pun sama sekali tidak boleh dimasukkan. Karena justru itu langsung menciptakan benturan nama yang dibuat untuk dihindari oleh namespaceBahkan di file implementasi pun, secara pribadi saya tidak suka
using namespace std;. Menurut saya itu menurunkan keterbacaan kode, dan karena isistd::sangat besar serta terus bertambah, saya ingin menghindari kemungkinan benturan nama itu sendiriKode ditulis sekali tetapi dibaca berkali-kali, jadi memilih nama pendek dengan menghilangkan namespace tampak seperti pilihan yang buruk dari sisi efisiensi
stditu sendiri, titik dua ganda::jauh lebih buruk rupa. Saya tidak pernah mengerti mengapa tidak bisa memakai satu titik saja seperti bahasa lainSaya 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 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
distccdi blade server dan membuat build jauh lebih cepat. Menyenangkan juga karena saya bukan satu-satunya pengguna Linux yang antusiasSelama 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/
autosaja sudah cukup baikDulu 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 akalSaya 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
“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
Saya penasaran mengapa Bjarne kadang memberi spasi setelah
#includedan kadang tidakhttps://www.stroustrup.com/PPPheaders.h
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