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
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
Great Article
ReplyDeleteReact Based Projects for Final Year Students
FInal Year Project Centers in Chennai
JavaScript Training in Chennai
JavaScript Training in Chennai
Present day innovation has made ready for another modern age, with man-made brainpower (AI) and AI among the main impetuses behind advancement.machine learning course in pune
ReplyDeleteWe will talk more about the APL programming language on other article posts, for right now let's focus on A+.list of IDE for PHP
ReplyDeleteRegretfully, the full paid version of the IDE is not cheap, and probably not appropriate for a hobbyist, but fortunately to learn VB the free version is enough. In practice, very few commercial programs are developed in VB these days, but the Visual Studio IDE allows you to use many other languages. ergonomic chair
ReplyDeletePretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info. pregnancy tests
ReplyDeleteDespite the fact that support up is a decent reinforcement choice (pardon the play on words), reestablishing your WordPress site to a sponsored up adaptation is an issue so it's best not to release things wrong in any case. error establishing a database connection
ReplyDeleteOne thing that every single new developer must come to term with is the measure of time learning a programming language takes.excel vba training london
ReplyDeleteExcellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking. applicant tracking system
ReplyDeleteGreat survey, I'm sure you're getting a great response. satta king
ReplyDeleteIn case you're hoping to get yourself on the main page of Google's list items quickly, this SEO direct isn't for you.SEO lead generation
ReplyDeleteSchools across the globe are going through a growth spurt of sorts, which is both painful and unavoidable. I'm talking, of course, about technology integration. Maybe your class is using a COW (Computer on Wheels) cart once a week or maybe every student in your school is suddenly holding an iPad and administrators are throwing around the dreaded phrase "going paperless." Programming Help
ReplyDeleteI am so grateful for this post and thanks such a lot for sharing it with us. آموزش بازی انفجار
ReplyDeleteThis is on the grounds that there are those customers who might pay under $100 every month while others will pay more than $5000 per month. Webdesign Hasselt
ReplyDeleteYour blog never ceases to amaze me, it is very well written and organized.~`’-: buy shrooms canada
ReplyDeleteYes i am totally agreed with this article and i just want say that this article is very nice and very informative article.I will make sure to be reading your blog more. You made a good point but I can't help but wonder, what about the other side? !!!!!!Thanks best office chair for software developers
ReplyDeleteBe that as it may, SEO can likewise be the most productive techniques for driving leads in light of the fact that any leads you get from SEO are free leads. Webdesign
ReplyDeleteYour texts on this subject are correct, see how I wrote this site is really very good. best R course for data science
ReplyDeleteLiên hệ Aivivu, đặt vé máy bay tham khảo
ReplyDeletekinh nghiệm mua vé máy bay đi Mỹ giá rẻ
vé máy bay bamboo đi quy nhơn
vé máy bay từ hải phòng vào sài gòn
vé máy bay đà lạt - hà nội
vé máy bay từ mỹ về việt nam hãng korea
thuê xe 16 chỗ đi sân bay nội bài
combo nha trang 4 ngày 3 đêm
On the off chance that the parallax site is one page of content, pictures, and great visual showcase it is OK. Notwithstanding, if the site has infographic.i.e. picture having text, Google doesn't understand it! This can prompt low SEO positioning. https://www.sandeepmehta.co.in/affordable-seo-services-delhi/
ReplyDeleteThis blog are having very informative information on learning programming and keep share more blogs like this https://thewebgross.com/seo-services-delhi-india/
ReplyDeleteEnglish competency is very important not only to excel in school, but also to succeed in business. Effective English communication is very much valued by companies and businesses, although few people can really maximize their use of English. https://www.sandeepmehta.co.in/blog/google-word-coach/
ReplyDeleteAivivu đại lý vé máy bay, tham khảo
ReplyDeletevé máy bay đi Mỹ giá rẻ 2022
mua vé máy bay từ mỹ về việt nam hãng eva
bay từ nhật bản về việt nam
khi nào có chuyến bay từ đức về việt nam
từ canada về việt nam quá cảnh ở đâu
giá vé máy bay hàn quốc về việt nam
vé máy bay đi nhật bản
I’m going to read this. I’ll be sure to come back. thanks for sharing. and also This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article... Estimulacion temprana para bebes
ReplyDeleteA round of applause for your post. Much thanks again. Will read on...
ReplyDeletebest digital learning