[topcoder] And The Cycle Of Progress - 05/2011
Teachers are very important to me. A teacher in high school first introduced me to algorithmic problem solving via the Pascal language way back in 1987. It was Mr. Lewis who loaned me reference books and let me watch him program the school’s first student administration software. More importantly, he fed me programming challenges regularly and provided access to a computer. I soon discovered that successful skill development followed a certain cyclical pattern that looks something like this:
- Observe the experts. Recognize patterns.
- Mimic those patterns. Practice them. Tweak the patterns to create something new. Make mistakes.
- Analyze and correct mistakes. Improve your creation.
There are no tricks, really. The speed of your skill improvement is directly related to the number of focused iterations of this cycle that you can manage within a given time.
Another teacher in high school helped me become fluent in Spanish. It turns out that the same process applies to foreign language acquisition. Paco (my teacher) and I succeeded where many others in foreign language have failed, and I believe the key lies in this process, which I like to call The Cycle of Progress. Paco spoke in Spanish 99% of every class and was continuously asking us to copy and tweak the patterns he provided us with his speech in order to say something new. Students weren’t allowed and didn’t have time to speak English, as precious class time was devoted to what might be the most important step in The Cycle of Progress: Rigorous practice.
I was so well-prepared by Mr. Lewis that I started programming straight out of high school, first on physics research and soon after working for startups during the (first) internet boom of the late 90s. It was an exciting and lucrative time for anyone who loves to acquire and apply new skills. Years later I got the chance to return to my high school to teach Spanish. I seized the opportunity to work alongside many of the teachers who taught me, and that’s what I’ve been doing for close to 10 years now. Along the way, I’ve achieved the most success when focusing my students on The Cycle of Progress. Here is the rather cheesy representation that I gave my Spanish students every year:
During my experience as an educator, interactive web apps matured and flourished, and I began to see how technology, used in the right ways in the service of skill development, empowered me to achieve great influence on student language acquisition. This, as well as my love for problem solving, eventually drew me back into programming full-time. My current goal is to combine teaching experience with programming skills to create tools for teachers that leverage and multiply their power to transform the minds of students.
I’ve spent the past year playing technology catch-up, sharpening my skills with the many new web technologies that have matured while I was busy in the classroom. There are plenty of great mentors and heroes out there to learn from, like Alex McCaw, Jeremy Ashkenas, James Halliday, TJ Holowaychuk and the folks at Bocoup in Boston, just to name a few, that have provided me with the opportunity to look over their shoulders via github repos, books, blog entries and screencasts as they do what they do best. These resources alone, however, would not help me achieve my goals.
Finally, this is where [topcoder] comes in. When I stumbled upon the site for the first time, I knew I had to try one of the challenges. It was a chance to practice the new skills and techologies I’ve been reading about and watching in screencasts online; to copy programming patterns and tweak them; to make mistakes, refactor and work out the kinks; to measure my performance, analyze mistakes and carry the experience to the next iteration in the Cycle of Progress. Best of all, I had the chance to get paid for my time learning! It was like a teacher giving out cash.
My first [topcoder] challenge was a BackboneJS Kiva loan organizer. Briefly, here are some of the things I learned how to implement:
- Backbone Models & Views for complex interfaces and backend syncing
- The many uses of UnderscoreJS
- The time-savings, clarity, concision and elegance of Coffee Script
- Twitter Bootstrap as an easy and consistent UI foundation
- “Sticky” UI elements
- Lazy loading
Here are a few things I realized I needed to improve on by the end:
- Separating client-side code into modules
- Making sure that my views only respond to model changes
Here is the code on github and a link to the live demo. For my second CS challenge, I designed an embeddable online user-count that links to a chatroom for logged-in users. Along the way I learned how to implement/develop:
- an automated dev and build process with Coffee Script cake files
- Socket.io for instant updates in the browser
- A JSON API using ExpressJS
- Breaking client code into Namespaces/Modules in Coffee Script
You can take a look at the repo here.
Many lines of code later, I feel much wiser, more capable and confident than I was only a month or so ago. [topcoder] challenges were the perfect opportunities to iron out the implementation of many skills and tools before incorporating them into my own larger projects for language instruction, and I made a little money, too! I’ve already used some of that money on a yearly subscription to Peepcode! The cycle continues…