When starting as a programmer or software developer, you might think mastering programming languages will be the most important skill. Maybe you want to learn as many programming languages as possible.

From my experience, knowing your programming language is quite important, but not as much as you think.

There are five things that are really important to me. Most of them are not really technology, and most of them I have not learned at university.

Type with 10 fingers

I have not learned to type with ten fingers in some courses. I had to learn to play the piano. So typing with ten fingers emerged by itself. Today I appreciate that I can type that fast.

You might say: Software programming is not about typing fast.

That is true to some extent. But think of one thing: You might be working using a keyboard for twenty or thirty years. How much time can you save by typing with ten fingers? I guess: If you attend a class on writing with ten fingers, it will payout in less than one year. If you practice pair programming, you don’t just save time for yourself, but you save time for your navigator, too. You can easier keep up discussions about the design of your code because typing does not distract you so much.

Know your IDE shortcuts

I am a big fan of IntelliJ IDEA↗. Print the keymap cheat sheet↗ and put it next to your keyboard. Learn the shortcuts by heart, especially the refactoring shortcuts. They will save you very much time. They will help you refactor without messing and they will still be the same in other programming languages.

See also: https://www.jetbrains.com/help/idea/mastering-keyboard-shortcuts.html

Design Patterns

Read the book “Design Patterns” by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. You should know the most patterns and apply them wisely. But please resist using the singleton pattern.

This is the only item on this list that I’ve learned in university.

Clean Code

Read the book “Clean Code” by Robert C. Martin (a.k.a. “Uncle Bob”). Make sure you understand the principles and apply them wisely. They are usually good advice, but in some situations, they are not appropriate.

Domain Driven Design

Read the book “Domain Driven Design” by Eric Evans. Make sure you understand the principles and apply them wisely.

next

If you’re done with those, learn the SOLID principles and learn about hexagonal architecture.

Why?

Technologies come and go, some have been there for long time, others had their hype and are forgotten. I believe those skills will help you on the long run, regardless of which technology you are using.

Additional resources

Any comments or suggestions? Leave an issue or a pull request!