Originally written for FreeCodeCamp
About me
Hello, there. If you don’t care about my background, feel free to skip this section to get a summary of some lessons I’ve learned as well as some resources that have helped me along the way.
I graduated from a coding bootcamp about a year ago. Like many others who choose to attend one of these programs, I was very dissatisfied with my job at the time and was looking for a career change.
Prior to making the leap, I was working as a pharmacist. Unlike most people who sign up for a bootcamp hoping to increase their income, I went into it knowing very well that I was not likely to land a job with a comparable salary, at least for a while. I wrote about it at length here if you want to read more.
This is not an article about how to be successful at a bootcamp or whether you should attend one; each of those topics merits their own post. Instead, I want to share with you what my experience has been like in my first year after graduation and to recommend some resources that I believe have helped me in “leveling up”.
My first year as a professional programmer might look nothing like your first year looked, or will look. Please keep in mind that everything you will read here is biased and subjective.
The first four months
Like many other bootcamps, the one I attended usually hires one or two students from each cohort to serve as mentors for the next group of students. This allows the students to have a mentor who was just in their shoes and is still intimately familiar with the difficulty of learning to program. As I neared the end of my 13 weeks as a bootcamp student, I decided to apply for one of these student mentor positions.
My reasons for making this decision were simple: I would have more time to digest the material I had just devoured over the past few months, I would get to learn by teaching, I wanted to give back to the program, and most importantly I needed to pay the bills.
The pay for being a mentor was a pretty long ways from the Bay Area salaries that bootcampers get stars in their eyes about, but that’s not where I saw the real value in this opportunity. Staying in this environment for a few months allowed me to go back over all of the things I had just learned with fresh eyes. I caught things that I glossed over when I was a student because I now had a better context for where all the pieces fit.
I was forced to deep-dive into topics so I could teach them to other newbies. I got to debug not just my code, but also that of other individuals who think very differently from myself. Not only that, but I was able to work on some internal company software, which gave me an opportunity to continue building cool things and to get a taste of some real-world development. I spear-headed the revival of a project that had gone stale and got to present an alpha version to the big bosses. It wasn’t perfect software, but I learned much in the process.
As my mentorship contract came to a close, it was time to face the dreaded job-hunt. I set myself up for success the best I could. I made sure my Linkedin looked spiffy, I set up a portfolio website, I tried to make sure my Github profile was full of green dots, I attended tech meetups, I attended my bootcamp’s job-fair event, and I even got some business cards made. I did any and everything I could think of to get my foot in the door because the reality is that finding your first job as a developer is likely to be extremely tough.
With my internet persona ready for the application process, I did what we all do even though we are told not to: I started spamming my resume to any company that was hiring for any job even remotely close to what I was looking for. I didn’t keep very good records of how many applications I put out there, but it was more than I would care to share anyway.
Much to nobody’s surprise, hardly any of the applications I threw into these black holes got traction.
So how did I end up with a job?
Networking.
You’ve heard it before and now you’re hearing it again. Attending meetups, reaching out to folks on Twitter and Linkedin, and building real relationships was what ultimately got me a seat at the table.
Out of the interview processes that ended in a job offer (three of them), a grand total of ZERO were from a blind application. All of them were from internal referrals, job fairs, or connections I made at meetups.
You would think that at this point I would have learned my lesson about throwing applications around like mad, but keep reading and you’ll see I don’t even take my own advice.
The second four months
I took my first “real” job at an early stage startup, which proved to be an awesome learning experience. Because our team was so small, I was getting to work on many things that most juniors don’t typically get to do.
I configured our Azure cloud infrastructure and wrote mission-critical code that served as an interface between our application and the blockchain. I was also the only dev on our team with frontend experience so I was in charge of our React frontend. I worked remotely half the week and had access to an endless supply of free coffee. What more could I ask for?
Like any job, however, there were upsides and downsides. Though I enjoyed doing tasks that were above my pay-grade, I sometimes wished that there would have been more senior developers on the team to learn from. Since the company was so young, I was working as an independent contractor, which means no benefits. I’m not including this to complain, because I genuinely enjoyed 90% of my job, but I believe it’s important to paint a realistic picture.
The worst part of this experience came four months into working at the company. I was called into an office at our coworking space and told that there wasn’t enough money left to pay me or the other developers. This is a known risk when working for a startup, but it still sucks when it happens.
To make a long story short, with a little more experience under my belt, I was on my way back into the job market!
The last four months
This time around, I proved to be no wiser than I previously was. I updated my resume, my portfolio, and my business cards then sent off a hundred online applications that got me absolutely nowhere.
If you learn nothing else from reading this, believe me when I say that networking is the way to get a job.
Strangers on the internet can be surprisingly supportive when it comes to helping those who are down on their luck, and I benefited greatly from people reaching out on Twitter, Linkedin, and in meetups.
After getting to the final round of interview with a few companies, I opted to work for another early-stage startup. You would think I had been burned so badly I wouldn’t trust another startup again, but I believed in the team and was excited to work with them. I knew that I would get to call many of the technical shots and get to design, write, and ship code. I am still working at this startup and can say with absolute certainty that I’m a better developer now than when I started here.
Learning by doing has been the name of the game for me and without senior developers on my team to turn to, I have had to turn to other resources. An integral part of being a developer is being able to self-teach, but realizing that there are more experienced people to learn from is equally important. I’m writing this article to pass on resources that I have found helpful, they can be found below.
T.L.D.R
I finished my bootcamp a year ago, worked as a mentor at the bootcamp for a few months, endured a grueling job search process where I ultimately succeeded by networking, took a job at a startup that would go under a few months later, survived another job hunt where I was again saved by networking, and am currently working at a job that I enjoy far more than what I was doing pre-bootcamp.
Life is truly unpredictable.
Lessons Learned
In one year’s time, I’ve learned more than I feel I had in my lifetime combined. I’m learning something new every day and I love it. I couldn’t possibly hope to delineate every little lesson I’ve learned over the past year, but I’ve tried to distill some of the major ones below. I have separated them into business, development, and personal lessons in case you are only interested in certain areas!
Business
- Learn to value yourself properly. Recognize that whether you like it or not, employment is to some degree a business decision, and just like you want to maximize your worth, companies want to get you as cheap as they can. Be confident in what you can and can not deliver, and research what other people in your market are getting paid for similar skill sets.
- If it is not in your contract, do not expect it to be true. Promises are free to make and expensive to keep.
- When applying for jobs, put lots of effort into networking as it is what will most likely get your foot in the door. I’ve tried spamming applications many times and it never got me anywhere.
- Use the coding challenges you are given as part of an interview process as opportunities to teach yourself something new. This will allow you to develop your skills and become more valuable in the market even if you don’t get the job.
- Learn to love whiteboarding; it’s not going away anytime soon. Getting put on the spot is scary, but if you prepare ahead of time you can leverage this as an opportunity to separate yourself from the pack.
Development
- Read the docs.
- Document your work as you go. Seriously, future-you will love you for it.
- When you have the resources to do so, try and practice test-driven development at some level. By shortening your feedback loop, you will be able to write better code and ship with more confidence.
- Prototype, prototype, prototype! When you need to learn a new technology, or are testing technologies to see if they solve your problem, don’t just read the docs (notice I said JUST, you should definitely read the docs) but also build small prototypes that mimic your use-case. You will be able to find pain-points this way and can make better-informed decisions.
- Don’t re-solve solved problems when you don’t have to. StackOverflow is your friend, but please make sure you understand the code and tailor it to what you’re trying to accomplish accordingly.
- Learn how to use Git. You don’t need to know every fancy command, but knowing the basics will get you a huge return on your time investment.
Personal
- Failure is inevitable, learn to accept that fact and learn from your mistakes. It’s very cliche, I know, but that’s because it is true. Every time that I’ve fallen on my face, I have learned something that has proven useful in the future.
- Keep in touch with your mentors. I’m still in touch with mentors from my days as a pharmacist, even. These relationships are highly rewarding. I would also encourage you to look for opportunities to mentor others. We always learn from teaching and making a positive impact on somebody else is one of life’s biggest pleasures.
- Find some sort of balance in your life. It’s super easy to get caught up trying to improve your skills and climb the career ladder as quickly as possible, but it’s important to take a step back sometimes and nurture the other areas of your life that make it worth living. Build your relationships, partake in your favorite hobbies, and get some sleep.
- Exercise. Doctors everywhere give you this advice for a reason. I can promise you it will make you a better person and a better developer.
- Money isn’t everything. I learned this lesson the hard way and that has gotten me to where I am today. This is true of life in general, but also something to consider when you are looking for your perfect job. Perks such as mentorship, remote work, and PTO are worth their weight in gold.
Interview preparation materials
Unfortunately, nobody wants to hire us without making sure we are able to do what we say we do. Preparing for an interview can be the difference between your dream job or unemployment. Below are some of the resources that I have turned to in preparation for interviews.
Codewars
As programmers, most of us dread having to answer algorithm questions on the fly. Most of us would use references in the real world anyway, right? Well, employers are still likely to whiteboard you so just accept it and get really good at it. There’s no better way to get good at something than by practicing it. Attempt as many problems as you can (I really mean attempt them, don’t just jump straight to the solutions) and learn from the solutions that other programmers have come up with.
Tech Interview Handbook
This nifty repository contains all sorts of goodies to help you prepare for the types of questions you are likely to face in an interview. The easiest question to answer is a question you’ve seen before.
Coding Interview University
This repository is chock-full of links to resources to learn about everything from compilers to web application architecture. Depending on what you are interviewing for it may benefit you to dive deeper in some areas than others, but it never hurts to be well-rounded, either.
Books
I love reading. It’s super cool to me that there are people out there who have done all the things that we aim to do and are even willing to write it all down for us. Even though I believe that the best way to learn is by getting your hands dirty, I also believe in learning from the experience of others. We simply don’t have enough time to make all the mistakes ourselves!
Below are some programming books and non-programming books that I have read in the past year which I feel have helped me to be a better developer as well as a person. I would include a short blurb about each one, but more eloquent folks have already done it for me all over the Amazon links below.
I, regrettably, do not stand to profit in any way from you clicking any of these links.
Programming books
The Pragmatic Programmer — Andrew Hunt & David Thomas
More than just advice about how to be a better programmer, this book teaches you concepts that can make you better at just about anything else as well.
Domain Driven Design — Eric Evans
If you’ve been programming for any amount of time you know how easy it is for software to get messy. In this book, you will learn how to better communicate with domain experts in order to reach an unambiguous solution to a domain problem. Long but excellent read.
The Robert C. Martin Clean Code Collection
This is actually two books. One is about writing cleaner code, and the other one is about how to be a better developer from a professional standpoint, rather than a skill standpoint. Both books offer unique value and I would definitely recommend them.
The Mythical Man-Month — Frederick P. Brooks
This book is a classic for a reason. Though some of the examples are dated, the concepts are timeless. If you plan to be managing development of any sort, you should definitely give this a read.
Programming Pearls — Jon Bentley
This collection of tips will open you up to new ways of thinking about solving problems.
Code Complete — Steve McConell
This might be my favorite programming book. In this book you will learn everything from properly naming variables, using code comments, and properly designing classes. It’s a bit long but it is so worth it.
You Don’t Know JS — Kyle Simpson
If you are doing JavaScript development you should definitely be reading this series. If not for the fact that it will give you a deeper understanding of the language, then at least because it is available for free.
Eloquent Javascript — Marjin Haverbeke
This book, which is also free, has recently been updated to its third edition. It is great for learning JavaScript, starting with variables and moving on to building simulations and learning about Node.
Non-Programming Books
Getting to Yes: Negotiating Agreement Without Giving In — Roger Fisher
I’m not great at confrontation. Negotiating can often feel adversarial. I would recommend this book to anybody who is in the same shoes, and wants to ensure they don’t sell themselves short when it comes time to talk salary.
I Will Teach You To Be Rich — Ramit Sethi
The title of this book is horrible, but it has generally solid and approachable advice about how to manage your money. My family never had much money growing up, and now that I make a decent amount I want to make sure I’m educated on how to handle it. Though Ramit isn’t for everybody, I think this book should be required reading for high school students about to hit the real world.
The Hard Thing About Hard Things — Ben Horowitz
Do you have dreams about founding a startup? Then you should give this a read and make sure you know what you’re getting into.
Tools of Titans — Tim Ferriss
This book is more or less like taking a bunch of small self-help books and cramming them into one. Unlike many self-help books, however, instead of telling you what you should be doing this book talks about what people at the top of their game are doing already. This is an interesting read even if you don’t intend to use any of the information.
Online courses
As a developer, you will be learning new things every single day from now until you stop being a developer. This is part of what makes this field so fun! The good news is that you don’t always have to teach yourself from scratch. There are people far smarter than us out there putting together courses so that we can learn from their experience. I love taking online courses and have highlighted some of my favorites below. I’ve divided them up into free courses and paid courses (many of which fall under the FrontEndMasters umbrella since I have a subscription with them). If you know other good ones, please leave a comment below!
Free Courses
What’s better than a free education? Nothing.
Javascript 30
This is a great course for those looking to learn some JavaScript fundamentals, and have fun doing it. Learn something new about JavaScript every day for thirty days, for free. What more could you want?
CSS Grid
If you’ve written any CSS you have likely encountered frustrations when trying to build the layout for a website. The relatively new CSS Grid specification aims to solve this problem. If you are looking to get up to speed and see what the hype is about, this is a great option.
Harvard’s CS50
Like most bootcampers, I came out of my program with a lot of practical skills but a pretty poor knowledge of computer science. In order to try and build on this weakness, I ended up taking this introductory course and I would highly recommend it to anybody looking to pick up programming. Plus, you can sort of say you went to Harvard.
Paid Courses
The best investment you can make is an investment in yourself. If you find yourself with some disposable income and want to sharpen your skills, I would recommend any of the courses below. (Obviously, most are technology specific so pick the ones that make sense for you).
Advanced React & GraphQL
If you can’t tell, I love just about any course that Wes Bos puts out. If you are looking to get better at React or looking to dip your toes into the GraphQL world, this course is a great way to do so.
Secure Authentication for Web Applications & APIs with JWT
Picture this: You want to authenticate users in your application but you don’t want to add state to your backend. This is precisely the type of situation where using a JSON Web Token shines. Learn all about how to do this effectively and securely in this course.
Learn Testing Practices and Principles with Kent C. Dodds
Kent Dodds is an engineer at PayPal and a fantastic teacher. I used to hate writing tests. This course was instrumental in changing my opinion about them, and I would recommend it to anybody looking to dip their toes into the test-driven development world.
Learn to Test React Applications with Jest, react-testing-library and Cypress
Once you’ve convinced yourself that tests are worth writing, you’ll want to know how to write them for your stack specifically. If you use React, this course does a great job outlining a pragmatic way to test your application.
Learn Advanced React Component Patterns in this Course by Kent C. Dodds
If you have a basic understanding of React and are looking to take your chops up a notch, this is a great course for sharpening your skills.
Learn to Scale React using React Tools such as CSS in JS, Code Splitting & TypeScript
Brian Holt is a terrific engineer who knows how to teach concepts in an approachable manner. Though the title of this course is basically buzzword soup, the content is delicious.
Learn Four Semesters of Computer Science in 5 Hours w/ Brian Holt
If you do not have a CS degree but would still like to be able to talk about some of the fundamentals intelligently, this course is a great way to learn some of the basics. This is not intended as a substitute for a four-year college degree.
Learn AWS’ Capabilities for Building and Deploying Apps
If you’ve heard of the up-and-coming cloud platform that is Amazon Web Services (heavy sarcasm) and you’ve wanted to leverage their infrastructure for your web application, then look no further. While the AWS docs can be a real pain, this course feels so good.
Learn JavaScript: The Hard Parts — Dive Deep into JavaScript to Solve Complex Challenges
Will Sentance is hilarious. Honestly, this is worth watching for his personality alone. If you happen to want to understand JavaScript better, however, the course is also pretty okay for that.
Learn the New Hard Parts of JavaScript: Asynchronous ES6+ Features
If after taking the last course you didn’t get enough of Will’s antics, then strap in for this version where he tackles some of the newer features of JavaScript.
Learn Visual Studio Code to Super Charge Your Web Development Productivity
If you are in web development and not using VS Code, then you are wrong. Once you’ve gone ahead and installed everyone’s favorite editor, you may as well learn to use it properly. I learned some pretty neat tricks by watching this course.
Programming Tools
Part of being a good developer is learning to pick the right tool for the job. Thankfully for us all, there are developers whose job it is to make tools for other developers. I wrote two articles that go in depth on the tools I have found useful as a programmer, find them below:
Tools I wish I had known about when I started coding
Tools I wish I had known about when I started coding - Revisited
Podcasts
A year or two ago, I hardly listened to podcasts. Then I found some that I enjoyed and I’ve been hooked ever since. If you are looking for web development podcasts that you can listen to while you commute, exercise, or even write code, then I would highly recommend the two below!
Syntax
Wes Bos and Scott Tolinsky team up to deliver some tasy web development treats twice a week. This show has a little something for everybody and is definitely my favorite development-related podcast.
ShopTalk
Dave Rupert and Chris Coyer have been delivering web development advice far longer than I’ve even been in the game. If you are looking for an informative and entertaining podcast which features lots of guests, I would recommend this one.
Online Communities
Hey, you there. Are you a developer, or an aspiring developer? Do you often feel like you don’t belong? Do you have impostor syndrome? I have good news for you. There are thousands of people in your shoes. The internet provides easy access to supportive communities who exist solely to help us reach our goals. I would highly recommend you tap into at least one of the communities below.
freeCodeCamp
Without this organization, you likely wouldn’t even be reading this article. freeCodeCamp is so much more than a FREE online coding bootcamp. They offer interview preparation help, they are at the center of #100DaysOfCode, and they bring in thousands of aspiring developers together.
CodeNewbie
This is one of the most inclusive organizations in the universe. Not only are they responsible for multiple podcasts which aim to give a voice to aspiring developers from all walks of life, but they foster that same community on other platforms like Twitter. I highly recommend checking out their site and getting plugged into their supportive community.
Conclusion
Programming is hard and getting good at it takes years of time and effort. Though I’m much further along than I was a year ago, I’m now better aware of all that I do not know, and acknowledge that I have a long path ahead of me.
I do feel like I have learned a lot in the past year, however, and I hope that you found something useful in this long, long, post.
I’m always open to learning new lessons from others as well, so if you have advice or resources please leave a comment and I’ll try to answer as promptly as I can.
Godspeed, dear reader.