Given the constant change in the software industry, learning new technologies is one of the most important skills for a developer. More often than ...
For further actions, you may consider blocking this person and/or reporting abuse
Amazing advice all around. This part is super not obvious for newbies. πππ
There's a similar process in chess. One must look at his opponent's move and figure out why he did it and what his plan is.
Great write-up! A lot of devs tend to try and dive into the deep end too quickly imho! (myself included, of course)
I feel like it's usually easy enough to dive deep when you are absolutely certain you need to use this right now. If there is any uncertainty about how and when to use it, I think that's where the fall off occurs in the deep dive.
I think we can forget how useful a shallow dive can be. I took a deliberate, but shallow, dive into Erlang and it was lovely. I may never write a line of Erlang, but I feel like I got a lot of quick gains on a lot of interesting concepts in software just by diving in a bit.
Sounds like you got a lot of exposure to Erlang, and got a fresh perspective from diving in...which is fantastic! Reminds me of when I bought a book on Ruby on Rails at a time when all I had done professionally was ColdFusion. I didn't realized how limited I was until I saw such a different way of doing things.
However, I do think it's important to cover your bases if you are interested in deeply learning a subject. I spent years writing JavaScript before I really grokked closures. I'm not sorry about that path, but I could have spared myself some mysteries if I had followed a more "Progressive Advancement" type path.
Shallow dive, this is the approach I took most of the time for new technology. Just spent 1 or 2 hours at most, try to get to a point where you can relate it to existing concept you already know. Then I considered it as done.
Yes, perfect rhythm.
One quick and sure way to be good with a technology is to use it a lot and not just reading or watching video tutorials about it. I wasted too much time before getting that.
1) Start reading about something [X] that you want to understand
2) When you encounter a term [Y] that you don't understand, go to step 1 for [Y]
3) Stop when you understand [X]
The best part of this method is that it still works for reaaally poorly documented topics.
You need all of that + 20000 hours ( 10 years ) of practice to make yourself worthy of your time.
I'd actually even say the stuff under the "Advanced" heading would be applicable at all stages. Maybe not dead novice - you need to know something - but even in the learning process, trying to explain it to a willing audience helps you to understand it better. (Of course, they also have to be an understanding audience that knows you're learning it too.)
Another interesting idea is that of "Just in Time" learning:
youtu.be/zKyv-IGvgGE?t=34m18s
However, this is not applicable in all situations. When a little change needs to be made in a complex application it might be necessary to understand a number of concepts first.
Maybe the "progressive advancement" concept can be dropped when all developers understand how to write clean code and thus the system becomes so easy to modify that everybody with a bit of aptitude can evolve it.
But maybe it can never be dropped because it is just a new name for the fundamental learning concept. E.g. nobody would expect a high school student to complete assignments on the level of a M.Sc. student and "just pick it up on the fly". It takes time to develop a mental model of the thing we are trying to learn. There are interdependencies between certain knowledge areas and it takes time to fill those gaps.