I have a lot of friends that want to learn programming, but most of them never really do. Counter-intuitively, most people give up because there are just too many good paths to consider. When they get “stuck” on a concept or challenge, they only spend some of their mental-cycles actually solving the problem, and with the rest they wander if they should have used that other book / language / framework / whatever.
The few who succeed all have some driving force that causes them to focus. I like calling these “forcing functions”, and they’re not a new concept. A historically famous example happened in 1519, when Hernán Cortés ordered his conquistadors to burn their entire fleet of ships after arriving in Mexico. The men couldn’t go home, so they were more focused on… conquering, I guess.
Forcing functions always involve some form of motivation, whether it’s a fear-of-failure or something more positive (I want to impress this girl, so I should learn to dance). The really effective forcing functions combine these motivations with some actionable step-by-step curriculum that slices through the ambiguity of an open-ended task — for example, a coding bootcamp.
To enroll in a coding boot-camp, there is a huge sunk-cost of money & time, not to mention that you’ll probably have to explain this decision to basically everyone you meet. This creates real socio-economic pressure to focus and succeed, as opposed to researching that other bootcamp down the street. In ideal scenarios, there are equally positive motivators as well, such as an encouraging peer-group and a sense of pride & accomplishment in graduating from a prestigious bootcamp.
But the real benefit comes from combining this motivation with a curriculum & teacher that you trust by default. Without some explicit, crystal-clear instruction about what to focus on & learn right now, the motivation can actually become anxiety, which causes people to learn even more slowly.
I’ve had many friends who were too-clever-by-half, and never really bought-in 100% to a single curriculum. In most cases, they diagnose their own issue as a lack of motivation, but I usually believe it’s a lack of actionable leadership. Remember, Cortés didn’t just burn the ships & wait around — he then lead the men throughout the conquering process. Interestingly, these leaders aren’t always people.
Projects can actually be leaders in this sense. It’s a common trope that many of the best programmers learn to code at a young age because they have some specific problem to solve (making free long-distance phone calls, automating math homework, modifying video games, etc…). These projects often provide both a positive motivation and a reasonably clear direction to start with, and by the time you’re done, you’ve passed some critical threshold in the learning process where the dopamine-hits of progress come often enough to sustain your attention.
The agile style of project management also makes heavy use of forcing functions. It’s usually impossible to get team consensus when setting out to solve a large problem, but sometimes it’s possible to select a tiny, specific task to drive to completion first. With this de-risked approach, everyone has a much clearer target to start working sooner. Then, when planning the next phase, the team has more relevant context, so it’s easier to get buy-in on a larger strategy (and relatively cheap to scrap the effort & start over, if necessary).
Anyways, I believe that the right forcing functions can drastically improve people’s lives. The world is full of incredibly talented people who have the raw abilities to do really interesting work. The internet democratized this to some extent, so that more people than ever have some access to self-education. However, many people lack that initial spark, or driving-force. If I could provide a forcing function that causes just a few people to pick up a new skill (like, for instance, coding…), then I would be very proud, indeed!