1 पॉइंट द्वारा GN⁺ 2024-04-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 『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 और PPP modules को सबसे आसान तरीके से 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

web पर मौजूद PPP2 chapters

translation status

  • PPP3 का translated edition अभी उपलब्ध नहीं है
  • previous editions के translations book covers page पर देखे जा सकते हैं

1 टिप्पणियां

 
GN⁺ 2024-04-20
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++17 install करने पर भी 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 बनने से बचना हो, अपवाद हो सकता है
    • मौजूदा GCC 13.2.1 documentation कहता है कि standard library import करने योग्य header units के रूप में उपलब्ध नहीं है। ऐसे units import करने के लिए पहले उन्हें explicitly build करना पड़ता है, और सावधानी न बरतें तो duplicate declarations बन सकते हैं जिन्हें module machinery को merge करना पड़ेगा, जिससे compiler resource usage header file split करने के तरीके से प्रभावित हो सकता है
      इसलिए अभी import को काम कराने के लिए पहले सही module file लिखनी पड़ती है। हालांकि GCC की standard C++ library update होने में शायद बहुत समय नहीं लगेगा, इसलिए आगे चलकर यह नई किताब सीधे वैसे ही इस्तेमाल की जा सकेगी
      जो लोग पहले से पुराना C++ जानते हैं और सिर्फ़ अपना ज्ञान update करना चाहते हैं, उनके लिए वह module file खुद लिखना भी अच्छा learning experience हो सकता है
    • अब किसी दिलचस्प C++ program को build system के बिना maintain करना realistic नहीं रहा। फिर भी example में दिया गया 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/
    • किताब के page पर referenced यह document module problem में मदद कर सकता है: https://www.stroustrup.com/module_use.html
  • GUI chapter में FLTK की जगह Qt कर दिया गया है। industry में Qt काफ़ी widely used है, इसलिए यह बड़ा बदलाव है और शायद अच्छी प्रतिक्रिया मिलेगी, लेकिन learning curve कैसे बदलेगा, पता नहीं

    • Stroustrup Meta Object Compiler के बारे में क्या सोचते हैं, यह जानने की उत्सुकता है। कुछ मायनों में Qt, C++ की अपनी dialect जैसा लगता है
    • Qt में Qt Creator है, इसलिए मुझे लगता है यह बेहतर दिशा है
    • क्योंकि custom wrapper library इस्तेमाल होती है, actual Qt कितना expose होता है, यह ठीक से नहीं पता
    • मैंने जिन 4 AI coding assistants (claude3, gemini, gpt4, deepseek) को आज़माया, उन सभी से C++ में boids और Game of Life लिखने को कहा, तो उन्होंने graphics के लिए SFML इस्तेमाल किया
      सोचता हूँ कि क्या यह 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—इंसान को पागल कर देता है

    • यह case पर depend करता है। header files में किसी भी namespace के लिए using namespace बिल्कुल नहीं डालना चाहिए। क्योंकि जिस name collision से बचने के लिए namespaces बने थे, आप वही collision तुरंत पैदा कर देते हैं
      implementation files में भी मुझे personally using namespace std; पसंद नहीं। मुझे लगता है इससे code readability घटती है, और std:: के अंदर की चीज़ें बहुत बड़ी हैं और लगातार बढ़ रही हैं, इसलिए name collision की संभावना से ही बचना चाहता हूँ
      code एक बार लिखा जाता है लेकिन कई बार पढ़ा जाता है, इसलिए namespace समेत छोटे names चुनना efficiency के लिहाज़ से खराब choice लगता है
    • name collisions न होना अच्छी बात है। लेकिन किसी तरह दूसरी languages ने यह problem solve कर ली है
    • मुझे लगता है C++ modules ठीक से settle हो जाएँ तो यह अब debate का विषय नहीं रहेगा
    • std से ज़्यादा double colon :: बदसूरत है। मैं कभी समझ नहीं पाया कि दूसरी languages की तरह बस एक dot क्यों नहीं इस्तेमाल कर सके
    • लगता है आपने Windows पर programming सीखी थी
  • 10 साल से ज़्यादा समय से C++ नहीं लिखा है, लेकिन इस किताब के पिछले संस्करण को सचमुच गहराई से पढ़ने की याद है। वह भी तब, जब विश्वविद्यालय में 4 साल तक लगभग 99% C++ इस्तेमाल कर चुका था
    सच में बहुत अच्छी किताब है। किताब में मौजूद C++ को समय देकर ठीक से समझें, तो थोड़ा दुख के साथ महसूस होता है कि दुनिया C++ से इतनी डरती क्यों थी
    बेशक, उसके बाद ऐसे लोगों से ढेरों मुलाकात हुई जिन्होंने ऐसी किताबें बिल्कुल नहीं पढ़ीं और भयानक C++ code लिखा

  • C++ में काम करने वाले दिन याद आते हैं। लगता है जैसे पहले की तुलना में development stack की और निचली परतों तक उतर गया हूँ। पहले UI, API parsing, लगभग सब कुछ C++ में किया जाता था

    • कुछ समय तक Fortran की याद आती रही, लेकिन करीब 30 मिनट लिखते ही तुरंत इलाज हो गया। C++ में एक बार JSON parsing करके देखिए और देखिए कि वह याद उस प्रक्रिया को झेल पाती है या नहीं
    • मुझे भी सचमुच याद आता है। बहुत पुरानी बात भी नहीं है, हमारे पास एक app था जिसमें client और server दोनों C++ में थे, UI, API, सब कुछ C++ था। सच में ऐसा लगा था कि general-purpose language आ पहुँची है
      मैं यह नहीं कहूँगा कि वह perfect था, लेकिन काम मज़ेदार था, और उस stack पर काम कर सकने वाले ऊँचे स्तर के लोगों के साथ रहना अच्छा लगता था। blade server पर distcc चलाकर build को कहीं तेज़ बना दिया था—उससे ज़्यादा रोमांचक lunch time कोई नहीं था। यह भी अच्छा था कि Linux का उत्साही user मैं अकेला नहीं था
    • हमारी कंपनी में UI को छोड़कर लगभग सब कुछ C++ है। मेरे हिसाब से UI के C++ न होने की इकलौती वजह यह है कि नए graduates को C++ training मिलने से पहले भी तुरंत काम करने लायक codebase का एक हिस्सा छोड़ा जा सके
    • C++ की तलब मिटाने के लिए आज भी personal project के तौर पर थोड़ा-थोड़ा game engine छेड़ता रहता हूँ। तमाम आलोचनाओं के बावजूद मुझे C++ इस्तेमाल करना सच में पसंद है
    • बस उम्मीद है कि Python में काम न करना पड़े
  • पिछले 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/

    • सोच रहा हूँ कि emulator project में classes वाला C इस्तेमाल करते हुए बस smart pointers और auto जोड़ना काफ़ी ठीक approach होगा या नहीं
      पहले सुना था कि C++ के चार components होते हैं। पहला “C”, दूसरा object-oriented, तीसरा STL और templates जैसी productivity और flexibility, और आखिरी volatile, asm जैसी special situations के लिए। उन्होंने सलाह दी थी कि नंबर 1 को सावधानी से इस्तेमाल करो और नंबर 4 की जरूरत पड़ने वाली situations से बचो; सोच रहा हूँ कि क्या यह बात समझ में आती है
    • 404 आ रहा है
  • मुझे लगा था यह और मोटी ईंट जैसी किताब बनेगी, लेकिन हैरानी की बात है कि यह आधी रह गई
    दूसरा संस्करण paperback में 1312 pages, weight 4.81 pounds था, और तीसरा संस्करण paperback में 656 pages, weight 2.71 pounds है

    • प्रस्तावना देखने पर लगता है कि reference material का काफी हिस्सा किताब से निकालकर internet पर मौजूद C++ documentation की ओर भेज दिया गया है
      “Programming: Principles and Practice Using C++” का तीसरा संस्करण दूसरे संस्करण के करीब आधे आकार का है, और किताब लेकर चलने वाले students कम वजन का स्वागत करेंगे, ऐसा कहा गया है। छोटा होने की वजह यह बताई गई है कि C++ और standard library के बारे में अधिक जानकारी web पर उपलब्ध है
    • C++ knowledge को pounds में गिनते देखना अच्छा लग रहा है
    • सचमुच बिल्कुल आधी है। सोच रहा हूँ कि font छोटा चुना गया है क्या
  • सोचता हूँ कि Bjarne कभी #include के बाद space डालते हैं और कभी नहीं, ऐसा क्यों है
    https://www.stroustrup.com/PPPheaders.h

    • हाथ से type किए गए headers और IDE द्वारा automatically inserted headers का mix हो, और साथ में import को default रूप से fold करने वाली setting रही हो या save करते समय clang-format न चलाया गया हो, तो यह छूट सकता है
  • नया version आना सच में exciting है। C++ में रुचि न हो या आप पहले से skilled programmer हों, तब भी यह किताब पढ़ने लायक है
    मेरी जानकारी में technical writing और computer programming education के सबसे अच्छे उदाहरणों में से एक है