Hi,
I'm currently a 2nd year computer science student and currently taking c++. I am planning on getting an internship hopefully this summer and was wondering how much of a programming language do you need to know to start off on a job ? I know the more you know the better, but for example, C++ and others are very broad languages with many features. What topics in C++ would you guys say should be mastered before being able to say there your "proficient" in the language? Are there any websites that can help me assessment my skills in C++ so I can see if I know as much as I should for job ?
Thanks, additional advice is appreciated.
It's not an easy question to answer. It varies a lot between regions and times. It basically depends on how much demand there is for programmers of a particular language, and how much a particular employer wants to screw you. If there's so much demand that a wanted ad can stay unanswered for a long time, they might just say "screw it" and take anyone with basic programming knowledge to train them themselves. An employer might want to take beginners to pay them in change (actually, my first job was like that).
To answer more directly, it's not enough to just know a language. You can learn the basics of blacksmithing (heat the metal and then shape it with a hammer) in a few minutes, but it'll take you years of practice to become a blacksmith. The same applies to programming languages. Assuming previous programming experience, a language like C can be learnt in a short time, but mastering it and its subtleties can take years. C++ takes even longer because of how much more complex it is.
I'd say two or three thousand hours (three hours every day for two or three years) of practice should leave you a competent C++ programmer unless the job you're applying for is full of gurus.
Coming directly out of school, the expectations set upon you during an interview will
be considerably less than if you had several years of professional experience. For C++,
you should understand polymorphism, inheritance, containment, and some exposure to
the STL is a plus. At least be conversant in the basic containers -- vector, list, map, set.
Knowledge of algorithms such as std::copy, std::find, etc. are a plus also.
But a good interviewer will not just ask you C++ questions that have clear right answers
("what is a virtual function?"). They will try to ask you questions that make you think, to
see how well you can think. ("Design a dictionary class for me. What STL container would
you use, and why?")
Don't undersell yourself, but don't present yourself as a C++ superguru (unless you really
are one and have written a boost library or two). Even the most knowledgeable supergurus
claim they are only 7-out-of-10 in C++.
You might look at brainbench, though it's not free.