In my last 10 years working with software engineering, there’s a recurrent question that always comes to the table among friends, colleagues, and mentees. I asked it myself too back then:
“What programming language should I choose?”
Or other more specific variations of it, depending on context:
“What programming language should I pick to land my first job?”
“What is the best programming language for beginners?”
“What programming language should I focus on to be successful in my career?”
You got the idea, and in the end, the underlying purpose is the same, despite the questions being slightly different.
Then you go to the internet, or to your social circle to ask what is the best one, and read/hear things like:
“Ruby does not scale”
“Java is terribly verbose”
“Nobody likes PHP”
“C++ is too cluttered”
And the list goes on and on.
Let’s do a little detour before we continue… have you heard about the sunk cost fallacy?
The sunk cost fallacy
In business and economics, a sunk cost is said to be a cost that has already been incurred and cannot be recovered.
When we invest in something, be it time, effort, or money, we tend to stick with it, even though the logical path is clearly showing that it's a bad decision. That happens in a myriad of situations in life.
People are hesitant and fearful of picking and learning the wrong tool, and realizing it was a waste of time all along.
Don’t freak out yet. That does not mean you should be even more concerned about making the right decision. Actually, what I want to say is completely the opposite.
Choosing a programming language is not the end of the line. It’s ok to change. In fact, it’s more likely that you’ll need to change over time.
Throughout my career, I’ve seen many friends and colleagues lose good opportunities just because they were too attached to their tools--the programming language they dedicated so much money, time, and effort to learn.
I share the same way of thought as Bruce Lee: “be water”. But what does that mean?
Be water, my friend
Bruce Lee was not just a skillful martial artist, but he was also into philosophy:
“Be like water making its way through cracks. Do not be assertive, but adjust to the object, and you shall find a way around or through it. If nothing within you stays rigid, outward things will disclose themselves.
Empty your mind, be formless. Shapeless, like water. If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot, it becomes the teapot. Now, water can flow or it can crash. Be water, my friend.”
— Bruce Lee
Be water. Don’t be rigid to the point of picking your programming language and refusing opportunities to work with another one, or rejecting opportunities because you have skills in Java but the position is to write Python.
Programming languages come and go. Some are here to stay for the next 20 years, others will fade away and nobody will remember in a few years. It’s better to learn how to learn, and don’t obsess with your choices. Knowing that your choice is not immutable and your success does not depend on sticking to it is liberating.
How to make such skills transferable from one programming language to another? That is a topic for another post that I will eventually cover.
Still, you need to pick one. What should be your reasoning then?
The decision making
If you have come this far waiting for the definitive answer, I’m sorry! There’s no such thing. It depends on your own circumstances.
I know it’s frustrating to read thus far without any tangible advice.
“Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime”
— Lao-tzu
Explaining the drawbacks and advantages of the programming languages in vogue at the moment would be of almost no use to someone inexperienced. Instead, I’d like to present some scenarios that can help you develop your critical thinking:
You’re doing college, and your professors teach using Python. It’s almost a no-brainer. Choosing the language you use for studies and also for work will save you some valuable time in the beginning.
You want to land your first job, and you want to start as soon as possible, without caring too much about the size of the company or the market it is in. You want to make some money and have something on your resume ASAP. The vast majority of companies are hiring Javascript developers, so focusing on your employability by choosing a language more companies want can help you to achieve your objectives faster.
You want to learn as much as possible and a seasoned friend who works with PHP is willing to mentor you and guide you on landing your first job, perhaps even at his/her company or via referrals to companies of colleagues. It might be more beneficial to use this PHP mentorship opportunity. Why not?! Having a mentor can boost your early career!
You’re interested in a remote job, but you need to gain some experience first, and the local market is hiring Java developers in most of the companies you could consider applying to. Then picking Java to hit the ground running might be your option.
Most importantly, don’t attach yourself to the scenarios provided above. Use them as guidance in your decision-making, not as a rock-solid truth. Think critically about what makes sense for you at the moment given your opportunities and constraints. Don’t pay too much attention to people around you saying you made an excellent or terrible choice. Beware of anyone suggesting easy paths and bulletproof tools the same way as those who say your future is doomed.
Remember, you can always change later. “Be water, my friend”. On top of that, after some time and experience, having knowledge of another programming language under your belt can boost your resume.
Conclusion
I hope this could shed some light on your path if you’re just starting and anxious about so many options and making a decision.
If you’re a seasoned programmer trying to help someone start programming professionally, share with them. Don’t let them be dragged to bikeshedding. Grabbing the first job as a programmer is already challenging enough.
If you liked this post, consider subscribing to my newsletter Bit Maybe Wise.
You can also follow me on Twitter and Mastodon.
Photo by Man Chung on Unsplash
Top comments (6)
It's so cool to hear Bruce Lee's "be water" advice applied to development like this. Great post! I really enjoyed reading this. 🙂
Thank you :)
Big agree! I also have not ever heard the full quote attributed for the water metaphor for some reason, thanks for sharing!
Or take a week off and try out different programming languages. A few years ago the US government was looking for COBOL developers, I have read articles where 6502 CPUs with a JVM built on top of them are used to serve US gov websites and I receive lots of Google news on using Haskell in development. Heck I've seen a YouTube comment saying that they won't use svelte because elm compiler has been in development since forever. In terms of jobs you'll always find one if you look hard enough but sticking with something you don't enjoy will always make you feel off so take a week off and learn the basics of a myraid of programming languages and see which you like.
But then you take this advice and fall in love with Miranda or Prolog... I don't take financial responsibility 🤣🤣🤣🤣🤣🤣🤣
That's true hahaha.
Playing with multiple programming languages is always a good idea. For example, I love Haskell, but it's difficult to bet on it professionally, however, I do enjoy writing some Haskell code once in a while just for fun, and the concepts and new ways of solving a problem using a side effect free technique can latter be applied to whatever language I'm using at work.
Thank you :)
dev.to/michaelwilson/how-much-does...