How did you choose between front-end, full-stack, devops, ML, games, mobile etc.? What advice would you give to anyone considering their first role or to anyone who is thinking about switching domains?
Over time I played with a lot of languages & environments to find which ones I liked. I started with Java: stable, mature, and well-documented but verbose.
Later I noticed that Python (along with Java and C++) was part of the trinity that Google used internally - and I met some smart engineers from there - so that's how I got into Python.
Then the internet became big and desktop app development became not very important anymore. Web development and mobile is in. Many modern ostensibly-native desktop apps are actually written in web tech these days with an Electron wrapper to make it run on the desktop as a regular app. Notably Spotify and Slack.
So right now I'd suggest looking into web tech even though it's unfortunately rather complicated these days. It's the most widely available deployment platform in existence if you're trying to reach consumers (and make a difference in the world through reaching them).
RE web tech, just play around with plain HTML, CSS, and light JavaScript. Ignore the frameworks like React, Vue, etc - they'll just confuse you at first. (I think JQuery is still okay to play with to start out, but you'll eventually want to migrate to document.querySelector and window.fetch later.)
Once you have the fundamentals of web tech down (i.e. HTML, CSS, JS), then pick up some of the bigger tools like Vue/React (for frontend dev) or Django/Rails (for backend dev).
I consider myself lucky to have been able to focus on the skills that I needed or were required of me at any given time.
My livelihood was dependent on my dev skills more than 5 years after I learned to code (first IRC scripts, then HTML, css, then JS, then python, and more recently ansible, docker, etc).
Since I either needed or had to pick up some new tech, I was always open to learning more without thinking too much about it ("is it a good career move", "is this for me", etc), just focusing on getting it done ("I want a website, how do I do that", "my website needs a database, how does that work", "we got hacked, how do I move everything to a new server and secure it better").
The decisions I took were mostly around what tech do I use or don't use (ie my stack), rather than what area (front, backend, devops etc). In other words, the area was dictated by the context /needs at the time, and the stack on my personal choices (django/python vs ruby/rails, ansible vs salt, react vs angular, etc etc).
This works for me, and my clients/employers, since I just get things done.
It also means I may be missing on opportunities to learn stuff about things that I don't need now but may be good to know, like cryptocurrencies, machine learning, decentralised apps, and the like - although I'm interested in those areas I don't have the time to learn more about them. (but when/if I need to learn about them, I know/hope I will, just like I did before).
I would take a job in what you can. Then do side projects and take classes in the things that interest you. blog and do videos on your side projects to build your network. and don't be afraid to switch jobs if a better opportunity comes along. Also, you'll know when it's time to look for another job.
I did what I wanted to do (I’m a front-end developer). It turns out there was also a lot of opportunities, so I was lucky!
I like front-end because I’m able to create a whole application (web or mobile), with very few back-end skills (some serverless Node functions, Firebase, etc.). And I like to solve problems for users, so it is a good fit ;)
For a first role, I would say that it is a good thing to have a good understanding of several domains (e.g. front-end + back-end), although I believe with experience it is better to develop an expertise in one of them.
ballistic routing was my strategy. ballistic routing is the technique of setting a goal post that feels unrealistic, moving as quickly as you can towards it, but accepting any distractions that come along. once you get bored of your distraction adopt your old or a new goalpost.
I originally got into programming because of an interest in computer animations. using computers more got me interested in security. when I got to school my new goalpost was cryptography.
My first job out of school was developing a password key manager. The interest in cryptography and experience in security landed me a job at a company that did that work, but my position was in machine learning and programming languages. Because of some of the ML applications I got to see the new goal was to get into environmental studies, graduate school allowed me to explore computational models for light pollution and cetacean vocalizations. I did this concurrently as a data engineer for a neuro imaging lab
datapipelines and interest in cetaceans give me a brief run as a web developer for animal tracking site. This cumulated in pushing me towards data science. now I work in machine learning for computer security.
Take an iterative view. You're not going to get it on the first shot. But that's okay.
Try something, get a bead on if it's where you want to be. If it isn't reaim and try something else. Keep in mind all the things about being a dev, not just particular role. Team size, company size, pay rate, geographic location, editor, language, etc...
Later I noticed that Python (along with Java and C++) was part of the trinity that Google used internally - and I met some smart engineers from there - so that's how I got into Python.
Then the internet became big and desktop app development became not very important anymore. Web development and mobile is in. Many modern ostensibly-native desktop apps are actually written in web tech these days with an Electron wrapper to make it run on the desktop as a regular app. Notably Spotify and Slack.
So right now I'd suggest looking into web tech even though it's unfortunately rather complicated these days. It's the most widely available deployment platform in existence if you're trying to reach consumers (and make a difference in the world through reaching them).
RE web tech, just play around with plain HTML, CSS, and light JavaScript. Ignore the frameworks like React, Vue, etc - they'll just confuse you at first. (I think JQuery is still okay to play with to start out, but you'll eventually want to migrate to document.querySelector and window.fetch later.)
Once you have the fundamentals of web tech down (i.e. HTML, CSS, JS), then pick up some of the bigger tools like Vue/React (for frontend dev) or Django/Rails (for backend dev).