What I would tell my past self about learning programming.

What I would tell my past self about learning programming.

·

17 min read

INTRODUCTION

TLDR Introduction/Premise

The onus on learning to become a developer in a situation where you don't come up with the typical background or training is on yourself and what the best effective/efficient way to acheive it is based on what I've learned so far. You can skip to section titled "Pick a Language" if you'd like.

As far back as I can remember, I always wanted to become a programmer. Now at the time I only had a small idea as a kid coding in basic but later experiences in schooling and life would lead me to believe that it was an unattainable goal.

When I finally did get the chance to learn "IT", at least two different times officially i.e. insitutions, and in industry roles, the experiences always left me overwhelmed. And I would end up coming out gaining hardly any transferabl experience.

And then there was the curious mixed bag found in education systems. Systems which had more of a focus on business studies (yes even in a pure computing degree), filler subjects and eschewing anything computer science related as, frankly not very necessary and.

So work environments where your roles prevented any real learning or experience with simlarly effective education swirled into a perfect storm. Lack of practical skills from education lead to roles which were of a calibre and level that prevented any progress or experience; lack of gaining viable experience lead to going back to education - which then had similar, if not the same type or level as the previous time.

Premise

If you are a beginner and wouldn't have the best environment, circumstances or resources to know where to begin, what to focus on and how to go about learning something you've always been so passionate about, how would you go about it? What would you do if repeated attempts at gaining skills and experience through traditional education and work still leaves you without the prequisite skills and knowledge for entry level jobs?

Well this is what I would like to tell me past self, and probably even remind my current self of how to focus and achieve viable skills.

Pick a language

This is particularly true if you are JUST starting out. Forget learning frameworks or learning how to build complicated apps or games. Just pick a language. Learn the ins and outs, get a firm grasp of the basics first.

The language can be one that is in the area you are interested in, or would like to work with in the future. If you already have language/languages that you are learning from work and/or study then best to pick one from that pool that best fits what you want to study (i.e. programming style, application types etcetera) and reinforce that with this regiment.

Picking a language that has a different paradigm to what you are learning has very important benefits to improving your overall skills than say picking something which is similar but from a different vendor. Example: learning C# while you are learning Java would be slightly redundant from a learning perspective; learning functional language, like JavaScript, instead will expand your capabilities and outlook more.

Create a plan of attack

Outline an overall plan. Even if it lists out the rudimentary steps at first, just put it to paper:

  1. Learn the basics, some simple algorithms, simple applications.
  2. Learn intermediate topics, continue practicing previous algorithms and add one or two advanced ones, more advanced applications.

This could be a generic outline, but in your own version have specifics that say if you want to build an application, or learn a framework and build at least two sample projects for demo purposes etcetera.

The plan shouldn't be seen as set in stone, if areas need amending or you learn a better way to approach something or learn, adapt as necessary. If the plan isn't working then you need to overhaul it completely, but don't just stick to something for the sake of it.

And once it is working, stick with the reigment you crafted. For learning comes with one very vital ingredient whose rampant absence seems a worrying trend in all manner and modes of training and education. And it seems especially pronounced in IT.

Practice, practice, practice, and then some more

One thing, which seems to be a distant whisper, especially in the modern imparting of knowledge of programming and tech, is practice. It might be implied but the modus operandi of most places is:

Here is the information which is required to be doled out during the hours that are set out. It may or may not contain anything of relevance or pratical utility, but it is here and it has been passed. Or here's a tutorial on learning [insert language or framework here].

Once the information has been relayed, the job is considered done. There is no instruction to the students, or even requirements to verify that the student has understood or grasped the concepts. Only intermittent assignments and probably an end of term examination which tests memorisation more than true learning.

You wouldn't find such lack of emphasis on practice or training in other fields such as sports, medicine, engineeing. All of these would have not just well defined curriculum but a clearly regimented and required training sessions and fulfillments built in to be considered properly qualified.

IT training just seems to be a gold rush where everyone seems to have crawled out of the woodwork promising you all sorts of tools, systems and education to get rich quickly. The goal is to get people in quickly and out for the next cohort to siphon money from.

Learning, what it is good for

Simply watching or doing something once or twice is not conducive to learning - the illusion of learning perhaps. But true learning doesn't occur with a superficial absorption of some high level details and maybe one or two sessions of trying something out.

