When I was growing up, my interests spanned various, seemingly unrelated fields. I loved maths as much as I loved history. I aimed to be a Renaissance man -a polymath-, that excelled at multiple fields. This turned out to be an arduous task and suddenly I faced the danger of being a jack of all trades, master of none.
I started thinking about specializing in certain fields so that I could at least be “a jack of all trades, master of some” man, if not a Renaissance one. How could I specialize in a field while retaining the vast knowledge required to do software development?
Most of the web developers nowadays face the same problem: They have to excel at multiple different fields, from databases to backend architecture to frontend user interfaces to polishing these UIs with good knowledge of CSS.
The first and foremost observation is that you have to make a dedicated effort to excel. It is true that you can get bits and pieces while doing a half hearted effort, for example by reading some blog posts from time to time, and it will seem easier because the initial time investment will be lower. Such an education will cost you more time in the long term than a dedicated and distilled learning process. The answer to this dilemma is easy: Read books.
Books are what our civilization stands on the shoulders of. Written word is how we pass knowledge from generation to generation, in a concentrated form. One problem with becoming an expert on Web technologies is that you have to learn when to stay away from the Web itself. Web itself presents a chaotic and distracting medium for learning stuff, so the first suggestion I will make is to read books on the subject matter.
Learn, Use and Read Libraries
The next most important step is getting to know the libraries. If the books teach you how to read a language, the libraries teach you how to speak it. There are two important things you can do with libraries: use them and read their source code.
Understanding others in the list, such as React, Ember etc. might be harder, but well worth the effort. At least skim through the source code of other libraries to see how to structure your code base and try to discover some patterns. Other notable libraries for using and reading the source code include d3, highcharts, moment.js.
Do Exercises and Ask Questions to Yourself
Try to answer questions such as: How does prototypal inheritance work? What
defines a closure? How does the meaning of this keyword change? How does one
use apply/bind/map/filter/call? Gather a list of common source points
these concepts to another person in written or verbal form will help improve
your skills immensely. While doing the exercises, try to go over those where
you discover “What if?” scenarios. For example, “What is the meaning of “this”
if I use bind twice? How does jQuery make sure that the
this keyword refers
to the jQuery object and not the global object? How does this library achieve
a certain feature?” are some common questions you should be asking yourself.
Learn the standards
Use Resources on the Web
Another important resource on the Web is conference videos and educational videos. For conferences, JSConf series are high quality. For educational videos, I strongly suggest Pluralsight, as they have an army of experienced developers preparing high quality courses. (no affiliation with Pluralsgiht)
- Start with reading books as they give you distilled information.
- Learn fundamental libraries such as jQuery, underscore, Backbone; but also read their source codes.
- Read through the new versions of the standard, and start using the latest additions to the language.
- Follow the web resources in batch, through digests or blogs which you frequent once a week or conference and educational videos.
If you have read so far, consider following me on Twitter at @ustunozgur
Interested in React.js and Advanced JS Training? See my training/workshop site
Thanks to Engin Arslan for initiating this discussion with me.
Discuss this on HackerNews