Ads Top

Learning to Learn Programming (and other things)

I've been on a lot of interviews for developer positions. Full disclosure, most people do not know what they are doing. I'm not only talking about the interviewee side, but also the interviewer side.

Being in these situations, it is often the case where you are asked something that you may have some knowledge of, or at least know of, and you cannot recall it. In the instance where you can recall it, you might not be able to explain it properly.

This happened to me on a few occasions. The feeling you get could vary but it is mostly frustration because you actually did know it at one point. A lot of times when a technical question is asked, for some reason, my thought process flows like this:

1: I know this (because I probably do)
2: Create a mental picture in my head of a time I googled this and I can actually see me doing it
3: Try and recall the word for work definition

I can't define it word for word so I start talking and of course ..... mess it up and the impression is left that I don't know the topic.

An interesting example that comes to mind is someone asked me to explain Javascript Promises in layman terms. This should have been easier since I didn't have to remember word for word the technical definition. But as I started talking I wanted to change it up a bit midstream and ended up messing up the explanation.

Now, I'm a fairly competent developer. I've worked on many large applications, build things from scratch .... blah ... blah .... blah. But something was missing. Why is it that I couldn't explain simple things that I do almost daily?

The answer: I didn't have a full enough grasp on the topic to begin with. I could accomplish what I needed to accomplish, bit I may not have known it on a deeper level. So at some point I learned how to do something and could get it done. But in reality I didn't LEARN how to do that thing on a deep enough level to be able to articulate it well enough. Knowing something well enough to get it done for yourself is ok, but knowing something well enough to the point where you can explain it to someone non-technical really sets you apart.

This is not a development/programming issue. It was a learning issue. With that I started investigating learning techniques. I stumbled upon two interesting methods that I have combined with great success.


The Feynman Technique
Richard Feynman, best known as a theoretical physicist, is the thought provider of a learning technique called ..... The Feynman Technique. Feynman was actually know as the great explainer. He had the ability to take highly dense topics and explain them in ways that even average people could understand.

The Feynman technique is a system for learning which basically comes down to understanding what you are learning to the point where you can explain/teach it to someone else using your own words and examples.

Sound simple? It is once you get to the point of understanding a topic.

There are four main steps to the technique
1. Pick a topic to learn: Gather all of the information about this topic you can. Keep track of it somewhere. A notebook, a word document, google docs, anywhere. When you get new information about the topic add it to this place.

2. Teach, or Pretend to teach to topic to someone: Explain the topic in the simplest terms possible so that even someone who is not an expert on the subject could understand it.

3. Read over your notes or other sourced material when you get stuck. When explaining something, you may realize the holes in your knowledge. At this point go back and learn more and again.

4. Use analogies to simplify. This is a process that gets easier as you go along. Even a simple explanation at the beginning may seem complicated as you gain a deeper understanding.



Spaced Repetition
The second method I have been integrating is called spaced repetition. Spaced repetition is quite simple as it sounds, the spacing out of learning new knowledge of skills over time instead of cramming it all into a short period of time.

A good explanation


How to apply spaced repetition


What is a Promise in JavaScript?
I haven't been asked to explain a promise in javascript since that interview, but if I did I would start with a non-technical explanation first and then go deeper into the tech if we had to.

For example: A promise in javascript is a way to handle asynchronous functionality. For example, making a call to an API, you then have to wait for a response back but the program could continue running. You could use a promise to deal with this type of situation.

Or better yet ...... A layman example

Imagine you and a group of friends go to a restaurant and place an order for food with your server.

The order is the Promise that is now in a PENDING state

There are two possible scenarios that could happen
1: The chef makes the order and it is ready to be brought out. The server delivers your food. Success. The Promise returned a RESOLVED state you can now deal with

2: The server takes the order to the kitchen and finds out that what you ordered is now sold out. Failure. The Promise returns a REJECTED status.

In Closing
That is essentially it. Learn a topic by detailing it out as in depth as possible. Space out your learning using spaced repetition. When you have a very deep understanding, come up with a simple example that could be used to explain it to a child. Repeat the cycle for a new topic.

Now, the next time you go on an interview or just have a random conversation about something, you should have an easier time to explain what you know because now you actually do know it.

For more on Promises check out this entry

Like this post? Follow me @ _thedevnotebook on twitter

No comments:

Powered by Blogger.