Kesin C++ Kitap Rehberi ve Listesi

Bu soru, her yıl yayınlanan düzinelerce kötü C++ kitabı arasından birkaç inciyi toplamaya çalışmaktadır.

Genellikle internette bulunan eğitimlerden hareket halindeyken öğrenilen diğer birçok programlama dilinin aksine, çok az kişi iyi yazılmış bir C++ kitabı çalışmadan C++'ı hızlı bir şekilde öğrenebilir. Bunu yapmak için çok büyük ve karmaşıktır. Aslında, o kadar büyük ve karmaşıktır ki, pek çok kötü C++ kitabı vardır. Burada kötü bir üsluptan değil, bariz olgusal hatalar barındıran ve son derece kötü programlama stillerini teşvik eden kitaplardan bahsediyoruz.

Lütfen kabul edilen cevabı kaliteli kitaplar ve yaklaşık beceri seviyesini belirtecek şekilde düzenleyin - tercihen sonra eklemenizi C++ sohbet odasında tartıştıktan sonra. (Düzenli üyeler bir öneriye katılmazlarsa çalışmanızı acımasızca geri alabilirler). Kişisel olarak okuduğunuz/faydalandığınız her kitap hakkında kısa bir tanıtım/açıklama ekleyin. Kalite, başlıklar vb. konularda tartışmaktan çekinmeyin. Kriterleri karşılayan kitaplar listeye eklenecektir. C ve C++ Kullanıcıları Birliği (ACCU) tarafından incelemesi olan kitapların incelemeye bağlantıları vardır.

*Not: SSS ve diğer kaynaklar C++ tag info ve [tag:c++-faq] altında bulunabilir.

Başlangıç

