Being a programmer is a very satisfying profession. You get to create all sorts of new and exciting things on a daily basis. You push yourself to the limit when there is a new challenge. There are new libraries released so frequently that it’s hard to keep up. Life is good.
Becoming a programmer, though, isn’t easy. Many of us taught ourselves without the aid of a Computer Science degree. Learning things on your own has its advantages and disadvantages. The trick of it all is to learn how to learn, and to focus on building things. Experience will come later.
Experience can’t be learned
When learning something new, you naturally want to become an expert. That can cause stress. It happened to me, and I learned to control it, by accepting that experience can’t be learned. Experience happens because of the journey, and not because of shortcuts.
Instead of worrying about experience, learn how to learn. That, on its own, is more important than learning on its own. Do that, and you will absorb more knowledge.
Learning by Experimentation
You can make learning easier with experimentation. I’ve seen people go on a learning spree, and just focus on learning the tools and every little feature they provide, instead of focusing on building and experimenting with the technology. In the end they have the knowledge, but created nothing.
Knowledge without practice is worthless. The more you practice and break things in the beginning, the more you will learn and master whatever it is that you are learning.
This approach to learning worked wonders for me. Focus on putting to use what you learn, and create things with it. You will make mistakes, but you will learn from them, and eventually, experience comes when you learn which mistakes not to make.
Knowing when to optimize
We all often aim to write perfect, error-free code from the start. This sounds good in theory, but in practice, it takes attention away from what you are buliding and makes you focus on things that are not important at the moment.
You can’t figure out how to make the car faster if you haven’t built the engine yet. Right? Build it first. Doesn’t matter if it has mistakes in it. If it does the job, then it’s a success.
Next, refine the different parts of your creation to make them optimal. We already have the foundation of the system, so we can iterate and make it better progressively. Iteration is key.
As Joe Armstrong (one of the co-creators of the Erlang programming language), said in the Erlang and OTP in Action book:
Make it work, then make it beautiful, then if you really, really have to, make it fast. 90 percent of the time, if you make it beautiful, it will already be fast. So really, just make it beautiful!
Functional programming is important
Even though functional programming languages haven’t become as mainstream as regular (procedural) languages like Python, PHP, C, or Java, they do have their fans. For some projects, they may be overkill, but for others, they may truly shine.
Even though I personally have not used any functional programming language to build a real project, experimenting with them has helped me think differently as a programmer. Understand concepts better, and my problem solving skills have sky-rocketed after learning approaches used in Erlang, Haskell, and Elixir.
So, even if you are not going to apply it in your day to day work as a developer, it is a big plus to learn Functional Programming, or anything else new.
Here are some good learning resources to get you started:
- Erlang: http://learnyousomeerlang.com/
- Haskell: http://learnyouahaskell.com/
- Elixir: https://elixir-lang.org/learning.html
- Elm: https://guide.elm-lang.org/