Programming is not a mere subject on the “purpose of programming is to create a set of instructions that computers use to perform specific operations or to exhibit desired behaviors”. Programming in fact is more than the simple understanding on how are placed those instructions on source code, there several concepts arranged on the source code, a statements like “avoid using continuations on your state machine” should be understood by the programmer. Also “externalize the closure as first order function” should be understood too. Those concepts if are not understood by the programmer, he will be speaking in terms of a novice programmer with a small set of programming courses and knowledge con computer science, so will be hard to communicate clear ideas about what are they programming.
Usually I speak using those terms to refer my code, to document it and to state its real behaviour, so describing my computer programs is not so hard to understand once you know those terms, which are very common on programming and cannot be learnt on a simple programming tutorial or reference manual, you must be continuously reading and learning computer programming and computer science terms to entirely understand a precise description of some programs. Someone that does not understands what I am speaking once I try to describe how is being structured my source code is clearly not understanding my theoretical basis, and even is not listening my description seriously.
Who understand programming concepts and is able to write and speak with the right terms, bringing correctness to what is requiring, is able to work with me. Not someone that speaks with tricky terms that almost have no sense. “Insert the code in the third column” is not so good as task description and I hate the lack a good written description of what should be done, mainly as programmer there should not be any doubt on what refers to requirements. This is one of the main reasons why I am currently working with low level systems and data processing, mostly with C, C++, Python, Java, Haskell and Lisp, and I am not accepting projects in other languages, because I am hardly using parallel and distributed processing to handle complex control tasks and data processing tasks.
I think that a good programmer have at least experience with the three main programming streams, procedural, functional and object oriented programming — where object oriented programming has its roots on procedural programming and is almost the same stuff with nice data structures that allow processing. Mainly today, that the multi-paradigm programming becomes as one the biggest programming streams with languages like Python, Ruby, JavaScript, Scala and similar ones. Also with Java, C# and C++ adopting some functional features like anonymous functions. But understanding those features is not enough, you should learn about their abstractions, for example if you do not understand Monads in Haskell, you will probably never understand anything related to creating parsers, parallel processing and similar advanced features. So, learn programming seriously, not as a lightweight activity that can be done by anyone, because that is a myth.
Also, I want to remember you that functional programming is not about some stuff that works. Is creating algorithms using functions as the main abstraction and avoiding states on the code. If you never have seen a functional algorithm, here is a fully functional Chilean RUT validation routine in Python.
def val_rut(rut): """ Validates a RUT String with dash included, returns 0 if it is valid. Example Input: "22222222-2" """ return cmp(rut[-1], str((range(10) + ['K'])[ (11 - sum(map(lambda x: (int(x[0]) * x[1]), zip(reversed(rut[:-2]), (2 * range(2, 8))))) % 11)]))