One of the common struggles we all face is choosing what exactly we want to do. There are so many software development sub-fields, it’s hard to choose one.
Should I be a front-end developer? Back-end? Mobile? Should I go for Machine Learning? Embedded? Maybe DevOps?
I don’t have a three-item questionnaire culminating in the “Congratulations! You’re an iOS developer” pop-up. What I do have are some recommendations on how to approach the question and get an answer you won’t regret.
I’ll start with open-ended questions. Some are more important, some—less so. (That’s for you to decide which is which.) The quality of your answers determines the quality of the result.
While you don’t have to answer all questions, give them a fair try—find a quiet place, and set aside 30 minutes of your time. Think about them.
After the questions, we’ll quickly discuss what to do next, and I’ll give a couple of examples.
Assessing your values
Let’s start with the values questions. These will ensure you’ll end up with something you enjoy doing.
Remember, these questions are about you—there are no right or wrong answers.
What’s your motivation? (Why do you want to start a career in IT?)
Do you love coding for the sake of coding? Maybe you seek a better-paying job? Or you’re tired of your shitty job and want something more enjoyable?
Whatever it is, write it down.
What’s your background?
Have you done any programming before? What was it? Do you have any job experience in adjacent fields? Have you been managing people? Have you been working with computers? What are you good at?
What do you love?
What are your hobbies? Do you value visual beauty? Problem-solving? Do you love music? Games? Micro-biology?
Do you like short-term or long-term projects?
Do you like creating something new from scratch or polishing existing things? Are you quickly tired of things?
Do you like taking responsibility?
Do you like making decisions? Or would you rather be an advisor and let someone else decide?
Do you love continually learning new things?
While you need to learn to stay on top of the ball in every field, some fields change faster than others.
Do you like teamwork? Or you’re more of an individual contributor?
Who do you like to work with?
Do you like working with end-users? With business people? Artists?
What are your moral standards?
Do you consider working in the gambling industry? Help streaming porn? Is there a job you would never accept? There are no right or wrong answers—just notice whether that’s something important to you.
What else is important to you?
Whatever it is—creativity, freedom, flexible schedule, a competitive salary, or cat in the office—just write it down. If you use one of the vague words like “creativity,” be sure to define it—be specific of what you’re seeking.
Assessing the position, you’re in
Now let’s survey your situation. That will impose limitations and will help you filter out inappropriate options.
How much time do you have before you need to decide? How much time do you have to prepare?
Are you a computer science freshman and have a couple of years to decide? Do you want to switch jobs as soon as possible?
How much time can you commit? Can you take some time off from work to prepare? Will you study at night while working full-time?
Where do you live? What positions the local market needs? Are you open to relocation?
Research the job market. What positions do you see? How much? What are the requirements?
How much risk are you willing to take?
If you want to do something niche, how much time can you spend searching for the right job? Do you have time for a second try if the first one fails?
What are your salary requirements?
Sometimes, the most challenging jobs are not the most paying. (Surprise—surprise.)
What people you have access to? Are they willing to help?
Maybe you’re friends with some front-end developers. Having someone to ask questions is quite an advantage.
What other important constraints are there?
Researching your options
For some people, after answering all the questions, the specialization they are looking for is obvious. If it’s not apparent for you, continue with sourcing and researching the options you have.
The questions above should’ve led you to requirements for the job or specialization you seek. Answering them, you must have noticed which questions are more important than others. Use that to weigh options against each other.
Write out the most critical requirements for the job you seek.
There are many ways you can approach this stage.
Start with a list of specializations you know and filter out what you don’t like or what’s not suitable. (Good if you’re new to programming, and that’s your first job.)
Start with a possibly vague description of your dream job, then search for it. (Good if you have some special requirements.)
Start from the result you want to create (e.g., games for kids or advancing biology), then check what jobs are available there. (Good if you’re values- or result-driven.)
I am not going to list all the options available with the pros and cons of each—it’s just too many of them. Use google and ask people.
Do not limit yourself
You don’t have to write code to have a good job—do not impose unnecessary limits. Consider management, entrepreneurship, design, marketing, or even blogging. They might be a much better fit for you.
Ask specific questions
By now, one advantage you have is that you know what’s important to you and you can ask better questions. Instead of asking, “What would you recommend for a beginner programmer? Python or C?” ask, “What you can learn faster? How many jobs are available? What people do you often communicate with? Where could I transfer from there?”
If you have time, try test-driving the thing. Search for some experience: apply for an internship or build a month-long project of your own. (It doesn’t have to be formal, and any experience is suitable for your resume.)
You’ll probably spend quite some time in the field once you land a job, so a one-month test-drive is entirely worth it if you’re in doubt.
Remember it’s not final
Whatever you choose, remember it doesn’t have to be final. The software development industry is extremely easy to change jobs in.
Sometimes what you need is just start somewhere.
When I decided to focus my efforts on one sub-field, these were determining factors:
I just finished the first year of university. That means I had almost three months in summer, and I could focus full-time.
I loved programming for the sake of programming.
I didn’t like communicating with people much, and somehow I decided I want my target audience to be other programmers. I imagined that as developing libraries or other API for programmers.
Being at the start of university meant I wasn’t in a rush, and I had plenty of time to decide and prepare, so I mostly ignored constraint questions.
I looked into kernel-level programming. Technically-challenging and hard-core. Virtually no communication with non-technical people. The only issue: I tried it before but wasn’t successful. Though, I decided to give it another try. (If that wouldn’t work, I would probably go for back-end development or try some other options.)
I went for Linux Kernel Development by Robert Love—it taught me internals of Linux kernel as well as what operating systems do. Then I went to answering Stack Overflow questions for the “linux-kernel” tag. I went for a “Write Yourself a Kernel”–kind of tutorial and used that as a starting point for my experiments. (It also looked great in my resume.)
I liked the experience. In August, I had an offer for an Embedded engineer position, developing an in-house operating system.
The primary motivation here was to leave the job she didn’t like and move toward something more genuine.
She hasn’t programmed before and is not fascinated by programming. Instead, she sees it as a medium.
One of her core values is beauty. She likes visually appealing design (but haven’t done any serious design work before).
We could have afforded her off the job for ~6 months so that she could study full-time.
Quick access to me for programming-related questions.
So yeah, we’re looking for something technically non-challenging. Easy, so she could learn it from scratch and find a job in 6 months. Something involving design (possibly offering a smooth transfer there or at least an advantage). Mainstream, so searching the job isn’t an issue.
Front-end web development was the right choice. Fast-forward 4 months, she’s got a job offer as a Vue developer. She loves the job so far and even does some design here and there.