Learning to code is exciting. The closest thing that has ever come close to being the same for me was when I learned to speak Thai. When I started being able to hold conversations with native Thai speakers, even if they were just basic conversations, I felt so amazing. I felt that same exhilaration as I was learning to “communicate” with my computer by learning to code.
On the other hand, looking for work as a new developer is one of the most depressing and un-fun things to do. Every application you send to a prospective employer is an emotional experience that, more often then not, leaves you being rejected. Job hunting can really suck!
What makes matters worse, as a new developer, you are stuck in the proverbial “chicken or egg” paradox. You need developer experience to get a job, but if you can’t get a job, how do you get experience. It’s like a recursive function that never resolves and you end up blowing the stack, i.e. your mind.
Why Does Experience Matter So Much?
When I was a sophomore in high school, I was in trigonometry. I never hated doing math, but I hated my math classes. Why? Out of all my classes, math always gave the longest, most monotonous, and most boring homework of them all. After being assigned yet another very long assignment, someone asked our trigonometry teacher why all math teachers assigned such long assignments. Her perspective was interesting.
She informed us that most of that time spent becoming a commercial pilot isn’t spent learning how to fly, it’s spent simply logging flight time. Yes, the ability to fly well is ultimately the most important skill a pilot is judged on when getting hired or promoted, but pilots won’t even be considered until they have logged at least the minimum flight time. It has been shown that, with all other things being equal, pilots with more flight time will make better decisions quicker.
She then went on to explain that with any skill, including solving math problems, the most important step to building it is putting in the time. She explained to us that she can teach us the KNOWLEDGE pretty quickly, but until we had put in the time, it would not be a SKILL.
Programming is much the same way. One can probably learn all of the most important parts of a programming language in a dedicated weekend. Having knowledge of the programming language, however, is not the same as having skill in that programming language. Skill is created by putting in the equivalent of ‘flight hours’ in that language.
How Do I Get Experience If I Don’t Have a Job?
As I was transitioning from my career in finance to a career as a developer, I had this very question. I understood the importance of needing to get the experience and showing my potential future employer that I have that experience, but I didn’t know how to get there. So, of course, I did what anyone would do when they don’t know the answer to something, I Googled it.
Unfortunately, there is just as much bad advice as there is good advice out there in the interwebs. Being able to filter through that mess is next to impossible. Now that I have fully made the transition, I feel like it would be helpful to share what advice helped and what advice did not.
The Less Helpful Advice
A piece of common advice I got over and over again was, go freelance for a while. If you have an entrepreneur mindset and enjoy that kind of work already, then yes that can be good advice. If you are like me, however, and running your own small business is not an appealing thing, then freelancing is not the way to go. Some would argue that freelancing helps you learn other skills that are helpful. My counter to that is that it is helpful to focus on one set of skills at a time.
Another piece of advice I got often was to go find a problem and solve it. Another related to that is to go build your ‘Passion Project.’ Sounds like great advice, right? Looking back on my path to software development, I now have two issues with this advice.
My first issue with that advice is that not everyone has either one of those things. You end up wasting a lot of time trying to find one or both of these things instead of just building stuff. The most important thing is building your equivalent of ‘flight time’. Pilots who are trying to get flight time are not searching for locations to fly to as much as they are trying to log hours in various situations. Similarly, you should worry less about what you are building and more about getting experience in as many different scenarios as you can.
My other issue with the above advice is that it doesn’t mimic what developers do in real life. Most people don’t create products like Facebook or flappy bird. Most developers work on other people’s projects. Even if you are working as a freelance developer, you are not the one who decides what to build. Typically you are building something for someone else and though you may be able to give influence what it built, someone else prioritizes what is built.
If you have a ‘Passion Project’ or you find something that really motivates you to build something, then, by all means, start building it. The issue I have with this advice is more along the lines that most people don’t have a project of their own that they are passionate about and working on those things don’t necessarily prepare you for real-world scenarios anyway. Even if you do have something that you are passionate about building, I would still recommend that it not be the only thing that you work on either way.
The More Helpful Advice
Before I go into the rest of the advice, I think it is important to go over two priorities I believe you should have. First, you want to get experience and second, you want to prove to your future employer that you have experience. No matter what you do, it should follow these principals. Here are the things I recommend you do:
First, you need to build a personal portfolio website from scratch, deploy it, and push the source code to Github. Yes, you will probably be duplicating a lot of what you are already maintaining at LinkedIn or StackOverflow, but the point is to prove that you can build a website and deploy it. The source code is proof that you know what you are doing.
Next, start building things from user-requirements documents, not from tutorials. Tutorials show you the steps on how to build something and are good at helping you build knowledge. Tutorials, however, don’t do well at helping you build skill. User-requirements document, on the other hand, don’t tell you how to do it. They are only concerned with the fact that you got there. This means you have to figure out ‘the how’ on your own, and that is where the real skill is developed.
As you build new projects and deploy them, you need to push those projects to Github and you need to link to them from your portfolio website. If it is small enough, you can even deploy your project with your portfolio page. No matter what, your portfolio needs to have a link to it and the source code needs to be on Github.
My favorite collection of user-requirement documents are found at freecodecamp.org. They have a curriculum to learn the technologies, but the most important thing is to do the projects. The projects give you user requirements and then you just build them. Free code camp, in some of the projects, recommends that you use Codepen. I would recommend that you don’t do that. Codepen does not simulate real-world coding environments and you will get a more accurate experience by developing it from your computer, pushing the code to GitHub, and deploying it yourself.
The last bit of advice that I would recommend is to code daily. It’s cliche, but doing a little frequently is more helpful than doing a lot infrequently. Some days you will have more free time to do more, but it is very important to write code and push it up to Github daily. If you don’t like Github, then use Gitlabs or bitbucket or something else. It doesn’t matter where you host it, what matters is that you can show that every day you write code. This, not only helps you get more real-world experience by writing code every day, but you also prove to your potential new employer that you have put in the time. It’s the equivalent of your ‘flight log’ that proves you have put in the ‘flight time’ that the position requires.
It’s not easy to build experience outside of a job, but it can be done. As long as you remember the goal is to simulate as many real-world types of experiences as you can and then record those experiences in such a way that it proves to your future employer that despite your lake of professional experience, you have met the minimum ‘flight hours’ and are ready to hit the ground running. It can be done. I am living proof that it can be done and I know you can do it too.