(• Updated - Reading Time: 10 minutes •)
Things I wish I knew before I started programming
I initially wrote this as lessons for beginners and junior developers on Reddit and it blew up with over 50 awards. So I've decided to upgrade parts of it based on people's reactions.
Some of these are things I wish I knew at the beginning of my journey as a Software Developer so I could stress less.
Here's the breakdown:
- All tutorials are not created equal
- You’ll forget a lot of things
- Work within fear; not against it
- Consistency > hard work
- Talent = hidden practice
- You’ll meet a**holes!
- Master 1 thing
- Software development is an ever evolving field
Let's get into each.
All tutorials are not created equal
Imagine yourself as a lab rat.
As you learn and experiment, pay attention to the kinds of tutorials that work for you.
Many will not work. 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 it voraciously and then find similar tutorials like that to continue 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.
Yet, everyone online said it was the best programming book ever. But TheNewBoston youtube tutorials did it for me back then even though people don't recommend him anymore.
I wish I could say this stopped after my 1st year.
Fast forward 2 years down the line when 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 Udacity, Coursera, etc 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: len(myList) will give you the length of a list in Python. You’ll learn this in Udacity’s intro 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 multiple times the number of users, the number of exercises done, the number of chats, etc.
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 that makes you use and reuse what you’ve learned, nothing is going into your long term memory; it’s all short-term.
And you’ll forget.
Work within fear; not against it
I’ll admit: this one is easier said than done.
But you have to master this if you want to last long.
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 that it’ll only double your anxiety.
You have to find a way – your way – to acknowledge that you’re afraid, and frankly will continue to be afraid for a long time, then 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.
Unfortunately, the fear may get you down so much that you need some motivating coding stories like these to remind you, you can do it.
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”_.
Realize it didn’t run because I forgot a semicolon.
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 they put in. And you can immediately tell a student hasn’t been practicing the moment they sit at the keyboard.
You’ll meet a**holes!
Every field has its dose of horrible people.
But I’m not sure what it is about software dev that attracts a**holes in droves. Maybe because coding gives the feeling of having a super-power or a rare skill.
If you’re a newbie, 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 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 an a**hole!
Master 1 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 learned React for one week.
Laravel for three.
You need to wake up and realize that the harsh truth is 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. Finish as many projects as possible. You can start with these beginner, fun programming projects then move to something more complex.
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. 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 Django, with Express, then React, some Gaming Development, and iOS.
You might get a lot done in a short time.
But you'll master nothing!
Software development is an ever evolving field
But if I had to, I’d do it all over again.
Thanks for reading
- Get email tips/mentoring: I share weekly tips and mentor new programmers and junior devs to focus on what matters (e.g. resume tips, portfolio review, etc). Feel free to join the community. Note no video/audio calls for mentorship (strictly email communication).
- Follow on Twitter: If you're on Twitter, my DM is open. I've answered a lot of questions so feel free to ask away. I may get to you later than you expect but I definitely answer all questions.
Heads Up - I love research so I tend to back my advice and approach with concepts from Behavioral Psychology and Neuroscience.