I'm largely a self-taught developer. Before I started working with code professionally I would often read a new programming book, enroll in a new MOOC or go down a rabbit hole of learning and reading and thinking.
While I love learning this wasn't helpful for me. I was living with a strong sense of
shiny object syndrome. I'd read a post about how this language was better or that language sucked and change direction. Never staying long enough to allow the concepts to go deep and to draw deeper understandings.
As I made the transition to full-time professional (ha!) development things changed.
First, I enrolled in (but didn't complete #sadface) an online, remote bootcamp. The biggest gain I got from this was realising how all of my previous learning and exploring fit together.
When I visited New York with my American Mom, the first thing we did was take the bus tour around the city. Both of us appreciate building a mental model of where things are and how they fit together. We had a much better trip because of this.
During the bootcamp, I realised that I didn't have a strong mental model of how the skills, languages and processes I knew fit together. The bootcamp helped me see both what I already knew and where I had gaps.
I thought a lot about being a T-shaped developer at that point - going deep on a few points and having a broad grasp of all the pieces of the puzzle. I got some exposure to excellent designs, architecture and development practices.
I was still reading a lot about other's opinions about programming languages. The devotion to certain languages and frameworks sometimes felt cult-like. I began to reflect and realised that rather than being critical of these opinions, I was forming my own version of them.
But, when I stepped back, I realised I really like working in both those languages. The PHP that people remember is often PHP 5, which was pretty bad to be fair. But, modern PHP (7+) is an excellent and robust language.
My opinions were strongly held and incorrect - they were stopping me grow and develop. They had to go!
Over the past weeks, I've been involved in a book group reading the book "7 Languages in 7 weeks". We read a chapter each week and meet to talk about the languages for an hour (thanks for organising @laurosilvacom). It's been a lot of fun and I've learn a lot. We've looked at Ruby, Io, Prolog, Scala and Erlang, with Clojure and Haskell left to go.
As we've been going through the book, I've been thinking about why I choose to work in a particular language. I realise this is opinionated and pragmatic but here are my top reasons for using a language:
Sadly, I don't speak another human language. I studied French for GCSE and did a year of Irish when I was 11. I can get by in restaurants in French and German but that's down to the patience and generosity of the serving staff. But, I know that there are idioms and turns of phrase that work in one language but not others. That people who are bi-lingual can call on two ways of describing and seeing the world - deepening their experience. I had a German housemate whose English poetry was so beautiful which he largely put down to his being able to think in two languages.
I see exposing yourself to other programming paradigms as serving a similar purpose.
If you're just starting out and still haven't
picked a language, I agree with all the advice you've probably heard. Namely, build something - pick a project, an API, a problem you had and a language and go for it. Try to avoid
tutorial hell and solve your problems rather than the ones presented in posts and books. I'm not going to tell you the best language but would encourage you to pick one and do something significant in it.
Try not to buy in to the turf wars between languages (Go vs Rust) or frameworks (React/Angular/Vue) and instead use the tools you have to do amazing things. Join in with the communities that exist and ignore the gatekeepers who can, deliberately or not, undermine your enthusiasm with their loud and unhelpful opinions.
If you're more experienced, how about trying a new language? Put on the beginners mind and try to solve a familiar problem in an unfamiliar way.