Things really do come in three's in life and coding/programming/development is no different. So from me to you, here's an overview of my top three difficulties while learning to code.
There's no easy way to say this but programming is actually quite difficult. When Bill Gates tells us that coding is easy, it is the same as Usain Bolt telling us that it's easy to run fast. Statements like these give the impression that coding is a quick and easy skill to learn; that after a couple of tutorials and some quick run-throughs on YouTube, we will have acquired this amazing sought after skill. The sad reality is that is not true at all.
For me personally there are three items that stand out:
- Escaping tutorial hell during the gold rush
- The three P's: Patience, Persistance and People
- The forward first mentality
Escaping tutorial hell during the gold rush
In 1885 in South Africa, gold was discovered in the Witwatersrand Basin leading to the largest gold rush in history. Many flocked to seek their fortune but some realised that being the middleman in this event was far more lucrative, the idea being that people who sold shovels and mining equipment made more than the people who actually mined for gold. We are in a gold rush right now in the programming world with only 0.5% of the world's population having the ability to code. The middleman once again rakes in his fortune by selling equipment to prospective coders in the form of tutorials and online classes.
It is extremely easy to get stuck in tutorial hell with all the resources that are becoming available to us. You may find yourself enrolled in course after course following video lectures without actually learning much. Not to say that they are invaluable, we need just be careful and tread lightly ensuring we do not get stuck in coding purgatory with the inability to move forward and improve our skill set.
Music and movies will tell you that it's not the endpoint that matters, it's the journey. In the world of computer programming this cannot be stressed enough. In many instances when you know a decent amount about a topic, you can be comfortable knowing that your knowledge will carry you through. For the most part, many fields evolve slowly and knowledge from earlier years still makes up the foundation, requiring a small amount of learning along the way to maintain competency. Coding is right in the middle of a transformation, one minute a language is popular then the next it's on the back-burner. The industry is morphing and it's up to you to stay with the curve, or risk being left behind. Thus it is important to enjoy learning as you will almost certainly find yourself learning new things on the job. If your personality and mentality do not align with this, it's important to reconsider your intentions and your path.
The three P's: Patience, Persistance and People
That's a lot of P's...
Let's abuse alliteration to get started.
Procure potential. Please practice precise programming pro-actively producing promising professional potential. Pepper Pott's paddle pop pineapple party...I diverge. What I am saying is, you have got to surround yourself with good people that will lighten your life, keep you motivated and help you achieve your goals. You also have to motivate yourself through the hard times because believe me, ctrl c ctrl v from stack overflow is not always your friend. And lastly, a note to myself, that can also apply to others, you have got to have patience...mostly with yourself but also with others. I often unconsciously attempt things quickly without thinking them through. I can't help myself; I read quickly, write quickly, speak quickly even try to quickly quickly. I know I saw it too, that last part - it makes no sense. You can't 'quickly quickly', but you get the just of what I am trying to say.
Imagine eating the burger below, that's the Full Stack burger...
That's a lot of content, and again that's only the surface. There are currently 700 different programming languages, no wonder people find programming intimidating. It can be extremely easy to get lost and that's where a good guide can assist, creating a path and lighting the way forward. Leaving it better than you found it.
There are so many different ways to do something in programming. Given the same task, people will produce different code depending on how they see and solve the problem. That's why learning good techniques and practices is essential in order for you to efficiently produce high quality code.
The forward first mentality
I have been playing golf since I was a kid and as many will tell you, it is anything but easy. The game is full of frustration, yet when you manage to get a handle on things it becomes satisfying and relaxing. When someone new to the game decides to join in, I always remind them of the 'forward first mentality': the idea being that as a new player, if the ball goes forward you are making progress and we are all happy. This idea is analogous to programming - if you are moving forward, you are making progress.
Trust me when I say that any progress is good progress, not everything is absorbed and learned instantly. Things take time and it is easy to forget this while wrapped in a blanked of frustration, because your code is not doing the things you want it to do.
In life and learning, we cannot possibly have or know everything. However, we can encapsulate everything into these four fields:
- Known knowns
- Known unknowns
- Uknown knowns
- Unknown unknowns
To elaborate, some things we know that we know and these are with us for the long haul. We may also come across something that we know we don't know. We can then isolate exactly what needs work and what we need to do. Sometimes we don't know that we know something; maybe you can perform a complex mathematical procedure without knowing what it is. Finally, put simply, we don't know what we don't know.
These ideas help us to understand where our focus needs to go and where we need additional practice to master a skill. Using the 4 or so steps of the Feynman technique can really assist you with getting to grips with where you are and where you need to go next. You will have a much better outline of the content you are comfortable with, and will be able to immediately identify the areas that are not as well understood. Link to video selection:
To summarize, be vigilant and aware of what people are offering you. Remember they're also looking to make money (not everyone of course), but if it sounds too good to be true, it probably is...as someone who has won the fake lottery before, trust me I know the feelings. But keep your head up, and from me to you - you can do it! Remember, patience, persistence and good people. Coding is the metaphorical elephant people are trying to eat, and the only way to do it, as we all know, is one bite at a time.
Oh and just remember, should someone come and stand next to you while you are coding, it is your responsibility to notify said person that you are in fact in 'the mainframe'. This will help your code run smoothly whilst reiterating to said person standing next to you that you do in fact know whats going on and they can trust you. The message reverberates, "Hmmm, yes the mainframe..." they think to themselves; that sounds important.
A send-off for the soldiers that made it this far, I am proud of you and here's what to do next: you have got to make stuff, break stuff, fix it, be excited about it, break it again, learn something about it, understand it, be frustrated, be curious, be patient, be helpful, and most importantly, be human.
Some honourable mentions
Less obvious things also play a role along the way. Sitting behind the computer for hours on end can take its toll. Stay hydrated, take enough breaks. It's easy to get wrapped up in it all and stray from the end goal, so sometimes stepping back actually helps you see the bigger picture. Think about your motivations for wanting to learn: are you inspired enough for the long game, or are you only fueled for short-term success?
During this pandemic, depending on your 'entry' situation and then adjusting to how the world will change thereafter, can offer a new perspective. Aim to exit this period stronger than when you entered, whether that's learning a new skill, spending time with loved ones, enjoying an old hobby or finding a new one.