Picture this scene in slow-motion. A Half-lit room. Nighttime and light rain. The smell of dark and creamy chocolate milk. And my keyboard mid-air about to smash on the wall into little pieces.
My first lines of code were written before the large Q&A communities were created (Stack Overflow and Reddit). There wasn't so much support, very little technical, and nonexistent emotional. I'm glad that programming in particular, and learning in general, became so communal.
Many things that bothered me back then, still riddle new programmers. I want to talk about the things that nagged me, in the back of my head, constantly, that now I know are nothing to worry about. Things that are part of the process and progress:
Am I good enough?
Programming is not reserved for the elite. The only criteria for being able to learn how to program is if you are able to sit down and spend the needed time.
It takes so much time:
Yes, it does, so invest the time and don't worry about it. Learning how to program combines learning a new language, and learning abstract concepts. Both are time-consuming.
I feel like there's something I should know that I don't:
There must be something that I missed!
A very common feeling. Like there are missing pieces of the puzzle that prevent you from fully understanding, even when you follow a pre-designed curriculum.
Just keep pushing forward, there are probably concepts that you still don't understand well, and as the layout of the language becomes clearer, you'll know what you should work on to feel more confident. Confidence comes with time.
I feel demotivated:
Motivation is like inspiration, it's for amateurs. I'm talking about the type that we feel from time to time, that makes us stand up, blood flowing strongly in our veins, wanting to change our lives. Don't give it too much thought when you feel it diminishing.
What you need is dedication, to persevere even when not feeling like it, and for that, a good schedule works well. Also, remind yourself why you're learning this in the first place.
Having a project, and building something you care about along the learning, really helps with the "why", and will help you put it the needed hours. It's also more fun.
Remember, learning is hard, don't let the world sell you a sugar-coated idea of learning becoming easy and flowing, "if you just follow this method, that costs $995 (regularly $5999!) on sale right now, for fast decision-makers".
Feeling stuck and tutorial purgatory:
Yes, this happens from time to time. If you feel it, then you probably should either get out of your comfort zone and proceed to more advanced content, or, you weren't persistent, and a month or two after you don't feel that you made any progress.
There's no advancing without time and persistence, and it's better to learn 1 hour every day than 10 hours every Sunday.
If you'll persist with one good tutorial, you'll outgrow it quickly enough and feel comfortable taking on more advanced materials.
Also, practice. After every lesson, try to implement it. Either in a "dry" manner, just as it was shown in the lesson, or even better, on your own project. Try to find uses for what you've learned.
A very important topic. Time management is usually the pitfall of learners. Some helping rules: create a schedule and stick to it! Don't start big, an hour a day is a good start. No need for 10-hour marathons.
Since learning is costly (mentally and cognitively), place the learning period at a time of the day when you are lively. Don't place it in the dead zones, the times of the day when you know you can't really get anything else done.
I look at code repositories of other developers, and I don't understand anything!
Neither do I most of the time. It takes time to understand another developer's code. I usually have to sit down and study the code and play with it to know the ropes. Sometimes it takes a lot of time. It depends on the project complexity and how organized and well documented was the other developer.
I'm terrible at documenting, or can you really be terrible at something you don't do at all :)? So it's not really a treat looking at my codebase, plus I have to do a lot of explaining with each collaboration. Be a better programmer than I am and practice documenting your code. Explain what functions do. Even if it's only for yourself.
Again with the code of other developers. I'll never be able to build something so complex and elaborate:
No one writes 10K lines of code at a time. Even those big projects you see on GitHub started with just a few lines of code. The code adds up with each day of programming, and a couple of months after, you suddenly find yourself with a respectable project. Provided that you were persistent!
Even those repositories that have many collaborators and a huge codebase usually start with 1 person writing few lines of code. You've got to start from somewhere.
Oh dear god, the stupid bugs:
Yup. Still happens to me too from time to time.
I can't remember the commands! Is my brain weak?
As stated before, it's like learning a language, and you need to practice to get the vocabulary into your head. To be honest, I still look for simple things on google sometimes. It's mostly things I don't use a lot.
A guy I follow tweeted yesterday: "Just wanted to let you know that I, a physics Ph.D., working for NASA, had to google the volume of a sphere today". If he is allowed, you and I are allowed as well.
Good programmers must write code as fast as they can type, and I'm so slow:
No, they don't (there are exceptions). and you'll get faster with time.
I can't build anything real until I am a professional:
Sure you can. Think you've just learned Italian. It's still kind of bad, but you can carry a conversation good enough to get around Italy! Sure it will be better in 3 years, but it is still functional right now!
The same thing happens in programming. You can build functional things as a beginner. Sure, the code can probably be significantly improved, but it works! It'll do the job, and that's what code is for. for doing the job!
Now another language?!?! I'm not good enough in this one!
Once you understand the major programming concepts and feel comfortable enough to build things in one language, you'll feel more confident to learn a new one when needed. You don't have to be a professor in one language before you acquire a new one.
Make sure you don't just jump around from one language to another, but if you spent enough time with one to the point where you can effectively use it, don't be shy to try a new one.
If there's one thing that repeated itself in this article, is that you have to invest the time, and do it persistently. Time and persistence will solve most of your problems.
Regarding issues of confidence, they go away with time and persistence as well. Know that many people share these worries. You're not alone.
I'm very pragmatic in my approach to learning. I don't think there's much more than time and persistence. I also think that anyone telling you differently is trying to sell you something. A special and costly method or service that will learn for you! "On sale, only today, for early birds and fast thinkers". Time and dedication!!! It's that simple.
Good learning resources are important but those you can find in abundance. Just take the top-rated Udemy courses or any other recommended resources. Follow them without jumping from one to another, and you'll surely get there.
First published here