True learning occurs with repeated effort, and with periodic repetition at intervals before the knowledge that is stored in short term memory dissipates into nothingness and transferred to long term memory. Anyone who's "studied" before exams or felt like everything they'd learned seems to have completely vanished after a few days to week of not looking at it can attest to that.

Side note: There is a great course that goes into this exact premise and I think eveyone should check it out. It's called Learning How to Learn available on Coursera.

How to stay focused and practice

What needs to be practised will be dependent on what it is your learning. I'm currently working on something to see what types of exercises can be developed to help someone learn the basics of HTML5 - stay tuned.

But once the criteria and requirements have been outlined it can be helpful to have a way to see what needs to be done, whether you've done it. And an added bonus of how long you spend can be a valuable metric. This can be beneficial if you only have a limited amount of time a day. And after a long day of work or other duties, trying to collect yourself and decide what needs to be done can be taxing and most probably lead you to deciding just to stick to Netflix instead.

It is crucial to keep working, every day if possible, to keep momentum going. And even the slight amount spent whenever you get the chance can add to overall result significantly in the long run.

Here are two tools I use to remove that cognitive load and instead give me a list of recurring items that I need to be working on based what day it is.

amazing_marvin.jpg *Amazing Marvin - Is a tool to set recurring reminders on a frequency of your choosing. You'll be able to plan and spread out your tasks throughout the week and instantly see what it is you have to do on a particular day, finish it and check it off. You can see if anything is left over from the previous day. You'll be able to get a free 30 day trial and if you use the coupon TXDONAL, when signing up, you'll get an additional 30 days on top of that. It is one great tool and definitely one worth checking out.

toggl_track.png Toggl Track - This is lets you track the amount of time you spend working on something either while working or retroactively. It lets you set projects, clients, tags for whatever you are working on. There's weekly reports which are emailed out to you which shows the breakdown for the previous week, which is handy for seeing what it is you have been working on, where most of your focus is, what might need more time etcetera; more report time frames are available in the online app. There is a mobile and a desktop app as well. The free tier gives you most of what is needed.

*Disclaimer this is an affiliate link but I only promote it because it is something I use EVERYDAY and has helped me progress through tasks and life, especially when everything is in disarray and you only get a few minutes a day to work on your goals.

Pitfalls & knowing when to quit

While it is imperative to consistently practice what you are learning, and to practice after you've moved on a newer topic, there are things you have to be weary about:

Reaching a plateau

If you keep practicing the same thing over and over again, there needs to be a time when you should realise that you've done enough and move on. This is particularly true when you stay at the same comfort level.

In order to remedy this you should move onto more advanced topics and practice that. Or try and build something using the skills you've been practicing to extend beyond what you know.

Can't seem to make progress or understand

Often, especially if you are tired from a long days work, or other reasons, it might seem that no matter how much you try you can't focus, or seem to understand something. It could be a sign that you might be drained physically, or otherwise, and might need to recharge. When that occurs it's wiser to take a break than trying to forge ahead. The course I mentioned on Learning how to Learn gives very useful information about this, and also points out that sometimes for something to make sense or stick, you actually do need to step away from it - after having spent the necessary effort trying to learn it of course.

Conclusion

The main points of what I've just elucidated is nothing novel; it's been repeated numerous times by people who've learned the ropes, and probably the hard way. Most of the tenets have been expounded in productivity and self help books myriad times and in their own unique styles. It will be said and dismissed, and will continue to be said and dismissed time and again; it's something I've been guilty of as well. So it is good to be often reminded of it.

I've learned and slowly weeded out most of the wasted motions and efforts, but sometimes it still creeps back. That's why a clear vision, goals aligned to that vision, a system of regiment and application of that system, day in and day out, is needed to succeed. In not just programming but most spheres of life.

It might seem like a massive investment of time and effort, but it will be a well rewarded, and highly valuable one. Especially when compared to the amount of time, effort and even money you will spend, which might most likely lead nowhere, had you not stayed committed to a dedicated goal with a well thought out plan of approach and learning.

And by sticking to the plan, and just learning the language till you've gained a very good competency, will enable you to learn another language or framework with greater ease than had you just superficially learned the basics and tried to learn something more complicated and nuanced.

As a leaving note, even if what you focused on and learned isn't what you might end up working with, I would say stay focused on developping and expanding it because it could very well lead to something you could do aside your job - a side gig giving you secondary income, creating passive streams by creating learning content of what you know, or giving you greater knowledge and job security by giving you a different set of skills from the one you gained through work. Buy Me A Coffee