« swipe left for tags/categories
swipe right to go back »
Teaching kids to program is not an easy task – their attention span is short and what they are able to accomplish in a brief period of time is often uninspiring which results in them losing attention quickly.
Robots help a lot with this!
The Orbotix team has turned their Sphero into a fantastic programming aid to introduce coding to kids as young as 4th grade. In about an hour kids will be commanding their robot to drive geometric patterns while also learning a bit about angles, degrees, time and distance calculations, loops and conditional branching. If your my age, you might remember Logo and turtle graphics. It turns out to be really cool to toss a robot into the mix, instead of just a computer screen.
Coding is done via a simple app on either Android or iOS devices and sent to the Sphero via Bluetooth. The younger kids learn to program using a simple scripting language developed by Orbotix called MacroLab – the older kids learn BASIC which Sphero can interpret to do some complex tasks.
Orbotix is hosting a “Sphero Rangers” event at the Google offices here in Boulder this Saturday from 11am to 2pm. Robots and programming devices will be provided – but bring your smartphone if you want to use your own. Attendees will also be able to get a Sphero at a discounted price. If interested sign up here: http://www.meetup.com/
I spent this weekend at LindzonPalooza. Once a year Howard Lindzon gets together a bunch of his friends at the intersection of financing, tech, media, and entrepreneurship, we descend on The Del in Coronada, and have an awesome 48 hours together. Many interesting and stimulating things were said, but one I remember was from Peter Pham over dinner. It was a simple line, “why do we teach languages in junior high and high school but not a computer language?” that had profound meaning to me.
When I was in high school, I had to take two years of a foreign language. I had three choices – French, Spanish, or German. I didn’t really want to learn any of them so I opted for French. I hated it – rote memorization and endless tedious classes where I didn’t really understand anything. Fortunately I liked my teacher for the first two years and I did fine academically (I got an A) and ended up taking a third year of French.
Year three was a total disaster. I hated the teacher and apparently she hated me. We watched these stupid reel-to-reel movies of french cartoons aimed at English speakers trying to learn French. Beyond being boring, they were incomprehensible, at least to me. Somehow I ended up in the front row and it was my job to change the movie when it finished. One day, when I was sure the teacher was out of the room and I was changing the reel, I muttered ” tu es une chienne” (one of the few French phrases I still remember, along with “va te faire foutre.”) I was wrong – she was in the room and, after a trip to the principal’s office (the principal liked me and let me off easy) I dropped the class and took a study hall instead.
Now, before I use the old line of “I have a hard time learning languages”, I’ll call bullshit on myself since during that time I learned BASIC, Pascal, and 6502 Assembler. I was good at learning languages – I was just way more interested in computer languages than romantic european languages.
We didn’t have AP Computer Science at my school so I taught all of this to myself. But today, schools have computer science courses. And, based on what I’ve learned from my work at NCWIT, looking at course curriculums, and talking to a lot of students, most high school computer science courses suck. Part of the problem is the word “science” – they teach computer science theory, how to program in Java, math, logical, and a bunch of other things. But they don’t teach you software development, which is much more useful, and a lot more fun.
When I compare it to French 3, I wanted to learn conversation French. I probably would have enjoyed that. But the teacher, who was French, insisted on grinding us through endless grammar exercises. The movies were sort of conversational, but they obsessed over the different tenses, and we were tested endlessly on when to use tu and when to use vous, even in French 3.
I’m not a language instructor, nor do I have any interest in figuring out the best way to teach a language – computer or otherwise – but it seems to me that we are shifting into a different period where learning how to write software is just as important – and probably more so – to a high school student as learning to speak French, at least at a two year of course level where all you remember are a few swear words.
Am I wrong? If so why. BTW – Google translate quickly tells me that is “Ai-je tort? Si oui, pourquoi.” My bable fish is on order.
Six weeks ago I saw a tweet about a new thing from Codecademy called Code Year. It promised to teach you how to code in 2012. I signed up right away and am now one of 396,103 people who have signed up as of this moment.
Like a good MIT graduate, I’ve procrastinated. When I was an undergrad, I liked to say things like “I want to give all of my fellow students a four to six week handicap.” Yeah – I was the dude that blew off too many classes at the beginning of the semester. I did read everything so I eventually caught up pretty quickly, but fortunately MIT drop date was late in the semester so I had plenty of option value on bailing if I’d left things too long.
Week 1 was trivial. I liked the Code Year lessons and the Codecademy UI is very good. I’ve scored 350 points, have completed 42 (simple) exercises, and have four badges, I only did the lessons for week 1; I’ve left the problems for another time to see if the syntax actually sinks in.
As I embarked on my journey to learn python, I began by exploring a number of different approaches. I finally settled on using “beginner’s mind” (shoshin to those of you out there that know anything about Zen Buddhism).
Rather than just dive in and build on my existing programming skills and experience, I decided to start completely from scratch. Fortunately, MIT’s Introductory Computer Science class (6.00 Introduction to Computer Science and Programming) is available in its entirety – including all 24 lectures – on MIT’s OpenCourseWare.
I fired up Lecture #1 (Goals of the course; what is computation; introduction to data types, operators, and variables) and spent an enjoyable hour remembering what it was like to be in 10-250. If you want a taste, here’s the lecture.
The lectures are all up on iTunes so I’m going to watch #2 on my way from Keystone to Boulder this morning (Amy is driving). I’ve got plenty of reading to do and I look forward to diving into the problem sets.
While watching the lecture, Professor Eric Grimson reminded me that this was not a course about “learning Python”, rather it was a course aimed at providing students with an understanding of the role computation can play in solving problems. A side benefit is that I will learn Python and – in Eric’s words – “feel justifiably confident of [my] ability to write small programs that allow them to accomplish useful goals.”
Beginner’s Mind can be a powerful thing.
January’s Tech Theme of the Month is going to be Python. I realize it’s still December; I decided to get a head start.
Last month’s tech theme was videoconferencing. I learned a lot, including the unfortunate continued split between low end and high end and general lack of ability to have a single universal solution. Oh – and bandwidth still matters a lot. I expect by the end of January we’ll have much better videoconferencing infrastructure set up at Foundry Group with the single goal of eliminating some travel.
I’ve thought about learning Python for a while. I don’t code much anymore and I regularly find myself wishing I could do something with a simple UI and heavy back-end processing – mostly to move data between web services that I use via the web services APIs. I stopped programming around 1993 although I occasionally had to dive back in and support something that I had previously written until the late 1990′s, when I stopped for good because I simply had no time. As a result, the languages I feel like I have mastery over are BASIC, Pascal, Scheme, and Dataflex and the corresponding environment that I’m comfortable developing in ends with MS-DOS and Novell Netware. While I did stuff in plenty of other languages as a result of courses I took (IBM 370 assembler, SAS, Fortran) or projects I had to figure out (PL/SQL + Oracle, Paradox, dBase), I don’t feel like I did enough with these to claim mastery.
Every couple of years, I fuck around with a new language and environment. PHP is the one that has stuck the best and I can read it and hack around if necessary. But I don’t really like PHP – it feels sloppy and I constantly am having to look up syntax because it’s not comfortable to me. I went through a “ok – I’ll figure out Ruby on Rails” phase a few summers ago but stalled when I realized that Rails wasn’t a particularly practical environment for what I wanted to play around with.
Python may be a miss for me, but when I look at Python code I feel very comfortable with the syntax. A few folks that I know that are like me (e.g. not developers anymore, but were once, and occasionally bust out an IDE to hack on something) swear by Python. But the biggest motivation for me was that 6.01 is now taught using Python.
In 1984, I took 6.001: Structure and Interpretation of Computer Programs. This is the first computer science class most MIT students take. I had written a lot of software, including several commercially released products, almost entirely in BASIC (with a little Pascal and assembly.) 6.001′s programming language of choice was Scheme (a LISP dialect) and working with it was an epiphany for me. I continued to write commercial apps in BASIC and started using a 4GL called Dataflex, but my coding approach was heavily influenced by what I learned in 6.001. The abstractions you could build in BASIC, if you tried, were surprisingly good and Dataflex was a remarkably robust 4GL – very UI constrained, but very powerful (and fast compared to everything else at the time.)
So – if you look at my history, I’m comfortable with imperative languages. I got a good dose of functional programming from MIT but never did anything with it commercially. And I stopped developing software before object-oriented programming became popular. Python feels like a mix of imperative and functional when I look at it and read about it so I’m optimistic that I can use my regular programming muscles without having to fight through the OOP stuff that I don’t really know and doesn’t feel natural to me.
MIT has an IAP course (the MIT January session) titled 6.189: A Gentle Introduction to Programming Using Python. As with many MIT courses, it’s available on MIT OpenCourseWare so I’m going to take the course over the next month and see how it goes.
If you are a Python expert and have any suggestions for sites, tools, or blogs I should pay attention to, please leave them in the comments.