18 ms·
Ask HN: Best way to learn modern C++?
Do you have some good advice or know any useful resources to learn in a proper way how to code in C++? For the context, I know some C, but C++ seems a different kind of beast, and it's easy to get lost in the huge variety of features and libraries it offers.
- GreyZephyr 9y agoPiggybacking of this post, if anyone has any similar resources for best practices in modern C I'd be interested. There don't seem to be any moocs that go beyond introductory material and K&R obviously doesn't cover modern tools and methods.
- modernclearning 9y ago“C Interfaces and Implementations” by David R. Hanson is what I used when I had a similar concern a few years ago. It’s from 1997, so no, it doesn’t cover the newest C standards, which I understand is your main concern. Though C11 didn’t add too much semantically, for what it’s worth. That said, the book provides great design patterns for writing C in an object-oriented sort of manner, more idiomatic to OOP. Peter Hintjens was writing “Scalable C” a couple years ago, but recently died, and never got very far unfortunately.
- sevensor 9y agoThere's the "Modern C" book from http://icube-icps.unistra.fr/index.php/Jens_Gustedt http://icube-icps.unistra.fr/index.php/Jens_Gustedt. Very opinionated, but it covers a lot of ground and if you disagree, it gives you a framework for figuring out your own preferences.
- isaachier 9y agoMy biggest question would be what modern means to you? Does it mean the style of the newest popular C project? The newest standard (C11)? And what devices are you using C for? I'd assume a standard POSIX environment, but you can't be sure with C.
- jxub 9y ago21st Century C is a really good book for writing C11. There is a .pdf of it in Google.
- vehemos 9y agoAlso in case anyone is going to suggest something project-like please something in the direction of HFT/OS/Systems related as opposed to game programming? There are loads of stuff out there for C++ related to game programming. For OP: https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282#388282 https://stackoverflow.com/questions/388242/the-definitive-c-... Also some C++ related YT channels such as TheChernoProject, CppCon etc Following the respective reddit and slack communities is also extremely helpful. Also get your hands dirty with this: https://github.com/vitalets/github-trending-repos https://github.com/vitalets/github-trending-repos or https://github.com/fffaraz/awesome-cpp https://github.com/fffaraz/awesome-cpp There is more but this should do. Oh I almost forgot: https://ishansharma.github.io/twitter-mentors/ https://ishansharma.github.io/twitter-mentors/ http://stephaniehurlburt.com/blog/2016/11/14/list-of-engineers-willing-to-mentor-you http://stephaniehurlburt.com/blog/2016/11/14/list-of-enginee... https://twitter.com/sehurlburt/status/889004724669661184 https://twitter.com/sehurlburt/status/889004724669661184 Good Luck! :-)
- isaachier 9y agoIMO, the classic C++ book/author is still the best: Effective C++. Don't forget about the sequels, including the mostly overlooked Effective STL (which I happen to like better than the first two books). And to address the modern part of this question, I'll add that Scott Meyers has written Effective Modern C++ as well, but I'd read that last after getting the hang of C++03. No matter what people say, I tend to believe C++11 and on is not really a different language as much as it is syntactic sugar to cover up the ugliest parts of C++.
- dfan 9y agoAs someone who programmed in "classic C++" for decades, I feel like modern C++ is pretty different, and that it's not just syntactic sugar to make some ugly things easier. The biggest example is that my natural inclination to use raw pointers everywhere and manage all memory myself, while idiomatic modern C++ is full of unique_ptrs and shared_ptrs everywhere, and raw pointers seem to be regarded as a code smell. Converting to this style is not an automatic process. For people who are coming from a classic C++ background, I find Bancila's Modern C++ Programming Cookbook to be a good first stop for discovering modern C++ idioms.
- jcadam 9y agoI remember being placed on a C++ project for a few months after having been away from the language for almost 10 years. The lack of raw pointers was an immediate slap in the face and had me going "WTF am I looking at?"
- isaachier 9y agoOK from that perspective I can relate. Even before using C++11 I was using a lot of the new STL through Boost. If you use Boost, the only fundamental differences are syntax like auto, variadic macros, constexpr, noexcept, and lambdas all of which are familiar enough to get by. The only practical differences that have no equivalent in C++03 is move operations and maybe the threading/chrono stuff. Effective Modern C++ covers that so that's all I needed to "upgrade."
- AstralStorm 9y ago
- landtuna 9y agoOnce you've got the basics down from a tutorial (old C++ or modern C++), move on to internalizing all the lessons here: https://isocpp.org/faq https://isocpp.org/faq (what Marshall Cline's excellent C++ FAQ has become) and here: https://herbsutter.com/gotw/ https://herbsutter.com/gotw/ (Not as organized, but Herb Sutter wrestles with the essential questions of how to deal with the tricky bits of C++) If you've got the cash, read Effective Modern C++ by Scott Meyers. Finally, if you're ready to snark at all you've learned, read the C++ FQA: http://yosefk.com/c++fqa/ http://yosefk.com/c++fqa/
- Suro 9y agoI would like to point out that yosefk fqa is a bit old now, and while some problems mentioned are still relevant, tools and conformity across up to date compilers are magnitudes better now.
- ronreiter 9y agoMay I ask why do you want to learn modern C++? You should check out Rust, it aims to replace C++ and do a better job in memory management, and developer experience in general (cross-platform compatibility, package management, etc)
- maxxxxx 9y agoOne motivation to learn C÷÷ could be to find a job. Rust looks interesting but C++ is still vastly more popular.
- jxub 9y agoMostly because of adoption. Rust is great, but I'm not really into it (subjectively).
- deleted 9y ago[deleted]
- sjapkee 9y ago>replace C++ No one can replace it, but everyone has to try.
- bigcheesegs 9y agoRust is the first language I've seen that even has a chance though.
- yoz-y 9y agoLanguages rarely get replaced though. We are just adding to the pile.
- ahartmetz 9y agoOnly in a very strict interpretation that everything that is still used somewhere didn't get replaced. Perl was more or less replaced, for example, and I like that. The only kind of originality that is good in programming is "surprisingly simple". "Surprisingly weird" is terrible.
- 72deluxe 9y agoRead Stroustrup's blue book (The C++ Programming Language 4th edition); chapter 1 will teach you a LOT. Then read Meyer's Effective modern C++. And then have a local copy of cppreference.com (they provide a zip you can download) and set yourself some projects.
- mrlyc 9y agoGoogle's C++ course at https://developers.google.com/edu/c++/ https://developers.google.com/edu/c++/ looks useful to start with.
- cpburns2009 9y agoIf it's anything like their Python class, it'll be 10 years out of date.
- johndubchak 9y agoDon’t forget SFINAE. It’s what most of the modern type traits rely on and something you’d have to understand, at least conceptually, to fully understand how to effectively use things like std::enable_if.
- hermitdev 9y agoFor those unfamiliar with C++, SFINAE is "Substitution Failure Is Not An Error". The short of it is how the language deals with overload selection with templates. If you want a more detailed explanation and example, see [1]. [1] https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error https://en.wikipedia.org/wiki/Substitution_failure_is_not_an...
- pjmlp 9y ago- Tour of C++ (http://www.stroustrup.com/Tour.html http://www.stroustrup.com/Tour.html) - Principles and Practice Using C++ (http://www.stroustrup.com/programming.html http://www.stroustrup.com/programming.html) - From Mathematics to Generic Programming (http://www.fm2gp.com/ http://www.fm2gp.com/) - The Scott Meyers books Some of the Bjarne Stroustrup videos, "Learning and Teaching Modern C++" - https://www.youtube.com/watch?v=fX2W3nNjJIo https://www.youtube.com/watch?v=fX2W3nNjJIo Some of the Herb Sutter videos, "Writing Good C++14... By Default" - https://www.youtube.com/watch?v=hEx5DNLWGgA https://www.youtube.com/watch?v=hEx5DNLWGgA "Back to the Basics! Essentials of Modern C++ Style" - https://www.youtube.com/watch?v=xnqTKD8uD64 https://www.youtube.com/watch?v=xnqTKD8uD64 Some of the Kate Gregory videos, "Stop Teaching C" - https://www.youtube.com/watch?v=YnWhqhNdYyk https://www.youtube.com/watch?v=YnWhqhNdYyk "10 Core Guidelines You Need to Start Using Now" - https://www.youtube.com/watch?v=XkDEzfpdcSg https://www.youtube.com/watch?v=XkDEzfpdcSg "It's Complicated" - https://www.youtube.com/watch?v=tTexD26jIN4 https://www.youtube.com/watch?v=tTexD26jIN4
- se30b 9y agoWould not recommend Principles and Practice Using C++, it is a fluff loaded book seemingly made to sell to university students.
- bewuethr 9y agoI think it's a great introduction to Programming, but if you already know some other language, it tends to be verbose - but Stroustrup always tends to be verbose. I, for one, really like his style.
- zerr 9y agoI used to like Bjarne's style when I was just starting, but nowadays it seems way too verbose. Even talks, you can "compress" his 1+ hour talks to 15 minutes, lossless :)
- humanrebar 9y agoI'd add the CppCoreGuidelines to the list: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md https://github.com/isocpp/CppCoreGuidelines/blob/master/CppC... It's a lot of the content in the above but crowdsourced, open for PRs, searchable, and readable from the browser.
- cpfohl 9y agoUse it. Not being a smart@$$ here. Any language you want to learn will only become natural when you've used it for a significant project or set of exercises. Either clone or port something non trivial, or use it for your latest pet project, or get permission to use it at work.
- brian_herman 9y agoThe best advice that was given to me in college on how to learn a new programming language was to use it.
- deleted 9y ago[deleted]
- kdelok 9y agoI'd still argue that there's a lot of value in some form of teaching (via book or video or whatever). If left to their own devices, novices will often come up with messy, non-idiomatic ways to do things.
- OskarS 9y agoI find using both in combination is usually the best way to go. If you're just reading a book and doing exercises in it, you wont learn as well. Making something you want to make and using books as reference while developing makes you learn a lot quicker. Also, the answer to this question depends a lot on your previous experience with other languages. If you're well-versed in another C-like language, jumping right in and starting to make something will probably teach you a lot, really quickly. If you're more of a beginner in programming generally, you need a book or a teacher.
- murukesh_s 9y agoYa, I think a balanced approach is the best, begin by reaing or watching videos, but not too much, just to get an overall idea, then get hands on but don't stop there, read more code and watch more videos and continue the process for your life time! I sometimes get carried away and stop reading more after I cross some threshold which prevented me from noticing lot of nice things like best practices that were happening in the industry/or better design patterns etc..
- moocowtruck 9y agoThis is undoubtedly the best c++ resource available http://shop.oreilly.com/product/0636920040385.do http://shop.oreilly.com/product/0636920040385.do
- logandk 9y agoBefore diving into smart pointers, move semantics and other (mostly) recent additions, I would recommend getting well acquainted with the basics: RAII and common patterns such as passing by constant reference. Effective C++ by Scott Meyers, as others have noted, is an excellent entry point.
- pvg 9y agoIt's a bit of an evergreen question. https://hn.algolia.com/?query=learn%20c%2B%2B&sort=byPopularity&prefix&page=0&dateRange=all&type=story https://hn.algolia.com/?query=learn%20c%2B%2B&sort=byPopular... For even more stuff - if you do the same search for C, especially 'modern C', you'll find those threads often also contain a parallel set of recommendation for C++ resources.
- therealmarv 9y agoBuild simple command line programs with it and use first a simple editor like Code::Blocks. Best thing to stop you learning C++ is using one of this beasts like VisualStudio and start with Windows programming ;)
- overcast 9y agoBest way to learn anything new, is just pick a pet project you've been thinking about, and implement it in that language/database/system/whatever. That's how I've always done it over the years. You end up constantly building upon the last projects knowledge.
- fsloth 9y agoIf you want fun miniproject may I suggest Peter Shirley's excellent mini-raytracing bookseries: Ray Tracing In One Weekend, Ray tracing the next week, and Ray Tracing, the Rest of Your Life: https://www.amazon.com/Ray-Tracing-Weekend-Minibooks-Book-ebook/dp/B01B5AODD8 https://www.amazon.com/Ray-Tracing-Weekend-Minibooks-Book-eb... If you get interested on rendering Matt Pharr & Co's Oscar winning "Physically based rendering" is a didactic masterpiece. https://www.amazon.com/Physically-Based-Rendering-Third-Implementation/dp/0128006455 https://www.amazon.com/Physically-Based-Rendering-Third-Impl... The book is one of the best examples of how to combine high quality code and academic exposition together.
- tonetheman 9y agoIndeed this is a good project. And a great set of books. I second this!!!!
- JepZ 9y agoDo you mind asking 'Why C++'? I know that doesn't answer your question and to be honest, I am curious about the resources which come up here too, but C++ can be so painful to learn that I wanted to know what drives you into that direction. I mean, there are alternatives like Rust. Do you have a specific project in mind, need it to fulfill some résumé requirements or something completely different?
- carlmr 9y agoNot OP, but good question. I find Rust is a much better language, but there are very few mature libraries right now if you do something outside the scope of what Mozilla is doing. Also very few companies that are working in Rust (AFAIK, if you know some let me know) looking for devs. If you want to work in a company that is doing any kind of low level code you will either need C or C++ as a foundation. At least to understand existing code. Most companies won't just rewrite everything in Rust, no matter how good the language is. I really hope Rust replaces C++ for new projects, but it's just too new to tell whether that will happen. I find there's a bit more momentum (and good ideas) than in D, but nobody can predict the future from 2-3 years of language history.
- steveklabnik 9y ago> if you know some let me know “This Week in Rust” lists explicit job postings. One of the latest companies looking for Rust programmers is a little company you may have heard of: Facebook. That said, many places are hiring good programmers and putting them on Rust projects, rather than hiring Rust programmers explicitly. There aren’t many pure Rust shops yet, so they need a broader skill set.
- carlmr 9y agoI'm pretty good in C as well (less C++). I just would like to know beforehand if I could grow into a Rust role there.
- steveklabnik 9y ago
- TheArcane 9y agoRelated: Any good websites to practice C++ with challenges? I've heard some things about CodeWars, but are there any other?
- SXX 9y agoAs others noted best way to learn is to use it. Pick any open source you like, compile and test it, learn it's code, try to fix some bugs or implement features, ask questions from other developers, get feedback on your code. That way you'll learn all caveats of practical C++ development and tools. Additionally while traditional and more detailed books already posted here I'll just add one I personally liked: Discovering Modern C++ by Peter Gottschling. It's had exactly information I would expect be needed for person who already have reasonable experience in programming, but want short introduction into C++. Disclaimer: I'm certainly not someone you can call experienced C++ programmer since I just developing and manage open source project for 3+ years. So take my opinion with a grain of salt.
- rambl30n 9y agoIf you know C, C++ Common Knowledge (https://www.amazon.com/Common-Knowledge-Essential-Intermediate-Programming/dp/0321321928 https://www.amazon.com/Common-Knowledge-Essential-Intermedia...) will give you a quick run of the gotchas you're to avoid. From there, move to Scott Meyer's books, which will give you some good foundational knowledge on how features of the language work together. In particular I like that each concept is presented in a bite-sized chapter that you can read in a couple of hours and think about for the rest of the day. Even though the first two are about "classic C++" I wouldn't skip them. For a glimpse of the true power of modern C++, check the Boost Hana library docs, hopefully this will serve you as motivation to keep on going. Above all, don't do this alone. The compiler errors that you get once you start applying modern (template) techniques can be a bit of a rabbit hole and takes a bit to get an eye for deciphering them. Lean on coworkers, local user groups and/or the C++ slack group which is pretty supportive. Best of luck.
- rb808 9y agoIf you haven't already I'd suggest learning a functional language first, then coming back to modern C++, because much of the new features are borrowed from other languages. Personally I started doing this then never went back. Seems most of the jobs out there for C++ really aren't that interesting.
- blub 9y agoSimilarly to how one should learn Italian or Latin if they want to learn French. It will be impossible for them to communicate.
- modernclearning 9y agoAbsolutely unnecessary. Modern C++ borrowed some paradigms of functional programming, but learning a functional language isn’t remotely close to being a prerequisite to learning those features. In terms of jobs, C++ is used heavily, if not the majority of the time in: AAA game development, high performance computing, high frequency trading and quantitative finance, embedded software, image processing and computer vision... honestly, I focused on C++ out of school years ago BECAUSE of how interesting many of the jobs are. They’re also generally more stable and thus competitive over time compared to e.g. web dev, enterprise software, and so on, because the domain knowledge required means you’re a lot more valuable than knowing X and Y design pattern or framework Z.
- dmlorenzetti 9y agoCoincidentally, Pearson just announced a 40% off sale for all their C/C++ books (in honor of Stroustrup receiving the Draper Prize). http://www.informit.com/promotions/programming-with-c-and-c-plus-plus-tutorials-and-references-138989 http://www.informit.com/promotions/programming-with-c-and-c-...
- steveklabnik 9y agoI’m on my phone so I don’t have links, but the last few CPPCons have had talks by very prominent C++ luminaries talking about how to properly teach C++. They may be of interest. The biggest message seems to be “don’t treat C++ as C with extra stuff, it’s its own language.”
- gurpreetshanky 9y agoI would say watch C++ primer
- mannykannot 9y agoTake a look at how the standard library does things, and particularly anything for which it is not clear to you how one might implement it, or the use of anything whose purpose you don't really understand.
- Const-me 9y agoLarge parts of the standard library are designed badly. E.g. io streams are horrible, allocators are questionable.
- sifoo 9y agoSecond io streams, someone should have ripped them out with their roots a long time ago. The really good stuff in the standard library came from Stepanov. C++ feels a lot like Windows to me, sacrificing everything in the name of backwards compatibility only goes so far before the whole mess comes tumbling down.
- DoofusOfDeath 9y ago> Large parts of the standard library are designed badly. That's true, but IMO it's useful to study the standard library to understand what it offers, as opposed to examples of well-designed C++ code.
- Const-me 9y agoPeople who spent many years developing C++ already understand what the standard library offers, regardless on whether they studied that deliberately. People coming to the language lack the expertise to tell well-designed code from bad-designed. It’s tempting to treat the whole standard library as an example of the former. Maybe that’s a personal thing but I remember doing that when I just started my career back in 2000. STL wasn’t quite there but MFC was already in wide use. Because I lacked the experience I considered whatever’s there is good, and ended up using not so good parts such as C++ exceptions and macro-driven dynamic serialization.
- 9y ago
- deleted 9y ago[deleted]
- kuwze 9y agoI would recommend the following websites for practice: http://exercism.io/ http://exercism.io/ http://rosalind.info/problems/locations/ http://rosalind.info/problems/locations/ https://projecteuler.net/ https://projecteuler.net/ https://www.hackerrank.com/ https://www.hackerrank.com/
- msaltz 9y agoOne of the trickier things about C++ for me (in terms of “getting lost”) when I first started was that there’s no standard C++ project structure. It varies based on the build system you use, whether what you’re building is just an API or something else, and personal preference. I recommend looking at some open source C++ projects like Tensorflow (Google), LevelDB (also Google), folly (Facebook), MongoDB, and Thrill (a Spark clone in C++, https://github.com/thrill/thrill https://github.com/thrill/thrill). Also pick your own projects you’re interested in. Take a look at basic tutorials for build systems like make, CMake, and Bazel. Hopefully that’ll give you an idea of what a modern C++ project actually looks like, and will help you start your own. For books I’d like to add to the current top comment (may go away) API Design for C++. It’s a great reference on exactly what it sounds like.
- aloukissas 9y ago100% agree - the code quality in some of these projects (e.g. folly) is outstanding.
- prando 9y agoI usually get bogged down by the syntax of very many complex things that gets me lose the focus on the motive of the code. I wish we had an efficient way to learn what a declaration means. (On the lines of cdecl)
- snarfy 9y agoI look for projects on github with good quality source code and start hacking on them. here is a vulkan renderer https://github.com/pumexx/pumex https://github.com/pumexx/pumex You'll pick up the good habits working with good code.
- RandomCSGeek 9y agoI would recommend the book C++ Primer, by Stanley Lippman. Also http://www.learncpp.com/ http://www.learncpp.com/. Both are great resources IMHO. You might have to skim over certain topics as you already know C.
- justicezyx 9y agoWriting a piece of software in C++. Sizing the softare to fit your schedule: i.e., if you want to be at the level of BJS, write a C++ compiler; if you want to be as good as Google employee, uses the common Google c++ libraries Protobuf ABSL etc. to write a simple webserver with a few APIs. The list goes on and on.
- manca 9y agoAs others mentioned, Effective Modern C++ by Scott Meyers is a solid modern C++ book with nice tips and tricks. Other than that, check out the official C++ Guidelines by Bjarne and co. http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines Good luck!
- clarkrinker 9y agoRead the Core Guidelines. https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md https://github.com/isocpp/CppCoreGuidelines/blob/master/CppC...
- tolger 9y agoI found "C++ Primer" by Lippman et al very well written and comprehensive. It includes C++11 features and every chapter has exercises to make sure you understand the content. https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113 https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/03217...
- AstralStorm 9y agoAlready outdated by 6+ years though.
- tolger 9y agoWhat would you say are important features missing in C++11 that are in the current standard? I ask because I'm trying to get back into C++ development after many years and even C++11 seems like a new language to me.
- qdoop 9y agoC++ is just C with extra notation for easy modeling of Classes and Objects. While C still remains valuable, C++ is in my opinion questionable and there are many excellent alternatives like Java or C# for doing similar things and much more. I have programmed in C++ for many years and honestly would not suggest it to any one but anyway here are some excellent resources. ftp://bitsavers.informatik.uni-stuttgart.de/pdf/borland/borland_C++/Borland_C++_Version_2.0_Getting_Started_1991.pdf (Read chapter 4 C++Primer. The hole folder is a rare jewel) https://docs.microsoft.com/en-us/cpp/cpp/cpp-language-reference https://docs.microsoft.com/en-us/cpp/cpp/cpp-language-refere... Probably the best documentation of C++ by far. P.S. If you are desperate on learning C++ I could give short course saving you time and money.
- chi3 9y ago> C++ is just C with extra notation for easy modeling of Classes and Objects. That's far from true today, and I'd even argue it hasn't been true since very early on. Simple example to prove my point: RAII.
- qdoop 9y agoSo you know https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization https://en.wikipedia.org/wiki/Resource_acquisition_is_initia... Good for you. "Object Oriented Programming puts the Nouns first and foremost. Why would you go to such lengths to put one part of speech on a pedestal? Why should one kind of concept take precedence over another? It's not as if OOP has suddenly made verbs less important in the way we actually think. It's a strangely skewed perspective." from https://en.wikipedia.org/wiki/Object-oriented_programming https://en.wikipedia.org/wiki/Object-oriented_programming criticisms says a lot.
- chi3 9y agoThat's quite irrelevant to the conversation though, we weren't talking about whether OOP is good or not. C++ is very far from "C with classes" today.
- aaroninsf 9y agoDon't.
- dman 9y agoI wonder if at some point it will be possible to discuss C++ on HN without the majority of the conversation becoming side tracked into discussing Rust.
- bogomipz 9y agoI have a question on this topic which is - is it possible or practical to only learn "modern" C++? Isn't it necessary to be able to understand pre-modern C++ in legacy code bases or to work alongside a co-worker who might code using an older style? Or even to be able to understand documentation and texts about C++ from an earlier era?
- DoofusOfDeath 9y agoI share your concern. Even if one isn't (knowingly) dealing with older C++ code, all of the language rules apply to every line of C++ being compiled. Just one typo, or misguided use of syntax, and a person might be using some "older" revision of the language without knowing it. And I'm not aware of any tool that will warn the programmer that he/she has done that. So I'm concerned that programmers schooled only in "modern" C++ will fail to understand that this has occurred, and will either (a) get error messages that don't understand, or (b) get program behavior that they don't anticipate. I'm curious if people have found this to be a problem in practice.
- bogomipz 9y ago>"I'm curious if people have found this to be a problem in practice." Same. And I think you articulated the specific concerns I have about just learning the "modern" version. It would certainly lower the barrier to entry in learning C++ if this was an unfounded concern. C++ has some 35 year of history and changes at this point. This point alone adds(for me anyway) to the perceived cognitive load of learning it. C also has a similar length of history but it is a much smaller language.
- oblio 9y ago> It would certainly lower the barrier to entry in learning C++ if this was an unfounded concern. If the Javascript community, which is as fragmented as C++, if not more, could introduce "strict" mode and enforce it basically everywhere, then maybe C++ could do the same thing. Have C++20 recommend a certain subset of C++, have C++24 warn as deprecated features not in this subset, have C++30 error out on everything outside this subset, unless the compiler is set to compatibility mode and finally have C++40 refuse to compile the old code.
- ebspelman 9y agoI don't see openFrameworks mentioned here: http://openframeworks.cc/ http://openframeworks.cc/ Probably the most comprehensive open-source creative coding framework. Maybe most helpful for familiarity with graphics programming / OpenGL, but it really extends to all types of possible interactions. Maintained by an awesome group of people.
- tzahola 9y agoOpenFrameworks has nothing to do with _modern_ C++. It’s a framework for laymen artists that happens to be written in C++. It won’t teach you about move semantics, lambdas, unique_ptr, for-in loops, etc.
- MadcapJake 9y agoAnyone aware of good, thorough, (online) material to learn C++ template programming?
- isaachier 9y agoFor this, I can't point to any one source, but I highly suggest looking at the implementations of the C++11 type_traits header. Building off of that would be a great second step.
- elteto 9y agoOthers have talked about how to learn the language but many people often find that hardest thing to do is to even compile their first C++ file. This is the "build system escalation policy" that I personally use, depending on what I need: 1: Experimental, throw-away code: online IDEs or Godbolt if I care about compiler output. You would be surprised how much mileage you can get out of a simple online IDE when you are just learning or exploring a new thing and don't care about preserving your work. 2: Single-file code or small multi-file projects with no dependencies (like exercises or code samples from a book): direct calls to clang++/g++ in the command prompt or a simple build.sh shell script when I have to build multiple files. Make is a fantastic tool for this so you can learn and use that instead. I would actually encourage beginners to play directly with the compiler and learn the basic flags though, but this is personal preference. 3a: Personal projects that pull in other dependencies (either system wide or libraries from github or other sources): Make or cmake would probably work here equally well. I actually prefer cmake for its find_package and external project functionality. Notice the jump in complexity from 2 to 3, this is something you have to deal with and eventually you will have to pick a build tool and learn it. 3b: After learning to use Bazel I have mostly migrated to it for all my personal projects, but there was an initial learning curve for sure (not worse than cmake though). 4: At work: Whatever your company/team/group uses, you will most likely have little input on this if the codebase is old and established. If you are in Windows you can use vanilla Visual Studio C++ (Community edition is free and has all the bells and whistles) for 1-3, or use Visual Studio + cmake (you can generate VS solution files from cmake).
- colin_mccabe 9y agoThe question assumes that there is a single "proper" way to code in C++ that everyone agrees on. But that's just not the case. For example, Google bans exceptions, operator overloading, and most uses of Boost in their C++ code. Facebook embraces all those things. QT re-invents most of the standard library. A lot of the C++ language is sort of experimental. Sometimes features get thrown in and then deprecated and/or taken out, like the "export" keyword for templates, or throw specifications. Most programmers have strong opinions about which C++ features are bad. But that's all they are-- opinions. The C++ standard supports pretty much any way of doing things you could imagine-- async, sync, multiple inheritance, functional, you name it. If you're a novice, my advice is to learn C really well. Then choose a C++ style guide and follow its recommendations closely.
- mlboss 9y agoI would recommend to start with C++ integration with Jupyter notebook https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92 https://blog.jupyter.org/interactive-workflows-for-c-with-ju....
- rashikas215 9y agoCheck this out. https://unacademy.com/course/c-programming-essentials-994/BMFTV2O4 https://unacademy.com/course/c-programming-essentials-994/BM... Definitely a good kick start.
- deleted 9y ago[deleted]
- bbimbop 9y agoThis is great information, thanks.
- ndj7 9y agoWhat's the best way to teach modern C++ as a first programming language? I'm at CU Boulder and their curriculum is outdated (90s) and backwards. What resources could I point the professors towards?