Recently I met my college friend Aditya Rao. I've known him for more than a decade and always thought of him as a business & marketing leader. I was surprised to hear that he's been learning programming for more than 2 years now. I got curious to know about his experience of learning to code and we ended up chatting for about 2 hours about his journey as a 30-year-old beginner developer.
Here are a few tips he shared that helped him learn better and stay motivated through the course. I think other beginners will find these tips useful too, so I am sharing them here.
These are Aditya’s words, slightly edited by me for better readability.
1. Get rid of self-imposed starting barriers
I took two computer programming courses during my undergraduate and I failed both. For a really long time, I thought that programming is some black box that's too complex & hard. This skewed view created a starting barrier for me. I know many people who are completely new to programming feeling the same way.
After 3 years, I can say that programming is anything but a black box.It is just beautiful. Something as simple as CSS is truly magical. Everyone has different mental barriers and most of those are self-created. Don’t get intimidated by these self-imposed views.
2. Be clear about your end goal
When I was just starting out, an engineer friend told me, "When programmers can’t understand an error message in their code, they go and search the internet to figure out what that error is. There are probably other engineers out there who have faced and solved the same problem before. So, they take that solution and try it out. Of course, they have their fundamentals in place but everyone is still learning on the go.”
Learning on the go made sense to me. Moreover, it was quite liberating to hear this. I took this approach to learning & told myself - ‘I am not here to learn coding, I am here to solve a problem’. This approach of focusing on solving the problem at hand has empowered me to learn faster & better.
3. “You can get anywhere if you simply go one step at a time.”
Pick up a small problem. Take out one weekend and just start solving it. The key is to get a small win and then to keep stacking up these small successes. The best thing about code is that it is repeatable. If you have a small piece of code that solves a small problem, you can always extend that to solve a larger problem later on.
Engineers take a big problem and break it down into smaller & simpler steps quite beautifully. If the small solutions for each step work, they can be put together to achieve a larger goal. This is the most valuable life skill I have learned while learning to code.
4. Ask for help & unblock yourself ASAP
Coding isn’t hard by itself unless you are building a really breakthrough technology or the world’s next best search engine. But there are hard parts such as setting up AWS and setting up other infrastructure as needed. You will need a lot of help with these things. Always be ready to seek help.
When I asked my first question on StackOverflow, I got 5 downvotes on it. I was genuinely trying to understand something and people were telling me that I am not asking the question in the right way. It was demotivating for me as a beginner. Even if such things happen a couple of times, don't let random people deter you in asking for help from experienced engineers. The Internet, my engineering friends, and colleagues have helped me learn the most.
5. Build something useful to stay motivated
I am a big proponent of the no-code movement. Technology should be like a bunch of Lego blocks anyone can play around with. Kids don't think how a lego block gets made, what is the material used or what its tensile strength is. They just use it to build something they want. I am sure there are people out there who care about the perfect piece of code. I have no benchmark on what is good code or bad code. The only benchmark I have is to build something that people find useful. I feel successful when I build something and people value it.
Checkout Aditya’s latest side project, TimeSpent.
How & when did you start programming? What kept you going? Would love to hear your experience and any tips for beginners.
I share TL;DR versions of articles on software engineering that I read every weekday through my newsletter - in.snippets(). Sign up here if you want to learn something relevant every day.
Top comments (33)
6 . Learn one thing at a time. Don't try to learn 2-3 different things at the same time.
Unless it's about Javascript framework...in that case you need to know about node, webpack, npm (still node, but more specific), and then your framework like Angular or React (so maybe TypeScript too !), and maybe RxJs too, and the librairies you'll use like ChartJs, Moment, Lodash...
Okay, i'm just kidding but I think learning 2 different things that are linked together can be more useful and relevant that mastering one, then the other :)
True, I tried learn webpack before angular and wasn't able to figure out why I would need to use some of its tools. But after I have played around with angular I was able to understand more precisely how could I use it properly.
"but I think learning 2 different things that are linked together can be more useful and relevant that mastering one... " yeah......i totally agree this. Learning two things which are related, has helped me a lot. The thing which I could not understand from one, learning same thing from another related thing helped me to learn that thing easily.
Went from python baby steps to js baby steps. That webpack, npm, node versions, eslint setup, formater, basic unit tests, asynchronus code it was just blind skiing in forest trying to not hit a tree or moose.
This is a good one!
I'm definitely guilty of trying to learn multiple things or working on multiple projects at the same time. Focusing on a single thing/problem definitely does help make progress faster.
I have learnt this lesson too late.
I would say "focus on the problem in front of you". You might need to learn 20 things to solve that problem.
I'm sorry, I'm going to heavily disagree with you on this one. This is gatekeeping behaviour.
Everyone has the capacity to learn and become who/what they wish to. Nobody is born with an innate talent to code. We are all learning through this journey.
At one point, even I was a shitty monkey-coder (not much better today) and I'm super thankful to the people/mentors around me who helped clean up my shit. I learned a lot during that process and I hope to pay it forward to the next aspiring coder after me. That's how we progress; as people and as an industry.
Exactly that's why I'm spending a whole day fixing "small" bug. I believe you faced this: you make a small fix, but then SOMEHOW GOD WHY this touches a place in a project not even related. And then you found deeper and more general mistake, try to fix it, and again it pulls another issue, a snowball is growing and finally hits your face.
What's the result: the customer gets a shitty product, you are frustrated. All this because someone decided he/she could be a software developer.
You did really good job in this post - described how to be motivated and become a better programmer. But we are not living in a perfect world, full of unicorns. That is why I prefer to give practical advice, that everyone could try right now.
I agree I've been in a similar situation. More often than not, I've caused this situation to arise. But there's a big difference between telling someone "They shouldn't be in this profession" v/s "Here's how you can do better in this profession".
We aren't living in a world of unicorns and we should find better ways to imparting this knowledge. Everyone stumbles when they learn to walk. Imagine if your parent told you that you weren't cut out to walk instead of helping you improve your gait and make your legs stronger.
It's already too late to tell someone who's messing with a real project "You shouldn't be in this profession". I wish, but I'm realist. That's why I've added number to my advice - #0 (see my first comment, I have no idea why it starts with "1.", in the editor I see "0.". Some bug, probably.). I just want to prevent appearing of new "stackoverflow-developers".
And if we are playing in crazy comparisons, imagine the doctor, that keep failing in diagnosis, but keeps trying because keep hearing, how he/she can become better in his profession.
That's literally how Med School works. :)
School - maybe, but not a hospital. Such a doctor would be fired in a blick.
I am currently following an online Bootcamp (software engineering) and a bunch of related course in a complement of the program. I just wanna be the best. I am 28 years old. I studied applied economy. I have a pretty good statistical background. I will probably learn data science after who knows. Anyway thank you, I will do my best. It's just madness the country that I am living right now, but I will get it done.
It's great that you are learning to code. Wish you all the best for your journey!
Great points.
When I've taught people how to code in the past, I definitely found that people get in their own way a lot. They try to "just power through problems" (instead of googling), they get super overwhelmed at the entire problem (instead of going one step at a time), and they work on problems that aren't useful or interesting to them.
So these points hit all of those really well - and it's really important message for anyone learning how to code. Thanks for the post!
Good mentors like you make a huge difference in separating the wheat from the chaff for beginners. They don't know what's important to solve and what's not. And not seeing progress for a considerable time can become de-motivating.
Focus is key, without it coding is a real struggle. Since I been diagnosed with ADD I have been more aware of what the struggle is about. Most is about Self Reflection. Realizing what it is you are doing wrong. Asking the right questions.
Get to know yourself in these situations, step away from the screen when you notice it and it isn't productive. Reflect and most times you know what it is you are not doing right.
I agree, focus is critical; especially while learning something brand new. Since, I'm always interested in multiple things, drawing up a "calendar of learning" has helped quieten that curious devil inside me. It's a useful way of telling my brain to not feel the FOMO as we'll get to the new thing in 2 weeks from now.
And thanks for bringing up non-screen time! Most good ideas come in the shower. :)
Great advice!
I would add to focus on one or maybe two thing, if you are following a bootcamp then throw all your free time and energy in it, if you are learning your own way then try to focus on one site or tutorial, there's just too much around internet (sites, bootcamps, tutorials, etc).
That's absolutely correct!
A generic version of your observation is that if you have access to active guidance/mentorship, it's OK to explore. The guide/mentor will help you sharpen your focus and get you unstuck.
When striking out solo, it's best to follow a narrow path lest you get lost in the forest of programming and it's idiosyncrasies.
I like your points! But I would change the last one a bit. Instead of something useful, make something meaningful for yourself. Usefulness of tools you create as a beginner is often lost quickly. Or it becomes a necessity to change your tool to keep it useful. Go for something meaningful (when something is useful, it is often also meaningful) Instead. A own website is not always useful, but can be meaningful for yourself.
I agree. Especially with the personal website.
Most of my initial knowledge about HTML & CSS was derived from building personal websites for myself. In high school, it underwent radical changes every week! The more I found out about img tags and gifs, the more 90s design was put in. :D Definitely a meaningful project for me.
I struggled hard with #5. They say the best way to learn coding is by building something. So I figured, I might as well build something useful while I'm learning instead of another calculator.
Deciding on an idea of what to build takes me a while. And when I start building it, I either realize how useless the idea is or that it's impossible to build as a beginner. Some people just don't have great ideas and that really held me back. Coding is about figuring out how to solve problems, but if you don't know what those problems are in the first place then where do you start?
I think the solution here is to just choose a website like Facebook or Amazon and try to build it. You'll still need to find a course or tutorial that will teach you how to start. Copy another web app or two and maybe you'll start to come up with your own ideas.
-- Learn agnostic things
ReactJS, Laravel, Symfony, Angular, Spring, TypeScript, Redux, Gulp, Webpack etc etc are just logo's.
They will disappear. None of it will matter in years. I've been through a list of 60+ logo's in the last 15 years. Most of them do not matter anymore.
A developer's life may take up to 45 years, so learn things that can be applied in future frameworks and all programming languages.
-- Learning is something you do, for you
Your boss might want you to work in Macromedia Shockwave for internal programs for the next 20 years. It is up to you to explore the landscape and see if there better things to learn.
-- You will never stop learning
And you will never rest before you understand the problem that you are trying to solve. You need to learn about business and systems. When the going get's tough, the tough get going.
-- Tips won't help you get motivated
Motivation in this profession comes from an deep feeling of wanting to explore and try-out many things. You can not help it to find something that is a great sollution for your current problem. That stuff makes you come out of bed in the morning and will keep you motivated through you working life.
-- Motivation comes and goes
There are many times that you are doing other things, like holidays or having a good time offline. This will make sure that you stay fresh and motivated. Life is what happens offline.