I have always had an interest in computers and design. AnthonyTeacher.com is essentially my programming playground. I have learned a lot of PHP, CSS, and more while building it. However, my knowledge of programming is neither deep nor diverse. I only know how to work with client-side languages. However, I want (and need) to learn more. I have been thinking about pursuing a post-bacc or master’s in computer science, or at the very least taking some of the wonderful open courses offered through MIT, UC Berkeley, and more (see bottom of post). Then, I read “The First 20 Hours: How to Learn Anything…Fast” by Josh Kaufman. Despite its name, “The First 20 Hours” is not a scam or a fad learning program. It is based on science, including much of the science I have learned about while studying second language acquisition. He even cites linguist Stephen Krashen several times when discussing the difference between learning and acquisition. Learning is the explicit understanding of a skill through dedicated study. Acquisition is implicit internalization of a skill in context, through practice. For example, you can learn English grammar rules by studying conjugation charts, but knowing these rules won’t become automatic unless you practice them in context. It is in this contextualized practice that you begin to acquire (i.e. innately or implicitly learn) a skill. Discussing Krashen (and his monitor hypothesis) further, Kaufman states:
Learning helps you plan, edit, and correct yourself as you practice. That’s why learning is valuable. The trouble comes when we confuse learning with skill acquisition. If you want to acquire a new skill, you must practice it in context. Learning enhances practice, but it doesn’t replace it. If performance matters, learning alone is never enough.
“The First 20 Hours” offers practical advice on not mastering but becoming adequately good at a skill. It takes 10,000 hours to master a skill (or become fluent in a language). But it only takes around 20 hours to have a good grasp. What this requires is intelligent and dedicated practice. Through his research, he outlines 10 principles of skill acquisition:
- Choose a lovable project. – Do something you really want to learn.
- Focus your energy on one skill at a time. – Intense focus on one project or skill is important.
- Define your target performance level. – Create a realistic goal, which does not include the words “expert” or “master”.
- Deconstruct the skill into subskills. – Learn the skills needed to complete your project.
- Obtain critical tools. – Get the tools before you start.
- Eliminate barriers to practice. – Get rid of distractions, including mental and emotional ones.
- Make dedicated time for practice. – Ninety minutes each day, if possible.
- Create fast feedback loops. – This is needed to see how well you are performing.
- Practice by the clock in short bursts. – Pay attention to your time.
- Emphasize quantity and speed. – Try to get a lot done.
- Computer Programming – creative output, job outlooks, coolness factor
- Python – a programming useful for working with human languages
- Android – to create useful and education-oriented apps on the most widespread and open platform
- Ruby – dynamic application development, web apps
- The Cello – to make beautiful music like Apocalyptica or 2Cellos
- Brazilian Jiu Jitsu – self-defense and fitness
- French – because it is an interesting and beautiful language
- Polish – because my wife and children speak it
- Advanced linguistics (cognitive, computational) – because it is extremely interesting to me
- Wilderness survival skills – because these will always come in handy
- (I really thought my list would be longer)
Back to programming, this is where I will start with the 20-hour program. There are thousands of resources online on how to program. Kaufman himself has a chapter on programming with Ruby. Chris Wilson is also trying to learn Android in 20 hours. There are free videos, tutorials, and online courses. Where to start? I’m starting with the Introduction to Computer Science course offered by David Evans (University of Virginia) at Udacity because it introduces core concepts of CS while staying project-focused: we will learn Python by learning how to build a search engine. I’m going to start in a few weeks and you can follow my progress at http://20hourswithpython.tumblr.com. Here are some other useful resources for programming that I have come across. Check them out!
- Codeacademy – learn useful coding languages online, for free
- Code School – learn by doing
- Rails for Zombies – learn Ruby on Rails with a zombie flair
- Android Application Development (200 free videos)
- Udacity – free open classes on a range of topics
- Udemy – open classes on a range of topics, paid
- Coursera – free open classes on a range of topics
- MIT OpenCourseWare – class lectures, notes, activities, and materials from MIT
- edx – open courses offered by many top universities
- Open Education Database – database of open courses being offered
- Recommended blog posts to read for programming