Stroustrup की 『Programming: Principles and Practice Using C++』 का तीसरा संशोधित संस्करण
(stroustrup.com)- 『Programming: Principles and Practice Using C++』 का तीसरा संस्करण मुख्य रूप से उन पाठकों के लिए है जो पहली बार programming सीख रहे हैं, और थोड़े अनुभव वाले पाठकों के लिए भी modern C++ और बेहतर style व techniques सीखने की introductory book के रूप में उपयोगी हो सकता है
- किताब का केंद्र C++ syntax की बारीकियों को रटाना नहीं, बल्कि programming के बुनियादी सिद्धांत और practical techniques हैं; इसमें procedural, object-oriented और generic programming को साथ में कवर किया गया है
- PPP3, PPP2 की तुलना में लगभग आधे आकार का हो गया है; एक-semester course में पढ़ाए जाने वाले foundational chapters को मजबूत करते हुए इसमें C++20/C++23 और Qt-based Graphics/GUI code को शामिल किया गया है
- अधिक specialized chapters और purely reference material को web पर ले जाया गया है ताकि जरूरत पड़ने पर देखा जा सके; latest reference information को cppreference.com जैसे web resources से supplement करने की दिशा अपनाई गई है
- sample PDF, PPP modules/headers, Qt GUI code, lecture slides, coding style guide आदि उपलब्ध हैं, जिन्हें classes और self-study दोनों में इस्तेमाल किया जा सकता है
किताब का लक्ष्य और पाठक
- 『Programming: Principles and Practice Using C++ (3rd Edition)』, संक्षेप में PPP3, programming experience न रखने वालों के लिए एक introductory book है
- जो पाठक पहले से थोड़ी programming कर चुके हैं, वे भी style और techniques सुधारने या modern C++ सीखने के resource के रूप में इसका उपयोग कर सकते हैं
- इसे classroom teaching के लिए design किया गया है, लेकिन self-study को भी ध्यान में रखकर लिखा गया है
- पिछले editions का उपयोग Texas A&M University में electrical engineering, computer engineering और computer science students के first programming course तथा कई अन्य जगहों पर किया जा चुका है
programming सिखाने का तरीका
- किताब का लक्ष्य यह है कि पाठक अंततः ऐसे अच्छे programs लिख सकें जिन्हें दूसरे लोग use और maintain कर सकें
- focus छोटी-मोटी language technical details की बजाय basic concepts और techniques पर है
- यह केवल C++ language की introductory book नहीं, बल्कि general programming की introduction के रूप में structured है
- procedural programming
- object-oriented programming
- generic programming
- modern high-level techniques के साथ-साथ, hardware का efficient उपयोग करने के लिए जरूरी low-level techniques भी कवर की गई हैं
- उपयोगी, सही, type-safe, maintainable और efficient code लिखने की foundation देती है
- essential concepts, design और programming techniques, language features और libraries को व्यापक रूप से कवर करती है
तीसरे संस्करण में क्या बदला
- PPP3, PPP2 की तुलना में लगभग आधे आकार का है
- एक-semester course में आम तौर पर कवर किए जाने वाले foundational chapters को मजबूत करके कुल length घटाई गई है
- C++20 और C++23 के core हिस्सों का उपयोग किया गया है
- Graphics/GUI chapters के code को Qt based तरीके से फिर से बनाया गया है, ताकि browser और mobile phone जैसे environments में portability को ध्यान में रखा जा सके
- PPP2 में “broadening the view” कहे जाने वाले अधिक specialized chapters को जरूरत पड़ने पर इस्तेमाल के लिए web पर रखा गया है
- purely reference material हटा दिया गया है
- अधिक और latest material web पर मिल सकता है; उदाहरण के तौर पर cppreference.com का उल्लेख है
C++ standard और library coverage
- किताब C++20 और C++23 का उपयोग करती है
- built-in types और user-defined types के design और use को कवर करती है
- input
- output
- computation
- simple graphics/GUI
- C++ standard library के containers और algorithms की introduction भी शामिल है
publicly available sample material
- Preface: किताब क्या promise करती है और क्या नहीं, इसे कवर करता है
- Table of Contents: table of contents PDF
- Chapter 0: Notes to the Reader: किताब के approach की guide
- Chapter 10: A Display Model: sample chapter
- पूरी तरह beginners के लिए इसे अभी न पढ़ना बेहतर है
- यह teachers और experienced readers को दिखाने के लिए है कि प्रति सप्ताह 2 chapters के हिसाब से लगभग 5वें सप्ताह में किताब किस level तक पहुँचती है
- इसका उद्देश्य modern C++ के कुछ हिस्से दिखाना भी है
support material और code
- Links: C++ implementations और development environments के links, साथ ही शुरुआत के लिए simple advice
- How to use modules?:
PPP_support.hका उपयोग करके module PPP build करने का तरीका शामिल है - module PPP: modules उपलब्ध होने पर इस्तेमाल करने वाला PPP module
- header "PPP.h":
stdऔरPPPmodules को सबसे आसान तरीके से use करने के लिए header - header "PPPheaders.h": जब header files के उपयोग पर वापस जाना पड़े, तब इस्तेमाल होने वाला header
- GUI support: PPP3 chapters 10–14 के Graphics/GUI user interface library सहित
- चलाने के लिए Qt install होना जरूरी है
- The User Manual भी उपलब्ध है
- Sample code from the various chapters: कई chapters के sample code, TBD के रूप में marked
- Errata: errata
- Lectures based on PPP: PPP3 के लिए updated lecture slides
- PPP Coding Style Guide
- Exercise Material: TBD के रूप में marked
web पर मौजूद PPP2 chapters
- PPP2 के कुछ chapters C++14 का उपयोग करके लिखे गए थे, लेकिन वे अब भी सही हैं और उन topics की reasonable introduction देते हैं
- उपलब्ध PPP2 material:
translation status
- PPP3 का translated edition अभी उपलब्ध नहीं है
- previous editions के translations book covers page पर देखे जा सकते हैं
1 टिप्पणियां
Hacker News की राय
मुझे लगता है कि इस किताब के “classic first program” में पहली ही लाइन से
import std;इस्तेमाल करना काफ़ी समस्याग्रस्त है। मेरी जानकारी में MSVC के अलावा कोई भी compiler default state में इसे ठीक से support नहीं करताDebian पर
g++ --std=c++23 -fmodules-tsकरने पर भी नहीं चलता, और https://en.cppreference.com/w/cpp/23 देखने पर संबंधित proposal P2465R3 है, लेकिन clang++ 17 भी “partial support” है।clang++17install करने पर भीmodule 'std' not foundआता हैमैं समझता हूँ कि
import std;बहुत नया feature है, लेकिन यह किताब C++ beginners के लिए है, इसलिए सोचता हूँ कि औसत beginner इस पर कैसे react करेगा। 1–2 साल पहले “Tour of C++” पढ़ते समय भी यही problem देखी थीg++भी बिल्कुल वही error और guidance देता हैमैंने Stroustrup का अभी चर्चा में वाला latest edition नहीं पढ़ा है, लेकिन पुराना edition तब पढ़ा था जब रोज़ C++ इस्तेमाल करता था। 20 साल बाद भी मुझे Koenig और Moo की Accelerated C++ ज़्यादा पसंद है। हो सकता है बाद में और बेहतर किताबें आई हों, लेकिन मैंने पढ़ी नहीं हैं
याद है कि उस किताब का Hello World
#include,int main(),std::cout << "Hello, world!" << std::endl;जैसे रूप में था, और आज Arch Linux पर भीg++ a.cppसे build करके./a.outचलाएँ तो वैसा ही काम करता हैपूरी किताब की संरचना बेहतरीन थी: modern C++ में C के pointer arithmetic के बिना, लगभग pseudocode जैसी simple और clean style की नकल कराती थी। यह शुरुआती Python की साफ-सुथरी feeling से भी मिलती-जुलती थी; Python में तब तक ऐसे elements नहीं थे, जब तक बाद में pandas ने numpy, scipy जैसी C++ wrapping libraries को साथ नहीं लाया
real-world काम में मैंने clean C++ code बहुत कम देखा। मैंने FAANG में काम नहीं किया, और fast prototypes में code review भी कम ही होते थे, इसलिए मेरे अनुभव वाले greenfield world के बाहर Koenig और Moo-शैली की guidance कितनी फैली है, नहीं जानता। radiation therapy जैसे क्षेत्रों में, जहाँ अगला Therac-25 बनने से बचना हो, अपवाद हो सकता है
इसलिए अभी
importको काम कराने के लिए पहले सही module file लिखनी पड़ती है। हालांकि GCC की standard C++ library update होने में शायद बहुत समय नहीं लगेगा, इसलिए आगे चलकर यह नई किताब सीधे वैसे ही इस्तेमाल की जा सकेगीजो लोग पहले से पुराना C++ जानते हैं और सिर्फ़ अपना ज्ञान update करना चाहते हैं, उनके लिए वह module file खुद लिखना भी अच्छा learning experience हो सकता है
g++invocation कभी न कभी, अगर कोई GCC में patch डाल दे, तो compiler की special handling से काम करने लगेगाकुल मिलाकर research examples को छोड़ दें तो
g++calls को हाथ से जोड़ना अब realistic नहीं है। दूसरी compiled languages में भी लोगgccgo,rustc,javacको सीधे छूने के बजाय gobuild, cargo, Maven जैसे systems इस्तेमाल करते हैंhttps://www.kitware.com/import-std-in-cmake-3-30/
GUI chapter में FLTK की जगह Qt कर दिया गया है। industry में Qt काफ़ी widely used है, इसलिए यह बड़ा बदलाव है और शायद अच्छी प्रतिक्रिया मिलेगी, लेकिन learning curve कैसे बदलेगा, पता नहीं
सोचता हूँ कि क्या यह cross-platform होने की वजह से है, या इन models ने जिस code पर training ली उसमें SFML usage examples ज़्यादा थे। SFML, Qt या FLTK की तुलना में relatively recent लगता है, इसलिए उसके लिए training data ज़्यादा होना अजीब है; और चारों का C++ graphics के लिए SFML सुझाने पर सहमत होना भी अजीब है
Stroustrup के code में मुझे जो चीज़ पसंद है, वह
using namespace std;है। हर चीज़ के आगेstd::लगाना—std::every std::last std::bloody std::thingजैसा convention—इंसान को पागल कर देता हैusing namespaceबिल्कुल नहीं डालना चाहिए। क्योंकि जिस name collision से बचने के लिए namespaces बने थे, आप वही collision तुरंत पैदा कर देते हैंimplementation files में भी मुझे personally
using namespace std;पसंद नहीं। मुझे लगता है इससे code readability घटती है, औरstd::के अंदर की चीज़ें बहुत बड़ी हैं और लगातार बढ़ रही हैं, इसलिए name collision की संभावना से ही बचना चाहता हूँcode एक बार लिखा जाता है लेकिन कई बार पढ़ा जाता है, इसलिए namespace समेत छोटे names चुनना efficiency के लिहाज़ से खराब choice लगता है
stdसे ज़्यादा double colon::बदसूरत है। मैं कभी समझ नहीं पाया कि दूसरी languages की तरह बस एक dot क्यों नहीं इस्तेमाल कर सके10 साल से ज़्यादा समय से C++ नहीं लिखा है, लेकिन इस किताब के पिछले संस्करण को सचमुच गहराई से पढ़ने की याद है। वह भी तब, जब विश्वविद्यालय में 4 साल तक लगभग 99% C++ इस्तेमाल कर चुका था
सच में बहुत अच्छी किताब है। किताब में मौजूद C++ को समय देकर ठीक से समझें, तो थोड़ा दुख के साथ महसूस होता है कि दुनिया C++ से इतनी डरती क्यों थी
बेशक, उसके बाद ऐसे लोगों से ढेरों मुलाकात हुई जिन्होंने ऐसी किताबें बिल्कुल नहीं पढ़ीं और भयानक C++ code लिखा
C++ में काम करने वाले दिन याद आते हैं। लगता है जैसे पहले की तुलना में development stack की और निचली परतों तक उतर गया हूँ। पहले UI, API parsing, लगभग सब कुछ C++ में किया जाता था
मैं यह नहीं कहूँगा कि वह perfect था, लेकिन काम मज़ेदार था, और उस stack पर काम कर सकने वाले ऊँचे स्तर के लोगों के साथ रहना अच्छा लगता था। blade server पर
distccचलाकर build को कहीं तेज़ बना दिया था—उससे ज़्यादा रोमांचक lunch time कोई नहीं था। यह भी अच्छा था कि Linux का उत्साही user मैं अकेला नहीं थापिछले 1 साल में दूसरे संस्करण का ज़्यादातर हिस्सा खत्म किया। सचमुच शानदार किताब है, और programming में वर्षों से जिन मानसिक बाधाओं से टकराता रहा था, उन्हें पार करने में मदद मिली
इस संस्करण के छोटा होने की मुख्य वजह यह है कि Part IV: Broadening the View हटा दिया गया है। text processing, numerical computation, embedded systems जैसे अतिरिक्त विषयों को कवर करने वाला यह हिस्सा अब online उपलब्ध है। वे chapters अब भी relevant हैं और C++11/14 इस्तेमाल करते हैं, इसलिए दूसरे संस्करण से update नहीं किए गए
modern C++ को लगातार update करने वाली किताब C++ Annotations भी साझा कर रहा हूँ: http://www.icce.rug.nl/documents/cplusplus/
autoजोड़ना काफ़ी ठीक approach होगा या नहींपहले सुना था कि C++ के चार components होते हैं। पहला “C”, दूसरा object-oriented, तीसरा STL और templates जैसी productivity और flexibility, और आखिरी
volatile,asmजैसी special situations के लिए। उन्होंने सलाह दी थी कि नंबर 1 को सावधानी से इस्तेमाल करो और नंबर 4 की जरूरत पड़ने वाली situations से बचो; सोच रहा हूँ कि क्या यह बात समझ में आती हैमुझे लगा था यह और मोटी ईंट जैसी किताब बनेगी, लेकिन हैरानी की बात है कि यह आधी रह गई
दूसरा संस्करण paperback में 1312 pages, weight 4.81 pounds था, और तीसरा संस्करण paperback में 656 pages, weight 2.71 pounds है
“Programming: Principles and Practice Using C++” का तीसरा संस्करण दूसरे संस्करण के करीब आधे आकार का है, और किताब लेकर चलने वाले students कम वजन का स्वागत करेंगे, ऐसा कहा गया है। छोटा होने की वजह यह बताई गई है कि C++ और standard library के बारे में अधिक जानकारी web पर उपलब्ध है
सोचता हूँ कि Bjarne कभी
#includeके बाद space डालते हैं और कभी नहीं, ऐसा क्यों हैhttps://www.stroustrup.com/PPPheaders.h
नया version आना सच में exciting है। C++ में रुचि न हो या आप पहले से skilled programmer हों, तब भी यह किताब पढ़ने लायक है
मेरी जानकारी में technical writing और computer programming education के सबसे अच्छे उदाहरणों में से एक है