5 ms·
The problem is that C++ is a language where the "top 150,000 most essential things to get you started with C++" is a volume that spans several book shelves. Eve
by wobbleblob 11y ago
The problem is that C++ is a language where the "top 150,000 most essential things to get you started with C++" is a volume that spans several book shelves. Even Bjarne Stroustrup allegedly rated his own C++ skills at maybe 7 out of 10. If you start with C++, you're committed to a multi year project, that's what it takes to advance from novice to junior level.
- hellofunk 11y agoSorry but this is just wrong. You do not need several years to get productive in C++. Very few professional C++ developers are using every feature of the language. You could spend a year mastering template metaprogramming alone, but do you need it? Not most of the time. Interfacing with good C++ libs (another reason to learn C++) does not require metaprogramming, and many other features fall into a the same category. Saying there are 150,000 required learning points is sensationalism and just downright false.
- wobbleblob 11y agoJunior level is when you know all language features, and are starting to learn the ecosystem of tools and libraries. You're probably much smarter or more dedicated than me if you feel this level can be reached in a much shorter time.
- dagw 11y agoJunior level is when you know all language features Wow, in that case I don't think I've ever worked with anybody who's ever managed to reach "junior level" in any language. What do you call someone with, for example, just a PhD in the relevant field, 6 or 7 years of professional programming experience and several successfully shipped products under his belt. And what do you call the guy that is obviously his junior?
- wobbleblob 11y agoWhen someone with a PhD in the relevant field, 6 or 7 years of professional programming experience and several successfully shipped products under his belt starts learning something new, he's a junior at that new thing.
- dagw 11y agoMy point is that knowing all of a languages features is neither necessary nor sufficient for getting real work done even at the highest level. I've worked with some pretty smart and experienced people in my career and non of them would probably claim to know every single obscure corner of their favorite language.
- hnbro 11y agonice dodge. chewbacca defense!
- hellofunk 11y agoI think you are missing the point. It is widely understood in the C++ world that no one needs to know "all language features" and in reality, almost no one does. It's not a language where that is necessary or expected because the language is large and has a tremendous range of uses, and no one needs all of it for a particular project or focus. But you can most certainly learn all the basics of writing good C++ code, and interop with great C++ libraries and get real stuff done, in fairly short time. It took me about a month to go from Objective-C to C++ and start publishing iOS apps written almost entirely in C++. And if you don't need that, you can start writing command-line utilities in a few days at most.
- cmollis 11y agothis is really true in my experience. I worked on a large server for a few years and most of my work was spent doing pretty mundane things (mostly interfacing with other libraries(apis)). I certainly didn't use every feature and, like you note, most programmers don't. Sometimes I would come across a new C++ capability that was utilized and I would just learn and utilize it, but this depended on the feature and situation. In fact, the only thing that's really different about it (at least to me), was the constant concern over memory usage (and all of the make/build stuff). These are just parts of the language that you need to consider that are avoided in other languages (the dirty secret here is that regardless of the language, you still need to consider them). I liked C/C++ because you can pretty much do anything with it, but you can get to certain points faster with a different language (again, depending on the target usage). Language platforms capture programmer inertia, which is why big companies try to own them. However, in reality, since there are so many, most good programmers seem to be able to switch between them fairly easily (which is a good thing).
- zvrba 11y ago> If you start with C++, you're committed to a multi year project, that's what it takes to advance from novice to junior level. This is nonsense. Perhaps it's true to some degree if you try to "learn" C++ from tutorials of dubious quality rather than from a decent book.
- humanrebar 11y agoYou sound like someone who has never really explored C++ lookup rules.
- zvrba 11y agoFunnily I've been working on MLOC-sized C++ projects and almost never had a problem with lookup rules. On rare occasions where it was a problem, it was a compile-time problem and easily resolved. In any case, these rules do not fall under what I'd call "junior-level" C++ programmer as the OP wrote.
- bluetomcat 11y agoThe whole C++ language is indeed a monstrosity designed by a committee that resulted from years of piling up "requested features", but with "modern" C++14 they try to narrow-down the idiomatic constructs to a smaller, more manageable set.
- jeremyjh 11y ago> If you start with C++, you're committed to a multi year project, that's what it takes to advance from novice to junior level. This is ludicrous. Depending on your back-ground and the amount of time you spend working in the language each day, a journeyman level competency can be had in just a few months. Honestly this sounds like a comment from someone who has not done much C++. Please correct me if I'm wrong.
- humanrebar 11y agoI agree with GP and I've been doing C++ for a long time. There are a lot of dark corners that aren't a problem until they suddenly are. Most C++ devs don't really understand iterator invalidation, for example.
- pcwalton 11y agoOr undefined behavior. I guess it can be summed up as: C++ is extremely good at making people think they're writing safe programs. This feeling of safety is virtually always incorrect in the case of large-scale software, and the huge stream of memory-related vulnerabilities that virtually all popular network-facing C++ applications have and continue to have is proof of this. There is no reasonable way to argue against this; the fraction of popular network-facing C++ software written by a large team that have had memory safety problems rounds up to 100%.