How to Get Your First Developer Job (Even if You Don’t have a CS Degree)
These days, more and more people are learning how to code either through teaching themselves, through programming bootcamps, or through online courses. Developers are in high demand, but finding a job as a programmer when you don’t have a Computer Science degree may prove rather challenging. Unlike those with a CS degree, you’ve got to up your game and go the extra mile if you want to get hired as an entry level developer.
Here are several tips to help you better prepare yourself to land that first developer job.
Everyone knows it’s important to build a portfolio, but how can you build a portfolio that will get you a job?
First of all, ask yourself these questions:
- What type of developer work are you most interested in doing?
- What sort of goals do you have for yourself as a programmer?
Focus on building things that will show your skills relative to what you’d like to do, and then put those key projects on your resume so employers would have a better idea of what you’re capable of. Build things that go beyond the simple CRUD (Create, Read, Update, Delete), task management mobile app, etc. If you’re still lost about what sort of projects you’re supposed to build, here are some pointers:
- Integrate your project with other libraries/tools
- Solve a more advanced problem with your code
- Build something other people can use as well
- Collaborate with other developers on a project to show you can work in a team
- Ambition is good but don’t over-design your projects or make them unnecessarily complex
Other than that, let’s go more in depth about several aspects of your portfolio.
If you aim to be a front-end web developer, then you pretty much must have a personal site to showcase your skills. This means setting up a server for the website, buying your own domain name, and all that. Even if you are planning to be an iOS or Android developer or a backend developer, it would not hurt to have a personal website.
Employers/recruiters usually won’t care about the site’s design (unless you’re going to be a design-focused front-end developer), so it doesn’t have to look professionally-designed. However, the website should be well-organized and should help employers/recruiters easily find and understand what sort of work you’ve done in the past.
In addition, it would help to add a bit of context to whatever projects you’ve built—meaning, label the date you completed it, the language it was written in, the technology you’ve used, and the link to the repository at GitHub or something if it’s there.
You may not be the best programmer out there, but you can still package yourself. Write about new things you’ve learned, since this is a great opportunity to show that you like to learn new things and may also give recruiters something to talk about. In general, writing down what you’ve learned is also a great way to grow as a developer.
In today’s day and age, you pretty much must have a GitHub account. If you don’t have a CS degree, you usually have to go the extra mile to prove you can do the job, and GitHub is a good place to show that.
Your prospective employer is unlikely going to read the details of your project’s source code, which means you’ll getting a few glances at best, and that brief glance will make you or break you.
This means that it's even more important for you to provide a means for recruiters to quickly get a good idea of whether you are a developer who can work well with others. Several things to consider for your personal GitHub project:
- Avoid using scaffolding/boilerplates for the project you intend to let recruiters take a look at (they want to see the code you wrote).
- Put context in the Readme file. Put some effort into describing what the project does in an understandable way.
- Don’t copy and paste solutions you found on places like StackOverflow - it will probably show. Instead, understand the solution and tweak it to suit your code, as your situation may be different.
- Name Variables and Functions Reasonably. Don’t name things with some incomprehensible codename like 03a or something so long it has more than 35 characters. Make sure the purpose or use of those variables and functions can be understood by outsiders.
- Always get into the habit of commenting your work so others (or even yourself, N years later...) can understand why you’re doing something.
- Write unit tests for your code - show that you care about quality.
- Have a consistent coding style.
- Have a clean code structure.
Basically, the point is to show that you can write readable and maintainable code that other people can easily understand or jump into. Read articles about coding best practices and study high-profile open source projects to get an idea of what constitutes readable, production-ready code.
Tip: If you are unsure of whether or not your code is readable, you can always hire an experienced developer to review your code and give you tips on best practices, etc. What’s more, if you end up working with the mentor on more than a few occasions to become a better programmer, you may be able to ask the mentor to vouch for your coding abilities.
Open Source Projects
While having contributed to a high-profile open source project will definitely net you points, you don’t necessarily have to do so because they’re probably going to be too big and complex for a beginner. The point of having contributed to open source is to show you know how to use git and that you can collaborate with other developers. However, if you’re determined to contribute to a specific high-profile open source project, then look through the open issues and work on something you think you can do--you will struggle and get frustrated, but the end result should be quite satisfying if you like the challenge.
Alternatively, you can try to contribute to a smaller but also quite popular library/extensions/tool you personally find handy and will feel motivated to help improve. Generally target projects with an active issue tracker and projects that are related to what you’d like to do as a professional developer.
In addition, if your personal GitHub project gets contributions from other people, great! This shows that not only can you solve an existing need, you are able to manage a project. What’s more, it also indicates you are able to communicate your ideas well enough for other developers to take part in your project.
However you can’t gauge whether your open-source project will take off, so you can also consider asking your friends to co-create one just to get the collaboration experience.
For more guidance on how to contribute to open source projects, check out this interview with Steve Klabnik, who is currently ranked #37 on the all-time Rails Contributor list and has 3400+ contributions on GitHub from June 2014~2015.
Your Online Presence
Naturally, you have to keep your LinkedIn profile updated, make sure you have a Twitter account and a Facebook account, etc.
Several other things you can possibly do is to submit tutorials to sites that publish them to increase your online presence, answer questions you think you can help with on StackOverflow, or, if you don’t feel confident enough yet, you can try to answer programming-related things on Quora instead. Make sure to link the accounts back to your personal website and make your GitHub link very visible (you never know when you're going to catch a recruiter's attention.)
Other than having a good portfolio of projects you’ve done before, it’s extremely important to have experience as well. Companies will be quite wary of hiring devs with no CS degree, but experience can convince them otherwise. Building projects you are interested in is good and all, but if you’re going to be working in a company, you’ll be shipping someone else’s product. This means you’ll run into problems you probably won’t have run into when building your own apps.
Thus, having the experience of shipping production-ready code and solving other people’s needs is really going to help you build your coding credentials, even if you don’t have a CS degree.
So, how does one get experience? Start off small and do projects for your family and friends at first. This article is a great read on how to get the most out of unpaid projects.
Once you have several projects to show, slowly start out by freelancing on places like Upwork. At this point you shouldn’t be fretting about the rate you charge and how little you’re making - think of it as learning, gaining work experience, and getting pocket money for doing so. Once you become better and more confident in what you do, you can adjust your rate to reflect that. Of course, if you’re thinking of freelancing by yourself and not through a help desk, then you should also read up on freelance contracts to legally protect yourself.
This goes without saying, but as you have little experience it’s best not to take on jobs you don’t feel qualified for or are uncertain about. You’re building your credentials, and merit is what gets you the job. As you gain experience, you’ll have a better idea of what you can or will have difficulty doing.
That said, if you’re feeling up for a challenge, another way to gain experience, contribute to open source projects, and get paid is to solve requests at BountySource.
The thought of socializing with strangers may be stressful to many, but if you don’t have a CS degree, it’s even more important to network and get to know people, as most HR would filter out people who don’t have a CS degree and don't have related work experience. However, if you get introduced to a job through reference, that will be another story.
Go to conferences, hackathons, and most importantly, find and attend meetups near you. Chances are, you’re going to be applying for a job in a city you live in, and several people attending meetups will be devs who have jobs and connections. Get to know people and let them know what kind of person you are. You’ll also learn from them what the local job scene is like, such as what tools and frameworks are in use and that you should familiarize yourself with. Sometimes recruiters will attend meetups to find talent as well.
Moreover, bring the right attitude with you when you attend meetups—go because you want to connect with the community and because you want to become a better programmer, not because you're desperate for a job.
So, now that you have done all of the above, you should package all that into your resume. All conventional resume rules apply, i.e. keep it to a single page, have consistent formatting, make it easy to read, NO grammatical errors, be specific about your experiences, tailor your resume and CV, etc.
Usually you’d want to put your projects and relevant experiences first instead of your education (unless you’re a fresh CS graduate or if you’re still a CS college student looking for internship). Mention only big/relevant projects and provide a bit of detail about what languages and tools you used, and why those projects can prove your skills and competency.
In addition, when you’re listing languages, be sure to differentiate the ones you’re strong at from the ones you’re still learning. Keep in mind that recruiters will be more interested in what you’ve done with those languages than they’d be in just a list of languages. On that note, don’t list any irrelevant skills (e.g. Excel), but instead list frameworks/tools that you have experience using.
If you manage to score an interview, congratulations! Here are some obvious things you must do to nail that interview:
- Practice talking about the things you’ve built and how that makes you a great candidate for the advertised job
- Show that you have a passion for programming and a thirst for learning new things
- Know your strengths and weaknesses. If you mainly know one programming language, then make sure you know that language inside out or at least as well as you can.
- Don’t be defensive about things you’ve done wrong. Instead, show that you’re willing to learn from those mistakes.
- Be confident in yourself, but don't be arrogant
- Be transparent (though not too honest)
…But how do you prepare for programming interviews indeed? Of course, you have to research the company, understand their website/product and have a few things to say about how you could improve things. In general you should have answers to all those standard interview questions, such as your motivation, goals, etc.
Depending on what company you’re applying to, you may end up getting whiteboard interviews. Technical interviews deserve an entire blog post by themselves and I won’t go into the details, but here are some great resources to help you prepare:
- Cracking the Coding Interview
- Berkley’s CS Course on Data Structures
- LeetCode Online Judge
- the Big O Cheat Sheet
- Here’s How to Prepare for Tech Interviews
Practice with an Experienced Developer
If you’re not confident about how well you can get your ideas across or how good your answers are, you should practice interviewing with an experienced programmer who can give you feedback. You can either ask friends you’ve made through meetups (or maybe IRC), or you can hire a mentor to conduct a mock interview with you.
Do’s and Don’ts: Tips from Expert Developers:
- Apply for a job for the only purpose of being trained on a technology. There are dozens of people that are looking for this opportunity, is better to learn on your own at least the basics, then expand your knowledge while doing the job.
- To promise to have a skill you don't have. It is better to ask for the opportunity to learn it, even with less or pay in the first month; most employers will not care and will pay the full salary.
- To say that one is proactive when the meaning of the word is not understood and has not even been applied to daily life.
Tip from Codementor Jorge, a software engineer with 25 years of experience (Ask Jorge to help you).
“I strongly believe that deep understanding of basic IT principles helps a lot. You have to know well how processor, memory and disk storage works, how IP packets are structured, how networks route traffic and so on. For a web developer I highly recommend to read specs of protocols (http, smtp and so on). But at the same time practice means much more than pure theory, so you should go and do practical things. I wish you good luck! (And do study regular expressions well, it helps.)”
Don’t be picky about your first job. If you don’t have a CS degree, the most important thing is to get professional experience, so don’t be picky about what sort of company you’re going to be applying to, and don’t give too much thought about the salary. It's also best to consider smaller companies.
The first job is always going to be the most difficult step, but once you get past that line, your career would become smoother. So, no matter what the job and what the starting salary, take it. Then, use the experience and credentials you’ll eventually gain to step up to a position with a better salary.
Most importantly, don’t give up!
Even if you messed up your technical interview and got rejected because of it, don’t feel too discouraged.
After all, even the creator of the popular Homebrew got rejected by Google for not knowing how to invert a binary tree, which could be, after googling a bit, allegedly solved in 5 minutes (where 90% of the time is spent on creating a test case).... So, if you failed that technical interview, it doesn't necessarily mean you're an incompetent programmer. However, you should always strive to become a better programmer.
Best of Luck!
Yi-Jirr Chen || Content Maketing & Operations
Your typical massive geek who games and loves science/tech. Also publishes fiction under a pen name that is a pen name for a reason