01 January, 2014

The Pain of Teaching Yourself to Code

Many people have told me the isolation and loneliness of self-learning is one of the biggest obstacles to success.

People benefit from peer support, guided lessons, student-mentor relationships, and the emotional support and reassurance of a group setting.

Institutional education, whether at a University, trade-school, or bootcamp all offer these great benefits out of the box.

Go to school and you get:

School seems like a no-brainer -- the obvious preferred method for learning. Self-learning is relegated to those lacking the resources/means to attend school.

But

Hands down, my biggest strength is self-learning. I am a self-taught professional web-developer in San Francisco.

Software is Alive

The software landscape is alive -- it changes. Nobody knew how to program for IOS and Android in 2006 because they didn't exist.

Many web technologies in use today did not exist at the time a given programmer attended school.

Good programmers are good at learning how to learn in a way that works best for them. Good programmers are flexible because constraints are always changing.

Self Learning

The attributes that make self-learning hard are the attributes that make a programmer good.

The support roles in institional education are valid. However, in self-learning you take ownership of either being or finding those roles.

Self-learning and learning how to learn sounds great, but what does it mean?

Understand self-learning by visualizing the contrast between a teacher-led project and a self-directed project.

The Teacher-led Path.

The teacher-led path tends to rely on the artificial learning environment rather than the self. The answer to every question would be some form of "asking for direction". Many aspiring coders can follow a tutorial flawlessly and show you a fully-working app hosted online. Yet they are incapable of bringing their own idea to fruition because they are no directions for that.

The Self-learner.

In contrast the self-learner is required to pick a direction (which may be wrong). He is free to ask for help but he must asses the situation and pick a direction before there is anyone to ask.

The self-learner must gain conceptual awareness.

He may rely on a baseline collection of reference materials he's discovered to do it. He may enlist tons of Google-fu to painfully acquire morsels of increased awareness. He may take this awareness and further refine his question on stackoverflow. He may go "keyword hopping" where initial searches lead him to unknown keywords for which he can refine his initial search to gain more awareness and repeat.

This may sound inefficient, ridiculous and rudimentary. You may scoff at this strategy.

Self-learning is necessarily hard because you are building personal skills across many vectors that you will own for the rest of your life. You are building autonomy, discipline, problem-solving and logical deduction skills, and character.

Self-learners feel the pain of doing something the ridiculous way. From this perspective they gain deep insight and appreciation into why and how the better way is better. Self-learners are able to explain things in simple terms from a beginner's perspective.

Conceptual awareness yields compound interest.

Support for Self Learning

The Internet provides unparalled access to the world's best minds and information. Access to peers and mentors smarter than you is a click away.

Programmers are some of the most accessible and giving professionals in the world. Open Source Software allows you to freely study and reverse engineer software used by millions of people.

Conclusion

Self-learning may not be for everyone. Simply, I find it a truism that the greatest programmers inevitably take their education into their own hands.

It is not that institutional education is incapable of producing self-learners. Rather, self-learning is a requisite skill regardless of your education path.

Self-learning is hard because it is extremely valuable.

Acquiring self-learning skills through self-learning is therefore a perfectly legitimate and necessary education path.

Disclaimer:
My programming knowledge and experience is entirely based in web technologies. I understand that different technology landscapes are different. Please consider my message with this mind.

Thanks to Al Walworth for proofreading =)