Learn With Jeff

I learn by teaching

Moving Beyond 'Advanced Beginner'

Last year Erik Dietrich wrote a great piece called How Developers Stop Learning: Rise of the Expert Beginner.

Just in case, here’s a quick summary.

Dietrich’s main point is that some beginners reach a point of complacency with their expertise long before they ever reach the “expert” level on the Dryfus Model of Skill Aquisition. This results in many over-confident programmers writing production applications and often leaving the team before they have to suffer for their mistakes.

He has a great little graphic to explain what he means:

"Expert Beginners"

I think Dietrich has an excellent point, yet it isn’t really a problem I see in my role as a TA at the Flatiron school. I think, instead the bigger question raised is “What is an Advanced beginner to do?”

I have been working as a rails developer for about a year now. I have a fair grasp of the basics; I feel I can be productive on most rails projects without too much of a ramp-up; I can pick up new languages with relative ease; I’m slowly developing my personal style as a programmer.

I still have a long way to go.

One of the most prominent traits of an expert beginner is extensive breadth and a lack of depth. As a guy who loves “shiny” things, I am faced with a problem. I tend to pick up new technologies before I have truely mastered the ones I get paid to know.

I’ve posed the following question to myself: how do I level up from here?

The options seem endless. A year ago, I only wanted to build web apps, now I want to try writing a VM, a compiler, or a language.

That is only the tip of the iceberg. The more I learn, the more I realize I don’t know. I feel overwhelmed because I want to do everything.

So what is an advanced beginner to do?

I’ve decided to set a series of high level learning objectives, followed by goals that will give some amount of concrete accountability to them. The Web is where I am least comfortable and will likely have the biggest impact on my career going forward, so that is where I’ve decided to focus.

Objectives

  1. Gain a deep understanding of TCP/IP
  2. Learn how to effectively use WebSockets
  3. Become comfortable with the DOM apis
  4. Understand Event Handling

I almost put a line about learning Functional Reactive Programming in the list above, but I think it is a good example of me trying to ‘pre-maturly optimize’ my knowledge for problems I don’t have yet. That being said, FRP is really freaking cool.

Below I’ve sketched out some projects to help me reach these goals.

Projects

  1. Build a web application using at least one major JavaScript framework, currently leaning towards Ember.js.
  2. Write a simple webserver in Ruby from scratch.
  3. Read TCP/IP Network Administration.
  4. Read The Definitive Guide to HTML5 WebSocket.
  5. Build an interactive browser game using JavaScript.

Readers, what do you think? Is there something I should add, subtract or expand on? Let me know on twitter!