Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm unsure as to the definition of knowing a programming language, so I'm picking C++ as an example. How much does it take to someone to be qualified as knowing C++?

  • Should they just know the basic syntax?
  • Template and generic-programming?
  • Compiler flags and their purposes (Wall, the difference between O1, O2 and O3)?
  • STL?
  • Garbage collection strategies?
  • Boost?
  • Common libraries like zlib, curl, and libxml2?
share|improve this question

closed as primarily opinion-based by Ixrec, MichaelT, durron597, Snowman, Dan Pichelman May 27 '15 at 3:14

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

For most languages, if you can confidently answer 'yes' to the question "Could you develop a full-featured application solely in {language}", then you know it. – Anon. Feb 8 '11 at 2:57
what Anon said. Whether you know libraries or not seems irrelevant: it's all about whether you know to use them or not. Just like the difference between knowledge and wisdom. – stijn Feb 8 '11 at 7:51
@ How much does it take to someone to be qualified as knowing C++? : You must read this post by Peter Norvig – Ranger Feb 8 '11 at 9:02
up vote 5 down vote accepted

I'd rather ask you about what you've done. Then I'd drill down into the specific tools you used to get that thing done. I'd talk to you most likely from a position of knowing probably nothing about your problem domain, and maybe something about the solution domain. In either case, I'd expect you to be able to teach me about the problem, the solution, its technical details, tradeoffs, etc. I want to leave the interview satisfied that I learned something from you. This might even be if we discovered something together. I want to ask a lot of questions exploring my curiosity about your projects in a lot of depth and judge whether I think you are passionate, knowledgeable, and appreciate other people's curiosity. The technical knowledge too is only part of this process--I also want to judge how entusiastic you are to share your past cool work. In addition I want to thoroughly explore "team player" oriented questions such as how you dealt with management, other team members, frustrating situations, etc.

Specifically quizzing you on the STL, boost, or any specific library--stuff you can google--is useless to me. I generally expect people to know how to look that kind of stuff up. There is no typical programmer set of memorized libraries that I expect people to know. And especially when it comes to C++, almost every organization seems to do things very differently. The one exception I make to this is I expect C++ programmers to thoroughly understand pointers and manual memory management. etc.

Note, though, that this is only part of the interview I would administer. I'd expect you to demonstrate competency in data structures, object oriented concepts, threading/os concepts, etc. I'd expect basic competence in the basic syntax of your language--enough to write some basic programs (foobar, etc) for me. However I wouldn't care if you learned about mutexes through Win32, posix, or boost. The concepts are very portable but extremely important. If I tell you a std::list is a linked list, I expect you to be able to instantly grasp the trade offs.

share|improve this answer
Makes sense to me =) – rreeverb Feb 8 '11 at 3:19
I would expect a C++ programmer to know the SC++L and probably also boost, but I otherwise agree 100% with this. – Dean Harding Feb 8 '11 at 5:15

Depends on what do you mean by 'know', if it means familiarity, then knowledge of basic syntax and to some extent templates should be enough, but if you mean 'know', as in you can implement project in C++, then I will add a thorough knowledge of STL to the above.

Here I did say OOPS, Data Structures or Algorithm because those are language independent. On second thoughts I will add pointers, virtual functions, and memory management to the above list.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.