How to become a software developer and get your first job
1. Rules of the game
Finding a developer’s job used to be complicated. With the ever-growing demand for IT specialists, companies struggle to hire ideal candidates quickly enough. They must pick from juniors or non-technical people willing to learn. Therefore, the ability to train new joiners has become a competitive advantage nowadays.
If you have never been in a programming interview, I will show you what it looks like and what type of questions you may see. I will also recommend a 1-week plan how to become a Software Developer.
1.1. What is not important
It is unimportant if you are a mobile, front-end, back-end developer. Suppose you are a data scientist or data engineer. They all do the same work: Modelling and solving problems.
Throughout this guide, I will show concrete examples (sometimes opinionated). Permit yourself to replace my frameworks and programming languages and use whatever you find better and more fun.
1.2. What is important
Practice. But before we do that, we need to find out what we like. These are challenging tasks as, over time, we have less free time for experimentation. I recommend thinking in the short term. Even if we choose X, we can always switch to Y. Software development is a Learning journey. And recently, being a polyglot developer has been a requirement in many job descriptions.
Enough of introduction. Let’s move to the meat.
2. Plan your week
2.1. Monday
2.1.1. Level 1 - Choose some programming language.
Don’t spend a lot of time researching languages. Think about it. We’re going to have lots of data in future. Choose a programming language which lets you process this quickly. I’ve chosen Scala. If you want to go with the crowd, choose some most popular ones: Tiobe ranking 2022
Homework 1: Choose the language you want to write first programs and get your first job. It is just a starting point, a language that is a gateway to teach you general programming concepts.
2.1.2. Level 2 - Sell yourself.
As quick as possible, learn git. It is a fantastic tool which lets you share your code with other developers. It is used daily, and If you already know, it’s a bonus point in every interview.
After your know how it works, open an account on GitLab (if you want to be cool) or GitHub (if you want to follow the crowd). All your code can be private, so don’t worry. You only show other people what you want. Next, your most significant project, or the most fun one, should be public there and referenced in your CV.
Furthermore, you need to keep track of all your technology, challenges, successes and failures on your LinkedIn. Put everything you’re proud of there. Don’t worry if you don’t have anything yet. Start from a blank page, and you’ll soon have much to add. Feel free to copy the template from my profile - and you can add me as a friend to expand your network.
You can optionally create a Twitter and share anything interesting you find technology related. Start using some RSS reader like Feedly - read some technology posts in the morning. Follow some blogs which may be beneficial to you. Install Read it later application (e.g. Instapaper).
Homework 2:
- Find some tutorial (written, not video) for your programming language. Read until it explains how to write first program, do it on the second screen as you read.
- Create LinkedIn account
- Create GitLab/GitHub account
- Subscribe to interesting RSS, and read topics about technology and your programming language of choice.
2.1.3. Level 3 - Learn how to work in teams.
You are not developing your programs alone, at least not anymore. A typical team consists of more or less the following people:
- a leader,
- business people (shared across different teams),
- developers,
- QAs (testers).
You will talk with all of them, and they will be using different lingo. That’s why you need a notebook (it can be digital). Note down anything they tell you, especially at the beginning. You’ll check this out, or it will make sense later.
Improve your communication skills. Expressing your thoughts using short text messages, pictures, and diagrams is essential.
When you finish your first step in programming, you could learn by teaching others.
Moreover, teaching someone will also improve your empathy. You will quickly learn that people don’t ask you to solve their problems but to rant or find a shoulder to cry on.
Lastly, try to listen. Remember, you already know what you want to say but don’t know the other side. Especially at the beginning, programmers will try to give you a lot of backgrounds instead of just quickly solving your current problem.
2.2. Tuesday
2.2.1. Level 4 - Know your enemy: recruiters and interviewers.
Yesterday, you built a channel for finding a new job (via LinkedIn) and a place to go for your interviewers to see what you can do (GitLab). There are two conflicting powers, yin and yang, or recruiters/hr and interviewers. The former will want to see a lot in your CV. The latter tends to understand that you may initially have an almost empty CV, so what you read, watch, create as your pet projects is essential.
Homework 3:
- Check your LinkedIn inbox.
- Find companies looking, what languages are on the market, and what tech stack. Maybe build your TODO list of what you should learn next.
2.2.2. Level 5 - Doing first.
By now, you should’ve selected a programming language. Let’s say it is Scala. Let’s pretend you’re an interviewer. Open a digital note and try to fill this page with some questions you will ask an interviewee. Remember you’ll have one hour to talk, so put some easy and challenging questions there. On the practical side, think about some simple problems and try to implement this by yourself:
Your GitLab may be a bit empty right now. Let’s add something interesting there. Implement a calculator for large numbers without using helpers (internal libraries). Treat everything as an array of letters. Dividing will be fun ;)
It may be a bit tricky at first, that’s fine. Go back to your programming tutorials and read the chapters relevant to your problem. Maybe it’s arrays. Maybe it is standard input and output.
This step is significant for people who had a long break from programming. It will be enlightenment for you to understand what you have to re-read. It will be a bit painful but, in the end, you’ll be proud of your work.
Homework 4:
- Start collecting interview questions, any questions you think are good candidates on interview.
- Implement a calculator which does four basic math operations manually (without any helper libraries) and uses just basic data structures (like an array). Operations: *, +, -, / (div).
2.2.3. Level 6 - Go deeper into algorithms and distributed systems.
We want to learn theory and practice at the same time to test our thinking.
Homework 5:
- Read basics about Cloud, why it is so important
- Read about algorithms and data structures. What is a dictionary, and how to implement this in your language?
- How does dictionaries perform in your language, and how is it kept in memory?
- Does it work with 1MB of data? What about 1TB of data? What if it doesn’t fit one computer? Sure, we will put it in a few computers, but how does it work in practice? How can we use it? Hint: Read about Map-Reduce.
- Implement a simple map-reduce algorithm. Pretend you are limited to 100 elements per array. Try to implement everything you read about while you were reading about map-reduce. Make it a public repo, it will be good to show to your interviewers, as it is not a trivial problem.
2.3. Wednesday
2.3.1. Level 7 - Productivity, organize your notes.
If you follow everything above, you must be exhausted. Remember, it does not need to be perfect. It does not need to be your last iteration. Collect all your materials and bookmarks in a safe place. You’ll be coming back to it very often.
2.3.2. Level 8 - Time to talk to some recruiters.
Homework 6:
Check your LinkedIn Inbox. Now, your goal is to pass so-called Stage 0 with recruiters. How? You need to talk to them and figure out the questions. It is not important what you’re going to answer. It is essential to
- have a call scheduled
- picked up the phone
- note down in a new digital note every single question. It will be your Recruiters Question Bank.
If you have no messages in your inbox, find any job which looks for entry level and apply to it. It may be painful process, especially if you choose large corporations. They sometimes guard themselves with an awful Software to apply for a job.
Try another approach, find a company you want to work for. And then find a technical person (an architect, C level), then send a private message to that person via GitLab / LinkedIn / Twitter or whatever you find. Tell them you are just starting, show them your programs in your repo (make sure it is public), and ask if it’s good enough or, if not, what else you should be learning to get to this role.
2.3.3. Level 9 - Fundamentals.
Read more about your language, and focus on the first chapters. Read them a few times, and each time practice. Don’t read without trying by yourself. It does not count if you watch a youtube video, it only count if you write a code by yourself.
In programming, many things seem simple, but you only know them when you try to code them. For instance, a binary search algorithm seems simple abut while you try to code it there are few traps with infinite loop or overflow error.
Homework 7: Add another public repo to your GitLab. E.g. implement binary search in your language.
2.4. Thursday
2.4.1. Level 10 - How to talk to Recruiters?
As you are starting, you should focus your conversation on one thing: Learning. Tell recruiters why you want to learn X and what you are doing to become a programmer (Coursera, Udemy, blogs, etc.). Tell them you like technology and challenges - becoming a programmer is a big challenge!
You can also mention some buzz words you read (that’s why subscribing to the feeds and reading them in the morning is essential), it will give you some lingo to talk about, remember, you don’t have any experience so the technology and your pet projects are the only things you can demonstrate.
Send them a CV if they ask you, show everything from Sell yourself, and you should pass Stage 0 and progress to Stage 1 - an interview with an actual interviewer or an assignment to filter out candidates.
2.4.2. Level 11 - How to talk to interviewers?
Don’t be arrogant. You don’t have 40-year of experience in Linux kernel to know everything; even then, you shouldn’t be arrogant. In the entry-level roles, they will be looking for someone they can guide in the first few months and expect you to own some part of a module afterwards. Tell them you know how git works and that you have some public repositories already.
The first questions may be about yourself, so don’t worry, you know about yourself, right?
The next few questions will probably be about fundamentals in your programming language. It can be about: Arrays and Dictionaries, but there are no rules here. Check your note where you pretend you’re an interviewer. Remember to add the questions from this stage there too.
Moreover, researching what the company is looking for in the interview is always a good idea. You can try to find interview questions from this company.
Another idea is to ask your recruiter. If you get a job, the recruiter has a commission! Ask them about topics, questions or anything they can send you.
2.4.3. Level 12 - Keep coding.
Every day, push something new to your repo. You need to be hands-on!
Homework 8: Implement a simple data structure, a BST tree and implement a merge operation.
2.5. Friday
2.5.1. Level 13 - Keep going even if you fail.
It is likely you won’t pass your first few interviews. When I look for a job, I reply/apply to 10-30 companies, I get an interview with 5-10 (it used to be way fewer), and I pass about 60%. There are myriad reasons why you may fail. It is not essential to focus on passing/failing.
To reduce stress, think about the interview as an opportunity to talk to people who also like technology, talk to people who read the same blogs, and tweet about the same things, just like you.
If you fail three interviews because they ask about some data structure, you know you need to read about it. That’s why practice is critical. You could’ve read the whole bible of algorithms (it would take you years), but most interviewees ask about a small subset of it. Why not just read about this subset now and read everything else while you’re at this new company?
2.5.2. Level 14 - Focus.
Now you know the game. Hopefully, you enjoy programming better than selling yourself because this is how to be a programmer post, not a salesman.
Be humble. During your career, you’ll learn about new things which will invalidate everything you had known before - that’s the essence of learning. You only learn when you admit you’re not perfect.
Keep reading further chapters of your tutorials/book. There are plenty of things you haven’t learned and haven’t pushed to your public repo to show off.
Homework 9:
- find a build a tool (if any tool is used in projects in your language).
- Find what library is used to test code.
- Use this build tool and test library to test your calculator.
2.5.3. Level 15 - Learn about programming paradigms and good practices / patterns.
You need to know what your language is good at. Learn about common paradigms and check examples of how to use this in your language
Concepts to read about:
- Object Oriented Programming
- Functional Programming
- Design Patterns
- Enterprise Design Patterns
- SOLID
- DRY (Don’t repeat yourself)
- KISS (Keep it simple stupid)
- What is refactoring and The Boy Scout rule?
Homework 10: Implement some of the paradigms in a new repository.
2.6. Saturday
2.6.1. Level 16 - 3 layers of architecture.
Learn the typical structure in your programming language for large projects. In Scala, we almost always have an API, business logic and a persistent layer. Some people also add a client layer called adapters in Object Oriented languages.
Homework 11: Implement a virtual bank (with operations: deposit, withdrawal) using all three layers, going from API to DB
2.6.2. Level 17 - Agile, Scrum, Kanban.
During your interview, you may also have a chat with someone from a business or leader. It would help if you had some basic understanding of what Agile, Scrum, and Kanban are.
You should also prepare some typical interview questions:
- What’s the biggest challenge you had in your career?
- What IT book did you read recently, and why do you like it?
- Do you prefer fixing bugs or adding features?
Don’t spend a lot of time here. You almost cannot fail this part if you stay honest, humble and carry on a conversation without offending anyone.
Nevertheless, you can fail your interview quickly if you don’t know why you want to work in our company. Spend time researching what they are doing and be ready to use it in conversation.
2.7. Sunday
2.7.1. Level 18 - Master your profession.
Go deeper into more advanced topics:
- If you know how to process TB of data, learn how to do PB.
- If you know Dictionary, learn what a tree is and AVL Tree later.
- If you know Map Reduce, learn about probabilistic data structures.
2.7.2. Level 19 - Where to go from here.
There are much more technologies you should be familiar with. You won’t learn them in one week, but add them to your backlog:
- Learn everything you can about good tests (unity, integration, end to end, functional)
- SQL (SQL databases are still widely used)
- NoSQL (CAP theorem)
- Apache Spark (or alternative in your ecosystem)
- Queueing systems (Apache Kafka or choice in your ecosystem)
- Reactive Manifesto
- CQRS / Event Sourcing / Event-Driven Architecture
- Category Theory for programmers
- Haskell for understanding functional programming
- Python with Pandas, Numpy for understanding Data Processing
3. Bonus - my interview process
Below you’ll find my interview plan I follow when I’m an interviewer:
Stage 0: Screening
30 min basic questions if a candidate knows basic stuff, so we don’t waste time.
Stage 1: Home Assignment (checking if the person is hands-on)
I send a simple task that a candidate can finish in one hour. I tell you to treat this as a production quality code. I’m looking if the code is of good quality and well tested (here, well does not mean many tests and does not mean 100% coverage).
Stage 2: Let’s change X here (add another payment method, make it a game for three players etc.)
If the code is good, the next stage is a phone interview. When we talk more, I answer some questions about the job. Then, I ask to change something in the code. I help a lot here if the candidate is a beginner. I’m looking if a candidate is not stubborn and can be guided to the solution.
Sometimes we talk more profound about the CV. If a candidate has Kubernetes, I would ask how to check logs or log in to a pod (to see if it is practical knowledge).
If the candidate is an experienced architect/senior, I would ask something about the current problem I’m working on (memory optimization, SQL query optimization).
Job done, you’re hired! Good luck.
Find your fun in programming and favour companies where you can learn a lot.