The next paragraphs are where I tell you a little bit about my story, where I was, where I wanted to be and the things I started to do to improve my chances of being the right candidate for a job, If you want to jump straight ahead to the tips, please be my guest!
Before I decided to get into a coding Bootcamp, I was not comfortable with my career choice. I didn’t feel any sort of interest in working as a business associate or IT Engineering manager at a corporate job.
The other option was working at a startup as a product manager with excel spreadsheets,project managament tools and wireframes all day which was also not an exciting choice for me.
After thinking about it, I decided to get into a coding Bootcamp. In the end, it really worked well for me.
After graduating the bootcamp, I teached about 50+ workshops and lectures about different web development topics, helped new students as a Teaching Assistant and then as a Teacher while also trying to get a job as a Software Developer.
This was a period of great learning and work and I also gained a lot more confidence in my skills allowing me to improve my overall happiness with my career choice and skills.
After some time of applying all the tips that I’m about to give you I managed to get my first Job as a Fullstack Developer at a seed stage startup that offered me double my current salary at the time.
And then after some more time of working as a fullstack developer and refining and updating the things I shared, I got 3 amazing job offers.
I went through the application process with all of them and finally chose the one that excited me the most:
Learning to code changed my life completely. It was the first time in my life that I felt that I knew something valuable that I could use to make a living.
Coding was opening up new possibilities in my life. It was showing the path that I needed to follow and I started to listen for the signs.
Since then I’ve been in contact with and teaching 100+ different people how to code and I had the opportunity to be there during their progress from not knowing anything to being able to create web applications from thin air and applying and getting jobs as software developers.
What saddens me is that many of the people who want to change careers and get a job as developers get demotivated pretty fast after 1 or 2 failed job interviews. They get to the door and when things get hard they give up and bounce back to work on their old career path.
What’s incredible about it is that all of the people that I’ve seen doing this are great learners and could achieve so much more if they tried harder. That’s why I wanted to write the guide I wish I had when I graduated from my coding Bootcamp and started applying for jobs.
I applied all of the tips that I’m about to give you to improve my career and get a job, I believe that if you follow the advice you can make a career in the tech industry too.
These tips will be all about how you put yourself in a better position than the one you are currently at. Your plan could be something like: “I’m gonna make three times as much money in five years on a technology career path.”
If that’s the plan that you are aiming at then you need to keep educating yourself. You’ve got to fix up your resume, you’ve got to overcome your fear of being interviewed and you need to be able to see what you are doing wrong and fix it everyday until you get the job.
You’ll have to start sending out like 50 resumes a week on a regular basis and be prepared for a 99% rejection rate. You’re going to look for a different job which if you are reading this means that you are switching careers so it’s probably going to take six months to a year and almost all of that is going to be rejection.
And you’ve got to steel yourself for that and prepare, and maybe consider that this is going to be a three year process. Improving your life and career path is no simple thing. But the consequence of this careful, detailed, strategic thinking almost inevitably will lead to massive improvements in your socioeconomic positioning and a great movement towards improved career trajectory.
And you have to consider that there are advantages along the way because even before that happens, the fact that you’re taking genuine steps to put yourself in a better situation immediately starts to improve your life one little step at a time.
Think about it: you’ll do your best and you will know that you are doing your best to get the new opportunities that you want. Why would you keep feeling bad about it?
You also have to be realistic. It is going to be hard to update your resume and achieve all of these things because it will require a 100% commitment from you. That means that if you choose to apply these things you must not only ‘try’ but do them with your full focus and energy.
This is what this whole guide is about. If you promise that you are going to follow the suggestions and apply them to your own experience and environment I promise you that you’ll eventually get a job as a Software Developer.
And now that we got all of that out of the way, these are the overall tips. You don’t necessarily need to read them in order to get something out of this. The most important thing to remember is that you not only have to read them but actually apply them:
Code every day/keep a coding streak.
Keep practicing the fundamentals.
Learn to use the tools and processes at your disposal
Improve your personal brand
Get some freelancing projects under your belt.
Put yourself out there, start giving free workshops and lectures about what you know.
Launch side projects and get some real users.
Searching for a job is a job on its own.
What comes next is a deep dive into each of the tips, remember that if you have any questions or you would like me to develop the tips further you can find me on twitter, feel free to ask me anything there!
The only way to become a better developer is to do these 2 things:
1. Read a lot of code
2. Write a lot of code
It is not about reading your own code but searching for good codebases and reading how the experts write code. The more you read code the more you’ll expand your horizons and code understanding capabilities.
Here are some ideas on how to achieve that:
Search for OSS that’s made using the languages that you learned. Once that you found a good codebase, download it and open it up:
If you learned Ruby then check the most downloaded gems on Ruby gems download the ones that interest you and run bundle open gemname
and explore it.
If you learned Javascript then download the top packages in npm run npm edit packageName
and read the code.
There’s an equivalent command for all of the popular languages and library managers so google the top libraries, download them and take some time to go through the code.
> *It’s harder to read code than to write it.*
When you start going through the codebase you’ll see that it will take some time to be able to read code written by more experienced devs.
The idea is to force yourself to go through professionally written code and understand it. The more code you read the better you’ll be at decoding different codebases.
Note that as programmers we don’t go through code and read it just like when we are reading a book. We read it line by line and take some time to connect the pieces together until we get the whole.
The key here is to take your time to go through the code line by line. While you are reading it put yourself in the shoes of the person that wrote it and try to think about the design decisions that they took to get to that result.
Focus on understanding, not copy-pasting. Focus on linking everything together and when it gets overwhelming try to start by going to the smallest single responsibility methods you can find and follow the breadcrumbs from there.
Where do you start? Some people suggest scanning the codebase for the top updated files and focusing on those since they are changing a lot.
Stick with what works for you. If you find one file that caught your attention the most, then understand it fully, make some diagrams and understand it.
This technique will ‘unlock’ new parts of the codebase for you and you can follow from there.
You can also start with the simplest method you can find and then follow it to the source.
Ask yourself:
Can you do a ‘project search’ and find all of the instances where this method is being mentioned and explore them?
Find the function definition and read it until you get it. If there’s something else there that you don’t understand then search for it until it is clear.
Architecture is critically important on all big ambitious projects. Great engineers have the amazing skill of creating code that’s easy to change and easy to get rid of.
Look for those things in the codebase, train yourself to think about the reasoning behind the choices that they made.
Why was that piece of code written in the first place, can you imagine or figure out all of the reasons that this was created in the first place?
if you ask these questions you’ll be going deep in the code and improving and not only ‘skimming’ through it just because some random dude over the internet told you that reading code was something you should do.
After some time you’ll find out that code is not otherworldly and you could write that with enough time, patience, and practice.
You’ll be less biased to think that your code is great and get inspired to keep working on your own projects to improve and reach that level of skill.
Your outcomes are a lagging measure of your habits. Your net worth is a lagging measure of your financial habits. Your weight is a lagging measure of your eating habits. Your knowledge is a lagging measure of your learning habits. Your clutter is a lagging measure of your cleaning habits. You get what you repeat.
-James clear on Atomic Habits
The key to maintaining every habit is to do it every day.
Think about it: The more you do something the easier it is to keep doing it and the easier it is to start it once you have a consistent schedule and are used to doing it.
So as with every other good habit that you want to have coding every day will be critical for you to become a competent hirable developer.
And here’s a hard truth that you need to swallow: Nobody will hire you as any kind of Software Developer if you can’t make a habit of coding every day.
The best developers I know code every day. They have consistent schedules where they do deep work and keep that schedule every single day.
You might be thinking that keeping a consistent schedule will be easy once that you get hired but the truth is that if you can’t be disciplined enough to code every day on your own then you won’t get that dream development job that you’ve always wanted.
You should start the habit of coding at least 1 hour a day every single day.
When you are unable to do this, remember that it is not a lack of time but a lack of interest that’s blocking you from leveling up and improving your life.
So, make some time to work on the things that matter and if you really want to get a job and make a career out of coding you’ll have to create this habit for yourself.
If you manage to read a lot of code and write a lot of code everyday from now on, you’ll improve your skills faster than the competition simply by pushing more lines of code per day than someone who’s practicing sporadically.
And employers love consistency. They want to be sure that you’ll show consistent progress over time and you’ll be capable of learning and applying new things on the job.
Nowadays the most convenient way to show consistency is through the Github Contributions calendar so get used to the git workflow and have a consistent push schedule to display your streak.
This way of showing consistency is frowned upon by many developers but all of them already have a job as Software Developers, are seniors that need to push giant commits containing lots of related changes or they simply can’t share their commit history because the projects they are working on are locked and are unable to be shown on the graph.
The main argument against this is that if you have a full streak is because you don’t have a life or are not properly balancing your time. Like I said, that’s true if you already have a professional career as a developer and are looking to have a good work/life balance so that you are better at your job.
So like Derek Sivers said in the video i showed you before, when you are just a ‘codenewbie’ consistency is more important than quality. Don’t listen to the gate keepers telling you that your commits are not proper, you are learning the ropes and as long as you manage to keep coding and pushing you’ll be moving forward. So at least to get your first job you should really ignore the “forget about github streaks” advice and focus on showing a consistent schedule through the most common way of knowing if someone codes a lot or not.
Here’s an important secret that took a while to understand:
You don’t need to reserve the contribution calendar for the ‘official’ projects that you are building or the ‘formal’ commits that you do.
Even if you are only taking some markdown notes on the newest framework or library you are learning or you are solving some algorithm challenges that you saw on a blog you should be doing the git dance by creating a git project and then running: git add -A
, git commit -m 'simple explanation'
, git push
.
Some of you might already know that there are some common ‘hacks’ that can automate your calendar colors by automatically making commits on your behalf but please don’t do that.
It is like buying Twitter or Instagram followers and it’s just sad. Build your streak by going at it every day and deploying your own code and you’ll feel better about it in the end.
If an employer is comparing your Github streak with someone else’s (with the same experience and skill set as you) who are they going to hire? The developer who’s streak looks like this?
Or like this?
The full streak shows that you’ve been practicing, reading, and writing code.
It shows that you are learning every day and are capable of being consistent without people telling you what to do.
It also shows that you know how to use Github since you are clearly using it every day.
Once that you start your streak it will even serve as motivation for you to keep the pace going every day and it will be easier!
P.S. If you don’t know what to code to keep that streak going, don’t worry fam I gotchu just keep reading
You finished a very demanding Bootcamp and I bet you had the most intense weeks of your life where you struggled to learn new concepts every day and tried your best to solve the challenges and problems that were thrown at you.
The thing is that if you don’t actually USE the skills that you worked so hard to acquire you’ll forget them.
Why throw so much learning and experience into the toilet just because of laziness?
Understand: You are a recent graduate of a bootcamp and the best thing that you can do right now is to to focus on your core competency and keep developing it. Don’t jump around between new shinny things and languages before mastering the one you started with.
Know the language you learned from memory, review all of the basics, become an amazing problem solver and keep practicing!
There are hundreds of websites dedicated to giving you interesting problems to solve that will make you practice fundamental concepts of Computer Science and you should use them!
“There are 2 types of software engineers: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high-level tools.” - https://teachyourselfcs.com/
Be the one who understands. Understand the basics of algorithms, solve different coding challenges, and be someone who improves her ability to solve problems by solving more problems and practicing coding challenges every day.
I suggest starting with these websites to get more challenges to solve:
1. exercism.io
2. code-golf.io
These book is also great:
1. Exercises for Programmers: 57 Challenges to Develop Your Coding Skills
In terms of learning it’s been proven that there are 2 types of people: The ones that have a fixed mindset and the ones that have a growth mindset.
I’m sure that you are in the growth mindset group because you took a coding Bootcamp and wanted to learn something new.
Keep that attitude going and strive to learn to solve coding challenges daily. As long as you keep doing that you’ll be ready for when the time comes to solve harder things in job interviews or in the actual job!
These next skills are a must if you want to become a senior developer. Understanding more about these topics will make you a valuable team member in any place you go.
Understand: These are here for you to learn at your own pace. Focus on one thing at a time and keep building your skills patiently. Most of these skills are teached at Upcase so take it one step at a time and start with the skill that caughts your attention the most.
Read this if you need an intro to TDD.
All the respectable agile corporations and startups use some form of TDD to build their projects.
The bigger the team and codebase the more important it is to have TDD implemented in your code.
It basically works like this:
1. You write a test for the feature that you are about to implement.
2. You write the code to make the test pass.
3. You run the test and make sure that it is working and then refactor your code.
That’s why sometimes you will see the ‘red -> green -> refactor’ phrase refering to the way you first see red error messages, then you make them go green by writing the necessary implementation and finally once everything is working you can refactor your code confidently.
It is such a simple process that it might be hard to grasp the importance of implementing it on your projects and learning it for your job so let’s use an example of 2 startups:
The first startup tech team wants to go to market as fast as possible and their lead engineer doesn’t care about anything but building the features and deploying them to customers.
Their usual flow is:
1. They get the new feature
2. They build the new feature
3. They launch it.
And then when it launches they start to get complaints from customers that some of the already implemented features on the product are now broken.
The lead engineer doesn’t have a clue on where to start so they roll back the feature and repeat the process until everything is fixed.
On each deploy and iteration, they piss off more and more customers because they are live testing and they don’t have a proper testing setup to guarantee that new code is working as expected.
So after some time, they lose all their customers and the startups dies miserably.
In another part of town, we have another startup in the same industry. And they have a really smart Lead Engineer that has a lot of experience with TDD so their usual deploy flow goes like this:
1. They get a new feature coming from the Founder or Product Manager.
2. They plan their feature carefully.
3. The assigned developer works on the feature by first creating tests.
4. Then the main feature code is implemented and checked with the tests.
5. The Lead engineer checks the code and makes sure that the tests are covering all edge cases.
6. Once everything looks good the code is accepted and they deploy the new feature.
Since this way of developing is not only covering the feature that’s being implemented but ALL of the previous features have the respective test. The team is 99% sure that the application won’t break and they can deploy safely.
The customers are happy because they get new features that they want on time and all of the other ones that they already have to keep working as expected.
So, in the end, they also get the new customers from the failed startup and they are also happy that they finally found an app that’s not crashing with no apparent reason on every feature release.
So who do you think is going to win the market?
If I still didn’t convince you I suggest you research more on TDD and job applications. You’ll see that the ones that matter are looking for developers that know TDD.
I suggest these resources for learning it:
Upcase A great FREE resource for the Rubyists out there. They take you from junior Bootcamp graduates to a competent developer with their courses.*
Testing Javascript from Kent C Dodds. An amazing JS teacher that shares a lot in his blog, its pricy but if you are commited to testing in JS it should be a good investment.
Further reading:
If the bootcamp you went to is any good you probably already know the basics of version control with git.
When you get to a new job you’ll find that the git flow is nothing like what you are used to.
They try to handle atomic commits so that means that you can’t just push whatever you have changed or were working on.
Now you’ll need to start pushing mindfully. Only the files relevant to the feature that you are working on.
Your commits are going to be read as a story and they need to be properly formatted. Where there some changes in the master branch? Then you need to rebase
to have your changes sit on top of the latest stuff.
You’ll learn about creating ‘wip’ commits and then rolling them back to clean them.
You’ll learn about git aliases to make this workflow even faster.
And you’ll need to start being more careful about it all. If you don’t start to discipline yourself to do these things when you get the right job (if you are aiming for a good challenge surrounded by more senior developers to show you the ropes) then you’ll get overwhelmed the first few months on the job because of all the things that you should learn to be competent.
So don’t wait until that happens. Take some courses on git and learn the advanced stuff.
When you have done that do not only ‘watch’ the videos try to use the new techniques in your own projects and use what you are learning at any chance you get.
Some time ago deploying a web application to be used by real users only involved learning about ssh and connecting to a remote linux server to upload a couple of .php and .html files and that was it.
Needed to change something? Well you just ssh’d into the server and updated some lines of code and it was ready again.
Today you are probably gonna be using some form of framework like Ruby on Rails and a separate front end like React. That involves having your server hosted somewhere like Heroku and your frontend somewhere like AWS.
It’s a good idea for you to take the time to deploy your backend architecture somewhere other than what you learned on the bootcamp. You already know how to deploy to Heroku? Then learn how to install all your language and dependencies at DigitalOcean.
Do you already know about easy deploys on the frontend with Vercel or Netlify? Then learn how to deploy on AWS with automated bash scripts.
Understand the process and research a bit. Realize that you can do so much more than writing git push heroku master
and that you can even automate the testing process on your app so that if the tests pass you automatically deploy your master branch to production.
It will be like magic, you will merge your PR and then it will automatically be detected by your tool of choice, checked via tests and then deployed to your Hosting Provider (Digital Ocean, Heroku, etc).
You’ll be a valuable team member if you know your way around the CI tools and are able to help speed up the deployment process and fix any errors that come up.
As developers our daily job will be a mix of talking to stake holders and translating their feature requests into actual actionable steps that we need to transform into working code.
But it doesn’t stop there. You’ll need to develop analytical skills so that you know what to change or what feature to develop next using data. You’ll need to use tools like mixpanel to catch user events and then see what parts of your website are having issues and what parts you need to improve.
You’ll also need to know about error reporting tools that will let you know if there’s something wrong with your website and you’ll need to act fast and be ready to fix all of that.
Take some courses in analytics and add that to your resume. Use analytics on your side projects and portfolio even if there are no users for you to get used to the way analytics are used on a Software product.
Go through the process of installing and setting up all of that for it to be good.
The cliche of the hardcore programmer is someone who is in her cave coding all day and night and they only come outside for standups and thats it.
That’s a really biased image of what a programmer actually does.
You’ll need to be social and capable of being empathetic with your team members. You’ll need to be there for them and back them up when they need.
It will involve a lot of social skills just to get the job because you probably are going to have an interview with the founder, the CTO and the HR department. So you better be ready to show that you know how to socialize.
It will not only be about being capable of getting along. You’ll also need to:
Be able to explain your issues to a manager that doesn’t know how to code.
Be able to describe tech jargon in simple concepts and descriptions.
Be able to work as a team member not just an angry single dev.
Be empathetic and not an asshole.
Don’t worry if you are shy or introvert. You’ll grow a lot of social skills when you get to the part of ‘giving workshops and lectures about what you learned’
As you see there’s a long way to go but you can do it just keep focused and keep building stuff and take it one skill at a time.
I’ve seen some devastating CV’s with bad and no actual order for it. Don’t be one of those people. If you were on a good Bootcamp you probably also got guidance on improving your CV and now you have a good start for what’s next.
Some people come from different industries with no experience whatsoever so you’ll need to build your own experience on the go. You can use a service like resume.io to improve your design because employers are going to be reading LOTS of CV’s and you want yours to stand out.
Here’s a great example from a recent (end of 2019) hire by basecamp (the team behind Ruby On Rails) for an engineering position. You can read his whole story here (it has a bunch of great tips) notice the beautifully designed CV.
Social media is an extremely powerful tool and most people use it to share memes about irrelevant stuff. Don’t be like that. Social media is connecting everyone to everyone and enabling an unprecedented level of communication in the world.
Ride that wave and start polishing your social media presence.
Clean up your bio, make it straight and to the point and unique.
You are the only you so take advantage of it.
Use the same photo for all your profiles and don’t change it every single day. People will associate your photo with you and remember you more easily.
Start sharing the things that you are learning every day. Someone will need it and be inspired.
Use Linkedin. Linkedin is a really valuable tool for developers. Follow the same process. Upload the same picture that you are going to be using everywhere else and create a great description.
Make sure to upload your course completion diploma and fill the info with your appropriate career path. No career yet?
Give a name to your newly created freelance company and start working there as a founder/frontend developer/backend developer whatever developer (that you want to get the job as).
Use Twitter. Most of the junior devs that I know are NOT using twitter and it is an amazing tool to connect with the greatest developers, founders, and entrepreneurs of our time and it’s being wasted on tweeting about the color of your last poop.
https://www.swyx.io/writing/marketing-yourself
Start following some cool people, here’s a good list:
1. dan abramov
2. Swyx
3. Naval
5. Swizec
5. Elon Musk (previous rules don’t apply to him)
For further advice about growing your twitter account check this out https://www.holloway.com/g/using-twitter
STOP WAITING UNTIL YOU GET A JOB TO DO SOMETHING.
You don’t need a boss and someone to tell you what to do to be a developer officially. Start taking advantage of your newly acquired knowledge and go outside and look for a client!
If you want to be ahead of everyone else then start to search for interesting things like web applications and not simply ‘WordPress like’ websites that are simple booklets.
There’s also nothing wrong with that if you want to develop your design skills. But go where the money is and offer more complex services like e-commerce creation, plugins, etc.
If you need to start with small landing pages that’s ok too just be sure to move on to more ambitious things once you have the speed.
The first thing that I did after a Bootcamp was market myself as a web developer and freelancer, created a landing page for my company: codia.co, and started to share it among close friends and family.
Sometime later a family friend hired me to create an app for custom order generation <– I could now build this in React Native for mobile and finally deliver on this.
These projects are amazing for learning because they will force you to learn about how to put down requirements into a document, convert that document into actionable steps and datelines and meet those deadlines to be able to deliver on your project.
You’ll also learn a lot about building formal web applications or mobile apps and you’ll be growing a lot as a developer and you’ll be able to display those projects once your future employer contacts you.
Start a blog, upload pictures about your events, share useful info.
Think about what you now know after completing the Bootcamp that you didn’t know when you were about to start it.
It’s a LOT. It feels amazing to realize that all of this knowledge was waiting for you.
Now imagine that all this gap of newly acquired knowledge is where you are advanced compared to other people that want to learn this but don’t have the money or resources to do it.
Start a blog, write some free content for them, and share what you know no matter if you think it is silly or stupid. Someone somewhere will appreciate the effort.
Lots of coworking spaces have free spots for you to give small workshops about beginner topics, here are some ideas:
Beginner [language that you learned] e.g: beginner javascript, beginner ruby, etc
Beginner Git
Html and CSS basics, build your first website!
What’s an API?
How does a browser work?
Here are some of them. Go and prepare a small workshop about this and give it for free. Take pictures and record it, post on social media, and youtube. Start a small blog to share about these topics and if you think of more ideas while writing the blog keep writing them. Make this website your home online.
The point of software engineering is to build software for people to use. That software is going to be used by someone as a product. It could be a tool, an OS like Linux or Unix, or a mobile app.
I’ll say it again: All of that is for people to use your software to solve a problem.
So the only way to really learn about Software Engineering is to build a product and try to get some users to use your app!
Go to indie hackers and read through some of the posts to get some inspiration, try to come up with an idea, and build it from the ground up.
But it doesn’t just end there you need to learn a bit about marketing, about Stripe API integration, about customer service about SEO, lots of topics to get your project off the ground.
In fact, launching an app with a focus on user acquisition will be one of the best thing you can do to learn about modern internet businesses.
Once all of that is done launch it on product hunt and get some actual strangers from all over the world using your product.
if you do that you’ll earn about creating an actual business. and stop thinking about business like the old kind. It’s not only about brick and mortar businesses anymore. You can start a business right from your bedroom.
Do that and you’ll be set. You probably won’t even need a job because you will create your own.
You got to stop closing the doors on yourself. Stop turning yourself down and doubting your abilities. There’s no worst judge about your own skills than yourself.
I got my current job by applying to be a Senior Fullstack Engineer and I’m just getting started with my career (no more than 3 years coding every day) and they actually gave me an opportunity and I did my best.
In the end, they hired me!
Of course, you got to be sincere and tell them that you are not a senior but if they are giving you the change you are already at the door with them so they might as well interview you.
https://www.joelonsoftware.com/2001/12/25/getting-things-done-when-youre-only-a-grunt/
https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/
https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/
https://blog.samaltman.com/how-to-be-successful
http://www.paulgraham.com/wealth.html
http://www.paulgraham.com/hiring.html
http://www.paulgraham.com/love.html
http://www.paulgraham.com/hs.html
https://jlongster.com/How-I-Became-Better-Programmer
https://steveblank.com/2018/11/13/its-not-change-you-fear-its-loss/
https://recurse.henrystanley.com/post/better/
https://80000hours.org/career-guide/career-capital/#3-develop-a-valuable-transferable-skill
https://80000hours.org/career-guide/how-to-be-successful/
https://80000hours.org/2019/04/career-advice-i-wish-id-been-given-when-i-was-young/
If you want to receive my latest essays and interesting finds subscribe to my list: