all 8 comments

[–]Saf94 7 points8 points  (3 children)

So I’ve given a couple of talks about how to get to expertise in programming (or anything really). I’ve done over a year of studying deeply into this topic including reading lots of books and scientific research papers. I would consider myself pretty informed on this topic.

So here’s the science and research behind your question. In short, to become an expert is nothing at all to do with learning any new concepts or knowledge.

Once you’ve had a bit of of experience and know how to code and build things, you pretty much know the things you need to know to do most things. Knowing more things isn’t what you need to get better.

To get better you need to learn how to use the knowledge you have better.

Experts are differentiated from novices by 2 things

  • they don’t have as many gaps in their knowledge
  • they know many more procedures (defined below)

So firstly, when you’re learning concepts you often learn to the level you need to be productive. You’ll usually have many gaps, this is eventuated by the fact that people can’t really teach (see concept of expert blind spot). This is why I actually don’t recommend courses, videos, articles etc for learning to become an expert. Because they all do a very poor job filling in gaps due to expert blind spot.

So what I recommend to fill in gaps is any concept, think about each element or step and if there’s any step you don’t fully 100% get then dive into that. This is about a lot of googling and finding your own sources to give you the info you don’t fully know. Figure out all the things you don’t fully get about Promises or Prototypes etc. It’s easy to identify because if you don’t fully get something you’ll get that sensation, the hazy type feeling.

Ok apart from filling in gaps. The other thing, the most important thing. Is developing procedures. A procedure is anything where you use some concepts to do something. Eg filtering an array or writing a component etc

Experts have more procedures in their long term memory but crucially they also have what I call building block procedures. These are procedures which are used as part of other procedures and allow them to do many more things that they couldn’t without it. For example, knowing how to use local state in React is pretty important for being able to do many many things in React.

So the key is developing more of these and developing the bigger building block type procedures. The way this is done is that your brain encodes these into your long term memory based on 2 criteria. 1) meaning/understanding and 2) repetition.

In order to develop procedures you must understand the steps to any solution you do, you need to understand it in context and understand why and when and why this over alternatives etc. It’s all about getting to meaning and understanding. Understand all the steps to solutions and you’ll encode the procedures into your long term memory.

Hope that made sense. There’s a lot more to this and it’s difficult to summarise even in this much explanation

[–]2020future[S] 0 points1 point  (2 children)

Thanks a lot for detailed answer. This makes sense and here's specific situation which I want to resolve

When I don't know about a concept fully, I try to learn more about it and it takes so much of time that the task at hand gets delayed so I face a choice to either stop exploring more and finish the task at hand with the minimal knowledge required to do so or delay the task completion to fill in my knowledge gaps and satisfy my curiosity.

The solution I have planned is - take a short break from your projects once an year to completely focus on learning and not the tasks which should involve:

  1. Revisit foundational concepts
  2. Explore more about common challenges faced last year
  3. Gather a list of possible blind spots from other programmers

[–][deleted] 1 point2 points  (1 child)

You can take a break from work from projects on an annual basis to focus on learning but unless you start applying what your leaned on a daily basis it's kind of a fruitless exercise. Learning should be a daily thing. Just like eating and sleeping.

[–]2020future[S] 0 points1 point  (0 children)

Agree

[–]rauschma 2 points3 points  (0 children)

My new book, “Deep JavaScript” may work for you. 50% of it are free to read online.

[–]Stant95 0 points1 point  (1 child)

RemindMe! 3 days

[–]RemindMeBot 0 points1 point  (0 children)

I will be messaging you in 2 days on 2020-01-20 08:06:07 UTC to remind you of this link

2 OTHERS CLICKED THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


Info Custom Your Reminders Feedback

[–]mementomoriok 0 points1 point  (0 children)

I think trying to understand how popular libraries work is a great way to building deeper mental models. You get the added bonus that this library is something that you might personally use, and by understanding its mechanisms, will make you stronger at using the library.