Learning how to learn

As promised, here is my post about learning how to learn. I consider myself a lifelong student. Not because I keep attending classes, but because I am consistently fascinated about technology and that it continues to evolve and there is always something new to learn. I remember when JavaScript was it, no jQuery, no Angular, no React. It was simply JavaScript. It was amazing. I kept playing with it in my favorite browser, "Internet Explorer". Who stopped reading right there? Was it you? :-) Yes, I worked on the web before Chrome or Firefox existed. Actually my first browser experience was Netscape Navigator on a NeXT computer. However, technology kept advancing and there were newer faster machines, faster browsers, faster internet, even faster than a 56.6k Modem! Why would you ever need anything that fast?

Then came the JavaScript boom

The JavaScript frameworks/libraries came out of the woodwork:

  • jQuery
  • Meteor
  • SenchaUI (ExtJS)
  • Ember
  • Backbone
  • Knockout
  • Angular
  • React
  • Vue

And JavaScript fatigue was a real thing. I would spend every weekend learning a new framework (literally, every Saturday morning I would dedicate to doing that). Would I become an expert? No. I would know enough to figure out the next steps. Then after learning so much JavaScript...

Backend languages became the new explosion

Led by none other than, node.js...

  • node.js
  • python
  • ruby
  • C# / ASP.Net
  • Go
  • Rust
  • Haskel
  • PHP
  • Java

And then those had frameworks on top of those to learn... the .Net Framework, Drupal, Django, WordPress, Ruby on Rails, etc...

So much learning... It truly is impossible to stay on top of all of it. IMPOSSIBLE!

What you can do is learn how to learn faster. It is like anything else in the world, you need to practice. However, the saying practice makes perfect is a lie. If you practice bad habits all the time you will become better at bad habits. The goal is to learn how evaluate your own learning process and hone it over time.

Here is what I do:

Let's say I'm learning a new language/framework.

1) Create a new repo 1) Setup a new starter project 1) Deploy that new starter project 1) Build on top that something that is useful to me - A signup flow?

I default to signup flows because I wrote signups for Microsoft for almost 7 years, so I know it REALLY well.

After those steps, I go through a tutorial somewhere on the internet for that language.

What do I need this framework/language to do?

  • Do I need it to do some cool animations?
  • Do I need it to handle timezones better?
  • Do I need it to improve my scalability for a project?
  • Do I need to improve the security of the framework?
  • What dependencies does it have?
  • How does it handle scale/maintenance/security?

As you can see one question can lead to the next. I try to be methodical about answering those questions and document, document, document. Every repo SHOULD have readme.md. It doesn't mean it will, but it should.

That is how I get started and then I have a project with that new framework/library and I keep plugging away. Something to note on my steps above, EACH STEP IS IMPORTANT!

  • If you don't have a repo, then you can't save your progress
  • If you don't know how to setup a starter project, then you can't create a complex one.
  • If you can't deploy it, then you are NEVER done. (I'll rant on that shortly)
  • Expand and grow - if you can't build on top of it, you haven't learned anything, you are only a C&P engineer.

Deploy Rant

If you build an amazing web application and it is secure, scalable, well-documented, and runs amazing on your machine, then you are not done.

Until you deploy your application on the internet it is not done!

I have interviewed hundreds of people over the course of my career and they all want to show me their amazing class project. They bring their laptop to the interview to show me.

The dialog usually goes something like this:

ME: "That's looks great, how do I see it on my laptop?".

CANDIDATE: "I haven't deployed it, I don't have that setup, Its not public facing...".

ME: "Cool, I understand, how would you deploy it?".

That often takes the interview down a path that the candidate didn't want to go. It continues:

CANDIDATE: "I would deploy it on Heroku."

ME: "Why Heroku?"

Oh, the twisted path of DevOps that no developer speaks of, but always refers to the infamous "DevOps Team" that handles the CI/CD pipelines.

IF YOU HAVE NOT DEPLOYED YOUR CODE THEN IT IS NOT COMPLETED

End Deploy Rant


I hope this helps you get started with your learning process. Remember we all do not learn the same way. You need to figure out what works for you. I like creating a project, tweaking, deploying, tweaking some more, deploying, etc... The more I do it, the more I realize there is a better way, and then I keep refactoring until it is "perfect". For the record, I have yet to stop refactoring, so perfection is not yet achieved.

QOTD- A goal without a deadline is only a dream.