A musing on how to become a better programmer
So I had this thought and I wrote it up to send to someone so I thoughts I would post it here too.
If you want to become a better programmer learn lots of languages of different kinds. I think all programmers should learn at least one language from each of these groups (or a language of the same kind, these are just ones that came to mind) and really learn how to think in it and write idiomatic code in it:
- Haskell, OCaml, SML (Functional languages)
- Prolog, Mercury (Logic languages)
- Java, C#, Scala (Modern O-O languages)
As you learn how to think in all these languages you learn new ways to approach problems. Also learning each type system will help you understand what types are for and why you should care.
- Functional languages show you how to think about computation as transformations on data and about side effect freedom.
- Logic languages teach you how to express problems and solutions without needing to specify the algorithm used to find the solution.
- Dynamic languages teach you how to make use of an mutable runtime environment (by doing things like changing class definitions at runtime) and how important types really are.
- And finally modern OO languages teach you how to structure data in a way that captures the fundamentals of what the data is. Especially if you use generics and variances.