Struggling With Programming? Read This Now!
This was posted originally as feedback to students in my Java course, but I figured it might be valuable to post on the blog.
Programming can be quite difficult to start. Some people find it completely overwhelming. They struggle learning the language, figuring out how things work, and wonder if they can ever really succeed as a programmer.
Others say they can understand the training (books, videos) they go through, but when they come to write their own programs they freeze up, or can't seem to work things out.
Are you feeling like that at the moment? Are you ready to throw in the towel? Let me tell you that this is a common thing to feel early on when you are learning to program.
PLEASE READ THIS THROUGH, RIGHT TO THE END! TRUST ME, THIS WILL HELP YOU IF YOU ARE FEELING LIKE THIS AT THE MOMENT!
I'm not here to tell you programming is easy. If it was a simple thing to learn, everyone would be doing it. It takes time, dedication and persistence to become a programmer. You are not going to suddenly wake up and be a fluent programmer overnight. If anyone tells you that, I am afraid they are not being truthful.
However, I believe that almost anyone can become a good programmer if they stick with it. In my experience the number one reason why people become good programmers is persistence. They don't give up. They work at it. If they don't understand something, they research, re-watch the video, re-try the exercise, etc - Sometimes 2,3 or more times!
They type in the code they are having problems with. If they find an error, they paste the error into Google and see if they can figure things out.
They experiment, they ask questions (in the support section if they bough an online course, otherwise a forum). They share with other students of people doing what they are doing, or taking the same course.
In other words, they don't give up. They realise (correctly) that it's up to them to work the problem, and to be persistent and doing that gives them a vastly increased chance of success.
Let me tell you again. Persistence is the number one skill you need to become a programmer. If you persist, the chances are really high that you will succeed.
Now let me give you an example of how this works. Bear with me as I explain this, you will be glad you did if you read through.
I am a gamer. I play computer games. It's my way to relax when I am not programming, or creating videos.
Earlier this year I bought a game called Middle Earth - Shadow of War.
I'll leave you to Google more about the game if you are interested, but I want to tell you about my experience with the game, and how persistence was the main reason I managed to complete the game.
When I started the game, I had no idea what to do, and when I met enemies (even relatively weak ones) I got defeated easily. I got flustered and was clicking the wrong button at the wrong time so that I was not blocking their attacks, or not attacking them when I should.
Or moving in the wrong direction so I was getting hit in the back! I was getting defeated a lot!
Did I understand the game at that early point and what I was supposed to do? No!
Did I instinctively understand the controls at the start of the game, so that I could press the appropriate button combinations to defeat the enemies? No!
Was I enjoying the experience of getting defeated again and again? Not really!
I was getting frustrated, and annoyed. More than once I have to say I did a ragequit - Gamer talk for quitting the game because of my frustration at being defeated.
Did I give up though? No!
I persisted. Sure I may have left the game a few times frustrated, but the next day I was back ready to take on the forces of Mordor again.
And a funny thing happened. Well, it's probably not funny, its actually quite a common experience for anyone learning a new skill.
And playing games is a skill, just like programming.
What happened? I got better at the game. I started to understand what my role was in the game, I found out that my fingers start instinctively pressing the right buttons at the right time, without any clear conscious thought on my behalf.
At the start of the game I had to continually think "Oh which button is the attack button again?". Or, "How do I upgrade my weapon?", and so on.
In other words, each step I took in the game required a lot of manual thought, and things seemed to take a long time to make any real progress.
But I then found myself thinking about what I wanted to do, and not how to do it. In other words my thoughts when playing the game turned more into the outcomes I was looking for. e.g "Oh if I defeat those five Orcs over there I can get to that next point in the game", rather than "Oh what is the attack button again?".
My brain took over the controls for me. I didn't have to think of the controls anymore, I just focused on what I wanted to achieve in the game. My brain subconsciously took over the controls so I could focus on outcomes.
No different to learning to drive a car, right? If you are a driver now, do you remember the first time you ever drove a car? Compare those early experiences of drive with taking a drive today. Do you have to think about turning on your indicator when moving into the right lane? Do you need to remember which pedal is the accelerator? No, the brain subconsciously does it for you.
You probably are not even thinking about driving. But probably about whats for dinner, or which programming course you will be studying tonight. :)
But back to my game experience, briefly.
At the start of the game, I struggled to defeat even a single Orc. But now I was finding myself in a battle with ten, or twenty Orcs at once, and winning. Easily...
Towards the end of the game, things really get difficult, but I was taking on the best that Mordor could throw at me, and I was despatching those forces of evil, quickly and efficiently. Sure there were some hiccups along the way, but it became rarer for me to be defeated, and more often than not, I was winning battles.
No more ragequitting - I understood the game, the controls were instinctive, and it was fun. I got to the final two "boss fights" and completed both successfully.
I won the game (although there are now other missions available for purchase, should I decide I want another challenge).
Can you see a parallel to learning to program here? I hope you can.
When you start out programming, you don't know the language that well. When trying to solve challenges, or write your own programs, you may struggle because you are focused more on the "controls" - e.g. "Which keyword is used to exit a loop again?". Or, "Do I put a semi-colon at the end of the line that ends in a left curly brace?". And so on.
But as you persist, the right keywords come instinctively. You start thinking along the lines of "ok, so I have to exit this loop if the calculation has completed, and then I have to save the results to a file".
Your brain instinctively tells your fingers to type "break;" to exit that loop, and remembers not to put a semi-colon on a line with a left curly brace, because thats a code block, and you don't put semi-colons there.
If you are frustrated, or worried, or ready to give up, it's likely you are at the "start of the game" when it comes to programming.
You don't know the story, or the controls well, so you have to think hard about each and every thing you do. Maybe you have done the equivalent of ragequit - e.g. Closed down the IDE in anger. We've probably all done that at some point!
I want you to realise that most people go through this phase. If you persist, you will get better at programming, and then the fun really starts!
If you have taken one of my online video courses (or any online course), think back to when you first started it. Have you learned anything along the way? You would be surprised if you remember where you were at when you started the course. It's highly likely you have already learned a lot and got better as a programmer, without really realising it.
You're probably more focused on what you need to learn, or how you don't understand this latest video, rather than what you have already learned. It's normal, we all do it from time to time.
But don't forget to remember the progress you have already made, because this will help during those times where you may be discouraged or frustrated. Realise that if you persist, you win!
I want to assure you that if you are persistent, and keep working towards your goal to become a good programmer, and keep at it, and don't give up, the chances are high that you are going to succeed.
Any skill takes time to learn, and more time to master. Be persistence, and keep moving forward.
I've seen so many students start one of my courses, and go on to getting their first job, or a new and exciting promotion. In all of them I saw that common trait, persistence.
Don't be too hard on yourself. Celebrate your successes (even minor ones). Just know that the key to your success is persisting, not giving up, and moving forward each day.
I hope this helps you see that you can do this. You've got this! I'm here for you, cheering you on to success from the sidelines!
One final thing, I've just posted an answer to this question. Do you need to have a degree to get a programmers job - you might be surprised by the answer. Google and Apples have recently updated their hiring policies about this.
So don't give up, keep at it! There is even more reason to push through and learn how to program.