Programming is not magic
--
This is a short article about what programming can and can’t do, just written to make a point and it’s only public because I don’t see a button to make it private.
There are two main aspects of programming:
- Learning the language. The language is pure logic and basically consists of simple operations such as if x is greater than y then do z. Anyone with a grasp of simple logic can learn a programming language.
- Problem solving. This is irrespective of the language and the skill of the programmer really means their logical problem or puzzle solving skill.
Most programmers can speak the language but they have no problem-solving ability. All they can do is use other people’s libraries but they are unable to make anything themselves that requires thinking.
For example, if you wanted a programmer to create a Sudoku generator, what are you really asking? This is not a ‘programming’ problem, this is a puzzle. The puzzle is how any sequence of instructions could result in a Sudoku puzzle. Could you write out in English instructions that would make a Sudoku puzzle? If not then you would be unable to program it. If yes then you could program it by having the computer follow those same instructions.
Programming is not magic. Programming is just a language of instructions that a computer follows very quickly. But you the ‘programmer’ still need to work out the series of instructions that if followed will result in the solution. This is not an easy thing to do, and knowing a programming language does not magically make one able to do that.
So what’s easy? Adding up numbers is easy. Doing the same thing over and over again is easy. Outputting a .txt file is easy because it’s just text. Transferring a file from one place to another is easy. But outputting a Word document or a PDF, is that easy? Open a Word document or a PDF in Notepad and tell me if you understand what you are looking at? No? Then how would you expect to write it? In that case you’d need either to learn it by reading the 1000+ page specs released by the format manufacturer (which is how I learned to write PDFs), or to use a library (kind of a mini-program) that someone else has written and use that. That’s if such a thing exists, it may it may not. If you use a library that’s fine, but if that’s all a programmer can do then calling them a programmer is like calling someone a mathematician because they know how to push buttons on a calculator.
The rule is like this: if you want a programmer to make something and you don’t yourself know how it would be made, then what you’re asking is for them to solve a problem for you that you can’t solve. The solution itself has nothing to do with their ‘programming’ ability, it has to do with their problem solving ability. So if you can’t solve it you better expect to hire someone smarter than you to do it. If you suspect that they the programmer not smarter than you, and you yourself would not know how to solve the problem, you can assume that they also would not be able to solve it.
So before hiring a programmer to do any task first think about what precisely you are asking them to do. Is it just plugging one thing into another? Is it just repeating a sequence of events based on triggers? Can it be done only using already existing libraries written by actually smart people that they can copy? Or do they need to actually solve a problem?