Concepts, typically most important are:<p><pre><code>  . variables 
  . code 
  . conditional code (if statements) 
  . repeating code (loops/while/until/for) 
  . code grouping (procedures/methods/functions) 
  . variable grouping (records/structs)
</code></pre>
More advanced concepts then become<p><pre><code>  . boolean logic (extension to conditionals)
  . Object oriented coding (think: code+struct grouping)
  . namespaces (think: grouping of objects)
  . generics / reflections
  . pointers
    (certain languages expose this completely
    (some implicitly: through pass by val or pass by ref
    (some implicitly: by primitives vs objects
  . preprocessor (only certain languages)
  . recursion (repeating code but through function)
  . functional features
</code></pre>
----<p>How do you pick these concepts up?  Few ways, but I think the following three are most common:<p>1) Old School Method :: Understand what is happening on the bare metal, and then work building syntactic sugar between what is happening really, and what you want to happen.<p><pre><code>  Assembly
  -&#62; C
    -&#62; OPP (C++/Java/C#)
      -&#62; scripting (Perl/Python/Ruby)
        -&#62; Functional (Lisp)
</code></pre>
2) New Schooling :: Doing simple things in simple way (KISS principle), and then moving towards complicated systems  ( a decent litmus test for language complexity is 'hello world' program.  The more lines / syntax it requires, the more complicated language is. For example: for Java one needs to use objects / namespaces / static methods / functions / etc ) -&#62; used by new academia<p><pre><code>  Scripting (Python/Ruby)
  -&#62; C#/Java/C++
</code></pre>
3) Learning on the job :: fixing existing code, read code, tweak it, rinse, repeat.  Learn from examples.  Used by some vocational schools.<p>----<p>Libraries are in itself own big concept.  Languages without libraries are bare, and, outside of curiosity, not practical.  Very often knowing a language implies not only understanding of language grammar, but also it's libraries<p>You can think that libraries define half of what is considered programming language. For C++ you got STL/Boost.  For Perl you got CPAN.<p>Kind regards<p>Adam Żochowski