Programmers get paid to solve problems by designing and implementing new systems using the help of existing systems.

Notice the verbs in the job description:

  • Problem solving
  • Designing
  • Implementing
  • Using

In my opinion these are the general skills that programmers must have. Any other skills required to program will fall under one of these general skills. Some examples:

  • Programmers need to be able to use the English language and learn rapidly to be able to use existing systems.
  • Programmers need to be able to research to choose what existing technologies he must use.
  • Programmers need to write code and documentation well to implement new systems.
  • Programmers need to be able to understand and manipulate abstract systems (a.k.a. reason abstractly, symbolic manipulation, system thinking, logic, etc.) written in symbols (a.k.a. code) to be able to design systems well.
  • Programmers need to be able to Google things and ask the right questions to be able to solve problems.
  • Programmers need to communicate well with stakeholders regarding the new system’s requirements and specifications to be able to design the new system well and solve actual problems using that system.
  • The skill of debugging falls under problem solving.
  • The skill of naming variables falls under implementing code.
  • Etc.

Using the general skills template above, you can specify the job of one programmer. For example: front-end web developers in this firm get paid to give a good impression to our customers by designing and implementing a professional-looking website using common front-end web technology stack (HTML+CSS+JS, preprocessors + frameworks + libraries, GitHub, etc.).