Justin Meiners, a software engineer for the blockchain software development company Pyrofex, took his own experiences to come up with three fundamental skills he finds programmers are too often missing.

“How can a programmer work for 10 or 20 years and never learn to write good code? So often they need close supervision to ensure they go down the right path, and they can never be trusted to take technical leadership on larger tasks. It seems they are just good enough to get by in their job, but they never become effective,” wrote Meiners.

According to Meiners, these skills are not trends or frameworks for getting a job, instead they should be looked at as prerequisites for your path to becoming a successful programmer.

  1. Understand how the language works: It seems obvious, but according to Meiners, developers generally don’t fully understand the programming language they are working with. Developers who don’t take the time to familiarize themselves with the language end up not addressing problems directly and littering code. In addition to understanding the language, developers need to understand what is going on inside the computer and how the code will react in the real world. “A muddy understanding of how things work is typical of beginners, but it is all too often a problem with experienced programmers if they are not curious and do not take time to learn how things work beyond their immediate job’s needs,” Meiners wrote.
  2. Anticipate problems: “To write reliable code, you must be able to anticipate problems, not just patch individual use cases. I am shocked by the number of times I see code that puts the program in a broken state when a very likely error happens,” Meiners wrote. You want to write working software, but you should also be thinking about what will happen if the software fails or the ways in which the software can fail so you can put safeguards in from the beginning. You can fix as many individual bugs as possible, but that won’t fix the overall system.
  3. Organize and design systems: The first two skills alone are not enough to be effective. Programmers need to be able to organize code in a way that makes sense. Programmers have different ways of designing software, but a well-organized system provides concise concepts and clear responsibilities, according to Meiners. “Mathematicians and philosophers spend a lot of time discussing definitions because a good definition allows them to capture and understand some truth about the world. Programmers should think similarly and spend a comparable amount of effort grappling with ideas before writing code,” he wrote.