I’m part of an organization called Software Carpentry in NYC. This uses volunteers to teach programming at varying levels to universities, large governmental organizations and other interested groups of people. I previously taught at Columbia and this past weekend it was held at Harvard, organized by Chris Erdmann, the head librarian at the Harvard-Smithsonian Center for Astrophysics.
Before Software Carpentry, my teaching experience was limited to explaining aspects of programming to friends and family, as well as part of a year spent teaching English and French to children and adults in Japan. Teaching is hard. It’s very easy to be critical of a teacher – I’ve often found myself being so without thinking about the effort and stress behind conveying a complex concept to a group of students all with varying backgrounds and motivations. I’ve come up with a few conclusions about how to optimize teaching style from my last 2 SWC events:
Saturday’s Teacher line-up
- Mike Selik on analyzing data and word frequencies in Hamlet
- Me on reinforcing concepts of iteration, string formatting, conditionals and the meaning of identation using Codecademy exercises
- Erik Bray on git/github and version control
- Jessica McKellar on cheating at scrabble with Regular Expressions
- R. David Murray to help alongside all the presentations, mainly with the trickier definition-oriented questions
Things that worked well
- Humor. Mike sprinkled his tutorial with funny anecdotes which kept the class very lively.
- Relevant and interesting subject matter. Hamlet was a good choice, as was the theme of cheating at scrabble due to the librarian-oriented audience. The dictionary brought up several amusing entries for searches like: grep ".*s.*s.*s.*s.*s.*s" words | less
- Adding anecdotes to save people googling things. I reckon that a large amount of any programmer’s activities are in simply finding someone who’s done what you want to do before, and slightly modifying things – or connecting up the building blocks. So at the end of talking about the benefits of things like append() vs concatenating with plus signs like first+second , I mentioned things like deque() and format() .
Things to remember for next time
- Typing SLOWLY. I work a lot with MongoDB, so end up typing from pymongo import Connection; c = Connection() 20+ times a day into the terminal. This can become so fast, things like that can seem bewildering to newcomers.
- Using a high contrast terminal with large font and dimmed lights, to make it super easy to see from the back of the room.
What can advanced programmers get out of teaching such basic things?
- You’ll learn a lot from the instructors and student’s questions
- Community involvement is a great asset on your resume and shows potential employers that you have the ability/drive to train future co-workers
- It helps to have on-hand analogies and anecdotes developed during teaching when explaining technical matters to non-technical people, socially or business-wise.
- You’ll meet many like minded people and it feels great to get involved in the community.
What did I learn?
- The requests library. I normally use urllib2 to grab html from web pages. Urllib2, it turns out, is simply a more extensible library for HTTP requests as shown in this stackoverflow explanation.
- More about Git. I use SVN at work and thus don’t really submit anything to github. Git is HARD. Erik was an excellent instructor and calmly went from the basics right through to the minutiae of things like .gitignore and diff.
- What “immutable” really means. I hear this thrown around quite a lot and it basically just means things can’t be assigned to an object. E.g. the . split() of myString.split() can’t become a variable. Very simple.