15 ms·
Never trust a programmer who says they know C++
- joshspankit 3y agoI trust Dave Plummer. [0] https://youtu.be/D3h62rgewZM https://youtu.be/D3h62rgewZM
- nubinetwork 3y ago2010
- yvdriess 3y agoI also immediately noticed it was an old post, because the new standard version have all but eliminated the frustrating complexities of the language. :D
- geek_at 3y agoand also because it's a HTTP only site
- j16sdiz 3y agoMany newer feature is, indeed, much cleaner. But C++ have so many backward compatibility hacks and old code, it is impossible to "eliminate" the complexities.
- yvdriess 3y agoIndeed. New versions never break the old. Every new feature has to account for interactions with the rest of the language. Herb Sutter's https://github.com/hsutter/cppfront https://github.com/hsutter/cppfront could be a good strategy to clean it up.
- _aaed 3y agoHow is this any different to the Dunning-Kruger effect?
- sillysaurusx 3y agoYou can get quite far treating C++ as C with classes, and I recommend this approach for anyone trying to learn it. Especially nascent gamedevs. You’ll be able to learn the other details as you go. One tip: template metaprogramming can consume your life. Avoid it, but use templates sparingly; they do simplify code, especially for vector types. The key with C++ zen is “all things in balance.” You can go too far with basically every aspect of the language. And it’s important to go too far, so that you know why not to.
- ascar 3y ago> You can get quite far treating C++ as C with classes I'm teaching a HPC (threading/openmp/mpi) class and that's exactly what we do. We switched from regular C to C++ for classes and some standard library data structures and that's that. It makes our lifes easier and stuff is still "easy" enough to understand and work with. I've once had to work with a cryptography codebase using excessive templating. It was an absolute nightmare to deal with and the only person I know of able to understand the codebase was the original author.
- sumtechguy 3y agoUsing templates that way is totally possible. The problem is the nesting you end up with makes it hard to follow what is going on as you discovered. I like to use templates to replace #define style programming. As it makes it easier to debug what is going on and get the compiler to work for you instead of in the background and hoping it spits out the right thing to feed to the next stage in the compiler pipeline. Many languages have these sort of 'yeah you can do that but you probably shouldnt' things. C++'s version of that is templates (for a long time it was giant trees of classes). You get sucked into how cool it is then realize you have made a horrible mistake and made a giant mess that you can barely comprehend much less debug.
- ho_schi 3y agoI don’t consider template-metaprogramming as official core language feature, is is an side-effect of templates. Generic-Programming itself with templates is great and the superpower of C++. Readability and maintainability are the key features of good source-code. Therefore - I back off if someone tries to make the code itself “art”. The result shall be reliable craftsmanship. A usual, apply reasonable exceptions ;)
- bluetomcat 3y agoYou can still use it as "C with classes" and STL containers and get a lot done. For that, you don't need to know any template wizardry or the subtleties of rvalue references.
- rini17 3y agoIs it really possible to avoid encountering boost or another template heavy framework?
- sillysaurusx 3y agoYup. In fact, boost is often a code smell, especially in modern C++. The standard library packs a great deal of functionality now, and things like boost threading aren’t needed anymore. Lambda functions (closures) and range-based for loops also greatly reduced the need for boost. It’s still useful, just not super critical anymore. You won’t feel like you’re missing out if you avoid it.
- self_awareness 3y agoSaying that boost is a code smell suggests that std is a code smell too, since often std gets its packages directly from boost.
- tambre 3y agoHaving something like Boost these days is quite far from essential and unless it was in a company's stack already or someone loves it I think you're unlikely to find it in greenfield projects.
- pajko 3y agoExcept if some policy enforces C++11 or C++14, especially in embedded systems, where compilers might be years behind in following the specs. For example, gcc has (almost) full C++17 support starting from version 8, which might seem old enough to be omnipresent, but still some QNX-based distributions might have stuck with 5.x.
- phh 3y agoThat's literally Dunning-Kruger effect. That being said, I concur that C++ is the language where "we need some rules" is the most prominent. C++ has awesome features, but the number of people on the planet who know all of them is way too low to rely on them (you probably can't hire any of them anyway). But a team of 10 peoples is likely to know a lot of them together, so you need to work with the intersection if you want your code to be maintainable
- anonymoushn 3y agoThat's incorrect, in Dunning-Kruger self-assessed ability is positively correlated with ability at every part of the distribution.
- mettamage 3y agoHmm, I know a person who says he knows C++. He has spend more than 10 years studying the language, and at all the HFT companies he works at micro-optimizing code they all say that his technical ability is better than whatever senior person works above him. I don't know C++ much, but he'll happily tell you how compiler passes work and what the differences of GCC, Clang with LLVM are. I've noticed he doesn't know everything, but he knows a lot. There are exceptions to statements like this. I'd change "never" to "almost never".
- sillysaurusx 3y agoTen years of in the field work is about right for that level. It’s probably accurate to say that if you’ve spent less than that writing C++, you’ll discover things that will surprise you. The alias keyword was mine.
- michaelt 3y agoIt's partly a question of how you define "knowing something" For one thing, when a language feature doesn't really work out, the user community will notice and it'll disappear from most codebases. If a Java developer with 20 years of experience has never worked with java webstart - is their mastery incomplete? And even for features that aren't deprecated, almost no jobs will demand every feature a language offers. A veteran Java developer with 20+ years working on high-performance backend server code might not know much about JavaCard, or packaging their code for use on Windows, or the state of the art in making GUIs, or the latest kitchen-sink enterprise framework - is their knowledge incomplete? Of course, some would say if your definition of "knowing a language" is so demanding that nobody meets it, some might say that's an unrealistic bar....
- Remnant44 3y agoExactly this - The language is big and getting bigger, and so is the standard library. But this is true of almost any popular language! By the metric people are applying to C++ here, there is no one on earth who "knows Java", which is patently ridiculous. A better metric would be "Can write code in that language for some domain".
- bitwize 3y agoWhen a crooter asks me "On a scale of one to ten, how well do you know C++?" I start by calibrating the scale: one is a complete neophyte and ten is Bjarne Stroustrup. I then say I'm a 5, maybe a low 6. Or, I did back in the early 2010s.
- gpderetta 3y agoThe joke is that everyone, from the most junior neophyte to the expert wizard will judge themselves as a 7. Bjarne and a few elder gods might go as high as an 8.
- SilverBirch 3y agoI've been saying this about hardware engineers since forever. If a hardware engineer tells you they're a good software engineer they're going to be a problem. I guess one day I'll find a unicorn, but practically always it's massive red flag. It just begs the question in which way are they flawed: Do they write shit software and think it's great? Do they have so little experience that they think that software is simple? Do they just disregard everyone else's skillset? Do they fundamentally not understand their own limits? What is it that leads them to make such an utterly silly claim?
- deleted 3y ago[deleted]
- ZephyrBlu 3y agoDo you think there is something specifically about HW eng thinking SW eng is easy, or just the classic underestimating a domain you have no understanding of?
- wadd1e 3y ago>classic underestimating a domain you have no understanding of to be clear I'm not a hw eng myself so I don't have a deep understanding of hw eng, but I have a friend who's studying EE and from what he asks/tells me sometimes, there's a non-trivial amount of coding involved depending on what it is you're working on. So mabye it's because hw engineers may have experience writing lots of code which is non-trivial, but nowhere close to what a sw eng does still, hence giving a wrong impression.
- rgbgraph 3y agoSame reason we (SW engineers) think X field is easy and can be self-taught: the fundamentals are easy to learn, but figuring out where and how to deal with edge cases when they pop up is something that can only be learned with experience. I see the same with a certain subset of finance people who learn Python, and start thinking coding is easy. Yeah, fair you can whip some simple Jupyter notebook using Pandas to analyze time-series. Now build out a distributed, fault-tolerant ETL (CRUD++) system that follows all business rules, is maintainable/readable, and can scale to atleast 100 "servers." Perhaps not the most apt comparison -- but the fundamentals in every field are easy to learn; but working at the edge is something you have no experience in until you do.
- cm277 3y agoI once worked with a true 10x programmer. The guy used C++ metaprogramming to avoid boiler-plate code. Any by "used" I mean he needed the best preprocessors and compilers at the time to just write his code. He once single-handedly porting our >1m LOC codebase to Java over a weekend (admittedly, a 3-day weekend, but still). When new people asked him if he knew C++ his standard answer was "I know enough to know I don't know C++".
- ZephyrBlu 3y ago> He once single-handedly porting our >1m LOC codebase to Java over a weekend How do you even physically do that? Generous estimate: 1M LOC 18hr days * 3 = 54hrs 1,000,000 / 54 ~ 18,500 LOC/hr There must have been a lot of help from automation here or you had an enormous amount of boilerplate code, because otherwise I don't understand how this is even possible.
- flohofwoe 3y agoIME a lot of real-world 'enterprise quality' million-line code bases only have a few thousand lines of actual functionality in them - if at all (take a typical Java or Java-style C++ class which is mostly constructors, setters and getters, and maybe a single method that actually does something). Then replace some large modules with existing 3rd party libraries, and the whole feat sounds a lot more believable.
- cocochanel 3y agoFunny that a language sounds like a big company where only a small percentage of people do most of the work.
- yvdriess 3y agoThat's why it's an Enterprise programming language.
- aeternum 3y ago
- drawkbox 3y agoThe only measure of C++ skill is years using it really and the industry. Game development will give you skills in C++ but you'll always have more to learn. It is one of the only places where you will be pushed into new areas and need the performance. You'll have fights of memory, string classes (custom vs standard), template hell, all sorts of C/Obj-C library integrations, network, compiler tours and many more adventures. We used lots of C++, Objective-C and even Objective C++ (g++ mixing Objective-C + C++, connecting to C++ engine) in a custom game engine that worked on mobile for lots of shipped titles. It is powerful and fun. I have 5-6 years using it everyday across games and media apps, bits across the rest of years, but so much territory uncharted. I actually like C++ but it is like a lightsaber, it can be dangerous. Most apps still run on C++ at some level, even virtual machines. C++ is the stick shift manual transmission of programming languages. I'd build more in it beyond games if allowed and use it on personal things quite a bit. In my opinion, if you can work daily in C++ for some years that all other languages are easier from there. The understanding of the machine is better from memory to stack/heap to performance, cpu/gpu bounding, networking, and the sheer power of the root of all applications. C/C++ are where the machine meet code just above assembly, there is maneuverability there but also danger. Fun fact: Objective-C was created before C++. Objective-C all they way back to 1981 but officially 1984. [1] C++ all the way back to 1982 but officially 1985. [2] [1] https://en.wikipedia.org/wiki/Objective-C#History https://en.wikipedia.org/wiki/Objective-C#History [2] https://en.wikipedia.org/wiki/C++#History https://en.wikipedia.org/wiki/C++#History
- iainmerrick 3y agoObjective-C++ is one of those things that sounds like an abomination when you first hear about it, but when you try it, it's surprisingly straightforward and useful. Obj-C and C++ are really very different, so it makes sense to use each one for what it's best at; and the syntax of each is so different that it clashes much less than you'd expect.
- drawkbox 3y agoWhen I first learned about it in 2008ish I was blown away, really just using g++ to compile and you are set. Very interoperable and more than expected, C/C++/Objective-C++ all work well together, maybe even better than layers on top today in mobile/web. It isn't recommended to use all these unless there is a reason, but for integration points it works great. Using C libs in C++. Using C++ libs/systems in Objective-C++. Accessing Objective-C from C++ etc. The game engine is in C++ so to use it on iOS we needed to have an integration point for the system level Objective-C libraries to the C++ game engine (same with Android NDK integration in a way). Another game engine from around the time Oolong Engine [1] also used this and was used for an early Quake to iOS port. Like our custom engine Oolong used PowerVR/PVRTexTool to simulate PVRTC/PVRTC2 textures. This setup made it so you could just develop your whole desktop/console/mobile game on PC then it would run on iOS with the Objective-C++ integration points. That was huge for game studios that only had PCs pretty much at the time. [1] https://code.google.com/archive/p/oolongengine/ https://code.google.com/archive/p/oolongengine/
- vbezhenar 3y agoA C++ success is the thing that I don't understand. I do understand why Haskell is a niche language. I do understand why Scala has fallen out of fashion. C++ is more complex than any IT-related technology I ever saw. It was destined to fall. But it did not.
- suby 3y agoIt's because it is fast. I write small video games, and I have performance metrics I need to hit. Other languages may be nicer to write, but if it is at the cost of performance, it is making my life harder. Up until recently, if you wanted a language which didn't hurt you in performance, your choices were basically C or C++. You can debate whether C++ is better than C, but it has a lot more features, many of which I would miss if I had to use C. Every language which attempted to compete with C++ did so with automatic memory management or other features which were bad for performance. If the goal is to kill C++, they made the wrong tradeoffs and introduced anti-features from a C++ pov. Only recently have we gotten languages which actually compete with C++ on this level like Rust, Zig, Odin, etc. It's also because it extend C, and C is the linga-franca of programming.
- flohofwoe 3y agoIt's mainly momentum from the late 90's. Back then C++ actually was a better C, and upgrading code bases from C to C++ often made sense.
- dzogchen 3y agoBecause it is mostly backward compatible with C. The people that think Rust is 'the next C++' are delusional. The next C++ will be backward compatible with C++.
- agalunar 3y agoI've become somewhat convinced that no one has written a correct nontrivial C or C++ program since 1989.* My go-to example in C++ is examining a floating-point number as an integer: • Cast a (pointer to a float) to a (pointer to a uint32_t). No; even if you make sure the size of a float on your target platform is 32 bits, this is undefined behavior. • Make a union of a float and uint32_t. No; this works in C (since C99...?), but in C++ "it is undefined behavior to read from the member of the union that wasn't most recently written." [1] • Use reinterpret_cast<uint32_t>. No; this violates the type aliasing rules, and the behavior is undefined. [2] • Use reinterpret_cast<unsigned char> or reinterpret_cast<std::byte> and then reassemble these into a uint32_t. Yes! this works, although slightly laborious. • Use std::memcpy. Yes! This is perhaps the "right" answer. The compiler should recognize the idiom and elide any actual copy. I'm not even confident that I have that correct. It's an enormous language to fit into one's head; the language specification runs about 500 pages long and the standard library another 1500. [3] [1] https://en.cppreference.com/w/cpp/language/union https://en.cppreference.com/w/cpp/language/union [2] https://en.cppreference.com/w/cpp/language/reinterpret_cast https://en.cppreference.com/w/cpp/language/reinterpret_cast [3] https://github.com/cplusplus/draft/releases/tag/n4917 https://github.com/cplusplus/draft/releases/tag/n4917 *This is a joke, but only barely so.
- e4m2 3y agoSince C++20 the correct, constexpr-friendly approach to your specific problem is std::bit_cast: https://en.cppreference.com/w/cpp/numeric/bit_cast https://en.cppreference.com/w/cpp/numeric/bit_cast.
- agalunar 3y agoAh, yes, thank you for catching my omission!
- pif 3y ago> My go-to example in C++ is examining a floating-point number as an integer Which is something that hardly makes any sense and most professional will never need in their entire career.
- flohofwoe 3y agoThe title is correct, but I very much doubt that most new C++ programmers (or anyone starting their programming carrier after ca 2005) started with C and the "C++ is just C with classes" mindset. You don't need to know C to have ample opportunities to shoot yourself in the foot for the first few decades of writing C++ code, and the C language really cannot be blamed for any problems that C++ stacked on top of C.
- yeputons 3y agoI believe lots of courses still teach C-esque C++ first, starting with "three kinds of memory: stack, heap, global", then adding classes, followed by templates, and finally getting into STL. Here is an example MIT course from 2011, it introduces C-style arrays and C-style strings in lecture 4, pointers in lecture 5, and classes in lecture 6: https://ocw.mit.edu/courses/6-096-introduction-to-c-january-iap-2011/pages/lecture-notes/ https://ocw.mit.edu/courses/6-096-introduction-to-c-january-... (although memory management is postponed) Another MIT course from 2014 explicitly starts with C, but it has "C and C++" in its name: https://ocw.mit.edu/courses/6-s096-effective-programming-in-c-and-c-january-iap-2014/pages/lecture-notes/ https://ocw.mit.edu/courses/6-s096-effective-programming-in-...
- rcarmo 3y agoWell, I started on the Mac (Metrowerks) and Visual C++ 1.0, and at that time you still had to interoperate with either Windows or Mac "pseudo-classes" (even down to having to set Pascal stack calling conventions, etc.). Surviving that (and the ample choice of exquisitely carved tribal foot guns on either OS) was an interesting experience.
- dzogchen 3y agoSorry but this is BS. I've worked at places where people knew the standard by heart. If ever doubt some people actually 'know C++', visit the #c++ IRC channel on Libera.
- aidenn0 3y agoThe overwhelming majority of people who say they know C++ well do not. This isn't peculiar to C++, of course, but it does seem to be a larger effect with C++ for some reason.
- p0w3n3d 3y agoThere is a general rule that people who know less think they are experts, unless they find out that they don't, and start learning again... It's called Dunning–Kruger effect
- trashtester 3y agoIt's also a generally the case that people who just discovered the Dunning-Kruger effect doesn't think it applies to themselves, ESPECIALLY if they just climbed "Mount Stupid".
- indigoabstract 3y agoI find it amusing that the post is from early 2010, almost 2 years before C++11 came out and people were already saying C++ is too complex. Now, 13 years later, if someone knows the all the language itself, libc++, common idioms, best practices and template meta-programming intricacies, I think it's safe to say they are more of a devoted learner/teacher than a programmer, as retaining and keeping up with all that knowledge won't leave much time for actual programming. Maybe at least 10+ years of continuous C++ use would be a better measure of actual C++ skills?
- gpderetta 3y agoWhile the language itself has certainly gotten larger and I have had my own share of rants on the working and products of the standard committee, the day-to-day reality is that C++ has gotten easier to write and read, often significantly so. Doesn't mean it is an easy language, far from it.
- indigoabstract 3y agoAgreed, writing seems the most obvious one, as several pain points have been fixed, like smart pointers, lambdas, expanded standard library and a lot of other small things. Also the tools are great and mature and the fact that Bjarne is still involved is a bonus. I think the language complexity is much more of a problem for someone trying to learn the language, than for someone already comfortable with it. Which, may affect its future adoption, who knows. Still, the people jumping ship to other younger languages and then writing about it remind me a bit about someone trying to justify switching their ageing partner with a younger one. Perhaps understandable, but after some time, the problem may turn out to be elsewhere. We'll just have to see how sexy Rust and the other current alternatives will be when they get to C++'s age, if they still use programming languages by then.
- gpderetta 3y agoI don't blame people for jumping ships. There are a lot of mature, safe and fast enough languages (no, I'm not talking about you, python) and for many projects there is very little justifications for writing them in C++. I expect Rust to grow to be about as complex as C++, except for the most part memory safe. I still think it would be a big win overall but I don't know if it will significantly displace it though.
- rcarmo 3y agoI dip in and out of C++ (have done so since it came about, which sort of dates me) and I don't see it as a unified language. I see it as a set of idioms that depend on the use case and libraries you have to use (boost, Arduino, XML processing, etc.). It literally has far too many ways to skin a cat, from light grooming to full on mecha brain transplant.
- User23 3y agoI sat next to a guy on the C++ Standards Committee and he'd be the first to admit that he didn't actually know C++ (he knows more about C++ than anyone else I've ever met).
- tragomaskhalos 3y agoC++ on a CV is a gift for the interviewer because it's trivial to discover if the person is bullshitting when they say that they know it. I'm not talking about the esoteric corners here, I mean the absolute basics - it's amazing how many people think they can pretend to know a complex technology and are then knocked for six when the interviewer actually quizzes them on it.
- zabzonk 3y agoabsolutely. my #1 interview question for c++ dev roles is "tell me about the copy constructor".
- throwaway1492 3y agoAs someone who worked professionally on a c++ application for two years around 2010, I took c++ off my resume. C++ is the ultimate "stump the chump" language with tons of corner cases and esoteric gotchas. I hated it and I hate interviewers who do this. You all can have it. The reality is, in my area, Java enterprise development pays a lot more. I'm sure this is the case in plenty of other areas as well. Surprising but true.
- skippyboxedhero 3y agoAdd it back. You know that any place like this is going to be full of people who spend all their time jerking themselves about how wonderful they are. Every place that I have interviewed where interviewers have done that has been full of people who are too maladjusted to work at a place that actually succeeds in producing anything.
- deleted 3y ago[deleted]
- asveikau 3y agoTwo years probably isn't enough time to become good at c++. And in 2010 the standard was about to change a lot.
- StillBored 3y agoI tend to agree with the result, despite having spend much of the late 1990s-2000's writing C++ code. By 2011, I considered myself pretty close to language lawyer levels since I had made an explicit effort to dig into the dark areas of the spec I didn't personally use much in the late 2000's. Then c++11 came out, and that reset my ability to understand feature interaction by 5+ years. Then before I got comfortable with the changes, it changed again, and again. And not in insignificant ways. These days I don't write much C++ code (regressed to largely C), and when someone asks me how proficient I place myself at a 4 out of 10, and then explain how the spec has changed faster than I think most people can actually absorb it unless its their full time job to sit on the standards committee. So I don't believe anyone who gives a themselves a score over 6 unless their job actually required a deep level of standards understanding (ex: compiler developers). OTOH, all that doesn't mean my actual C++ style has changed much. I still use C++ as a C with objects, only now some of the restrictions of the past have reasonable workarounds. So the idea that only beginners treat it as a C with objects language is a misleading statement. Sure I can create all kinds of fancy language constructs, but I only use things like template meta programming in toy projects or various other features, but the results are frequently setup as "C" language extensions (aka here is a matrix class where the matrix T can be a bignum/etc) which happen to look more like a C compiler with some extra features for manipulating matrix's. A lot of the problems (ex threading is hard) come from the fact that its far to easy to dig a comprehension hole that even the initial programmer cannot get themselves out of. Hence projects like firefox/thunderbird from ~15 years ago where the C++ code was hacked together in a style that needed to be cleaned up but never was, leading to piles of hidden bugs, and problems where newer/stricter compilers would simply refuse to compile the code due to undefined behavior on ever 10th line.
- chrsig 3y ago> These days I don't write much C++ code (regressed to largely C), and when someone asks me how proficient I place myself at a 4 out of 10, and then explain how the spec has changed faster than I think most people can actually absorb it unless its their full time job to sit on the standards committee. So I don't believe anyone who gives a themselves a score over 6 unless their job actually required a deep level of standards understanding (ex: compiler developers). I generally factor in a ~5 year adoption period for newer standards as not only compiler adoption completes, but as distributions pick up newer compiler versions and make them the default. So right now, I'd consider c++17 the expected standard for people to generally be comfortable and competent with.
- jll29 3y agoIf anyone says they know C++, ask them back which one they are referring to? GNU g++, MSVC C/C++? ISO C++98, C++03, C++11, C++14, C++17, C++20, draft C++23? I like the OP's curve, but realistically, there needs to be a set of curves next to each other, because every 5 years, C++ changes a lot to the extent that you can write "idiomatic" code that looks very different from half a decade before. I've been using C++ since the 1990s, but mostly, overall whenever I used C++, I stuck to a subset of C++11 or C++17. Compiler errors always have been a pain, which is still the case now, and no two compilers compile the same language (unlike Java, whatever complaints you might have against it).
- gpderetta 3y agoI find that most CVs I read this day explicitly specify the standard the candidate is experienced in/worked at a specific gig. I normally expect at least C++11 when interviewing, but let the candidate use whatever standard they are more familiar with (and even non-standard features, especially around threading).
- kps 3y agoEvery nontrivial C++ project ends up picking a working subset, sometimes explicitly. These don't particularly correspond to standards versions. I ‘know C++’ according to coding standards X and Y pretty well, but I don't ‘know C++’ according to project Z. (As a concrete example, I don't think I've ever worked on a code base that used exceptions or RTTI.)
- gumby 3y agoTBF this is common in any mature language. In fact one reason I don't like Go is that it was explicitly designed to have "One True Way" to do anything and if you don't like that choice, too bad. I know why that approach was taken, but it doesn't work for me.
- _yb2s 3y agoI did a lot of C++ 20 years ago, and so figured I "knew" it. I recently tried writing some C++ again, and couldn't recognize the language at all... the symbols, functions, libraries, etc. were so radically different that it more than exceeded what I would consider to be the threshold for an entirely new programming language.
- MichaelRo 3y agoWell the title (and contents) pretty much summarizes the industry: never trust a programmer who says they program. No matter how many years they worked, how many projects they have shipped, how much code they share on GitHub, disregard everything and require multiple rounds of rectal examinations every time they apply for a job. They could have written millions of lines of code, it doesn't matter coze it's not the latest fad and anything before last week's paradigm was just monkeys hanging out from the trees, it was clearly impossible to write any business logic before last's week invention of <insert latest craze here>. Find some obscure crap you freshly read about that they don't know or don't remember since using it once 20 years ago and apply the very correct and fair logical inference "IF THEY DON'T KNOW EVERYTHING THEN CLEARLY THEY KNOW NOTHING". Something along this: "So... you call yourself an English speaker? Native, ehh? Read plenty of books, wrote Medium articles? We'll see about that. OK, use 'Floccinaucinihilipilification' in a sentence that makes sense! Don't know? What a surprise! OK, one last chance, try not to omnishamble again. What's the velleity of the quincunx tintinnabulation? ... Just as I thought, you're a fraud and a sham and clearly don't speak English".
- nordsieck 3y agoI'll just leave this fantastic talk here: The Last Thing D Needs - Scott Meyers (2014) https://www.youtube.com/watch?v=KAWA1DuvCnQ https://www.youtube.com/watch?v=KAWA1DuvCnQ The C++ type system really is quite... complicated.
- ngvrnd 3y agoNever trust anyone who says things like "never trust anyone who ..." Ok, yes, I get that he's got a larger point under that clickbait-ey slug but ehhh.
- bluedino 3y agoProgramming languages known: C/C++, HTML This is usually a good sign that this person can probably complete these exercises: Write a program which display a number between 10 to 100 randomly. Write a program which accept a letter and display it in uppercase letter.
- widdershins 3y agoHaha, that's largely my resume, but I write pretty hardcore high-performance multithreaded code in C++ every day. Reason: I started with C++, got a job in it, and still work in it 15 years later, having mostly not needed another language in my day job. To be fair, I also write some Lua, Javascript, Python, and I have sideline love affairs with Rust, Zig, Scheme, Common Lisp and others. But I've never had to write serious software in any of these, so applying for jobs where that's the main language would at least require me to honestly say "it'll take a little while before I reach maximum productivity".
- 3PS 3y ago> Write a program which accepts a letter and display it in uppercase That task is a lot harder than it sounds, given that casing is locale-specific. In a Turkish locale for example, I would expect a lowercase "i" to be converted to U+0130 "İ" instead of "I" like in en-US. And then there's the whole ambiguity around the word "letter". Is a letter a single code point, or a grapheme cluster? What if someone passes in an emoji? With multiple zero-width joiners? Better make sure your dependencies are up to date so you know what's a single letter and what's too many...
- sverona 3y agoThis is clearly not what GP meant, and although i18n is rather complicated, I suspect that pointing all these things out to a junior dev in an interview would actually cause them to BSOD. The only correct answer to that question if you take i18n into account is "I'm not qualified to write that off the top of my head."
- basil-rash 3y ago
- xorvoid 3y agoI’ve definitely met people who actually did know C++. Turns out they were also on the committee or frequently talked to other people on the committee. If you spend a large amount of time investing in learning it.. it is possible. However, few people, including myself, are willing to make that trade when there are so many other things to learn. If a new grad out of school were to claim they completely knew C++, ha! I’ve been a C and C++ programmer for 20 years and I’d never say that!
- xorvoid 3y agoBuilding on this a little. I’m very worried that Rust is growing the same problem. Although it does seem that one can be more successful in learning a subset and interacting with other’s code without everything falling over.
- ryzvonusef 3y agoBorland C++
- neosat 3y agoMany years ago as an undergrad student I applied for an internship. They asked if I knew "C++", and having studied it and programmed in the only 'C++' I knew I said yes. After arriving at the internship they showed me the codebase and it a lot of it looked very foreign to me. Turns out they were using Symbian C++. I had quite a few weeks of extended evenings and few all night coding sessions to try to keep up and get basic things done. Luckily, I somehow managed to deliver on my ask, but lesson learnt!
- chrsig 3y agoI think the c++ community needs to get past the idea that people learning it are coming at it from a "c with classes!" perspective. It's going to transition to "python with static types", "rust without a borrow checker", "java with manual memory management", etc. I don't think that as time progresses the newcomer pipeline is going to be largely represented by people coming from C. The curve described is what it's like to pick up any language after being proficient with another though -- nothing specific to c++. c++ is just larger and more sprawling with more footguns and other things to make you suffer. Find similarity, be comfortable enough to be productive, gain experience and realize mistakes, get frustrated, either walk away or accept the language and ecosystem as it is and learn how to work within it.
- opportune 3y agoHonestly, this sentiment and most of the comments here are nerd-sniping and oneupmanship masquerading as wisdom. Obviously very few people, possibly none, know 100% of all possible knowledge (how various compilers work, all possible UB, gotchas of stdlib, patterns to use to avoid bad things) to be known about C++. Congratulations to you if you are able to find an example of something someone who “knows C++” does not know. But nobody claiming to know C++ is claiming to know 100% about it anyway, it’s obviously a way to phrase that you’re familiar with it and competent enough with it to be productive based on experience and exposure. You wouldn’t hold a programmer in other languages to the same standard. Most people who “know Java” aren’t JVM hackers, most people who “know JavaScript” aren’t familiar with all the actual details of how JavaScript gets interpreted and executed by the browser, or how V8 works. Yes, the main difference is that it can be easier to introduce certain classes of bugs in C++ than in other languages. You don’t need to know 100% of C++ to know it well enough to mostly avoid these. Buffer overflow, memory leaks, and UB are all something a person who “knows C++” is able to avoid by conforming to common patterns that limit the use of features leading to this behavior/structurally avoid them. Stop being pedantic
- JohnFen 3y ago> it’s obviously a way to phrase that you’re familiar with it and competent enough with it to be productive based on experience and exposure. I think the point is that almost nobody can say they "know" C++ in this sense. You have to be more specific -- what parts of C++ do you know well enough to claim competency? It's probably not all of it.
- opportune 3y agoThat’s fair, but also very clunky in practice, and essentially should be an implied point by anybody else who “knows C++.” It would be very clunky and annoying to write on a resume “knows C++20 except have limited knowledge of exceptions, template metaprogramming, and default linker/make tools” when you can just caveat out all your blind spots when you actually get to talking about which parts you know (and when your resume is being reviewed first by nontechnical folks who will interpret carves like this negatively due to ignorance). It’s not wrong or misleading to claim you are eg a cancer researcher or study English literature while not knowing all cancer research topics or all works from all niches of English literature. Because everybody who works in those areas knows that it’s implied you were exposed to only a limited subset. If laypeople assume that “knowing” a broad and complex thing means you have 100% of knowledge across the entire domain, that’s a problem with their interpretation of the claim.
- smolsky 3y agoLOL, someone told me in an interview that they are a C++ expert. I asked them if that refers to their company, or the wider community, or the C++ Committee members or the C++ compiler frontend maintainers. It should be a science. It should be closer to core math. And yet it often feels closer to performance arts w.r.t. the individual's level.
- phendrenad2 3y agoWhen no one knows C++, everyone does.
- ranger_danger 3y agoYou don't actually have to use every feature the language has, just use what you're comfortable with.