7 ms·
> Furthermore, if you really want a C++ developer you can just expect a developer to learn C++ on the job if they have any adjacent experience with any other la
by MattGaiser 5y ago
> Furthermore, if you really want a C++ developer you can just expect a developer to learn C++ on the job if they have any adjacent experience with any other language.
Is this really accurate? C++ is a very different language than even Java, not to mention Python or JS. Languages have their own quirks and attributes that often matter at some point. Especially C++.
I am on a team where we are constantly building stuff with new technologies that nobody on the team has learned, so a certain extent I understand the sentiment, but we are under no impression that we are doing that good a job at it.
- imstate 5y agoYes and no. A good programmer could learn it, but it exposes concepts that python and java abstracts from the programmer. C++ requires you to think quite a bit about memory. Modern C++ not so much. However the kind of job that requires C++ will probably require you to know some hardware / embedded which is a completely different domain than web devs and could make java / python transitions even more difficult.
- cupofcoffee 5y agoIn any decent CS school they actually teach you low-level stuff. Transitioning from Java to C++ for such a person is trivial.
- cupofcoffee 5y agoTo the downvoters: No, you aren't a better programmer because you code in C++. You just use a different programming language. That's all.
- johnnyanmac 5y agoI think the above comment bears repeating: >A good programmer could learn it, but it exposes concepts that python and java abstracts from the programmer. Education varies wildly, and overall in industry you will not apply 100% of your learnings. I'm sure I forgot plenty of algorthms that others use daily. Likely, others forgot plenty of low-level memory management than I use daily. Let's not turn this into a programmer measuring contest. They are different concepts and tools done for the purpose of solving problems, not flexing IQ's. coments like this are no better than the ones you complain about.
- pas 5y agoCertainly not trivial if all you have is school Java experience.
- JAlexoid 5y agoLow level stuff, I happily code off the top of my head in pure PIC and AVR assemblies, is not same as C++ low level stuff. (IMO) C++ is quickly becoming that middle ground language that is destined to be a niche language in a decade. It's not low level enough and not high level enough to give people dealing with assembly code or business logic code a reason to switch.
- dheera 5y agoDepends a lot on how you use it. You can pass everything by value, write very child-friendly C++ code, using std::map like Python dict and std::vector like Python list, and still VASTLY beat the speed of an interpreted, weakly-typed language like Python. But nobody does that. Chances are someone on the team takes a shit about unnecessary memory copies, the code will be littered with a smattering of pass-by-reference and pass-by-pointer, there will be std::shared_ptr, std::weak_ptr, std::unique ptr everywhere, and if you're lucky some intern will have committed some C-ish C++ code that will leave you gift of memory leaks, and now all of a sudden you need everyone to understand all the nuisances of the language and how memory works.
- amluto 5y ago> But nobody does that. Chances are someone on the team takes a shit about unnecessary memory copies It’s not just performance. In any moderately complicated C++ program, you will want a function to mutate its argument, and this falls apart. Sure, you can write in a pure functional style with immutable data structures, but I wish you luck implementing an immutable data structure with asymptotically reasonable performance without using pointers of some sort.
- pkolaczk 5y agoUnfortunately many programmers underestimate the speed at which computers can copy flat regions of memory these days and overestimate speed of code littered with pointers and indirection. Often using pointers to avoid copying a few bytes leads to worse performance. In my experience a combination of pass-by-value with move semantics provides good code readability and almost optimal performance in most cases, so that's my default. Unless a profiler disagrees in specific cases, of course.
- amluto 5y ago> copy flat regions A map or pretty much any nontrivial data structure is not a flat region. In any event, waiting to optimize until a profiler tells you to is a reasonable practice as long as you pay attention to scaling. It’s very easy to write, for example, a JSON parser that performs fine in small tests and has a nice small n^2 coefficient. And then someone throws in a bigger input than you tested and your game takes ten minutes to load.
- FpUser 5y agoI develop business backend servers in C++, no problems there and no hardware / embedded is required. I also happen to be familiar with electronics and do develop firmware every once in a while but I mostly use plain C for that.
- JAlexoid 5y agoThat sounds like you're trying to stab yourself in the face... The unfortunate bit is - there is a lot of people that are learning Python or TypeScript that can develop that business logic as fast as you at a fraction of the cost.
- FpUser 5y ago>"That sounds like you're trying to stab yourself in the face" Sounds like you have no idea what are you talking about. It was exactly Python project I've recently completely rearchitected, rewrote and greatly improved. Client can't thank me enough as it performs hundreds of times better than the old one. And from what the client told it was developed in less time than the original Python version. In general I use multiple languages including Python. I just do not see anything in Python that noticeably speeds up development of big and complex projects vs modern C++ ( or any other decent language for that matter ). You just have to know what are you doing. Language is secon
- flatline 5y agoC++ is one of those languages where people have deep expertise. They are on standards committees, they have a high profile in the industry. But yes if you have general programming experience you can certainly pick up modern C++ and not make a complete mess of things. It’s a multi-paradigm language with lots of gotchas that take a while to learn and require a career to memorize and stay on top of. But I think if you are an average developer in, say, a functional and OO language, you can be expected to become an average C++ developer with a little effort.
- jonas21 5y agoMaybe... if there are other experienced C++ developers around who can show you the ropes. But C++ has enough footguns that I wouldn't want the only C++ developer on a project to be someone who just picked it up. That's just asking for trouble.
- Godel_unicode 5y agoYeah, hiring someone with no c++ experience and expecting them to OJT is a great way to farm memory corruption vulnerabilities...
- JAlexoid 5y agoI have been told multiple times by C++ advocates, that C++ (whatever year is latest) doesn't have memory management issues... Is that not true?
- Animats 5y agoIt's not true. Go look at security advisories that mention "buffer overflow".
- esrauch 5y agoIt can be pretty safe, but it requires restraint and selecting a good subset of the language. There's still plenty of footguns that an inexperienced person might hit.
- amluto 5y agoAnd footguns that an experienced person might hit. One family of such footguns is: const auto &foo = something(args); … other_thing(foo); Depending on exactly what you’re doing and what type something(args) returns, this can be entirely correct and idiomatic. In other circumstances it accesses a reference after its lifetime. One can debate whether the const belongs there and how many &’s to use, but, unless something has changed dramatically in the last couple years (I’ve been focused on things that aren’t C++), there is no answer that is universally safe and efficient.
- pas 5y agoCould you please explain this? I remember something about rvalues but it was as ages ago apparently :)
- deleted 5y ago
- xapata 5y agoDepends on whether you have any experienced C++ folks on the team who can mentor, review, and hack out the tricky bits.
- MattGaiser 5y agoBut if that is the person you need, expecting them to already know C++ is entirely reasonable.
- bigblind 5y agoI can't comment on whether this holds for C++, but I've experienced it at my current position with Elixir. While it's a high level language like most programming languages I know, it's still a large paradigm shift to a purely functional language. And yet, I could get to the level where I could make useful contributions to our backend within a few days. I went through Elixir's "Getting Started" guide, and afterwards, I just learned concepts as I needed them. Yes each language has its quirks, and I guess C++ has gained quite a few of them over the years, but you can get quite far with a basic understanding of a language, and an existing code base to learn common usage patterns from as well.
- rantwasp 5y agonormally i would agree with you but no. not for C++. having worked with C++ in the past I would not venture to say I know C++ today (it’s been a while) or have high hopes that I would just pick it up in a few weeks like any other normal language
- vgatherps 5y agoI think if you want somebody to learn the syntax of C++, and more/less understand some code, then that would work. But many places are using C++ only because something about the problem domain requires it, often performance. Understanding C++ and cpu architectures well enough to write high performance code is a completely different beast than just understanding c++ well enough to write code. Understanding C++ syntax is a long ways from writing C++ that's not full of memory corruptions, as others have mentioned. So it's not just "train somebody in C++", it's "train somebody in C++ and writing memory-safe C++ and writing fast C++".
- akg_67 5y agoPeople undervalue other people’s skills and contributions and overvalue their own skills and contributions. I notice this more and more in hiring process. Teams expecting new member to perfect fit wrt hard skills over soft skills. Frankly, hard skills can be taught, soft skills can’t be taught and take long time to modify behavior.
- pm90 5y agoI haven’t been able to articulate it as succinctly as you did, but this is so true and Ive used the principle to push for many hires who didn’t do so hot in their technical round. If a person is excited about technology and is familiar with translating ideas into code, that’s really all that I’m really looking for. Writing good code, understanding OS, networking etc are things that can be looked up and learned by people who are motivated to do so… there are so many resources to learn from. One caveat here is that for “senior” hires, the expectation is opposite: not that they write perfect idiomatic code, but they’re able to write solutions. I think the practice of less technical interviews for higher level seems somewhat paradoxical: you want your Software architects and Principal Engineers to be able to code with a degree of competence.
- tomp 5y agoAs someone who studies math (one pf the hardest skills), no, sometimes skills just can’t be taught. Some people just don’t get it. Unfortunate, but that’s the way it is.
- akg_67 5y agoYou can teach someone math who already graduated with basic science degree in much shorter time than it will take to teach a math whiz to consider opinions from someone else’s point of view.
- UncleOxidant 5y agoI tend to agree with him that it's pretty easy to pick up adjacent languages... But not C++. Too many footguns & dusty corners.
- huggybear 5y agoI've been writing C++ for like 15 years now and still need to visit Stack Overflow 500 times a day to do my job. It is not a language somebody picks up on the job.
- unnouinceput 5y agoComing from Pascal/C/C++ to Java in early 00's I really hate it the style of non-existing global variables. To use global variables I had to declare another class? Such heresy!! To this day I still hate Java, personally, but when it comes to a real challenge I really don't care the programming language. Programming languages are tools, each fits better for a particular problem and my clients pay me to solve their problems, not to bitch why one language is better than other.
- rmk 5y agoThat ain't happening with C++ unless you have a very good understanding of the bazillion things C++ lets you control. Just deciphering the STL errors when you compile is a headache. C++ gives you way too much rope to hang yourself with, compared to even languages like C, which is already a tough thing for someone who's never worked with a language where there is no garbage collection and typing is not strict.
- blihp 5y agoYes, for typical corporate development tasks which is the bulk of the tech job market. As long as they are reasonably seasoned vs what you need done and you don't throw them in to the deep end on day one. Every language has quirks and corner cases but after you've learned enough of them, the oddities don't tend to trip you up for very long. Learning the specific frameworks and business knowledge tends to be the lions share of the learning that needs to happen... takes longer but also not a big deal. Realistically, the majority of developers spend their days doing rather mundane work with CRUD/data-munging probably being a good description for most of it (regardless of whether it's server/desktop/mobile/web) which isn't rocket science. Now if you need an expert to write a memory management system for language X on OS Y, that's a different story.
- UncleMeat 5y agoI think this really depends. If you are at a company with highly automated style checking, strong developer education resources, and a culture of using sanitizers all the time - you can let people learn C++ on the job. But if you are just writing code with code review from other team members as your only option? Oof. C++ is a barrel of knives. Incredibly safe looking code can actually be filled with horrible horrible nightmare bugs.
- ackfoobar 5y agoHere's what I expect will happen when an average developer is "to learn C++ on the job": The inexperienced developer will write code that is subtly wrong. The senior developers will spend more time debugging than the time would take to write the code themselves. The new hire will effectively have negative productivity. And when the new hire has learned enough, s/he will get a new job. The comapny will not have recouped the investment on the developer.
- vkou 5y agoThe problem with C++ is that every firm has their own flavour of C++ that they use. Someone experienced in C++ will be able to pick it up a lot faster than someone transitioning from the Java world, but there's always going to be a fair learning curve for a new hire.
- fpig 5y agoI've probably spent ~1000 hours writing C++ in my life (admittedly, years ago) and objectively speaking I wouldn't hire myself even as a junior C++ dev.