"I want to learn how to code, how do I get started?"
If only I had a penny for each time I’ve heard that question, I’d be… ; well you know the rest. Being a developer seems to be the new cool and everybody wants a piece of the action. But the major stumbling block between novice and mastering the craft (or God mode as I love to call it) is that so many would-be developers do not realise that...
Learning how to code is a journey and not a destination
There are no shortcuts through the woods, no quick fixes, no instant learning. If you wanted to boil rice, you would have to put it on fire and wait till it’s done. You can increase the flame to ensure it gets cooked faster, but the bottom-line is it doesn’t get done instantly, you still have to wait (You’d think I knew a thing or two about cooking).
To truly become a developer, you need three things:
- Hard work
- Patience Patience Patience
See what I did there? See how I iterated the third one three times for dramatic effect and to show… I’m talking too much again aren’t I? Well, patience is the most important thing you need. Stop envying that dev you are looking up to, they've been practising for years. What you need to do is settle down and know that you are in this for the long haul.
To help you on your journey, I will talk about things you should do and what you shouldn’t if you truly want to learn.
Don'ts of learning how to code
1. Don't let people discourage you before trying things out yourself: I’ve seen a lot of people make this basic beginner mistake. Don’t forget that people tend to exaggerate a lot. You hear things like "programming is very difficult, especially that Java" and then you ask yourself questions like, "if it took this guy 5 years to get to this level, will I ever get there?"
Stop listening and start learning. We learn at various paces. Besides, what works for Mr. A might not work for Mrs. B. So block out the noise and start learning, get a feel of things yourself.
2. Don't give up when you get stuck: I know devs that have been stuck on just one issue for weeks. Personally, there have been times when I have questioned the meaning of life itself because of one itsy bitsy coding problem.
The truth is real devs never give up; we just back up, see the problem from a different angle and tackle it again till it gets solved (or we just use Stack Overflow. Actually, we use Stack Overflow most of the time). If you know anybody that claims to be a dev but abandons a problem because it is apparently unsolvable, please unfollow them immediately!
I have a system for tackling such issues. When I get stuck, I just do things to take my mind off programming for a bit. Watch a movie, play some games or even better interact with the outside world (this doesn’t happen often by the way. Geeks right?). By the time I get back to work, the problem is usually as good as solved (except for some really stubborn problems, like a genetic algorithm issue I faced. Really difficult to kill, but you can see its head on a plaque on my Github).
3. Don't pile on language after language: Ever heard of the phrase “Jack of all trades master of none”? I remember when I started learning, I had friends that started at around the same time, but they eventually gave up learning how to code and moved to something else. Why, you ask? Information overload (or Stack Overflow as my teacher used to call it).
There is only so much the human mind can take. When you overload it with information, retention becomes difficult and worse of all learning becomes tedious. Learn a new language and revel in it, enjoy it like a warm embrace in cold weather or like a dog in its own faeces! (Whichever sounds better to you).
After learning how to code in a new PL (Programming Language), don’t move on to the next one just yet. Build things with it, get comfortable with it, fall in love with it, let it be your first thought in the morning and the last before you go to bed (I’m not sure your significant other will approve though). Don’t believe you are now good at it until you have built something truly impressive with it. When you have truly mastered that language, only then should you move.
4. Don't take on difficult projects too early: When you start learning a natural language, like English, you don’t start from making sentences do you? Neither do you start solving differential equations at kindergarten. You need to ease into it just like every other language.
Start learning with simple things like Hello World and math problems. Then move up to something like a calculator. My rule of thumb is this -- the task has to be something challenging but at the same time something you are truly capable of handling.
5. Don't take too many tutorials without practice: Consuming too much information without actually practising is a really bad idea. You should have your environment setup and ready to practice every time you watch or read a tutorial. Consuming too much information without practice is like someone planning for a journey without actually stepping out of the house.
Another dangerous close relative of information without practice is proceeding with tutorials even though you don’t understand the previous step. Whenever you don’t understand something, ask other devs or go back to the previous step and listen/watch again.
6. Don't compare yourself with others: Never compare yourself with others in anything you do, especially programming. Bad, bad, bad idea. I’m not saying you should not have a mentor you look up to, by all means do, I know I did and it made my learning much faster. But never compare yourself, it's one of the most important things to note on this journey.
Remember that those you are comparing yourself to have probably had more time to practice and are also very different from you. For example, I realise the best way for me to learn is more practice, less tutorials. I have a friend that needs to watch tutorials step by step before practice. This does not make either of us less of a dev, it’s just how we are uniquely wired. You need to know thyself and find what best suits your method of learning. Plus patience plays a big part.
7. Don't use libraries or frameworks too early: Libraries and frameworks are great, they give you a real boost and help you add functionality that would normally have taken weeks to develop in no time at all. But, there is a time for everything. Making use of libraries too early really makes you lazy and skips a lot of concepts you should learn.
What happens when you get stuck on something as simple as form validation and you can’t solve it because angular-formly has always got your back? Take the time to learn concepts and do things manually first before you move on to making use of libraries or frameworks.
Another bad effect of using libraries/frameworks too early is that there are things you won’t learn and won’t be bothered to go back and learn because you already have a shortcut to getting it done. There are concepts in mongodb I didn’t learn because frameworks like Sails.js, Parse or Firebase had my back (Thanks but no thanks Firebase).
Do’s of learning how to code
1. Do think more than you code: Programming is based on logic. It's more about how you think about and see things than actual coding itself. Programming requires you to have a certain state of mind. It requires you to find innovative solutions to problems, it requires you to become the compiler itself. You need to be in tune with this state of mind (harness your chi) if you want to go far.
Someone once said the quicker you begin coding, the longer the project will take. You need to learn how to pick up a pen and paper first and plan out each detail before you write a line of code. When building a house, wise architects don’t just start without a blueprint to look at. They don't design from their mind. No, they draw the blueprint first and only then do they start work.
2. Do remember that less is more : Simple is good, in fact simplicity is best. Don’t pile on knowledge. Instead, patiently take your time to split up your learning into small bits till you understand. Make sure that function/class does exactly one thing and nothing more. Name that variable appropriately (you should read about the SOLID principles).
When building your practice program, take your time to perfect a functionality first before moving on to the next one. Remember there is something called versioning. All functionalities do not have to exist all at once, you can always add more later on. Just make sure you make things as simple as possible and you will be surprised at how easy programming is.
3. Do practice, practice, practice: My programming teacher once told me he practices for nothing less than six hours a day, I didn’t really know why but I took his advice anyways and it really really paid off. Learning to code is like going to the gym; you need to exercise your mind or you will forget concepts, stagnate and you won’t get very far.
There are thousands of tutorials out there, but all that reading will be wasted if you don’t practice. Remember programming is practical based and there is no replacement for actually rolling up your sleeves and practicing. Learn to put in the work. Practice daily without fail and you will be better for it.
4. Do learn by teaching: Trust me, this is the most important tip of all. It beats everything else I have written so far or that you will read anywhere else. I haven’t written a line of Java code in about 4 years now, but I still vividly remember how to code in Java just for one reason -- I taught others. In fact, I taught people how to program so much that I got the name "Tutor Doyin" from my students. Nothing beats teaching others, it might seem like wasted labour at first, but wait for it and let the feeling settle in, you will love it or not, but regardless still do it.
When you teach others, you are actually teaching yourself. The beauty is that you don’t even need teaching skills. You don’t have to even teach per se, you could just talk about it to someone or something (yes I said something, you can teach your pet). When you teach, what happens is that you stop being knowledgeable and you begin understanding. When you understand how something works, even if it gets twisted a thousand times it can never confuse you. I read somewhere that what you understand is yours, what you know is shared.
So find start teaching today.
5. Do value "why" over "how": Learn to value why something is done the way it has been done over how it is done.
When you understand why something is done the way it is, you will find that you truly understand it and can use the same concept in different forms. But when you only know how, you will be able to apply a quick fix and you might have to learn it again next time.
6. Do learn with a goal in mind: When learning, don’t just learn for learning sake; have an endgame in mind. Don’t set huge moonshot goals, simple achievable goals will do. You can set your goals by each step or you can set goals for the entire learning process.
An example of a learning goal could be, “I want to be able to build an inventory software after I am done learning”. A step goal could be, “I want to write my own function without looking at the tutorial once I am done learning this part”.
7. Do make Google your best friend: Never be ashamed to ask for help during your learning process. Ask for help from more advanced programmers, but most especially ask for help from Google. There is no shame in that. What could be shameful though is you just binge copying code without remorse or regard. When you find a solution, remember to understand why it works then apply it.
Be careful though; Google can make you lazy. Make sure you have tried the problem yourself first before consulting.
8. Do find yourself a mentor: One thing that really made learning programming easy for me is that I had great help from the start (actually I had help from two of the best). Even though I showed great promise from the start (not trying to blow my horn or anything, but then again why not), having people to push you in the right direction really goes a long way into shaping how you think about things and how quickly you can learn. They have been through most things you are just facing and just sharing their experience with you can make a whole lot of difference.
9. Do know that language does not matter: Another question most people ask is what language they should start with. That is actually the best part, any modern language will do, but make sure it is Object Oriented (OOP).
All you need do is determine which type of engineer you wish to be. Mobile dev (Java or Kotlin), Web (PHP, Js, Ruby). Any language is good, just start learning. When you are accomplished in one, trust me it won’t be difficult adopting others.
10. Do remember that health is wealth: Never become so engrossed as not to take care of yourself. Remember to eat, exercise and get a good amount of sleep, so as to keep up your levels of concentration. Programming isn’t going anywhere but your health could be affected. What use is learning when you can barely understand? So take good care of yourself.
About the Author
Doyin Olarewaju is a freelance full-stack developer and all-round tech enthusiast. Business Development and Soccer (devout Man Utd. fan) are things I love, because they both involve strategy. Follow me @OlarewajuDoyin.