Giriş seviyesinde, daha önce programlama deneyimi yok

  • C++ Primer * (Stanley Lippman, Josée Lajoie, and Barbara E. Moo) (C++11 için güncellenmiştir) 1 bin sayfadan oluşan bu kitap, C++ dilindeki hemen hemen her şeyi çok erişilebilir bir biçimde ve ayrıntılı olarak ele alan çok kapsamlı bir giriş kitabıdır. Beşinci baskı (16 Ağustos 2012'de yayınlandı) C++11'i kapsamaktadır. [İnceleme]
  • Programming: Principles and Practice Using C++ (Bjarne Stroustrup, 2. Baskı - 25 Mayıs 2014) (C++11/C++14 için güncellenmiştir) Dilin yaratıcısı tarafından C++ kullanarak programlamaya giriş. Daha önce programlama deneyimi olmadığını varsayan, ancak yalnızca yeni başlayanlar için olmayan iyi bir okuma.

Giriş, önceki programlama deneyimi ile

  • A Tour of C++ (Bjarne Stroustrup) (C++17 için 2. baskı) "Tur", C++'ı zaten bilen veya en azından deneyimli programcılar için standart C++'ın (dil ve standart kütüphane, ve C++11 kullanımı) orta derecede yüksek bir seviyede hızlı (yaklaşık 180 sayfa ve 14 bölüm) bir öğretici genel bakış. Bu kitap, The C++ Programming Language, 4. baskı kitabının 2-5. Bölümlerini oluşturan materyalin genişletilmiş bir versiyonudur.

  • Accelerated C++ (Andrew Koenig ve Barbara Moo, 1. Baskı - 24 Ağustos 2000) Bu kitap temeldeC++ Primer ile aynı alanı kapsar, ancak bunu dörtte bir oranında bir alanda yapar. Bunun nedeni büyük ölçüde programlamaya bir giriş değil, daha önce başka bir dilde programlama yapmış kişiler için C++'a bir giriş olması. Daha dik bir öğrenme eğrisine sahiptir, ancak bununla başa çıkabilenler için dile çok kompakt bir giriş niteliğindedir. (Tarihsel olarak, dili öğretmek için modern bir yaklaşım kullanan ilk başlangıç kitabı olarak yeni bir çığır açmıştır). Buna rağmen, C++ tamamen C++98 öğretiyor. [İnceleme]

    En iyi uygulamalar

  • Effective C++ (Scott Meyers, 3. Baskı - 22 Mayıs 2005) Bu kitap, C++ programcılarının okuması gereken en iyi ikinci kitap olma amacıyla yazıldı ve başarılı oldu. Daha önceki baskılar C'den gelen programcılara yönelikti, üçüncü baskı bunu değiştiriyor ve Java gibi dillerden gelen programcıları hedefliyor. Hatırlanması kolay ~50 temel kuralı, gerekçeleriyle birlikte çok erişilebilir (ve eğlenceli) bir tarzda sunuyor. C++11 ve C++14 için örnekler ve birkaç konu güncelliğini yitirmiştir ve Effective Modern C++ tercih edilmelidir. [İnceleme]

  • Effective Modern C++ (Scott Meyers) Bu kitap temel olarak Effective C++ kitabının C++03'ten C++11 ve C++14'e geçiş yapan C++ programcılarına yönelik yeni bir versiyonudur.

  • Effective STL (Scott Meyers) Bu, Effective C++'ın bir bütün olarak dile yaptığının aynısını STL'den gelen standart kütüphanenin bir kısmına yapmayı amaçlamaktadır: Temel kuralları gerekçeleriyle birlikte sunmaktadır. [İnceleme]

    Orta seviye

  • More Effective C++ (Scott Meyers) Effective C++'dan bile daha fazla temel kural. İlk kitaptakiler kadar önemli değil ama yine de bilmekte fayda var.

  • Exceptional C++ (Herb Sutter) Bir dizi bulmaca olarak sunulan bu kitap, pimpl deyimi, isim arama, iyi sınıf tasarımı ve C++ bellek modeli gibi çeşitli diğer konuların derinlemesine ele alınmasının yanı sıra Kaynak Edinimi Başlatma (RAII) yoluyla C++'da uygun kaynak yönetimi ve istisna güvenliği hakkında en iyi ve kapsamlı tartışmalardan birine sahiptir. [İnceleme]

  • More Exceptional C++ (Herb Sutter) C++'da etkili nesne yönelimli programlama ve STL'nin doğru kullanımına ilişkin tartışmalara ek olarak Exceptional C++'da ele alınmayan ek istisna güvenliği konularını kapsar. [İnceleme]

  • Exceptional C++ Style (Herb Sutter) Genel programlama, optimizasyon ve kaynak yönetimini ele alan bu kitapta ayrıca üye olmayan fonksiyonlar ve tek sorumluluk ilkesi kullanılarak C++'da modüler kodun nasıl yazılacağı mükemmel bir şekilde açıklanmıştır. [İnceleme]

  • C++ Kodlama Standartları (Herb Sutter ve Andrei Alexandrescu) "Kodlama standartları" burada "kodumu kaç boşluk girintili yazmalıyım?" anlamına gelmiyor. Bu kitap, doğru, anlaşılır ve verimli C++ kodu yazmanıza yardımcı olabilecek 101 en iyi uygulama, deyim ve yaygın tuzakları içermektedir. [İnceleme]

  • COPY++ Templates: The Complete Guide](http://www.amazon.com/dp/0201734842/) (David Vandevoorde ve Nicolai M. Josuttis) Bu kitap, C++11'den önce var olan şablonlar hakkındaki the kitaptır. En temelden en gelişmiş şablon metaprogramlamasına kadar her şeyi kapsar ve şablonların nasıl çalıştığına dair her ayrıntıyı açıklar (hem kavramsal olarak hem de nasıl uygulandıklarında) ve birçok yaygın tuzağı tartışır. Eklerde Tek Tanım Kuralı (ODR) ve aşırı yük çözümlemesi hakkında mükemmel özetler bulunmaktadır. C++11, C++14 ve C++17'yi kapsayan bir ikinci baskı halihazırda yayınlanmıştır. [İnceleme]

  • C++ 17 - The Complete Guide (Nicolai M. Josuttis) Bu kitap, C++17 Standardında sunulan tüm yeni özellikleri açıklamakta ve 'Inline Variables', 'constexpr if' gibi basit özelliklerden 'Polymorphic Memory Resources' ve 'New and Delete with overaligned Data' özelliklerine kadar her şeyi kapsamaktadır.

    Gelişmiş

  • Modern C++ Tasarımı (Andrei Alexandrescu) Gelişmiş genel programlama teknikleri üzerine çığır açan bir kitap. Politika tabanlı tasarım, tip listeleri ve temel genel programlama deyimlerini tanıttıktan sonra, genel programlama kullanılarak birçok yararlı tasarım modelinin (küçük nesne ayırıcılar, funktörler, fabrikalar, ziyaretçiler ve çoklu metotlar dahil) nasıl verimli, modüler ve temiz bir şekilde uygulanabileceğini açıklar. [İnceleme]

  • C++ Template Metaprogramming (David Abrahams ve Aleksey Gurtovoy)

  • C++ Concurrency In Action (Anthony Williams) Thread kütüphanesi, atomics kütüphanesi, C++ bellek modeli, kilitler ve muteksler dahil olmak üzere C++11 eşzamanlılık desteğinin yanı sıra çok iş parçacıklı uygulamaların tasarlanması ve hata ayıklama konularını kapsayan bir kitap. C++14 ve C++17'yi kapsayan bir ikinci baskı halihazırda yayınlanmıştır.

  • Advanced C++ Metaprogramming (Davide Di Gennaro) Teoriden çok pratiğe odaklanan, C++11 öncesi TMP teknikleri el kitabı. Bu kitapta, bazıları tip özellikleri tarafından geçersiz kılınan bir ton parçacık vardır, ancak teknikler yine de bilmek için yararlıdır. Eğer ilginç biçimlendirme/düzenlemeye katlanabilirseniz, Alexandrescu'dan daha kolay okunabilir ve tartışmasız daha faydalı. Daha deneyimli geliştiriciler için, C++'ın karanlık bir köşesi (bir tuhaflık) hakkında genellikle yalnızca kapsamlı deneyimlerle ortaya çıkan bir şeyler öğrenme şansınız yüksektir.

    Referans Stili - Tüm Seviyeler

  • The C++ Programming Language (Bjarne Stroustrup) (C++11 için güncellenmiştir) Yaratıcısı tarafından C++'a klasik giriş. Klasik K&R'a paralel olarak yazılan bu kitap, gerçekten de ona çok benziyor ve temel dilden standart kütüphaneye, programlama paradigmalarından dilin felsefesine kadar hemen her şeyi kapsıyor. [Review] Not: C++ standardının tüm sürümleri bu soruda takip edilmektedir: Güncel C++ standardını nerede bulabilirim.

  • C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (C++11 için güncellenmiştir) The C++ Standard Library için giriş ve referans. İkinci baskı (9 Nisan 2012'de yayınlandı) C++11'i kapsamaktadır. [İnceleme]

  • The C++ IO Streams and Locales (Angelika Langer ve Klaus Kreft) Bu kitap hakkında söylenecek çok az şey var, eğer streams ve locales hakkında bir şey bilmek istiyorsanız, kesin cevapları bulabileceğiniz tek yer burası. [İnceleme] C++11/14/17/... Referanslar:

  • The C++11/14/17 Standardı (INCITS/ISO/IEC 14882:2011/2014/2017) Bu, elbette, C++ olan veya olmayan her şeyin nihai hakemidir. Bununla birlikte, yalnızca anlaşılması için önemli ölçüde zaman ve çaba harcamaya istekli deneyimli kullanıcılar için bir referans olarak tasarlandığını unutmayın. C++17 standardı elektronik ortamda 198 İsviçre Frangı karşılığında piyasaya sürülmüştür.

  • C++17 standardı mevcuttur, ancak görünüşe göre ekonomik bir formda değildir - doğrudan ISO'dan 198 İsviçre Frangı (yaklaşık 200 ABD Doları) tutarındadır. Çoğu insan için standardizasyon öncesi son taslak fazlasıyla yeterli (ve ücretsiz). Birçoğu C++20'ye dahil edilmesi muhtemel yeni özellikleri belgeleyen daha yeni bir taslağı tercih edecektir.

  • Yeni C++'a Genel Bakış (C++11/14) (yalnızca PDF)_](http://www.artima.com/shop/overview_of_the_new_cpp) (Scott Meyers) (C++14 için güncellenmiştir) Bunlar, C++ konusunda çok saygın bir yazar olan Scott Meyers tarafından sunulan üç günlük bir eğitim kursunun sunum malzemeleridir (slaytlar ve bazı ders notları). Öğelerin listesi kısa olsa da kalitesi yüksektir.

  • C++ Core Guidelines (C++11/14/17/...)](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md) (Bjarne Stroustrup ve Herb Sutter tarafından düzenlenmiştir), modern C++'ı iyi kullanmak için bir dizi kılavuzdan oluşan ve gelişmekte olan çevrimiçi bir belgedir. Kılavuzlar, uygulama mimarisi ve kütüphane tasarımını etkileyen arayüzler, kaynak yönetimi, bellek yönetimi ve eşzamanlılık gibi nispeten daha üst düzey konulara odaklanmaktadır. Proje CppCon'15'te Bjarne Stroustrup ve diğerleri tarafından duyurulmuştur ve topluluğun katkılarını beklemektedir. Çoğu kılavuz, bir gerekçe ve örneklerin yanı sıra olası araç desteği tartışmaları ile desteklenmektedir. Birçok kural özellikle statik analiz araçları tarafından otomatik olarak kontrol edilebilecek şekilde tasarlanmıştır.

  • COPY++ Super-FAQ](https://isocpp.org/faq) (Marshall Cline, Bjarne Stroustrup ve diğerleri), Standart C++ Vakfı tarafından daha önce Marshall Cline ve Bjarne Stroustrup tarafından ayrı ayrı sürdürülen ve yeni katkıları da içeren C++ SSS'lerini birleştirme çabasıdır. Maddeler çoğunlukla orta düzeydeki sorunları ele almakta ve genellikle mizahi bir tonla yazılmaktadır. Tüm maddeler henüz C++ standardının en son sürümüyle tam olarak güncel olmayabilir.

  • cppreference.com (C++03/11/14/17/...) (Nate Kohl tarafından başlatılmıştır) temel çekirdek dil özelliklerini özetleyen ve C++ standart kütüphanesinin kapsamlı belgelerine sahip bir wikidir. Dokümantasyon çok kesindir, ancak resmi standart dokümandan daha kolay okunur ve wiki yapısı nedeniyle daha iyi gezinme sağlar. Proje, C++ standardının tüm sürümlerini belgelemektedir ve site, belirli bir sürüm için görüntüyü filtrelemeye izin vermektedir. Proje Nate Kohl tarafından CppCon'14'te sunulmuştur.

    Klasikler / Eski

    Not: Bu kitaplarda yer alan bazı bilgiler güncel olmayabilir veya artık en iyi uygulama olarak kabul edilmeyebilir.

  • The Design and Evolution of C++ (Bjarne Stroustrup) Dilin neden böyle olduğunu bilmek istiyorsanız, cevapları bu kitapta bulabilirsiniz. Bu kitap C++'ın standartlaşmasından önceki her şeyi kapsamaktadır.

  • Ruminations on C++ - (Andrew Koenig ve Barbara Moo) [Review]

  • Advanced C++ Programming Styles and Idioms (James Coplien) Kalıp hareketinin öncüsü olan bu kitap, C++'a özgü birçok "deyimi" tanımlamaktadır. Kesinlikle çok iyi bir kitap ve zaman ayırabilirseniz hala okumaya değer olabilir, ancak oldukça eski ve güncel C++ ile güncel değil.

  • Large Scale C++ Software Design (John Lakos) Lakos, çok büyük C++ yazılım projelerini yönetme tekniklerini açıklıyor. Kesinlikle iyi bir okuma, keşke güncel olsaydı. C++ 98'den çok önce yazılmıştır ve büyük ölçekli projeler için önemli olan birçok özelliği (örneğin isim alanları) gözden kaçırmaktadır. Büyük bir C++ yazılım projesinde çalışmanız gerekiyorsa, bir tuz tanesinden daha fazlasını almanız gerekse de okumak isteyebilirsiniz. Yeni bir baskının ilk cildi 2019'da bekleniyor.

  • Inside the C++ Object Model (Stanley Lippman) Sanal üye işlevlerin yaygın olarak nasıl uygulandığını ve temel nesnelerin çoklu kalıtım senaryosunda bellekte nasıl düzenlendiğini ve tüm bunların performansı nasıl etkilediğini bilmek istiyorsanız, bu tür konuların kapsamlı tartışmalarını bulacağınız yer burasıdır.

  • The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) Bu kitap 1989 C++ 2.0 sürümünü incelediği için oldukça eski - Şablonlar, istisnalar, isim alanları ve yeni dökümler henüz tanıtılmamıştı. Bununla birlikte, bu kitap o zamanki C++ standardının tamamını inceleyerek dilin mantığını, olası uygulamalarını ve özelliklerini açıklamaktadır. Bu kitap C++ programlama ilkelerini ve kalıplarını öğrenmek için değil, C++ dilini her yönüyle anlamak için yazılmıştır.

  • Thinking in C++ (Bruce Eckel, 2. Baskı, 2000). İki cilt; öğretici tarzda ücretsiz bir giriş seviyesi kitap setidir. İndirmeler: Cilt 1, Cilt 2. Ne yazık ki bir dizi önemsiz hatayla (örneğin, geçicilerin otomatik olarak const olduğunu sürdürmek) gölgelenmişlerdir ve resmi bir hata listesi yoktur. Kısmi bir 3rd parti hata listesi (http://www.computersciencelab.com/Eckel.htm) adresinde mevcuttur, ancak görünüşe göre sürdürülmemektedir.

  • Bilimsel ve Mühendislik C++: İleri Tekniklere ve Örneklere Giriş (John Barton ve Lee Nackman) Sayısal yöntemler bağlamında C++'da mevcut olan tüm özellikleri açıklamaya ve kullanmaya çalışan kapsamlı ve çok ayrıntılı bir kitaptır. O dönemde, Barton-Nackman hilesi olarak da adlandırılan Curiously Recurring Template Pattern (CRTP) gibi birkaç yeni teknik tanıtılmıştır. Boyutsal analiz ve otomatik türevlendirme gibi çeşitli tekniklere öncülük etmiştir. Bir ifade ayrıştırıcısından Lapack sarmalayıcısına kadar çok sayıda derlenebilir ve kullanışlı kodla birlikte geldi. Kod hala burada mevcuttur: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Ne yazık ki, kitapların tarzı ve C++ özellikleri biraz eskimiştir, ancak o zamanlar (1994, STL öncesi) inanılmaz bir güç turuydu. Dinamik kalıtımla ilgili bölümleri anlamak biraz karmaşık ve çok kullanışlı değil. Bu klasik kitabın move semantiğini ve STL'den alınan dersleri içeren güncellenmiş bir versiyonu çok iyi olurdu.

Yorumlar (22)