Stroustrup’un 『Programming: Principles and Practice Using C++』 kitabının 3. baskısı
(stroustrup.com)- 『Programming: Principles and Practice Using C++』 3. baskı, öncelikle programlamayı ilk kez öğrenen okurları hedefliyor; biraz deneyimi olan okurlar için de modern C++ ile daha iyi stil ve teknikleri öğrenmeye yönelik bir giriş kitabı olarak kullanılabilir
- Kitabın odağı C++ sözdizimi ayrıntılarını ezberletmek değil, programlamanın temel ilkeleri ve pratik teknikleri; prosedürel, nesne yönelimli ve jenerik programlamayı birlikte ele alıyor
- PPP3, PPP2’ye göre yaklaşık yarı boyuta indirilmiş; bir dönemlik derste işlenen temel bölümler güçlendirilirken C++20/C++23 ve Qt tabanlı Graphics/GUI kodu yansıtılmış
- Daha uzmanlaşmış bölümler ve salt başvuru materyalleri, gerektiğinde bakılmak üzere web’e taşınmış; güncel başvuru bilgilerini cppreference.com gibi web kaynaklarıyla tamamlama yönünde ilerliyor
- Örnek PDF, PPP modülü ve header’ları, Qt GUI kodu, ders slaytları, kodlama stili rehberi gibi materyaller sunuluyor; hem derslerde hem de kendi kendine öğrenmede kullanılabilir
Kitabın amacı ve okurları
- 『Programming: Principles and Practice Using C++ (3rd Edition)』, kısaca PPP3, programlama deneyimi olmayan kişiler için bir giriş kitabıdır
- Daha önce biraz programlama yapmış okurlar da stil ve tekniklerini geliştirmek veya modern C++ öğrenmek için kaynak olarak kullanabilir
- Derslerde kullanılmak üzere tasarlanmış olsa da kendi kendine öğrenme de göz önünde bulundurularak yazılmıştır
- Önceki baskı, Texas A&M University’de elektrik mühendisliği, bilgisayar mühendisliği ve bilgisayar bilimi öğrencilerine yönelik ilk programlama dersinde ve çeşitli başka yerlerde kullanılmıştı
Programlamayı öğretme yaklaşımı
- Kitap, okurun sonunda başkalarının kullanabileceği ve bakımını yapabileceği kadar iyi programlar yazabilmesini hedefler
- Odak, tali dil teknolojisi ayrıntılarından çok temel kavramlar ve teknikler üzerindedir
- Yalnızca basit bir C++ dili giriş kitabı değil, genel olarak programlamaya giriş niteliğinde kurgulanmıştır
- Prosedürel programlama
- Nesne yönelimli programlama
- Jenerik programlama
- Modern üst düzey tekniklerin yanı sıra, donanımı verimli kullanmak için gereken düşük düzeyli teknikleri de ele alır
- Kullanışlı, doğru, tip güvenli, bakımı yapılabilir ve verimli kod yazmak için temel sağlar
- Temel kavramları, tasarım ve programlama tekniklerini, dil özelliklerini ve kütüphaneleri geniş kapsamda ele alır
3. baskıda değişenler
- PPP3, PPP2’ye kıyasla yaklaşık yarı boyuttadır
- Bir dönemlik kursta genellikle işlenen temel bölümler güçlendirilerek hacim azaltılmıştır
- C++20 ve C++23’ün temel kısımlarından yararlanır
- Graphics/GUI bölümlerindeki kod, tarayıcılar ve cep telefonları gibi ortamlara taşınabilirlik dikkate alınarak Qt tabanlı biçimde yeniden düzenlenmiştir
- PPP2’de “broadening the view” olarak adlandırılan daha uzmanlaşmış bölümler, gerektiğinde kullanılabilmesi için web’e konumlandırılmıştır
- Salt başvuru materyalleri kaldırılmıştır
- Web’de daha fazla ve daha güncel materyal bulunabilir; örnek olarak cppreference.com’dan söz edilir
C++ standardı ve kütüphane kapsamı
- Kitap C++20 ve C++23 kullanır
- Yerleşik tipler ile kullanıcı tanımlı tiplerin tasarımını ve kullanımını ele alır
- Girdi
- Çıktı
- Hesaplama
- Basit grafik/GUI
- C++ standart kütüphanesinin container’ları ve algoritmalarına giriş de içerir
Yayınlanan örnek materyaller
- Preface: Kitabın neleri vaat edip neleri vaat etmediğini ele alır
- Table of Contents: İçindekiler PDF’i
- Chapter 0: Notes to the Reader: Kitabın yaklaşımını anlatır
- Chapter 10: A Display Model: Örnek bölüm
- Tamamen yeni başlayanların henüz okumaması daha iyi olur
- Öğretmenlere ve deneyimli okurlara, haftada 2 bölüm temposuyla yaklaşık 5. haftada kitabın ulaştığı seviyeyi göstermek için hazırlanmış bir bölümdür
- Modern C++’ın bir kısmını gösterme amacı da vardır
Destek materyalleri ve kod
- Links: C++ implementasyonları ve geliştirme ortamları bağlantıları, başlangıç için kısa tavsiyeler
- How to use modules?:
PPP_support.hkullanarak module PPP derleme yöntemini içerir - module PPP: Modüller kullanılabildiğinde kullanılan PPP modülü
- header "PPP.h":
stdvePPPmodüllerini en kolay şekilde kullanmak için header - header "PPPheaders.h": Header dosyası kullanımına geri dönmek gerektiğinde kullanılan header
- GUI support: PPP3’ün 10-14. bölümlerindeki Graphics/GUI kullanıcı arayüzü kütüphanesini içerir
- Çalıştırmak için Qt kurulumu gerekir
- The User Manual da sunulur
- Sample code from the various chapters: Çeşitli bölümlere ait örnek kodlar, TBD olarak işaretlenmiş
- Errata: Düzeltmeler listesi
- Lectures based on PPP: PPP3 için güncellenmiş ders slaytları
- PPP Coding Style Guide
- Exercise Material: TBD olarak işaretlenmiş
Web’de kalan PPP2 bölümleri
- PPP2’nin bazı bölümleri C++14 kullanılarak yazılmış olsa da hâlâ doğrudur ve ilgili konuları makul şekilde tanıtır
- Sunulan PPP2 materyalleri:
Çeviri durumu
- PPP3’ün henüz çeviri baskısı yok
- Önceki baskıların çevirileri book covers page üzerinden görülebilir
1 yorum
Hacker News görüşleri
Bu kitabın “klasik ilk program”ının daha ilk satırdan
import std;kullanmasını epey sorunlu buluyorum. Bildiğim kadarıyla MSVC dışında hiçbir derleyici varsayılan hâliyle bunu düzgün desteklemiyor.Debian’da
g++ --std=c++23 -fmodules-tsyapsanız da olmuyor; https://en.cppreference.com/w/cpp/23 sayfasına bakınca ilgili öneri P2465R3, clang++ 17’de de “kısmi destek” var.clang++17kursanız bilemodule 'std' not foundçıkıyor.import std;nin çok yeni bir özellik olduğunu anlıyorum ama bu kitap C++’a yeni başlayanlar için; ortalama bir aceminin buna nasıl tepki vereceğini merak ediyorum. 1-2 yıl önce “Tour of C++” okurken de aynı sorunu görmüştüm.g++de tam olarak aynı hatayı ve yönlendirmeyi veriyor.Şu anda tartışılan Stroustrup’un son baskısını okumadım, ama eski baskısını C++’ı her gün kullandığım dönemde okumuştum. Aradan 20 yıl geçmiş olsa da Koenig ve Moo’nun Accelerated C++ kitabını hâlâ daha çok tercih ediyorum. Sonrasında daha iyi kitaplar çıkmış olabilir ama okumadım.
Hatırladığım kadarıyla o kitaptaki Hello World
#include,int main(),std::cout << "Hello, world!" << std::endl;gibi bir yapıdaydı; bugün Arch Linux’ta dag++ a.cppile derleyip./a.outçalıştırınca aynen çalışıyor.Kitabın tamamı, C’nin pointer aritmetiği olmadan, modern C++ ile neredeyse sözde kod kadar basit ve temiz bir stili taklit eden mükemmel bir kurguya sahipti. Erken dönem Python’ın düzenli hissine de benziyordu; Python tarafında ise pandas’ın numpy, scipy gibi C++ sarmalayıcı kütüphaneleri getirmesine kadar böyle unsurlar yoktu.
Gerçek işlerde temiz C++ kodunu neredeyse hiç görmedim. FAANG’de çalışmadım ve hızlı prototiplerde kod incelemesi de nadirdi; bu yüzden Koenig ve Moo tarzı rehberliğin benim deneyimlediğim sıfırdan proje dünyasının dışında ne kadar yayıldığını bilmiyorum. Bir sonraki Therac-25 olmak istemeyen radyoterapi gibi alanlar istisna olabilir.
Bu yüzden şimdilik
importun çalışması için önce uygun modül dosyasını yazmak gerekiyor. Yine de GCC’nin standart C++ kütüphanesini güncellemesinin çok uzun süreceğini sanmıyorum; ileride bu yeni kitabı doğrudan olduğu gibi kullanmak mümkün olabilir.Zaten eski C++’ı bilen ve sadece bilgisini güncellemek isteyen biri için o modül dosyasını bizzat yazmak da iyi bir öğrenme deneyimi olabilir.
g++çağrısının, bir gün biri GCC’ye yama eklerse derleyicinin özel işlemesiyle çalışır hâle gelmesi büyük olasılık.Genel olarak araştırma amaçlı örnekler dışında
g++çağrılarını elle birbirine bağlamak artık gerçekçi değil. Diğer derlenen dillerde de insanlargccgo,rustc,javacile doğrudan uğraşmak yerine gobuild, cargo, Maven gibi sistemler kullanıyor.https://www.kitware.com/import-std-in-cmake-3-30/
GUI bölümünde FLTK yerine Qt’ye geçmiş. Qt sektörde yaygın kullanıldığı için bu oldukça büyük bir değişiklik ve iyi karşılanacak gibi; ama öğrenme eğrisinin nasıl değişeceğini bilmiyorum.
Bunun çapraz platform olmasından mı, yoksa bu modellerin eğitildiği kodlarda SFML kullanım örneklerinin daha fazla olmasından mı kaynaklandığını merak ediyorum. SFML, Qt veya FLTK’ye göre nispeten daha yeni gibi; daha fazla eğitim verisi olması garip, ayrıca dördünün de C++ grafiklerinde SFML kullanalım diye aynı fikirde olması da tuhaf.
Stroustrup kodunda hoşuma giden şey
using namespace std;kullanması. Her şeyin başınastd::every std::last std::bloody std::thinggibistd::ekleme geleneği insanı çıldırtıyor.using namespacekoymamak gerekir. Çünkü ad alanlarının kaçınmak için tasarlandığı ad çakışmalarını tam da böyle yaratmış olursunuz.Uygulama dosyalarında da kişisel olarak
using namespace std;sevmiyorum. Kod okunabilirliğini azalttığını düşünüyorum;std::içeriği çok büyük ve sürekli büyüdüğü için ad çakışması ihtimalinden tamamen kaçınmak istiyorum.Kod bir kez yazılır ama defalarca okunur; bu yüzden ad alanı dâhil kısa isimler seçmek verimlilik açısından kötü bir tercih gibi görünüyor.
stdnin kendisinden çok çift iki nokta::çirkin. Neden diğer dillerdeki gibi sadece nokta kullanılamadığını hiç anlayamadım.10 yılı aşkın süredir C++ kullanmadım ama bu kitabın önceki baskısını gerçekten derinlemesine çalıştığımı hatırlıyorum. Üniversitede 4 yıl boyunca neredeyse %99 C++ kullanmış olmama rağmen böyleydi.
Gerçekten çok iyi bir kitap. Kitaptaki C++’ı zaman ayırıp düzgünce anlarsanız, dünyanın C++’tan neden bu kadar korktuğunu biraz hüzünlü biçimde hissedebilirsiniz.
Tabii sonrasında, böyle kitapları hiç okumadan korkunç C++ kodu yazan bir sürü insanla karşılaştım.
C++ ile çalıştığım günleri özlüyorum. Öncekine göre geliştirme yığınının daha alt katmanlarına inmişim gibi geliyor. Eskiden UI, API ayrıştırma, neredeyse her şeyi C++ ile yapardık.
Kusursuzdu demem ama iş eğlenceliydi ve o yığında çalışabilecek yüksek seviyeli insanlarla birlikte olmak keyifliydi. Blade sunucuda
distccçalıştırıp derlemeyi çok daha hızlı hale getirdiğimiz zamanki kadar heyecan verici bir öğle arası hatırlamıyorum. Linux’a tutkuyla bağlı tek kişinin ben olmamam da güzeldi.Geçen yıl boyunca 2. baskının büyük kısmını bitirdim. Gerçekten mükemmel bir kitap ve yıllar içinde programlamada karşılaştığım birçok zihinsel engeli aşmama yardımcı oldu.
Bu baskının kısalmasının ana nedeni Part IV: Broadening the View bölümünün çıkarılmış olması. Metin işleme, sayısal hesaplama, gömülü sistemler gibi ek konuları ele alan bu bölüm artık çevrimiçi sunuluyor. İlgili bölümler hâlâ geçerli ve C++11/14 kullandığı için 2. baskıdan beri güncellenmemiş.
Modern C++ için sürekli güncellenen C++ Annotations kitabını da paylaşıyorum: http://www.icce.rug.nl/documents/cplusplus/
autoekleyerek kullanmanın oldukça iyi bir yaklaşım olup olmadığını merak ediyorum.Eskiden C++’ın dört bileşeni olduğu söylenmişti. İlki “C”, ikincisi nesne yönelimlilik, üçüncüsü STL ve şablonlar gibi üretkenlik ve esneklik sağlayan kısım, sonuncusu ise
volatile,asmgibi özel durumlara yönelik kısım diye sınıflandırılmıştı. O kişi 1 numarayı dikkatli kullanmayı ve 4 numarayı kullanmak zorunda kalınacak durumlardan kaçınmayı önermişti; bunun mantıklı olup olmadığını merak ediyorum.Daha kalın bir tuğla kitap olacağını sanmıştım; şaşırtıcı biçimde yarıya inmiş.
2. baskı karton kapak 1312 sayfa, ağırlığı 4,81 pound’du; 3. baskı ise karton kapak 656 sayfa, ağırlığı 2,71 pound.
“Programming: Principles and Practice Using C++” 3. baskı, 2. baskının yaklaşık yarısı boyutunda ve kitabı yanında taşımak zorunda olan öğrencilerin hafifleyen ağırlığı memnuniyetle karşılayacağı söyleniyor. Küçülmenin nedeni olarak C++ ve standart kütüphane hakkında daha fazla bilginin web’de bulunması gösterilmiş.
Bjarne’in
#includesonrasında neden bazen boşluk koyup bazen koymadığını merak ediyorum.https://www.stroustrup.com/PPPheaders.h
Yeni sürümün çıkması gerçekten heyecan verici. C++ ile ilgilenmiyor ya da zaten deneyimli bir programcı olsanız bile bu kitap okunmaya değer.
Bildiğim kadarıyla teknik yazım ve bilgisayar programlama eğitimi alanındaki en iyi örneklerden biri.