4 ms·
I'm interested in what people think of the approach to teaching C++ used here. Any particular drawbacks? I'm a very experienced Python programmer with some C,
by jebarker 3y ago
I'm interested in what people think of the approach to teaching C++ used here. Any particular drawbacks?
I'm a very experienced Python programmer with some C, C++ and CUDA doing application level research in HPC environments (ML/DL). I'd really like to level up my C++ skills and looking through book 3 it seems aimed exactly at the right level for me - doesn't move too slowly and teaches best practices (per the author) rather than trying to be comprehensive.
- leopoldj 3y agoC++ programmer and educator here. This (volume 3) is well organized good beginner level teaching material. You probably know most of it already. I was looking for range-based for loop, std::array and std::span and happy to see that they are all there. Because this book relates to HPC, I'd add a few things: Return Value Optimization, move semantics, and in the recursive function section a note about Tail Call Optimization. As a beginner level material I can highly recommend it.
- jebarker 3y agoThat's great - thank-you. Assuming I work through this quickly, what resources would you recommend as a follow-on?
- rramadass 3y agoI am not the person you asked the question to, but my recommendation would be; 1) Discovering Modern C++: An Intensive Course for Scientists, Engineers, and Programmers by Peter Gottschling - Not too thick and focuses on how to program in the language. 2) Software Architecture with C++: Design modern systems using effective architecture concepts, design patterns, and techniques with C++20 by Adrian Ostrowski et al. - Shows how to use C++ in the modern way/ecosystems i.e. with CI/CD, Microservices etc. Optional but highly recommended; a) Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples by Barton & Nackman - Old pre-Modern C++ book which pioneered many of the techniques which have now become common. One of the best for learning C++ design.
- leopoldj 3y agoInstead of giving you a list of books I'll give you a list of topics to learn well. They are listed in a proper learning sequence. - Modern object initialization using {} and (). - std::string_view - std::map - std::stack - Emplace addition of objects to containers like vector and map. - Smart pointers (std::unique_ptr, std::shared_ptr and their ilk). - Ranges library. - Concurrency support library (std::async, std::future, std::thread, locks and the whole deal).
- westurner 3y ago> This book is notable for its coverage of MPI and OpenMP in both C, Fortran, C++, and (for MPI) Python. "The Art of HPC", volume 2 > "Parallel Programming for Science Engineering" https://theartofhpc.com/pcse/index.html https://theartofhpc.com/pcse/index.html FWIW, MPI is only one way to Python for HPC. ipyparallel will run MPI jobs over tunnels you create yourself IIRC. A chapter on dask-scheduler, CuDF, CuGraph (NetworkX), DaskML, and CuPy, and dask-labextension would be more current. Dask doesn't handle data storage for you, so it's your responsibility to make sure that the data store(s) before each barrier are not the performance bottleneck. Dask docs > High Performance Computers: https://docs.dask.org/en/stable/deploying-hpc.html https://docs.dask.org/en/stable/deploying-hpc.html Sources of random may be the bottleneck. You don't know until you profile the job across the cluster. Re: eBPF-based tracing tools: https://news.ycombinator.com/item?id=31688180 https://news.ycombinator.com/item?id=31688180 And then something about GitOps (and ChatOps), code review and revision, and project resource quotas