What I've Learned From Failure
I found this question on Reddit:
As a beginner Angular.js and Node.js developer, I already find it quite hard to memorise all the tool-specific, and often even language-specific constructs such as string methods and directives among other things.
As I learn more, I find myself being overwhelmed by the vastness of the language and all the methods and design patterns one must know to be considered proficient.
Where would one draw the line between memorizing the language/tools and looking them up?
What strikes me about many such questions is that people say they are a “beginner,” but go on to describe professional problems. For example, “I am a JS beginner, and I’m having trouble deciding whether to use Gulp, Grunt, Broccoli, or Webpack on this project at work.”
The word “beginner” is a little ambiguous. There are students, and there are inexperienced professionals. A student applies themselves to a field of study, whereas a professional applies a field of study to solving problems.
The needs of a student are to progress towards mastery. The needs of a professional are to be competent and to manage risk. Sometimes, both needs can be satisfied with the same advice. Sometimes, they are in tension.
If you attempt to learn-on-the-job, you are going to hobble your mastery. This is true of almost any job. One of the most important ways to learn something it to experiment with it. You cannot treat a professional project–where people’s livelihoods are on the line–as a playground for experimentation and learning. That goes against managing risk.
In our industry, we typically handle this dichotomy by first being students, where we focus on learning and aren’t as worried about the practicality, then we focus on gaining experience. Some university programs have coöp programs, where the students alternate between being students and being apprentices. But not at the same time! They understand that if you try to learn basic programming from a profesional project, both will suffer.
If you constantly learn just what you need to do the job, and only work within the pragmatic confines of the practices that seem productive and are low risk, you will make progress, but at the expense of understanding. This is like learning to drive a bus, but being ignorant of how engines, drive trains and traffic flow work.
Which is not a bad thing, provided you have little interest in anything except driving the bus. For example, if you are a pastor in a church, you apply your enthusiasm to your church. The church bus is just a tool for doing church things, and you are not that interested in whether the engine can be tuned to get better mileage.
Whereas, if you wake up and decide that you are in the bus business, driving a flock to a church outing is just the way you pay for the bus. you are extremely interested in gas mileage, not just as a cost saving, but because you are interested in buses and how they can be made better.
A lot of the things a “bus person” learns about buses don’t apply to the church. It rarely makes sense for a church person to spend a lot of time thinking about buses. But the bus person learns things that apply to a lot of different people who need to be moved from one place to another.
Whereas, if you are an inexperienced professional who needs to learn, then focus your efforts on reading the way the wind is blowing: Your job, more-or-less, is to figure out what everyone seems to be doing, and copy it. That minimizes risk, while giving you experience.
It sounds prosaic, but if you are inexperienced, that is perfectly normal. It’s a question of picking up the basics, of being able to ask a question and get lots of answers because you’re asking about something everyone is familiar with. Once you have more experience, you can explore a little outside of the mainstream, you will have the context to understand when a problem you’re solving has a unique requirement that is served by a unique approach.
So… the summary is, Decide whether you are a student, or inexperienced. If you’e a student, study on the side. If you’re inexperienced, choose a low-risk way to gain experience.