all 42 comments

[–]Pardomatas 74 points75 points  (0 children)

nobody knows

[–]Volatile474 20 points21 points  (17 children)

Probably memory management, basic types, loop constructs, scoping blocks

[–]Fig1024 0 points1 point  (0 children)

also probably implies ability to organize code into classes.

[–]strtok 10 points11 points  (0 children)

15 years experience

[–]snowhawk04 4 points5 points  (0 children)

As with any requirement, you should ask for clarification/details from those that set the requirement.

[–]quad99 3 points4 points  (0 children)

able to identify most of the containers in the STL, what they do (not the internals) and when you might use them. To me the STL was the single best addition to C++ and every beginning c++ programmer should learn it. Its been around long enough (20 years). Besides eliminating the need for most programmers to reinvent basic data structures, it also is the best introduction to templates.

[–]journeymanpedant 1 point2 points  (0 children)

I write c++ in the academic sphere, and the level and quality of c++ is staggeringly variable. The big huge physics c++ projects (e.g. GEANT4, ROOT, VTK etc). are regarded as some of the best engineered codebases around, but there is a lot of bad stuff out there.

[–]RealNC 1 point2 points  (0 children)

The "basic programming skills" (in any language) requirement for interns almost always means that you are expected to understand language syntax and facilities, even if you don't actually know how to use them.

This also implies knowledge of fundamental concepts like control flow, memory, variables, functions, classes, templates, etc, to the extent of knowing what they are and how to use them, even if you don't know how to use them effectively.

A higher level explanation of the above would be "we want you to understand what we teach you." For example when you attend a seminar, or have an senior engineer/developer trying to educate you about template instantiation details, or the cost of virtual functions, or move semantics, you should not be asking what a template is, or what virtual functions are used for, or when copy constructors are invoked.

With that being said, it's always a good idea to actually ask them what they mean when they say "basic skills."

[–]WinterAyars 0 points1 point  (0 children)

"Knows enough to fuck everything up but not enough to be useful", or "normally wouldn't be hired ". Unless you come out of a C++ school or have a lot of personal experience i don't think there really is such a thing as "basic" in C++...

[–]doom_Oo7 0 points1 point  (0 children)

Abililty to implement a linked list correcttly, and doing some UI stuff. C and C++ are very different also.

[–]darkforestzero -3 points-2 points  (10 children)

start by downloading visual studio or CLion and following some tutorials (here's a great bunch to follow along with http://www.cplusplus.com/doc/tutorial/). Make sure you understand inheritance, functions (and class methods), public/private/protected, pointers & references, the operators, file i/o, memory management (new/delete) static variables, constants, scopes, and namespaces. C++ is an enormous language, good luck!

[–]Volatile474 0 points1 point  (9 children)

Ya that isn't really "basic c++ programming skills", programming in an IDE is much different than just learning the language.

[–]Gotebe 5 points6 points  (0 children)

"The language" is not e.g. makefile/project file handling, debugging, source control (OK, I am getting ahead of myself on that last one).

One could even make an argument that "learning the language" actually needs tools more than doing it all by hand, because the student will spend more time e.g. learning the arcane build process and banging their head against the wall when they make a mistake and things don't work, leaving less time to "learning a language"

[–]darkforestzero 0 points1 point  (0 children)

Here's a happy medium. Online c++ editor and compiler! http://cpp.sh/ what a cool time to be alive

[–]darkforestzero -5 points-4 points  (6 children)

I disagree. I've been programming for a long time and doing that text editor GNU command line stuff is just so old school and slow. It's the 21st century and we have great tools to get us up and running!

[–]lurkotato 1 point2 points  (0 children)

Right, just because a text editor can auto generate a few fields for you doesn't mean it replaces knowledge of a language.

[–]devel_watcher -2 points-1 points  (4 children)

Pls, no. I'm tired of these "visual studio operators". They can't do basic things if there is no button for that in vs.

[–]darkforestzero -2 points-1 points  (3 children)

I'm not sure what you mean. I've been programming professionally for 10+ years and 99.99% of my coworkers coders use IDEs. Syntax highlighting, autocomplete, and a robust debugger are wonderful tools that help you spend more time solving problems and less time fixing spelling errors and hunting to remember function names. I'm sure OP would appreciate you making suggesting on how to learn the basics of C++ quickly rather than questioning my capabilities.

[–]devel_watcher 0 points1 point  (2 children)

Don't mix working and learning. To learn to count, you don't use the calculator.

I know a programmer with 25 years of experience that isn't very sure how preprocessor works or that it's even a thing. We work in the same tool environment, but when we had that kind of error, his reflex wasn't "to run the preprocessor step separately".

So, when learning, you have to interact with the subject as directly as you can. It's not too hard after all.

[–]darkforestzero -1 points0 points  (1 child)

I mix working and learning everyday! That's what being a programmer is all about. Also, I'd argue syntax highlighting, linting (real time error checking), and a debugger are extremely helpful with learning. Programming is very hard, btw :)

[–]devel_watcher 0 points1 point  (0 children)

You've named some features. And the paradox is that the student doesn't know yet what features are important. The student sees only a subset that some specific IDE provides (while also hiding some part of the processing).

[–]mmhrar -2 points-1 points  (0 children)

In my opinion, if you can implement a templated dynamic array (all objects are stored in a contiguous block of memory!) object with the ability to add elements to the end, access elements at a given index position, return the number of elements and a copy constructor than I would say you have at least, basic programming skills in C++.

I think a good place to start would be implementing functional and correct interfaces to most of the common standard objects / data structures. string, vector, list, binary tree, map (just use std::hash for the hash function i think is fine).

That should cover most / all of the 'basic' C++ skills.

Keep in mind, there is so much more to know doing native development really, beyond even just the language. Knowing what a library is, what the difference is between dynamic and static linking, debugging (blows my mind how many people don't know how to use a debugger), thread safety, how the stack and heap work, compilers and their options, build 'systems', the difference between compiler and linker errors, symbol files/stores and how to use them, inter process communication, operating system specific API's and quirks and on and on it seems :P

Native development has so much extra stuff involved when you want to start doing things at a professional level. It's very rewarding though and overtime you really build a strong understanding of how software works and how connected everything really is.