I am often being asked by friends and acquaintances: how do I switch from my current profession to software development?
After the third question I decided to write it down.
All of the following are my personal recommendations, my personal advice. Of course, everyone is different, learning at different speed, motivated by different things. This is how I see things and what I recommend my friends.
1. Welcome!
First of all: welcome to our field. We need more people like you here.
Many people nowadays switch their careers, and it is awesome. When you have worked in different fields, you will have a wide range of skills that will come useful.
For instance, if you did marketing and sales, you know how to talk with people. You will be able to easily to persuade your colleagues to go with your approach or your users to try your product. This is an invaluable skill in software engineering.
Or, if you were a QA specialist, you already know a lot about common problems in software development. You are quality-oriented and attentive to details. Perhaps, you already know how to code. These skills are going to prove extremely useful.
Whatever career you were pursuing before, you know how to learn, how to work hard, you are determined and goal-oriented.
If you really want to and if the circumstances allow you to, do not be afraid to switch. You will definitely succeed.
2. What area to choose?
Machine learning? Web development? Android apps? Videogames? There are so many different things, and all of them sound so cool.
Concentrate on one thing
I strongly recommend picking one area and concentrating on it. When you mastered it, you can slowly expand into related areas.
For example, let's say you always wanted to build websites. It's great! Start with HTML, CSS, Javascript, and at this point you are basically ready to land your dream job or to build your dream website.
When you have mastered these skills, you can expand further. One way would be to learn backend technologies and skills: a backend language, a database, networking, etc. Another way – to pick up design skills.
Most likely, you have limited time. (More about this later.) Because of that, you need to pick an industry realistically. It is more realistic to expect to learn only frontend within 6 months than to learn frontend, backend and machine learning skills.
Along with that, in my opinion, if you start to learn many new things at once, it is going to be very difficult to manage. Brain needs to go step by step.
It will also take you more time to learn many technologies to the "production-ready" state, and you surely want to start your new career sooner?
Go visual
Another advice I usually give is to start with something visual. I started learning by building windows applications with Delphi. Simply painting buttons green brought me a lot of joy. (Ah, good times.) I could see my results, I could proudly show my tiny green-buttoned app to other people, and this encouraged me to learn more. It was fun.
If I were to start with sorting numbers in memory, I am not sure I would be so enchanted by it.
If you build an app or a website, you will immediately see the results on your screen. This motivates a lot.
Moreover, sharing your achievements with people is fun! It is easy to show a website to any other person in the world, but to show off your amazing new ML model you need someone who understands what it means. Or, you know, you need to build a website for it:).
Showing visual results in your CV or on your interview also helps with the job search. The employer can immediately see what your skills are.
What do you like?
If there is an area that you really like, go for it!
If you always wanted to make (insert your thing here), start with it. Your motivation is the most important driver on your road to success 🚗.
For example, if you always wanted to make iOS apps, then start learning that. There is, of course, the possibility of starting to learn how to build desktop apps, then Android apps, then slowly expand to iOS, but if your heart yearns to enrich the Apple ecosystem – why shouldn't you?
What do you already know?
There is a chance you learned some Python in the university, or perhaps built a couple of pages with HTML+CSS. Great! You won't be starting completely from scratch. Perhaps, it's a good idea to build on these skills. Freshen them up with an online course and see if this helps.
What is the demand on the market?
What do employers want at the moment?
If you go for an obscure technology, there is a chance the market for it is so small, there are no positions for you in your city.
Try to estimate: how useful your skill will be when you're looking for a job.
3. Start with fundamentals or practical skills?
There are two different approaches.
The first one – the oldest, the most traditional approach – is to start with fundamentals. You learn assembler, algorithms, math, C, low-level networking, how transistors work and what electrons are. This is very interesting. This takes time. Not all of these skills you are going to apply in your every day job. You will gain a deep understanding of the whole industry and around it, and it costs time.
The second approach is to learn very practical skills first. It seems rather modern, as bootcamps are just starting to take over the world. But at the same time, it is as old as humanity. Mothers have been passing their knitting and wood carving skills to her daughters and sons for hundreds and thousands of years.
In this second approach, you would start with learning HtML and you would build a web-page immediately. You don't know yet how exactly browsers work and how the data is stored on the backend side, but you have a visible result.
The first approach is usually what you do in a university or in college. The second approach is more popular in bootcamps and in self-learning.
If I were to change the industry right now, I would go for the second approach. I would be willing to see the results right away and to start as soon as possible, and I would be eager to learn the rest on the fly.
I would be more cautious to spend 2-3 years on learning everything from the beginning. It would be difficult for me to justify setting so much time aside, with the result so far ahead in the future.
Besides, since you are switching from another profession, you probably already know a lot of fundamentals which are the same across industries. If you have already studied math for your previous engineering job, you don't need to take the same course again.
Some bootcamps claim that after several months of studying a person will be able to find a new job. Some of them even delay the payment until the student finds a new job with a certain salary level. This seems like a risky approach, but these bootcamps are rather successful. I absolutely believe that a dedicated person is able to do just that: learn practical skills in several months and find a new job.
4. Goals and restrictions
We all are busy people and have a lot of commitments. Jobs, children, hobbies, friends, budget planning, mortgage, renovations.
That's why it's important to set some limitations. (And life can set some limitations for you.)
Try to answer this question:
What is your specific goal?
It doesn't have to be a lifetime goal to run a startup with 10 000 employees or to build a rocket for the European Space Agency. Keep it mid-term: say, 6 months or 1 year.
So, what do you want to achieve within this time limit? And what can you achieve?
A reasonable goal would be: "within 1 year I can learn one stack of technologies to a decent level and find a job". Or, perhaps: "within 6 months I will learn how to build Android apps and will build this app I have an idea for".
Next question you have to ask yourself:
How much time can you dedicate?
Do you have weekends and evenings at your disposal? Do you only have 2 evenings a week? Maybe you can dedicate your full time to this?
Of course, it depends on your engagements and your current job.
You can balance and negotiate your limits. Maybe you have to push your end date by a couple of months or find a way to spend more time on your learning during the week.
Set a goal realistically. It is only demotivating to expect to finish everything within 2 weeks and then fail.
This exercise also might help you with picking an industry. If you want to learn machine learning but only have 6 months and 2 evenings a week, perhaps you should start with something simpler.
5. Find a mentor
A mentor is someone who would oversee your progress and help you with learning. It is helpful if your mentor is someone specialising in the same technology you are learning about, but not strictly necessary.
They will gently guide your progress, give you materials to learn, assess what your strengths are and what skills you need to pick up next.
If they're knowledgeable in your specific area, you can also ask your mentor questions about specific problems you're encountering.
A mentor is especially helpful if you're learning on your own. In a bootcamp or in a university you'll have a lot of people around you ready to teach and help, but if you're following online courses, you might feel lonely and lost sometimes.
A mentor can introduce you to other people doing similar jobs, or perhaps even refer you to a position in their company.
An unexpected plus of a mentor is that you would feel responsible to work in order to not let the mentor down. They will hold you responsible, in a way – even if they're the nicest person in the world. They will make you feel accountable.
Imagine that you met with your mentor, they have sent you an article to read, and next time you meet them, you haven't read the article? Surely, you don't want to let them down this way?
6. Consider downsides
There are, of course, downsides of learning a lot and switching a job.
One problem is that learning takes a lot of time and dedication. It is basically a second job. It is easy to not spend your evenings on this new job and watch nature documentaries instead because you are tired.
Consider what level of career you are on now. If you are to switch your career, you are likely to start from a junior position. This might provide you with less income for a while.
Software industry is growing. It is dynamic. This means there is a certain level of chaos. New technologies come and go, companies open and close overnight, and what was on the rise yesterday is forgotten today. Because of that, you will have to learn a lot every day, even after you have seemingly "finished" your studies and have found a job. You will not be able to "relax" into a routine.
Software industry might feel toxic. Despite the fact it is a relatively new area of human knowledge, and it is full of smart educated people, we have already made a mess out of it. Overtime hustle, many rounds of intentionally stressful interviews, and gatekeeping are very common issues. The gender proportion in the industry also leaves me wishing for more equality (based on different reports, only 10-30% of tech positions are held by women in 2019). As a result, people burn out, become sick, leave the industry. Unfortunately, I don't have a specific advice on how to avoid or overcome these problems. It is something our whole industry should become better at, all together. I just want to warn you about these problems in your new profession. It is not all roses and ponies 🦄.
I am not trying to say that the tech industry is the worst. I am sure many other professions suffer from similar problems. On the other hand, the tech industry is wonderful, interesting, lets you make something with your own hands, has many nice and inspiring people.
Good luck with your choice, and I hope to see you as my colleague soon!