We live in the middle of an industrial revolution, brought by computers and telecommunications. I don't need to tell you that our lives and habits have been turned upside down; there are philosophers and psychologists reviewing this phenomenon better than I'm able to.
Anyways, there are some things I do want to point out, as every day more people become interested in programming and I'd like to give some references to those who are just starting. If you are already an experienced programmer, you might also find this insightful.
Programming has a place in all sectors of the market and also as a hobby, thanks to the increasing accessibility of the tools and the knowledge required. We have even come to hear that coding will be demanded in the future as a second language is today (something that has already been called into question).
There's a risk for newcomers in such a big field. There are thousands of options, thousands of voices and experiences. It's very common to see all over our communities articles titled What language you should learn first?, Should you learn more than one language?, Tips for noob coders, etc, etc, etc.
Well, here is my piece of advice: Don't listen to just anyone.
Before you rage on me, let me explain. There is something that not everyone realizes and that even some experienced programmers seem to overlook when giving advice: the words programming and programmer are not descriptive enough.
There is a natural tendency for practitioners to form their guilds. We come to one another looking for help, inspiration, advice, critique... This is how we grow. Also, this is how groups form their identity and stereotypes, which some proudly identify with, while others actively break.
I won't comment on whether that's a good or a bad thing, but we should mind the incomplete and distorted image that aspiring programmers receive. If you have learned coding in the last decade, I'm pretty sure you have seen (or even been) that young student who thinks that all programmers have dozens of stickers on their laptops, love caffeine and speak in <p>code</p>.
There's nothing wrong with it, I love that people enjoy and engage with their activities (and stickers and coffee too), but I've also seen people of different ages and backgrounds stick to a preconceived idea of what programming is, what possibilities it offers and the better way to success.
But in reality - I can't stress this enough - programming is just a tool. This means that programming is not a career itself, it is not enough ground to set a path to success (whatever that means to you) and not enough to generalize programming career advice.
You are lucky then. Either you want to become a videogame developer, a cibersecurity expert, a mobile app developer or a data scientist, there are more or less objective learning steps you can follow, there are specific industry standards to adopt and, in general, a limited scope for you to dive into.
I'm aware that there is still a plethora of decisions to take. Which platform? Which game engine? Which web stack? Well, here you can listen to the experts in your concrete subfield and also trust that if you don't end up using the first technology you learn, the concepts you have internalized will indeed feed back what you learn next.
This is where programming as a tool shines. You have a problem, programming is your solution. The thing is: we must have this in mind when sharing our advice. As valuable as it is, consider if it refers to your chosen path, or to actual general programming.
You just love programming. You are as interested in a hackers convention as in a game jam as in a data mining contest. You are excited about different programming paradigms. One day you want to learn computer vision and the next one virtual architectures.
Then, you need to consider several things, to make you less susceptible to deceiving and confusing opinions like you should totally learn X language, you should totally avoid X language, you need a lot of math to program, you don't need a lot of math to program, this technology will be the best paid next year, this technology will disappear next year...
Be honest with yourself about the complexity you are able and are willing to handle and get to know how much your interests will demand. I am always surprised by people who want to excel in video game development or machine learning without having a certain level of mathematics. I'm not saying it's not possible, but you will be clearly limited by it.
Be aware that this process will take time. To know the complexity of a given field you either have to dedicate some time to it, or get in touch with people that can mentor you or share the difficulties they've faced. Both options require some dedication, so don't expect a short and straight way. Hopefully, it will compensate.
So I do have a central piece of advice for you: focus on one thing and make yourself employable; after that you can expand your horizons.
Don't get me wrong. I strongly believe that theoretical background and transversal competence pay off, whatever many people say. The applications may not be directly applicable, but nothing else trains your abstract thinking and problem solving skills as a continuous process of learning.
However, be sure you don't lose touch with reality. If you want to work in an industry, you have to present a set of skills and practical expertise. To achieve it, you can't be jumping from one subject to another. As I said, you want to be employable before allowing yourself to explore other disciplines.
Whether you are looking for advice or giving it, remember that you are never just a programmer. Consider how your choices differentiate your career and how that would apply or not to others.
It doesn't matter what programming is for you: from an interesting way of earning a living to a gateway to the possibilities of universal computing. If you belong to the programmer community, I would be happy if after reading this post you remembered how it was getting started for you and were a little more committed to correctly assist the newcomers to this complex world.