This post was first published on CoderHood as 5 Best Strategies To Get Your First Programming Job. CoderHood is a blog dedicated to the human dimension of software engineering.
A First Programming Job Requires Experience, But... How?
A question that aspiring young developers ask me all the time is: How do I get the first programming job that I need to build the experience required by most programming jobs?
It appears like a chicken and egg problem. You need work experience to get your first job, but you can't get that experience without the first job. It might seem like an impossible riddle. In reality, it is far from impossible. Â Here are five strategies that will not fail you.
Strategy #1 -- Acquire Experience Well Before You Finish School
I worked a lot while I was still in school, and it made my life much easier later. Before finishing my studies, I accumulated a substantial number of professional programming experiences that made me into a senior developer even before I was interested in a full-time job.
A professional programming experience is a paid engagement that allows you to understand how to interact with employers and builds your resume. There are several ways to acquire work experience while you are studying.
Here are a few ideas:
Be an Intern.
Internships are an excellent way to immerse yourself in a software development organization. As an intern you become integrated with a team of experienced engineers, working with them daily and building precious experience for a future first programming job.
Internships can be paid or unpaid. The most important thing of an internship is to choose a company that is going to allow you to work on meaningful projects, that is stuff that is going to be ship to customers.
Many internships lead to full-time employment with the same company. It is an excellent way to get your foot in the door.
Freelance.
Freelancing is a fantastic way to work on real projects and build a resume. There are countless ways to find freelancing opportunities. In the beginning, you can start by looking on sites such as freelancer.com, upworks.com or rent-acoder.com and build your name from there.
It is a competitive world, but if you are good, you'll start getting direct referrals from your customers. Your workload will grow to the point of keeping you busy during your free time.
I landed my first real freelance job when I was 14. I was asked to build a C library to manage text menus under MS-DOS. The customer was a software company that developed database products. They wanted to print any text on the screen, and my library, when invoked, needed to scan the memory of the video-card, find the words in a given area of the screen, and highlight one of them as if it was a menu option. The text highlight needed to move from word to word on the screen using the arrow keys. When the user pressed ENTER, the word highlighted had to be returned. The library was used to build the company's flagship product.
The second project was to create a source control management system with a peculiar feature. The customer wanted to manage their source code with it but also wanted it to sign the compiled artifacts. Given any executable generated by compiling any of the managed projects, they wanted to be able to find out which version of each source file was compiled into the artifact. A strange project that I had fun developing.
I built dozen more projects as a freelancer while I was still in school. That gave me a solid experience well before I needed to look for my first programming job. By the time I applied to jobs, I had a strong resume.
Collaborate on Open Source Projects.
There are countless open source projects on GitHub. If you are in school, it makes a lot of sense to collaborate on some of them. Choose a visible one, something that most people would know. A few good places to start:
- Apache Projects
- Rails
- Facebook projects
- Google Projects
- NetFlix Projects
- Apple Projects
- Microsoft Projects
Become familiar with a project that seems interesting to you, and start making contributions. Fix some bugs, make some things faster, add features, etc. Start small, become familiar with the process, and become a rock star. Contributions to public projects will make your resume stronger, and your skills sharper.
Commit Personal Projects on GitHub.
You don't have to just work on existing projects. You can also create your own and push them to GitHub. Your GitHub repo can become a showcase for your skills and style. Employers will look at it and get a good sense for what you can do.
When you push projects on GitHub, make sure to document them properly. Include a strong README.md crafted for someone who is looking at your repository for the first time. You should always assume that people landing there know nothing about you, your project, your goals and what problems you are trying to solve.
Write a Technical Blog.
As you are learning to be a developer, you can record your journey in a journal. Your journal can be kept as a public blog. Blogging is an excellent way to put your name out there and build your personal brand. Regardless of what else you are doing, you should blog! Not as an expert yet, but as a learner. Some advice on blogging:
- Start on a free platform. If you are not working yet, you don't have money to spend on hosting. There are plenty of free options, including the use of GitHub as a blog.
- Stay on a theme. Avoid blogging about your cat. Remember that your goal is to build a personal brand as a developer.
- Keep any complaining private. Blogs that are collections of complaints will showcase poor character and lack of common sense, which is exactly the opposite of what you want. Keep it positive, energetic and enthusiastic. Nobody intends to hire a complainer.
- Don't pick fights with trolls. Many people in tech are often snarky and opinionated. You don't have to answer to them. Public fights online will stay around forever, and they do not showcase your brand. Trolls will bring you down, and beat you with experience.
- Publish regularly, and don't worry about generating traffic. Your goal is to learn, build a personal brand, impress employers and record your learning experiences. You are not trying to make a living with your blog. Not yet.
- Stay humble. Discussing what you learned is ok, but preaching is not suitable for a beginner (or anyone else). Share, don't teach. Give, don't expect. Have an opinion, not a set of rules.
- Develop a "professional voice," the same one that you'll use when you'll be interviewing for your first programming job.
Start your business.
You can start your business while you are still in school. I did it in the 90's, and at that time it was much harder. Remember that products like Facebook and Google started that way, and they grew to be tech giants. Everything is possible with the right ideas and attitude. Experience helps, but is not necessary.
Build a product, put it out there, and see if you can make a business of it. It might not go anywhere, but it will build your skills and resume. Those skills will include not only technical proficiency but also business sense, which will push you ahead of the competition when you go search for your first programming job.
Entrepreneurship is completely in your hands and gives you a substantial experience that employers like to see. The internet has created a platform to grow a good idea into a business, and taking advantage of it is as difficult as coming out with a good idea. Difficult, but not impossible, and you can do it sitting at your desk.
Strategy #2 -- Use What You Have To Your Advantage
If you are a young developer in search for that first programming job, you have characteristics that you can use to your advantage. Here are some that might describe you (don't worry if they are not all true):
- You are young.
- You are passionate about coding and technology.
- You are energetic.
- You are eager and willing to learn.
- You don't have dogmas.
- You are a quick learner.
- You are a good mentee.
- You have fresh new ideas.
- You don't carry a lot of baggage.
- You are ready to give your best.
- You can move wherever the right opportunity shows up.
- You have a lot of time.
Bring your passion for technology to the table. Your flexibility and thirst for learning and growing is an advantage you have and should use.
You can't bring experience with you, but you can bring new ideas. Companies seek young tech talent to eliminate old crusty ideas that seem to be unshakable. In a technology world that reinvents itself all the time, dogmas are dangerous and stifling. They grow like a cancer and make engineering organizations slow. Stay humble, but question everything.
Seek jobs at your level in companies that have good mentors. If you find a boss who is a great technologist willing to help you grow, it will be well worth the time and effort, even if the initial compensation is not high. Mentors are excited to teach to eager students. Be the student that a guide would want to have.
Stay in any job for at least two years, unless you are absolutely miserable. Jumping from job to job is not a good thing. You do not want to end up with more jobs on your resume than years of experience.
Strategy #3 -- Know What to Expect
Interviews in tech can be hard. When you are going through the process for your first programming job you might feel overwhelmed, but don't fret! Just make sure you understand how the interview process in tech works, and things will get easier. Expect and accept one or more of the following:
- Phone screening. Have those calls from a quiet place. Have a computer with an internet connection, paper, and a pen in front of you.
- In-person screening. Usually, this is a real one hour interview, not just a "chat." If you can choose between a phone screening and an in-person screening, choose the latter.
- Programming challenge. Programming exercises are an excellent way to demonstrate what you can do. A programming problem is sometimes given to you after a successful screening. You do it at home, and submit it as directed. Take this exercise very seriously, and showcase what you can do.
- Whiteboard coding. As a software developer, you should expect interviews to include coding on a whiteboard. You'll have to do this in 99% of the interviews you'll ever take. Don't worry; few people are good at it. To prepare, buy yourself a large whiteboard and practice every day. When you practice, explain your thinking process out loud to the imaginary interviewer. It is important that you showcase how you think. Talk through it.  Avoid just writing the code in silence.
- Soft questions. Expect non-technical questions like:
- What do you think of our product?
- Why are you interviewing with us?
- How would you improve our product?
- What are your career goals?
- Where do you see yourself three years from now?
- Why should we hire you?
- Describe a project where you were not successful.
These questions are designed to find out who you are, if you care about the job you are applying for, and if you would make a good fit for the team. Prepare solid answers ahead of time, write them down and refine them over time. Having your story straight is very important.
Strategy #4 -- Know How To Present Yourself
Design how you want to present yourself, and stick with it. Establish simple rules for your professional self. I am not suggesting that you fake who you are, but I am suggesting that you define it and stay consistent. For example, I recommend being humble, confident, ready to learn, thirsty for knowledge and ready to grow.
When you go for an interview, do your homework. Make sure you know everything you can about the company and the product. Present yourself as very passionate about what the company does. Make it clear that you are interviewing for your first programming job, and show how excited you are.
Try to figure out what you want to do long-term and what your goals are. You can change those anytime. That's ok, but having plans and being able to share them is important. Employers will be impressed by someone with a clear set of goals.
Strategy #5 -- Decide That You Can Do This
Most of all, have fun with it. Getting a job should not be torture, and it can be a learning experience. Some things to keep in mind that will help you:
- Remember that, by definition, you need to find ONE first programming job, not many.
- You are interviewing the company as much as the company is interviewing you.
- The world is full of possibilities. If you are willing to move anywhere, there are thousands of options for you to choose.
- Developers are in high demand. Do not let the fact that you don't have previous job experiences make you think that you are not qualified. You are openly applying for a junior role, and you'll find one.
- Never, ever lie. It will not help you.
- Listen carefully. Even if you are smarter than the people who are interviewing you, listen to what they have to say and pay attention.
- Don't believe that you have to meet every requirement in a job description. Be ready to explain why the company should hire you even if you don't meet some of the requirements. Stay humble, but display confidence.
- Never, ever burn bridges. The tech community is large, but not that large. Bruning bridges do not help you in the long-term.
- You can do this.
If you enjoyed this article, keep in touch!
- Find all my posts on CoderHood.
- Join my professional network on LinkedIn.
- Follow me on Twitter.
- Join my Facebook page.
- And finally, follow me here on dev.to!
Top comments (8)
1 Really helped me back in the days.
I did a degree in CS and worked as a dev on the side for 10-20h a week, in a software company.
My grades were average, but I had 4 years of experience when I graduated.
Also, I learned many things from that job that I didn't learn at university.
It might be weird, but I am actually a bit stressed about my second job. The job I have right now is great, but It was just ridiculously easy to get. A phone call with a human resource person, who didn't know much about programming. We talked about the company, their products, the team and he asked me what I worked on as a self-taught dev. Then, the lead developer sent me a programming challenge ( like you explain in this article ). I completed it, received some feedback, and started to work 2-3 days later...
That was my first interview, and so far, the only one. Whenever I think about it, I just can't believe that it will be so easy in the future. Or maybe my expectations were way off?
I guess the company I'm working for right now isn't very strict on who they hire. I guess some companies are like that, with the need of so many developers. It might not be that easy and stress free next time :)
Anyway, good post!
You never know! It can be easy and stress-free, or it can be a nightmare. I strive to make my candidates have a great experience, but it is definitely more than a phone call and a programming challenge.
Companies are starting to learn that abusing candidates is a bad strategy, but big companies are particularly bad with that. In small companies, it depends on who you find. Just don't stress out about it!! It is not in your control, and you kind of have to roll with the punches. I wrote something about why I do that here.
My policy is that if a company treats me poorly during the interview process, I have no reason to believe they will treat me better later. So, if your interview experience sucks, you should consider looking elsewhere.
At what point would you consider a developer to not be a junior anymore? Have you seen candidates applying for a junior position and thought: this person should be applying for a more advanced position?
That is an excellent question. Unfortunately, I don't think that there is a simple formula. I have seen developers with 2 years of work experience on their resume who are stronger than people with 5 years of experience.
It mostly depends on what people did with their time, how much they coded during their schooling, etc. For example, a developer who built desktop applications on windows machines for 5 years is a very junior dev when it comes to distributed systems. They'd be able to pick that up, but it would take a couple of years before being proficient.
If I had to oversimplify I'd go with this definition:
10,000 hours is about 4.7 years of full-time employment if one started coding for the first time on their first day of work. Clearly, that's never the case. People start learning much earlier than their first day on the job. So, you can imagine that studying computer science in college and working on personal projects could give you a few thousand hours of experience even before start working.
Now... I have seen what I call "senior-junior" developers who have worked for 10 years on one single dialog box in a Microsoft application. Those folks have many years of experience but tend to be very unprepared because they have been relegated to that little niche for so long.
I have also seen "junior-senior" developers, who have very little work experience but are wizards at their craft.
Difficult question! I'll need to think more about this one, but I hope my rumbling help shed some lights on my personal way of looking at it.
Thanks for this post. I've just started looking for work as a junior web developer and it's a little disconcerting starting from the very bottom after about 20 years working in other fields.
Still, I'm really excited about web development, and I see this as my path in the near future. Your suggestions are really helpful and I look forward to putting them to use.
Hi
Can these apply to my situation too? I have a 6 year gap (been focusing on improving my disability - i wrote about it here Is it possible to get a web development job if I have a 6 year gap?).
Though I'm almost 30 and might not be considered young, I have all the other qualities you listed, eager and willing to learn, free to spend all the time in the world in proving.
The only disadvantage is that my speech is really bad, on the phone at least. How how could I by pass the phone interviews?
And can people out of school - like me - work as an intern?
Thanks a lot
Thank you! :)