Sibeh awesome! Committed!

Since my last post, I’ve settled on Claude Code for AI coding. Pedagogical questions aside, I seriously have not had this much fun playing with new tech for a while. My Git commit history is currently filled with random side projects I’ve put off for years, which I now “work on” in between classes. It’s exhilarating, and the exciting part is how fast the tech — and hence possibilities –* are growing.

(I got tired of Claude telling me “You’re absolutely right!”, so I told CLAUDE.md to respond in Singlish.)

* Unfortunately, I also now have to use two single-dashes instead of my favourite em-dash to not sound like AI. Screw you, AI!

Early vibe coding thoughts

Some thoughts on coding with AI (or, that awful, awful name, “vibe coding”):

It’s my kid’s PSLE year*, and I got bored of reading spelling words to him.

So I thought, why don’t I write an app for that?

45 minutes later, I had something fully-functional — not because I’m fast, but because I used Cursor (pictured). AI coding tools like Cursor, GitHub Copilot, and Windsurf can help programmers write full code, in-editor, soaking in the full context of the existing codebase.

This is different from “asking ChatGPT” because of the in-editor and full-context parts. In the “bad old days” of… 1 year ago, I’d have had to copy my code over to ChatGPT, give the AI context about what language and framework I was working with, get some code back, and hope that the generated code was easy enough to just plug back into my codebase somewhere. So much cognitive overhead!

This new tech, however, is remarkable; I really just ask for a feature, get the code inserted into my project. I check if it works, request some modifications, and repeat the process. AI researcher/influencer Andrej Karpathy calls it vibe coding:

I ask for the dumbest things like “decrease the padding on the sidebar by half” because I’m too lazy to find it. I “Accept All” always, I don’t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it.

This is mind-blowing, and poses all kinds of new and frightening questions for programming educators. For my Swift Accelerator app development class in particular, I realised that the app I “made” in 45 minutes was comparable to what they’d take 2 weeks to struggle through. Wouldn’t it be better for students to have a working product quick, and then iterate on it? We could just teach students the basics, then get them to “vibe-code” their way to awesome apps.

I posed this thought to my co-instructors at Swift Accelerator Jia Chen and Sean — both former students, from the first batch in 2018 — and I was surprised at the vehemence of their feedback. They worry about:

  • How it’ll degrade the students’ learning
  • Students generating code they might never understand
  • AI generating the wrong code
  • How it just changes what the class is.

All valid points! But I wonder about students who fall behind in my class — would this help engage them more? The feeling of creating something so quickly with AI can’t be understated. Then again, I do acknowledge it’s short-cutting the hard work of comprehension, understanding, and perhaps creativity that comes with “manual” programming.

I don’t have any answers yet, but for this year’s class, I’m intending to take a couple of groups with which to run this experiment.

* Positive vibes appreciated. Kiddo knows about Perplexity and he knows the AI is great at finding answers from specific questions from specific practice papers — a power he’s abused to spend more time playing video games. Gahh!

One Million Checkboxes

In June, a programmer, Nolen Royalty or “eieio”, released a web-based mini-game, onemillioncheckboxes.com, which allowed users to check or uncheck any of 1,000,000 checkboxes — and when they did, it changed for everyone viewing the site simultaneously. The goal was to get everything checked at once, which was nigh-impossible. The site went viral: 500,000 people ended up checking more than 650 million boxes in just two weeks. The Washington Post described it as “the most pointless site on the internet; it’s fantastic”.


In August, eieio detailed an unexpected, and remarkable, outcome of the game in this blog post :

  • Some technically-savvy teens discovered they could do more than just random clicking.
  • They realised they could encode the messages as binary data (1s and 0s), and began doing all kinds of weird tricks to send secret messages and graphics to anyone who could decode them.
  • eieio followed the breadcrumbs, and found the teens on a private Discord chat!
  • He had a great time chatting with them, and was just genuinely blown away by their ingenuity.

I loved this!

First, because the initial product was about making something useless and fun — and I always love seeing useless and fun things my students create with code.

Second, because this useless and fun thing managed to inspire young people to form their own learning communities, share discoveries, and build on one another’s ideas.

It speaks to what I’d like to achieve as an educator — create spaces and enable students to explore, experiment, and find their own paths to understanding, perhaps in ways that I never anticipated.

I also really liked how he closed his video version of the blog post:

I found this so moving. As a kid, I spent a lot of time doing dumb stuff on the computer, and I didn’t get in too much trouble for it, like when I, for example, repeatedly crashed my high school mail server. There’s no way that I would be doing what I do now without the encouragement of people back then. So providing a playground like this, getting to see what they were doing, getting to provide some encouragement saying, “Hey, this is amazing!”, was so special for me. The people in that Discord are so extraordinarily talented, so creative, and so cool. I cannot wait to see what they go on to make.

