How Much C++ Should You Know For an Entry-Level C++ Job?
Nerval's Lobster writes: How much C++ do you need to know to land an entry-level job that's heavy in C++? That's a question Dice posed to several developers. While the exact topic was C++, the broader question of "How much X do you actually need to know to make money off it?" could also apply to any number of programming languages. In the case of C++, basics to know include virtual methods, virtual destructors, operator overloading, how templates work, correct syntax, the standard library, and more. Anything less, and a senior developer will likely get furious; they have a job to do, and that job isn't teaching the ins and outs of programming. With all that in mind, what's a minimum level of knowledge for a programming language for entry-level developers?
NONE! Find a real language! *ducks*
-The wise argue that there are few absolutes, the fool argues that there are no probabilities.
+5 interesting post!
All of it.
Knowing C++ shouldn't matter. Demonstrating that you can quickly master and use any language should.
Should just about do it.
The biggest skill in C++ is how to read code that's got templates, generics, overloaded operators, and custom keywords.
"What do you mean they overloaded '+' to merge objects?"
"This doesn't look like C++, it looks like some foreign language."
"Oh, we reversed the meaning of + and - because the senior guy thought that the original semantics were incorrect. But only for some objects."
Perhaps 12 or 24, depending on which book you buy.
Is it abort maintaining some old code which tends to be more like C with use of class instead of strict,
Or is it C++14 which is a much more modern language?
If you have *real* programming experience your don't need much. Learning a language doesn't take too long if your willing to put in the time. Case in point. I got a job programming in Java, even though my Java experience was all from college 10 years previous. Eventually converted that job from a Java job to a c# contract with no experience, and then with the 6 months experience in c# landed a full time job programming in c#.
Classes, class inheritance, smart pointer, vector, operator overloading.
That should suffice as the starter pack. You can learn the rest in your job when the need comes.
Some individuals can sell themselves very well. That's why you find a lot of poorly qualified people with jobs they clearly don't deserve to have. Other people aren't too good at the whole job application process and convincing people they are the right one for the job. So they get passed over even if they have better actual skills. Seriously do you plan on hiring a candidate based on coding skill alone?
Seven puppies were harmed during the making of this post.
Enough C++ to get the job.
Any really good company/department is going to find it more important to find the right person than skills in a particular language.
Obviously, a person who is a good fit in other ways and has experience in the exact skill/language is the best, but you're better off hiring someone good who doesn't know the language (and then helping them learn it) than you are hiring someone who's not a good fit but does know the language.
When I'm involved, I want to see at least 2 different similar skills (in this case, programming languages), to prove that the person can learn and has a core understanding of the common principals.
So, learn a few languages (preferably at least one of which is popular), and be prepared to learn a new one for a job.
Do you really want to work at a place that isn't willing to take the time and money to train the right person? Odds are you'll be looking for a new job before long (either by your choice or theirs).
Do C++ developers get paid more than .net developers? Or Java developers?
How much C++ do you need to pass an interview?
That's a question Dice posed to several middle managers recently. "We paid a lot of money for this tech property, but we have absolutely no idea how to use it", said one Dice higher up who requested anonymity. "Seriously - help us out here! There are over three million Slashdot subscribers, but none of them will click on an ad!", he lamented. "And they won't come over to dice.com and discuss these stories we keep cross-posting! We don't want to just be a second-rate job board forever..."
#DeleteChrome
and that job isn't teaching the ins and outs of programming
That is called mentoring. It usually one of the jobs of a 'sr developer'. Learn on your own time is a crap way of putting the cost of learning your system onto the developer.
Companies looking for C++ coders doesn't generally look for entry-level programmers.
Learn C++14 including the new stuff (move semantics in particular) and learn it really really well.
And it's important for new programmers to learn them - more important than learning syntax.
For C++ for example I'd warn about classes containing pointer member variables with implicitly-defined assignment operators / copy constructors. You have Foo a and Foo b, where Foobar has a member variable "int* bar". So the newbie does "a.bar = new int[100];" then later "b = a;" then later b goes out of scope, then they try to use a.bar and the program crashes. Seems to be a very common C++ newbie mistake. Eventually they learn to see pointers in class definitions as having big "DANGER" signs over them calling their attention, and/or rely on smart pointers.
Any others that people can think of that are common?
Oh, here's one more: iterator invalidation. A newbie who's not warned about this in advance will likely get bitten by it several times before the point gets driven into their head: "if you're using a class to manage memory for you, it's going to manage memory for you, including moving things around as needed."
POTUS Witch Hunt tracker: 75 charges filed against 19 witches, 4 witches cooperating and 5 witches have pled guilty.
Most of C++11/C++14.
range for-loops, auto, you may not need value semantics so much but at least be familiar with them, lambdas, smart pointers.
You also need to know pointers in general.
....and water will likely get wet.
For a specific job, the answer is "as much as possible about that specific job."
If you are going to be maintaining existing software, and that software doesn't use templates or certain less-commonly-used parts of the standard libraries, then you don't need to know them for that job. That's not to say you shouldn't recognize a template definition when you see it, just that you don't need to "know" them.
If you are going to be writing new software and your team-mates aren't well-versed in templates and there's no compelling need to use them in future work, you probably don't need to know how to use them.
Sometimes you can get an idea of what is needed based on the job, the company/division/department, and the company/division/department's recent projects, but not always.
As for the general question:
If you are a recent college grad or competing with them, find out what's been taught in major CS programs the last 5 years and make sure you know what other recent grads are expected to know then make sure you know all of that and then some. "All of that" so you can pass the initial interview and "then some" so you can stand out. If you can tailor the "then some" to match the job you are interested in, then you already have a leg up on the competition.
If you are looking for non-entry-level positions, make sure you understand the basic requirements of the jobs you are interested in and make sure you have the skills needed so that you would "hire yourself" if pitted against average and above-average applicants. Make sure you've got all the technical and non-technical basics and make sure you have something that makes you "stand out from the crowd." Yes, a small percentage of your fellow applicants will also have something that makes them "stand out from the crowd" but at least you'll make the initial cut and probably the final cut. If you aren't hired, lather-rinse-repeat for the next job which you are interested in.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
For C++ there is no standard answer, because every C++ shop uses a different subset of the language. There are probably a few things that all of them have in common, but it's unreasonable to expect that any entry level C++ programmer can be productive without support from senior programmers while they learn the local ropes. Even experienced C++ programmers will need a little time to get up to speed on the local style guidelines.
C++ doesn't have an extensive set of standard libraries, either, which means that every shop has its own set. So senior programmers have to expect that new people are going to spend a lot of time getting up to speed on those.
Finally, I think the question is fundamentally bad, because it implies a misguided expectation of immediate productivity. That's a common expectation (hope?) throughout much of the industry, but unless you're hiring contractors for six-month jobs, its stupid. What matters in the longer run isn't what your new hires know coming in the door, it's how well they learn, and think. Because whatever they know coming in is invariably inadequate in both short and long term. One of the things I found very refreshing when I joined Google is that they don't much care what you know in terms of languages, libraries and tool sets. It's assumed that capable people will learn what they need to when they need to learn it, and that any new project involves some ramp-up time before people are productive. On the other hand, given a little time to get up to speed capable people will become very productive. Much more so than the less capable person who happened to know the right set of things when hired.
Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
I would say everything you listed with the exception of the standard library. (Read on before flaming)
You don't need to have full knowledge of the standard library but you should have an understanding of containers and iterators. You don't need to memorize all the APIs but have access to the documentation AKA Google to be able to look up what you are unfamiliar with and to understand the full capabilities of what you are using.
There are other things in the standard library that are useful to know like algorithms and such though in my experience I don't encounter them as frequently.
It is a rich library so I wouldn't expect an entry level programmer to have a full working knowledge of everything in it.
The other things you mentioned, yes you better know your shit.
Ascalante: Your bride is over 3,000 years old.
Kull: She told me she was 19!
Your best bet is to find out if the place you intend to work for does regular peer reviews of code as a part of their process, and if not either stay clear or get an agreement that they will code review your stuff at least for a few months until you know the ropes.
Code reviews of your efforts, if done properly, are the best way I know of becoming effective quickly.
The question "How much C++ do you have to know for an entry level job" can be answered. The question "how much X do you..." not.
How much you have to know for an $X level job depends on the job. The more people can do X, the higher the level will have to be. Chances are that you need to know a LOT more C++ for an entry level C++ developer job than you need to know about some obscure assembler or industry machine language for an entry level job in that area, simply because there will be far fewer people with the relevant skill set and hence far fewer applicants.
Supply and demand, people.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
No.
(It had to be done.)
As a C++ hiring manager I like you to have a relevant degree; know C++-98 pitfalls to the level of Meyers, "Exceptional C++", "More Exceptional C++"; be aware of or know the Gang of Four Patterns. Familiarity with Sutter and Alexandrescu's writings are nice. Knowledge of Lakos and physical design (rate) is a big bonus. In a big project, even with good programmers, they usually make a mess out of the physical design. Some understanding of unit test and coverage is good too.
I've learned over thirty different programming languages, and programmed extensively in at least ten (Lisp, Pascal, Assembly, C, C++, Algol, Basic, Fortran, Java, JavaScript, and several others). Any manager who looks for expertise in a specific language should be fired. A good computer scientist understands data structures, algorithms, performance, object-oriented design, design patterns, etc., etc., etc. Arguing about which language to use is the sign of an amateur. A real programmer can learn any language in a few days, become competent in a month, and be expert in a few months. THAT is what I look for when interviewing.
More than the other applicants.
See my blog at Who's Who
Long enough to reach the ground. You can draw the inference from there..
5 years and work with OSX / Windows / Linux.
Also for the places that need an H1B OS2 / beos / Amiga workbench
Enough to get the job done. It's kind of a weasel answer, but it really is the only answer. It's less about "what do you know" and more about "how good are you at finding out. If you can get the job done using a mixture of knowledge, using the existing code as reference, and the internet, you know enough.
This would be like how much English do you need to get a job at an English speaking company?
If the domain of the programming is really specific such as financial machine learning, or embedded systems then a tiny handful of fizzbuzz tests would be enough as the core questions would all be about the domain knowledge. But if the job involves pushing C++ right out to its limits where the company has occasionally made contributions to LLVM or GCC then maybe the minimum knowledge would be that of a C++ god.
But the simple reality is that the surface area of C++ and its applications is so large that as long as the programmer had demonstrated that they can deliver in one area of C++ and are capable of learning whatever SDKs or specifics that you use I would not be too torn up to hire a programmer who knew little of the local company's subset of C++ used.
I personally have delivered C++ applications for embedded systems, mobile, and desktop. Yet it would take me very little time to write a (apparently) simple test that I would fail. Then I could point to myself and say, "Ha ha you don't even know these basics, you fool!"
For instance what is the keyword "compl" used for? Answer: it is a replacement for the ~
Why would you want to use compl other than having a broken tilde key? Answer: Because some systems don't have a ~ but do need to compile C++.
Plus if you were to quiz me on after I had been maintaining some other systems in Objective-C/Javascript/Python/PHP/SQL you could probably catch me up on all kinds of little stupid things where I would muddle the languages together. So just asking me the string function for reversing a string, upper/lower case, or other trivial things. I could end up looking like a real boob even though I could point to the hundreds or many thousands of times that I had used that construct/function/keyword in C++.
So, I am a huge fan of talking over some code that was created by the person and then seeing a quick fizzbuzz test or two to make sure they aren't full of crap. After that it would be to talk about projects that are at least similar to the project in question.
That all said; I wouldn't even be terribly offended if someone didn't even have much C++ experience as long as they could show that not only did they have mastery of one of the languages similar to C++ such as Java, javascript, or even even PHP; but that they had a proven ability to have quickly mastered a new language in the past. On this last note I would find it odd that an aspiring hard core programmer hadn't solidly encountered C or C++ in the past.
At least as much as I do and I've been coding in C++ for about 20 years...
Now get off my lawn!
Seriously, Know enough to satisfy the intervener, how much is that? Who knows.... So go for as much as you can...
"File to fit, pound to insert, paint to match" - Aircraft Maintenance 101
Why restrict the question to one language? Or is there something special that an entry level programmer in it would need to know which doesn't have an equally important concept in any other languages?
Standard Library as in stdlib/stdio or iostream? BECAUSE FUCK IOSTREAM!
Define what you mean by "C++".
C++ firmware for an Atmel AVR microcontroller?
C++ native Android loadable kernel module?
C++ MFC Windows app?
C++ hardware driver for Windows?
C++ Linux app built for GTK+?
The borderline-useless artificial construct college textbooks pretend is C++ for the sake of having something consistent and coherent to teach students for a few years at a time?
My point is that knowing "C++" (as an abstract, academic construct) barely equips you to do anything commercially useful with it. Probably 60% of what you need to know to do anything useful in C++ is platform-dependent, and another 20-30% is IDE-dependent (at least, in the Windows & Android realms, where trying to do anything independently of Visual Studio or Android Studio is an exercise in masochistic frustration (because both platforms are so tightly-coupled to their respective IDEs).
Gotta love allowing programmers into an interview that are easily annoyed. At one interview a programmer announced proudly that he was the only programmer in our dept. To that, four us looked at him and said "so are we".
There is going to be ramp up time regardless and yes, having a solid background in target language helps placate the annoyed programmer on the hiring committee. As a programmer, I become annoyed because the team wants to pick someone with no experience over someone with a decade because the team lead is younger than the applicant and is concerned about managing the "old guy".
Also must add, that I've walked into interviews with a lot of IT experience but little in the target position, language, etc and walked out with an offer. Again ramp up time but overall ability to reason through a problem and come up with a solution to a desired problem is more important. An interview should be structured to bring out these abilities. Not point out some deep obscure class function that 99% of programmers don't use. That is what Google is for, so don't waste my time.
Wait till the shop in question takes on a project requiring a new function, say LDAP access, and no one on the team has the skill. Is the shop going to hire someone with LDAP experience or assign to one of the existing programmers to learn? More ramp up time and part of the job of being a programmer.
And a solid programmer will still know how to pick those up in a few months. More to the point, a person who has already achieved that state of being able to learn new languages trivially already knows C++, in all likelihood.
I sure do, and I agree with the GP. The important things aren't the details of languages of libraries, but if you even know what a solution should look like and how to get to it.
when i interview for developers (we are a C++ shop, mostly), i certainly expect people to understand the syntax of the language, but more importantly to me, to understand what the language is providing. what is OO, what does OO provide over functional... in addition what is class hierarchy? what does it provide to the developer? what are templates? when are templates useful, and when should templates not be used, for example they should not be used to provide hierarchy (which i have seen done). what is overloading (other than syntactic sugar!), these questions can be answered for any OO type language. another huge concept that most interviewees do NOT understand is exceptions. even the basic "throw and get out of the way" concept is lost on them. and they truly don't understand that exceptions decouple normal program flow from error recovery. i'll have them write a method that generates an error and they'll start by returning an error code!! that will pretty much end the interview at that point. another area is order of construction of objects that contain members that also have constructors, as well as order of destruction of objects and what happens when a base class's destructor is not virtual. and lastly, how do they hold up when trying to design an algorithm for a difficult problem. i don't even expect the interviewee to complete the algorithm, what i'm looking for is how they attack the problem, do they ask me questions to help themselves out, do they use the whiteboard to get an understanding of the problem... the individuals in our group do not work in a bubble and if you're not willing to ask for help when you're stuck, then i have no use for you...
If Bjarne Stroustrup doesn't come to you for advice, you aren't qualified for an entry level C++ position.
How else can we prove that there are not enough qualified applicants and need more H1-Bs?
I think categorizing this by language is too broad. It needs to be per-platform. (e.g. writing servlets for 10 years doesn't qualify you to write Android code).
To be hired to develop on a platform you should know the fundamentals, which mainly means intimately knowing the major patterns for the platform (e.g. delegation, factory, prototype, facade, etc).
Should be enough for an entry level job,
C++ seems great on the surface but it's a mess underneath. No language should ever be designed with the "Do everything" mentality in mind. Learn some languages that are more targeted to areas you're interested in and run with those. Personally I recommend PHP / Ruby for the Web. C for anything embedded / ASM when need. Gtk, QT, C# and X for graphics, JS, HTML,CSS for front end web and then pick up some solid mathematical languages in between. If you set yourself up with about 12 languages, you'll always have a tool to pull out, and each one of those tools will be better then C++;
Enough to get past HR
I've landed more than one job with a generous helping of confidence and BS
There in no religion higher than truth.
Don't think he was a duck. From the fact that he was about to give us a list of real languages but then failed to do so, I can only assume the last "ducks" was him exclaiming at being overwhelmed by a wave of ducks, that subsequently ate him.
Yes, I am quite sure the real problem is he was a victim of.... fowl play.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Now slashdot is doing it again.
If you understand programming, you can pick up most of that within a few weeks. If a senior dev gets mad at you during those weeks, look for another job.
If you don't understand programming and know all that stuff, there's no way you will learn the libraries and software that specific company uses within a few weeks and a senior developer will get furious.
C++ is just another language. It's in no way harder than C, interlisp or Python.
Standard libraries are just some libraries. All languages have those.
You need to know how to debug C++. By default it doesn't give you handy stack traces like most other popular languages, but instead just a single word: "segfault".
Yeah, that's readable code!
Unless you've mastered C++, all you will accomplish is writing lots of difficult bugs. Really only gurus should be working on C++ projects. If I can't find enough gurus, then I would pick a different language for the project. (I worked on C projects most of my career because I'm not a C++ guru)
“Common sense is not so common.” — Voltaire
What were the units again?
Have gnu, will travel.
C++ is relatively compact, when you consider that 'C# 4.0 in a nutshell' is over 1000 pages without any pictures and covers almost nothing of .NET. OK, you may skip the standard template library and Boost.
That still makes C++ 2014 one of the most hideously difficult languages to learn.
You'll get a lot of insights on C++ after doing do.
- http://yosefk.com/c++fqa/
- http://stackoverflow.com/quest...
- https://gist.github.com/klmr/5...
- http://c2.com/cgi/wiki?CppBash...
C++ is a superset of C, so you have to know C and things like macros and pointers (free/malloc/new/delete) and now also C++ with references and templates and exceptions. Would you actually want to throw exceptions in your code?? And not to forget that the 'auto' keyword now has a new meaning. And you still have goto and setjmp/longjmp. Real nice, a language that allows you to write a small program whose compilation never terminates.
The answer is the same as the answer to a question: "How much of the driver's handbook do you need to know for entry level driver job?" ... All of it.
If programs would be read like poetry, most programmers would be Vogons.
Everyone knows you need 3 to 5 years experience for the "entry level" job, including a master's degree, along with no less than four software patents.....
Oh, and none of that matters if you have an H1B visa, all you need is a pulse.
If you say that you don't know C++, but you know SOME language which you can discuss in a meaningful manner, that's fine too.
Regardless of the job you are applying for, I expect you to be a quick thinker and demonstrate good problem solving skills. Beyond that, if you are applying for a senior position, you better know SOME language very well.
And anyone who says that C#, Java, Python or some other toy language is "better" must never have written software where performance actually mattered. If you are writing GUIs for a phone, then use whatever language gets the job done best, but when you are writing software that has to get massive amounts of work done, on limited resources, and needs uptimes that are measured in years, then you use a language with less run-time overhead and more predictable results.
Based on most job postings I've read, I'd recommend about 10+ years of experience for an entry level position.
Popisms.com - Connecting pop culture
As a game developer, I use a lot of C++, and performance is important. That's really a big part of the draw of C++ for game development. So when interviewing new grads I often ask them a bit about cache behaviour. Most really don't have a clue, but those who do show an understanding get high marks because it shows they've dug a little deeper than the rest:
Questions like:
- "Tell me what cache memory is and why it's important."
- "Let's say I have a list of objects with various bits of data like position, color, velocity, etc.. I can organize the list as an array of structures or a structure of arrays. Why might I choose one over the other and?" The best answer: "It depends on your usage patterns." and then they explain why.
Not understanding cache behaviour is the first step to making even the prettiest code run slowly.
Honestly, an entry level C++ developer should be able to write a useful and clean application with C++ and Qt.
An entry level programmer is someone who should know how to code but generally lacks experience with large scale projects. I'd be less focussed on whether they can define the word polymorphism but instead know the difference between delete and delete []
An entry level programmer should be focussed on gaining experience with developing professionally. A senior level developer should be able to plan from experience to develop a large scale application with complex logic.
I would make it a requirement that they know data structures and design patterns and scrum.
You need as much experience as the job requires..
I was, by coincidence, on an interview panel for a developer position earlier this week. We were looking for someone with Java and C++ skills, but didn't fail them for specific gaps in their knowledge--general attitude, aptitude and competence were what we were really evaluating. Once they are on the team you can easily fill the gaps in with training, books, code review and team working. It's better to have someone competent you can work well with, but you need to be sure they are competent and capable of picking up new things effectively.
That said, if I was in a position to be specifically hiring a C++ developer I'd not really consider you if you didn't have a good grasp of the basic language and common idioms. That includes correct use of RAII and exceptions, and the understanding of when to pass by value, [const] reference or with shared_ptr or unique_ptr. These are essential to writing decent, robust code today. Under what circumstances would you consider it safe to use new and delete? If you haven't heard of smartpointers, I'd be very worried--have you been living under a rock? Likewise I'd also like to see that you are aware of C++11 and 14, and know a bit about them even if you haven't used them much yet--it shows you care about keeping up to date with the language and libraries. For my current work projects, we use C++11 library features where we can remain compatible with C++98 using Boost to provide missing types; i.e. we have an eye to selectively use features where we can remain backward compatible and move up to language features proper once our minimum compiler versions get bumped over time. I've been playing with writing examples to test each C++11/14 feature as GCC/clang has enabled them, to keep up to date and evaluate what would be useful for our projects; keeping up to date with this stuff is a fairly basic requirement if you want to do this professionally, IMO, and if you're not enthused by the language enough to care about doing this, why would we want to employ you? In the same vein, I'd expect you to know about Boost or an equivalent such as poco even if you've not used it in anger.
It's not realistic to expect someone to be experienced with all your pet library features, or even language features--their previous employers may have banned using RTTI, exceptions, etc. in their coding standards. But it's not unreasonable to expect that you have an understanding of them and could use them if you needed to. Specific recall of library features isn't something I would require--I do have a copy of Josuttis for the STL and a collection of Meyer's books on my desk at all times since I can't remember a lot of it off the top of my head, so it would be unreasonable to expect it of another. But I would expect that you could explain the principles behind them e.g. containers, iterators, half-open ranges, algorithms etc.
On rare occasions, I'm amazed that some developers are still living in the '90s and are completely unaware of the last 20 years of language and library improvements. 'C++, I use "version 6.0"'. Sob. RAII, exception safety, RTTI, what are they?! These people would be actively hazardous to your code!
None whatsoever. In an entry level job there is ample time to pick up C++ along the way.
You need to be the world's foremost expert in C++, knowledge at least 10 various tools and libraries, and be willing to work 100+ hour weeks for $20k/yr.
Seriously, you need to know absolutely nothing, because otherwise you're liable to ask why something is being done so stupidly and thus damage some incompetent's incredibly fragile ego.
The instinct for experienced people when getting a question like this is to just ignore it and give you some broad generic advice (e.g., "he language shouldn't matter!"), which is not what you want. I will try to actually answer your question.
Fact is these days simple programs are not written in C++. C++ is used in kernel code, storage array code, file and database system code, i.e., things with caches where strict control of resources matter for uncommonly important performance reasons (uncommon because performance is not usually a priority 0 problem for "Apps" but it is for systems). If your friend is going to write C++ code they are going to work on a complex system. So then the amount of C++ they will need to know will be probably most of it because for complex systems the code base is large and mature, worked on by many engineers, and usually strictly controlled (code reviews, regression testing, etc...).
What makes the job entry-level then? Answer: they will not be responsible for making large sweeping changes, but instead will be focusing on fixing specific bugs. It will take a while until they earn enough trust and domain-specific knowledge to fix bigger bugs (bugs involving multiple components) and even more until they can design/architect new features. What that means is your friend in an entry-level C++ job will actually be _reading_ more then they write, a lot more.
So your friend will be working on a mature, complex system, fixing bugs with limited scope, and reading lots and lots of code written by other engineers. In the context of reading code the minor features will matter less (e.g,. type parameterization via templates, or various constructor syntaxes, or throwing/catching exceptions). What will matter? What does he need to know to read C++ code and fix small bugs?
1) Being able to identify layers of abstraction and modularization so your friend can tell what a particular piece of code is trying to do and how it fits into the larger system. In this case the major C++ things to understand would be how classes and their data members are declared (often in separate .h and .cpp files), and how class hierarchies are declared (e.g., abstract classes, inheritance, overriding virtual functions, etc...).
2) Being able to understand common memory bugs. The fact is 30+% of bugs in C++ are because it doesn't have strict reference tracking and GC like, e.g., Java, has. Your friend needs to know pointers, pointer arithmetic, referencing, dereferencing, call-by-value, call-by-reference, references, arrays, malloc, free, constructors, and destructors cold. Also your friend needs to know how to use a debugger (e..g, gdb) and something like valgrind that can help find where memory bugs originate from.
3) Soft-skills. Your friend needs to be able to talk to other engineers to ask them how a problematic part of the system was supposed to work, what was the intent? They also need to propose their solutions, and explain what they think the bug is. Particularly for large and complex systems this is really important as you do _not_ want to introduce breaking changes and with more complex systems it is often difficult to regression test just the bit that your friend changes to fix the bug, so you need to import others' experience and get more eyes on your changes when necessary.
Bottom line your friend will be fixing small bugs (often memory related), reading a lot of code, and learning about the particular system they are working on as an entry-level C++ coder. Good luck!
--"You are your own God"--
None. C++ causes brain damage.
I guess they don't teach critical thinking in school?
This is what passes for content on Slashdot these days?
Huh. It's not about knowing templates or overloading operators, or virtual this or that. It's about knowing when those things are necessary, and how they should be used. Know your way around pointers and memory management, and know how to avoid memory leaks and corrupting the whole system with them. Know the difference between a memory leak and every other kind of bug that can show up in code. It, really, is a specific thing and it doesn't just describe everything. This is why coding in C++ is looked at as hard, I think. it's not about knowing this and doing that. There's no formula. You actually have to be able to think and react accordingly. Seeing people overuse templates when they're unnecessary is worse than people who under use them, for example. I've seen coders rewrite C++ so it will read like Pascal, because that's what they're used to. I want to rip their guts out and kick them back to whatever hell they came from.
If it's an entry level job I think it's unreasonable to expect applicants to have experience with a large, complicated and - these days - quite specialised language. It's not as if they teach it at most universities any more.
If you are a programmer the language you use is unimportant. Whatever it is you will know it well in a few months.
Know how to code without causing memory/resource leaks.
Know how to find them if they creep in.
That's great, for especially for more experienced developers.
For entry-level, the first thing to know is that you don't know. The summary says that senior developers will be annoyed by having to teach the entry-level people. Sometimes that is annoying. What's much more annoying is having to teach someone who thinks they know it all. You took a Python class. Great. That means you're qualified to understand what I'm telling you. In 20 years of full-time programming I've learned a few things that weren't covered in your class, which was 48 clock hours. When I warned you that doing X would take down production systems, I didn't learn that from a book.
Well, you really weren't that far off the mark.
I went to an Ivy League engineering school about 2 decades ago. They did just about all of their classes in anything *but* C++ . Intro to intermediate courses were in Java, because it pretty much worked as documented. Higher level courses were in scheme, lisp, or whatever. Low-level assembly language classes were done in your own virtual machine that you had built in the java courses. Engineering programming classes were in C (for low-level I/O), Labview, and Matlab. There was *one* small 2-credit elective on C++ that taught the vagaries of C++ for the students who wanted official exposure to that stuff. That was enough to land them at Microsoft or Apple or Google or whatever big shop they wanted to run off to or start their own thing.
My wife and most of my friends went to State University. Intro-intermediate CS were total weed-out classes, and taught in C++ . They spent all of their homework time fighting the tool, debugging stack and buffer overflows, adjusting ulimits, tracing pointers... anything but actually learning about data structures or algorithms. The smarter students figured out how to use the debugging tools and source control to get by, which weren't covered in the curriculum. The State U. didn't exactly produce CS grads so much as CS survivors. Which I guess is an important quality for employers too.
You need to know enough to convince an employer to hire you! If there is a specific company you are interested in working for then you can ask them which qualifications they require. Then study to the job requirements.
Can be hammered in by Perl. *argg more ducks* //someone had to say it
If you are a white american with a degree only unpaid internships are available to you.
While it wasn't C++, I have used multiple inheritence as a mixin mechanism to implement a common protocol (e.g. propogating events) across classes that have ownership relationships but no other inheritance. The non-contrived examples I've seen for multiple inheritance all tend to be this sort of thing. Multiple inheritance isn't completely useless. You would probably find it useful for implementing default behaviours in environments where there are multiple sources of program control coming from a framework that an object has to play nicely with. One example might be a widget library for a GUI toolkit.
Did you expect the curriculum quality at State U to match that at Ivy League U? Or are you intentionally conflating the language used with quality factors elsewhere in the environment?
How much English should you know for an entry-level translator job? Hmmmm... all of it.?
I landed an entry level C++ job out of college (where we lived in Java land). Read Design Patterns. Read Essential C++. Read More Essential C++. Know the stdlib. Learn the gotchas. Just be prepared to keep at it.
C will still be relevant as the trend is always towards miniaturization of systems - in our case the industry of embedded systems. Yes, I do believe manufacturers want 'tighter code', 'tighter integration', less overhead, 'closer to the metal' software. However, I can't imagine writing hundreds of device drivers in ASM, that would be nerve racking. Likewise, I can't imagine writing scale-able, modifiable, multithreaded, mind-blowing User Interfaces for Operating System / Game Engine XYZ without modern OOP found in C++. I feel C is sandwiched between these two aspects of technology. The reason you only see half the size of other programming communities is because the spectrum that C dominates is more mature. "You have the roots, the trunk, the branches and the leaves. I want my fruit."