I initially wrote this article as a list of lessons for beginners and junior developers on Reddit. Then it blew up with over 50 awards. Lots of heart warming messages followed.
So I've decided to upgrade the post based on people's reactions.
Here are the things that I wish I knew at the beginning of my journey as a Software Developer. They would've helped me stress less, and hopefully they do the same for you.
Let's get to it.
All tutorials are not created equal.
When you're first starting out, you're just trying different things. As you learn and experiment, pay attention to the kinds of tutorials that work for you.
Many will not work. And that’s fine.
In fact, that’s exactly how experiments work until you find a solution.
But the moment you strike gold, stick to it, consume that content voraciously, and then find similar tutorials so you can continue your rapid growth.
When I started, I used to bang my head against Head First Java, the book. But after studying for many hours, I just wasn’t getting anywhere.
But everyone online said it was the best programming book ever. For me, though, TheNewBoston's YouTube tutorials did it for me even though people don't recommend him anymore.
I wish I could say this stopped after my first year.
Fast forward two years down the line.
I started learning algorithms, and ALL the blog tutorials I followed just didn’t make sense until I watched YouTube videos on Hungarian folk dance teaching algorithms.
And it just clicked.
Since then, my approach to learning has been to learn the same thing from multiple places until I find the instructor and style that works for me.
You’ll forget a lot of things.
Deeply understanding this will change how you learn.
I can’t count the number of times I took Introduction to Python Programming on websites like Udacity, Coursera, and still forgot everything.
It’s so annoying.
But I’ve since learned that you’ll forget anything you learn in isolated exercises because they are stored in short term memory. Neuroscience research shows that this is just how the brain works.
If you don’t want to forget, test your knowledge using spaced repetitions. To do this, build projects.
I’ll give you a concrete example:
This will give you the length of a list in Python. You’ll learn this in Udacity’s Intro to Python course.
Come back a month later and you might not remember if it’s
length( ) or
But with spaced repetition through a project, the outcome is different.
For example, you work on a 2-month long Django app for new coders where you need to:
- Count the number of users multiple times.
- Store the number of exercises done.
- Find the number of chats in a day.
Imagine doing this throughout the span of the project – for two months. It’s hard to forget what
len( ) does.
This is a trivial example, but hopefully you get the idea.
New learners can start with simple, isolated examples.
But if you’re not practicing within the scope of a project and using and reusing what you’ve learned, nothing is going into your long term memory. It’s all short-term.
And that means you’ll forget it.
Work within fear, not against it.
I’ll admit that this one's easier said than done.
But you have to master this if you want to last.
There’s this temptation to fix your fear first before you continue to learn. Unfortunately, it doesn’t work like that.
In fact, you’ll spend a lot of time trying to make your fear disappear but instead it’ll only double your anxiety. You have to find a way – your way – to acknowledge that you’re afraid.
And frankly you'll continue to be afraid for a long time. So work within that realization.
No need to fight it.
Sometimes, this fear disappears as you become more proficient.
Other times, it vanishes for a while and comes back when you get into a new environment, work with smart software developers, or move to a completely new stack.
If you want to progress as a software developer, you have to remember:
This IS the life.
It’s a sinusoidal wave – endlessly going up and down. Don’t take it too seriously or you’ll lose yourself.
Consistency > hard work.
Consistency is king.
When you start learning, you lay down neural pathways that make it easier to retrieve information.
According to Neuroscience research, these pathways only get strong through frequency of use, not just intensity.
This means 30 minutes a day, for 5 days a week is way better than 2.5 hours one day, only once a week.
Same hours, different impact.
Don’t just work hard, apply wisdom here.
Talent = hidden practice.
It’s easy to dismiss progress as talent.
My first programming class was in C++ and my classmates refused to believe I had never coded before because I was just-so-talented.
But what they also refused to accept was that right after class, I would spend five hours typing:
cout << “this is my first program”
Then I'd realize it didn’t run because I forgot a semicolon
So I'd retype it and realize it didn’t print out my statement on a new line because I didn’t add
This deliberate practice built perceived talent.
Talent is sexier than hustle so no one wants to hear that you worked hard and got here. Just tell me you were born this way – it’s more believable.
But becoming a proficient software developer is like playing an instrument.
Only a tiny few are born talented.
The majority can only get as good as the amount of practice we put in.
And you can immediately tell a student hasn’t been practicing the moment they sit at the keyboard.
You’ll meet jerks!
Every field has its dose of horrible people.
But I’m not sure what it is about software dev that attracts jerks in droves.
Maybe because coding gives you the feeling of having a super-power or a rare skill. If you’re a beginner programmer, you’ll meet those who’ve been coding for years and think no one else should come in.
A Windows developer only? You’ll meet Linux fanatics that think you’re mediocre.
If you’re a woman, you’ll immediately be dismissed because of your gender. I know this from personal stories from colleagues over the years.
If you’re a minority, you’ll meet people who think you should only fetch coffee, not code.
If you’re coming from another field (particularly not STEM), you’ll meet people who automatically make themselves gatekeepers of the programming community.
“We don’t want social scientists here – we’re purists!”
And at work.
And sadly sometimes in your family.
It’s not if you’ll meet them, it’s when.
Learn to move on.
Things are getting better but there’s still a lot to do to educate people.
But don’t let this deter you. Build your resilience so you don’t quit after you meet these people.
And when you get to the top don't be a jerk!
Master one thing.
New developers tend to jump around learning a lot of things.
Okay, it’s not just new devs – it’s also experienced folks.
You need to wake up and realize that you’re simply extending the time it’ll take you to truly learn anything.
“If one is a master of one thing and understands one thing well, one has at the same time, insight into and understanding of many things.” ~ Vincent Van Gogh
Pick one thing.
Stick with it for a few months – ideally 6 to 12 months before you move to something else.
This has two benefits:
- You’ll go deep enough and hit critical mass that moves you towards mastery.
- After you master one domain, you can transfer knowledge to another. Example: learn Flask and you can easily walk into Django. Learn React deeply, and you can quickly identify the pros and cons of Laravel within a few days.
This doesn't mean learn HTML alone for six months. Then only CSS for 1 year.
Rather, it means don't mix up learning:
- With Express
- Then React
- Some Gaming Development
- And iOS.
You might get a lot done in a short time. And maybe feel like a beginner programmer rapidly growing. But it's an illusion.
You've mastered nothing.
Software development is an ever evolving field.
But if I had to, I’d do it all over again.
Thanks for reading!
Phew! Did a lot of reflection and lots of hours to put this together.
- Follow me on Twitter: I'm most active on Twitter. If you enjoyed this, share and retweet this to help spread the word. Have questions? My DM is open.
- Join the email community: I'm putting together resources to help new coders and junior developers boost their confidence. If interested, join this email list. And if you enjoyed this, check out more of my articles for beginners and junior developers.
Heads Up - I love research so I tend to back my advice and approach with concepts from Behavioral Psychology and Neuroscience.