I doubled my previous salary and landed my dream job in one year as a self-taught student, here is what I learned from this experience
In 2018 I was depressed and unmotivated, I thought of myself as a failure and I thought I was too dumb to finish my degree or learn anything at all, I had no direction in life and just wanted everything to be over.
Two years later, one spent working abroad and another dedicated to studying, I have a completely different perspective about myself and I just started my new exciting developer job on Monday.
It took a lot of courage (and argumentations to convince my parents) to leave my university after three years of studies to accept a job in a Lisbon without knowing anyone nor the language but it was a wonderful experience that helped me find myself.
Again it took even more grit and determination to leave Lisbon and start studying again, but I did it because I knew my dream was to become a programmer.
I have no expertise in psychology and the best advice I have if you are in a dark place is to seek professional help, but I know what it feels to be lost and I want to help anyone that shares my same dream by writing this article offering actionable advice on how to achieve a career in software development.
Coding is wonderful
I have spent several years trying to understand what I wanted to do as an adult and failing miserably at it, I spent a semester studying in Medical school when I realized I didn’t care at all about being a doctor, I attended three years of Engineering courses but I disliked the subjects of my major and in the end I decided I didn’t want to continue with it.
I was very lucky to receive a job offer while I was still studying and I immediately decided to take a chance and go for it, I had never really worked full time at the time so I wanted to challenge my fears of not being able to succeed in a professional environment.
Fortunately, I ended up absolutely loving my job and all the people I got to know thanks to it, it was actually one of my colleagues that introduced me to coding and got me interested in it.
Since then I never looked back, I started dabbling with programming and I soon realized I wanted that to be my career, I incredibly enjoy the challenge and the intellectual stimulation that it can provide and I think everyone should try and see if they feel the same about it.
Everyone can code…
… is the slogan of an old Apple campaign, and while I completely agree that anyone can learn the basics of programming, I ask myself, can everyone achieve a career in software development?
Definitely not, although the profession is rising in popularity and there are more jobs continuously being created the field is still limited and many people don’t have the aptitude for spending long lonely (and sometimes frustrating) hours in front of a computer, in short not everyone should code.
Go elsewhere if you see this as a get rich quick opportunity, without genuinely enjoying writing software you will never get far enough to get a job, being committed for so long without seeing any tangible result and having no external obligation requires a lot of motivation and dedication that not everyone can replicate.
Coding is difficult
Mistrust the so-called experts or gurus that promise you an easy program for learning programming followed by easily finding a six figures salary, that is a complete lie and if someone presents you with this tale you should assume they don’t have your best interest at heart.
Learning how to code is a remarkably long and difficult process, it requires you to assimilate a completely different way of thinking and spend countless hours trying to understand difficult topics or debugging applications that aren’t working correctly.
Often people forget how difficult it was when they were just beginners, coding can become easy when you have put enough hours into it, but don’t make the mistake to assume that you are not cut for it just because it’s taking you a long time to understand recursion, every person has to learn at their own pace.
Is it possible to land a job without qualifications?
The answer is of course yes, if you browse the internet is not uncommon to run into stories of people changing their career even in their forties or dropping their education to pursue self-study and land the job they always hoped for, the latter is basically what happened to me, but is it the best way to pursue this career?
Let’s start by saying that if I still was nineteen I would no doubt attend university to study computer science, especially in my country Italy where education is cheap, the easiest way to get into the industry is definitely by getting a degree with a couple of internships under your belt.
The reason I decided to try the more difficult self learn route was that I already had professional experience and completed a good part of my engineering degree, those elements give me more credibility to the eyes of employees and a solid mathematical foundation to base my studies on.
I have no experience of bootcamps but my impression is that they often only provide shallow knowledge of one or two languages and some frameworks but leave giant gaping holes in your understanding of computer science and programming as a whole.
Not saying they are all like this, joining one might be a great choice for you but don’t assume that you will leave knowing everything you need to.
How to start from zero
There is an astounding number of resources to start with and choosing what path to take and which language to choose can be quite daunting, what if I make the wrong choice?
The secret is that there is no right or wrong choice, the real way to succeed is committing to something and bringing it to completion, don’t try a new course or tutorial every couple of days because you think you might like it more than what you are currently doing or someone promised you that it is the best out there.
That being said when asked what language to begin with I often say Python because I believe it’s the most beginner-friendly and is vast enough to allow you to explore many different specializations, from web development to machine learning, but if you are still unsure I suggest reading this great article to help you make up your mind.
The best sites to start are the ones that allow you to code while learning, reading about programming without actually doing it is as likely of making you a programmer as reading cookbooks without cooking is of making you a chef, here are some of my favorites:
— Khan Academy;
The beginning is not difficult, you learn numerous new concepts and get to play a bit with your language of choice, problems arise when you want to do something that you haven’t done before without assistance, being proficient and independent requires far more than just knowing the basic logic and syntax of a programming language.
To progress to more complex and interesting topics there are several fantastic options, do you know that you can attend thousands of university courses from the best institutions in the world completely free of charge?
There are websites like Class Central that you can use to find the course that interests you the most or you can directly explore other platforms like:
— MIT Open Courseware;
— Plural Sight;
— JetBrains Academy;
— The Odin Project;
But starting a course and watching it passively is no guarantee that you will learn much, the best way to avoid “tutorial hell” and actually become competent is putting everything you learn to good use with projects based on the material you are currently studying.
Harvard’s Introduction to Computer Science
It is not uncommon to feel lost having to choose amongst all this different content, it cannot be otherwise, there are many branches of development and every person will choose which one to pursue based on its interest, but isn’t there some essential material that every self-learner should go through anyway?
Whenever someone past the absolute beginner phase asks me, “Where do I go now?”, my answer always is cs50 from Harvard University.
There are numerous articles celebrating and reviewing in detail the program so I won’t go into details here, but there are several reasons why I have the highest praises for this course, here’s four:
- Awesome teachers, David, Bryan, Doug, and all the other members of the staff are some of the most capable and patient teachers I had ever had the opportunity to learn from, and a great amount of extra material besides the lessons.
- Huge communities of fellow students in most social media platforms, Reddit, Facebook, Discord, and so on, that were always available to help me whenever I was stuck on an assignment or just confused by any of the topics.
- It teaches the fundamentals of programming that often get ignored by independent students, you will likely not need to implement binary search or work with pointers when you finally get a job, but being able to understand the basics fully allows you to comprehend every topic much more deeply.
- You don’t need to stop at this introductory program, there are different specialized courses associated with cs50 that will allow you to explore Web, Mobile, Game development, and Artificial Intelligence so that you can keep building over what you learned.
To complete the course and obtain the certificate you will have to finish eight graded problem sets and at the end create a personal project of your choice that shows what you learned during your studies.
What project should you choose?
We are back talking about projects, and for good reasons, besides being vital to learning the subjects you are studying they are your best way to introduce yourself to potential employees, especially if you have no formal experience or education to speak of.
About what to exactly do, well the sky is the limit. The thing I love the most about programming is how it allows you to do whatever your imagination pushes you to do as long as you are capable enough (and your google skills are up to the task), this Github repository contains some very interesting ideas to get started with.
Speaking of Github, if you already didn’t you should definitely open an account and use it to showcase your favorite creations using a well-formatted Readme file, mine are my custom programming language, and this AI model to predict life expectancy.
Choosing your specialization
There are plenty of different options for aspiring programmers and that makes it difficult to choose, are you interest in Web Development? You always aspired to program games? Or would you like to explore rising trends like Cloud Development or Artificial Intelligence?
It is a common opinion that Front-end Development has the lowest barrier to entry and beginners are often encouraged to learn it to be able to land a job as fast as possible, although this is sound advice I kinda dislike HTML and especially CSS, knowing I wouldn’t be passionate in it I put my effort in studying backend and I was able to land a job for it despite being more challenging on paper.
My take away is that following your passion is more important than choosing the easy route.
But before actually setting your mind on a specific goal I encourage you to try as much as possible, I was sure Artificial Intelligence would be my passion when I realized that training models is actually quite boring and sometimes frustrating and that I would much rather work with the data infrastructure or write algorithms.
Am I ready for a job?
Great advice I received regarding this question is that you will never feel ready for your first job because you probably aren’t.
Most companies, at least the good ones, hire juniors knowing well that they will lose them money for months before they are competent enough to bring profit, they are investing in you and committing to your improvement!
So don’t wait until you feel you reached perfection, but rather ask a friend who is in the field or even people you don’t know on social media but are willing to help if your portfolio and knowledge are at the level necessary to pass a technical interview.
“Perfection is the enemy of progress”
Let’s be honest, with this job market is going to be weeks or months before you receive an answer anyway, you might as well start searching and applying early, but not so much that you risk burning bridges by being completely unprepared when an opportunity eventually arrives.
Brush up your curriculum
There is plenty of advice on how to structure and fill your cv, but there are some that helped me in particular:
- Leverage your previous experience, whether you are changing career or you worked in the service sector put it in your resume and mention it during your interviews, even if not technical previous occupations prove other important skills like being able to handle clients or interact with colleagues.
- Focus on the role you want to obtain, if you want to be a backend developer in Java make sure to have all the relevant skills, frameworks, and certificates as visible as possible, you can mention everything else but make sure they don’t distract from the picture you want to send.
- One page! Hr offices are receiving hundreds of CVs daily, if yours contains four or five pages then it’s very likely to be simply ignored, make your message direct and clear to have the best chance to be noticed.
- Unless you are applying for a design position don’t go overboard with the graphics and use a simple template, there is plenty of free ones, just choose something pretty and clear like the one below or plain like this template from Novoresume.
How to find your dream job
Finding a position that you’d be interested in is not difficult, hundreds of jobs are being posted every day and the big tech companies are always recruiting, for your applications you can use sites like Monster, Linkedin, Indeed, or the company site itself if you have a particular one in mind.
The problem is making a better impression than all the other candidates, you will have to compete with hundreds of people from all around the world, some of them with more experience or better education, to actually reach the interview phase where you will be able to show your passion and preparation.
The solution is networking, use your social media like Reddit, Twitter, and Linkedin actively, participate in job fairs and conventions (physical or virtual), try meeting people that work in the sector you aspire to be in and ask them for advice, even a cold message on Linkedin can do wonders if you keep the interaction polite.
I actually found my current company because the founder saw my profile on AngelList, a website for finding employment in startups, and liked it enough to message and ask me to send my resume, the fact that we had a personal interaction really helped me in passing the first selection stage.
So build your presence online and try to make as many connections as possible, remember it only takes one person giving you an opportunity to finally break into the industry!
Preparing for the interview
Technical interviews are notoriously difficult, there is an entire market of books, courses, and websites with problems dedicated to preparing for them, often knowing the ins and outs of a programming language and a couple of frameworks won’t be enough to be successful.
Algorithms, Data Structures, and Leetcode style questions have become standard for many companies, especially if you dream of being a Facebook or Google engineer you will have to make sure your knowledge of these topics is excellent, to get started I suggest taking a solid algorithms course and then practicing Leetcode daily.
Don’t forget that your interviewers are people! Being able to communicate how you reason is more important than arriving immediately at the right solution, also be likable and confident in behavioral interviews and do your research, companies want people that are committed to working with them.
How to deal with rejections
Let’s face it, every one of us is bound to fail in one way or another, just barely, like when in the last interview before getting the job the hr lady I was interacting with decided I didn’t seem motivated enough, or completely, for example when I utterly bombed my technical interview for a C# position for not being prepared enough.
I still think about those events but it’s fine because they really helped me understanding important lessons, that how you present yourself and your people skills are as important as your technical ones (!), and motivated me to get serious with my preparation.
The same is gonna happen to you, don’t let those important lessons get wasted and keep working hard, one day you will find the right opportunity and all the effort will prove worthwhile.
Sometimes you need to get lucky
“Whenever I get a stack of resumes, I throw half of them in the trash.
I sure don’t want unlucky people on my team.”
Although this is just a joke I found on Reddit, it’s true that oftentimes all the advice and preparation in the world is not enough to get you where you want to be, and a bit of luck will be needed to reach the goal.
When your application gets ignored or you fail an interview remember that it’s often not your fault, being deemed not ready for an opportunity doesn’t mean you aren’t good enough but that you have to keep looking for the right place and the right people that will be able to see your potential.
This dream is not an easy one, you will probably spend months and even years before you are ready, there will be moments of doubt and seemingly insurmountable challenges, but in the end, you will be happy looking back.
So start coding today, and good luck in your journey!
Thanks for reading so far, leave a clap if you liked the post, and feel free to connect with me on Linkedin.
Software Engineer in Italy, I love traveling and cooking.