The blog post and video are great, but watch out for some swearing and crude humour in the screenshots, if any teachers reading this want to send them along to students ????

Vim search Dash

I use [MacVim](http://code.google.com/p/macvim/) as my editor and [Dash](http://kapeli.com/dash) as my documentation browser. They’re great. Also, Dash has the best nag-screen mechanism I’ve ever seen.

If you use them, too, I wrote a bit of Vim script to make looking things up about 0.5 seconds faster each time. Imagine, _all that productivity!_ Just position your cursor on the word you want to look up, leader-d, and the script will try to search the right docset in Dash based on the filetype you’re editing. E.g. for JavaScript files, I have it configured to launch js:term in Dash, which searches both the jQuery and JavaScript docs for that term. (Source: a great tip from [Kapeli](https://twitter.com/kapeli/statuses/239927573096837123) himself. Herself? Itself?)

I’d love to hear suggestions on how to generalise this, without manually adding docsets each time. I tried passing in the filetype to Dash as the search term, but got tripped up by some asset files in Rails that Vim thought were ERB…

“Please don’t learn to code”

Jeff Atwood went and set fire to the Internet a couple of days ago:

The “everyone should learn to code” movement isn’t just wrong because it falsely equates coding with essential life skills like reading, writing, and math. I wish. It is wrong in so many other ways.

This point feels a little stretched to me. I’m not sure where Atwood is getting these “coding is as important as reading/writing/math” vibes from, but why isn’t there a place for coding in schools beyond the core curriculum? Put another way: why exclude Computer Science / programming from that seemingly arbitrary list of auxiliary subjects that we make our schoolchildren learn over their 12 years of pre-university education?

The general populace (and its political leadership) could probably benefit most of all from a basic understanding of how computers, and the Internet, work. Being able to get around on the Internet is becoming a basic life skill, and we should be worried about fixing that first and most of all, before we start jumping all the way into code.

This part makes perfect sense. However, what he proposes here doesn’t have to be at the exclusion of teaching more people programming, yes?

Here’s a response, by Zed Shaw of [Learn Code The Hard Way](http://learncodethehardway.org/):

I wonder if he’s going to tell his kids they shouldn’t learn to code when they want to become just like Daddy? Probably not. He’ll gleefully run over and show them how to code and tell them it’s so much fun and that they should all do it and it’s the best thing ever! But, of course, _your_ kids shouldn’t learn to code, and you shouldn’t, and your friends shouldn’t, just Jeff and his kids should.

I do think Shaw’s taking a bit far when he cites resentment as Atwood’s motivation for telling people not to learn how to code, but then, running a (very good, supposedly) programming education website could do that to your perspective. Both articles make good points, but I’d recommend Shaw’s to anyone feeling a bit deflated after reading Atwood’s.

An argument for teaching Computer Science over basic Math

An interesting argument: that calculating devices are now ubiquitous, and math should focus on computational problem-solving instead of drilling and memorisation. An example the author cites:

Computer languages allow students to transform ideas into action. Here is a simple rule that a math teacher might describe to her students:
If the number is greater than 9, carry the 10’s place; otherwise add the number to the bottom row.

The solution for this can be expressed as an if/else statement:

if number > 9:
carry += number / 10
else:
bottom += number

There are, as expected, plenty of opposing views in the comments, but it’s good food for thought. Also noteworthy: the comments aren’t completely stupid. Not-completely-stupid comments! On the Internet! WHAT IS THIS WORLD WE’RE LIVING IN

Nobody Wants to Learn How to Program

From the blog behind the “Invent Your Own Computer Games with Python” book:

“[For] the casually interested or schoolchildren with several activities competing for their attention, programming concepts like variables and loops and data types aren’t interesting in themselves. They don’t want to learn how to program just for the sake of programming. They don’t want to learn about algorithm complexity or implicit casting. They want to make Super Mario or Twitter or Angry Birds.”

We’ve actually found that our students are usually quite happy to spend lots of time making silly console-output programs, like printing a pyramid of asterisks. However, the intro programming courses we’ve conducted have been for a fairly self-selected bunch.

The book is available [online](http://inventwithpython.com/chapters/) for free, and it certainly looks like a great instructional resource.

“Computer Science is not Digital Literacy”

Jodie Fraser:

Digital literacy means the the skills and confidence to take an active role in engaging in networks, and in shaping and creating opportunities – social, political, cultural, civic, and economic, and we shouldn’t be collapsing these broader rights into the relatively narrow concerns of computing science as a curriculum area.

Article via [Fraser Speirs](http://fraserspeirs.com) (that’s a lot of Frasers). Mildly surprising, to me at least, is his strong support for the argument raised in the link article, given that he’s a programmer and Computer Science teacher. This [piece of his](http://speirs.org/blog/2011/12/29/three-mantras-from-the-first-two-years.html) on “technology for subjects not traditionally well-served by technology” may serve to explain why, but I’m still trying to digest all of this.