Miscellanea, October 2024

The Merchants of Venice – In Code: A nice little review of early cryptology in 1400s/1500s Venice within both trade and politics

Typing Bowl is only barely a game but it’s good for a five minute break to see if you can type faster than strangers on the internet.

I’m not a big discussion forum person, but this massive list of topic-specific forums probably has some great content in here. I wish there was an index of the topic areas at the top of the page to help skim for what’s available.

The recent post Of trashcans and thimbles by Math with Bad Drawings is not only a nice review of an unintuitive statistical phenomenon but makes a connection to a larger life lesson about taking bold chances while also attending to the day to day essentials that will let you be successful if your bold chance comes through. Thematic for a month of talking to students about their education and their goals.

A little bit of navel gazing about the history of the blogosphere as Scripting News turns 30 which pairs well with The Verge’s retrospective on 2004 (a somewhat frightening flashback to internet culture the year I started working at my college)

Thinking about having my AI students read GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models which got a burst of attention. I find myself talking to students about fragility in systems in all my courses these days.

Miscellanea, September 2024

Cool photos and breakdown of a Navajo weaving of an Intel Pentium chip from a display in the National Gallery of Art (sadly the exhibit now seems to be closed). The breakdown is able to map out the chip to determine specifically which chip it is based on. The blog post also closes with an interesting story of the Fairchild work on the Shiprock chip and the relationship to the Navajo.

Calculating Empires: A Genealogy of Technology and Power Since 1500: Scrollable visualization of computing, communication, and control from the 1500s to the present categorized by things like communication devices, interfaces, algorithms, education, human bodies, biometrics, medical, policing, energy and resources, etc. Lots of ways to browse this; one interesting option is to zoom in on the era you were born (if it was long enough ago to be referred to as an era) and scroll your way across horizontally.

The headline “Secret calculator hack brings ChatGPT to the TI-84, enabling easy cheating” hides the amount of hardware modification required to get this to work. The pitch on the video that this is the “Ultimate Cheating Device” may oversell how helpful it is to query ChatGPT during an exam through your calculator keyboard and screen (better prompt engineer some shorter responses than usual!). But it is a pretty impressive hardware hack.

A couple of cool looking paper-and-pencil, single-player sims of a dungeon crawler and a space shooter: Paper Apps Dungeon and Paper Apps Galaxy. Both procedurally generated so each game notebook is unique.

Rear Adm. Grace Hopper and Future Possibilities

I’ve been slowly listening my way through the recently released “lost” lecture from then-Capt. Grace Hopper entitled “Future Possibilities: Data, Hardware, Software, and People” from 1982. I didn’t read much in advance about the content of the lecture, just decided to watch it as an interesting piece of history. It’s a very engaging and funny talk – about 8 minutes in I had to pause and go back and start listening again more closely.

Her main opening premise:

“I’m afraid we will continue to buy pieces of hardware and then put programs on them, when what we should be doing is looking at the underlying thing, which is the total flow of information to any organization, activity, company, or what have you. We should be looking at the information flow and then selecting the computers to implement that information flow. Now, of course, if we do that one of the first things we’ll need to know is something about the value of the information we’re processing.”

“No work, no research, has been done on the value of information. We’ve completely failed to look at it. And yet it’s going to make a tremendous difference in how we run our computer systems of the future. Because if there are two things that are dead sure, I don’t even have to call them predictions, one is that the amount of data and the amount of information will continue to increase. And it’s more than linear. And the other is the demand for instance access to that information will increase. And those two are in conflict. We’ve got to know something about the value of the information being processed.”

Many of the examples are dated to older, slower technology with lower bandwidth, where the main question is what information to keep on-line or not. But the bigger picture theme that organizations need to understand the the value of their information is still relevant, as is the associated theme that organizational needs and usage need to be understood to create useful systems.

From there, she also makes the case that we need to continue advancing the speed of our computers in order to solve vital problems like predicting the weather to improve agriculture or managing water supplies to support a growing population. She has a lovely physical illustration of the limitations on how far we can continue to speed up our computers and a common sense argument for distributed computing based on the observation that long ago, if you wanted to move a log that was to heavy for your ox, you “didn’t try to grow a bigger ox. [You use] two oxen.” In the second half of the talk, she does a similarly clear, common sense job presenting some still fundamental security ideas, like modularity, to protect that information that we need to be understanding the value of.

A favorite bit, as someone who likes to think I sometimes haunt my graduated students:

“I think the saddest phrase I ever hear in a computer installation is that horrible one “but we’ve always done it that way.” That’s a forbidden phrase in my office. To emphasize the fact, I keep a clock that operates entirely counterclockwise. Now the first day people meet it they can’t tell time. By the second they discover what used to be ten of is now ten after, they can tell time again. Normally it’s not until the third day that they recognize that there was never any reason why clocks should run clockwise. They could just as well have run counterclockwise. […] Hopefully I’ll give you each one of you a very small gift. I will promise you something. If during the next twelve months any one of you says “but we’ve always done it that way” I will instantly materialize beside you and I will haunt you for 24 hours and see if I can get you to think again. And I know it works – I’ve already had over 70 letters thanking me for haunting people.”

The length of the two parts together is daunting but I definitely recommend checking it out. She’s a phenomenal storyteller and its worth it to get to the end of the second half where she talks about being called out of retirement to get the entire Navy standardized around the same version of COBOL and her pirate flag.

Level Up

These Maker Skill Trees are awesome. They cover a mix of life (cleaning, cooking, travel), “classic” (knitting, woodworking, automotive), and tech (3D printing, Linux, mobile app development) skills and give a nice visual map of how you might progress in developing your skills through increasingly more advanced projects.

For example, get started baking by making something with a packet mix or making brownies, moving towards making homemade marshmallow or cheesecake and eventually up to a wedding cake or croquembouche. The civics and community tree ranges from registering to vote through running for mayor. It could be fun to have my programming students fill out the coding one; I love the “Fix errors in your code without using Stack Overflow” item though some of it (“Write a MacOS Hello World program using Cocoa”) is very specific and “Document your program” should be much lower on the tree (though I suppose there’s some reason to having it come after “Get confused by reading your own code”).

It’s an open source project and there’s opportunities to make your own skill tree or peer review one that’s posted to prepare it for translation into other languages. You can also see what skills there’s interest in adding but haven’t been built yet and suggest your own.

What is coding help?

With semesters starting, there’s another flurry of conversation about how to teach programming when students have access to generative AI tools. Much of it is about assessment, where the size and context of your class makes a big difference (I have options available to me in a 20 student in-person class taught in a room with dedicated computers I have instructor control of that many other people do not). However, there’s also discussion of how to help students use generative AI as an assistant as they learn.

I’ve been thinking a lot about one tool I recently saw promoted that’s being pitched as an “automated teaching assistant” called CodeHelp. The first line of its description for instructors says that it “helps your students without writing code for them” (emphasis theirs) and tailored to your course and your students’ needs. It’s open source and part of an ongoing research project into programming support through generative AI, so I was curious to see how they were constructing a tool to provide instruction rather than code suggestions.

I was very surprised when I started reading the examples provided of tutoring responses. To my eyes, it is absolutely writing code for the student. The first example shown, where the student prompt is a copy of code that doesn’t work along with their error message and a statement of what they want the code to do, results in a response indicating exactly which method in their code is wrong (they’re trying to use a method “remove”), what method they should use instead (a “replace” method), and a sample line of code that uses that method correctly (showing them that they can give an empty string as the second argument to get “replace” to act like “remove”). The illustrative code provided can be copied directly into the student’s program.

One thing this says to me is that instructors can have very different ideas of what appropriate help looks like. It seems to me that this tool is less of a teaching assistant and more of an interactive textbook that students use as they try to solve exercises. For a teaching assistant, I would expect a lot more dialog and interaction. Any one of the facts shared in their example might be fine as part of that interaction eventually, but you’d want to figure out exactly where the student is stuck and get them to try things out or see if they can at least more clearly narrow down what part of their code they aren’t understanding. A multi-paragraph breakdown of everything they’ll need to know to solve the problem strikes me as short-circuiting the problem solving process for the student, unless the intent is that this is being used early in the learning process.

But, I’m also coming at this assuming students have already been in class doing simple coding exercises with me watching and helping them out, and the types of assignments that a TA (or for us a peer tutor) would help with would be homework testing their ability to apply these ideas on their own, after they’ve had opportunities to practice. Maybe these teaching assistants are better thought of as scaling up support during lab-type activities that are meant to provide that initial practice. I could imagine students learning more being given a problem and being asked to work with their “automated teaching assistant” to understand it and code a solution than they would from reading a textbook or watching videos. It then makes me wonder if there’s a point when you’d want to shut access to these assistants off, or shift them to a more conversational style of help.

For my part, I’m thinking of using these examples in my peer tutor training this fall as an example of what I’m hoping they will not be doing, and a discussion prompt for strategies they can use for turning this type of instruction into more of a problem-solving conversation with a student. We often “play act” tutoring scenarios during training and sometimes the students are struggling to both think about what technical information they would want to share AND how to approach working with the student, so giving them a scenario along with the set of content they might eventually want to share could be really helpful in letting them just think about their approach.

AI toys

In addition to the more technical updates I’m making to my AI course, I’m collecting some fun AI toys that could make for nice first-day activities to get discussion going or otherwise bring some levity to the course.

What Beats Rock? is easy fun. The game seems tuned to give you at least some benefit of the doubt that your chosen item will win that round of the battle. The generated explanations vary in how compelling they are. After a couple of rounds, much of the fun is not the AI but seeing if you can come up with a counterattack that nobody else has used before. The base game now seems to have a number of community variants, but classic What Beats Rock? still seems like the best.

AI Dungeon lets you cooperatively write an adventure story where you play the role of the protagonist choosing your actions. There are lots of pre-made scenarios (official and community designed) or you can do a quick start into a generic classic genre like fantasy, apocalyptic, or cyberpunk. The option to let the AI keep generating the story and choose when and how you want to jump in and add some direction is an interesting way to explore collaboration with a text generation tool.

Stretching the definition of “game” a bit, the JSTOR Daily Sleuth offers up a daily challenge to figure out which of five titles comes from an actual article written by a person and featured by JSTOR, versus the other four AI written titles. You can just make a guess (and get hints each time you guess wrong) or do some sleuthing to make sure you’re getting the right answer.

On the most serious end of the spectrum, The Prompt Airlines AI Security Challenge asks you to prompt engineering your way into convincing an airline chatbot to give you a free flight. Beating this involves some background research into prompt injection techniques.

A bit of nostalgia

And now for a bit of nostalgia, as well as an opportunity to see if I’ve got WordPress access properly set up on my new tablet (if so, I’m hoping it will facilitate increased weblogging).

A couple of weeks old now, but I appreciated this recognition of the 40th birthday of X Window System. My first programming job, a summer internship type position 32 years ago, had me learning UNIX by crash course, and most particularly figuring out how to write X Window configuration scripts. As the article notes, X Window offered the potential for customized and consistent windowing environments across different hardware systems. My task was figuring out how to actually achieve identical windowing environments across a lab full of VMS, VAX, and SUN machines so that visiting biologists could follow simple visual guides and have everything work the same no matter which type of box they sat in front of. In theory, this was entirely achievable and in practice it was about 95% achievable, at least with the nascent skills I had at the time. Many, many days were lost to figuring out how to configure every possible menu to the same options, in the same order. I’d have welcomed Lupton’s guide for astrophysicists – I was spending my days with massive binders with large X’s across the front and delving into man pages.

It’s only thinking about it now that I realize there was some interesting user interface decision making in that project – a topic I’ve learned much more about as a faculty member than I ever did as a student. Given the default menus that each of these three boxes wanted to default to, which one should we use? Or should it be a mix of the three? The reality is, given a short summer to solve this problem, I ended up picking the choices that were easiest to code without a lot of thought about usability. I did insist on spending a day figuring out how to get all three of them to have the same option to reverse the mouse buttons between right-handed and left-handed ordering through a handy drop-down menu option. In retrospect, there were probably better ways for me to solve many of these problems, but it was an invaluable learning experience to be allowed to muddle through and figure out the best solution I could come up with. I don’t miss using X Window. 32-year-ago me would be surprised I could look back fondly on my time fighting with it at all.

SIGCSE 2024 Highlights

I’ve been back in Portland, OR this past week at SIGCSE 2024 (“back” after attempting to have SIGCSE 2020 here and getting sent home before the main symposium began).

For our fifth year running (including in March 2020!) the Committee on Computing Education in Liberal Arts Education held our pre-symposium event “Innovations and Opportunities in Liberal Arts Computing Education” on Wednesday, with 41 people attending across the full day. I love the attendees we get at this event and the community that has built up around the committee – the conversation after all of the presentations and during our discussion tables was excellent. Mark your calendars for February 26, 2025 for our sixth annual event!

A major theme that cropped up across the day was the variety of places computing is being taught in our institutions and our departments’ role/responsibility in coordinating or directing that work. There are some good examples of liberal arts schools aggregating these efforts into interesting curricular packages such as interdisciplinary minors (we had a presentation on Quinnipiac’s new Artificial Intelligence minor as one specific example). There is some interesting disagreement about the extent to which a CS program should “own” computing at an institution, and I’m thinking this could be a fun panel for next year if we can identify faculty with a good range of perspectives. This theme also came up again Thursday at the panel on “Re-making CS Departments for Generation CS” where there was also some suggestion that smaller, liberal arts programs may be better placed to come up with creative answers to this question.

I’ve also been entertained by how many times I’ve heard some variation of “here’s what we wanted to do, and here’s what institutional politics allowed us to do”. In the second half of the conference, some of this resolved into “here’s what we would do with math, and here’s what our political situation with the math department lets us do”. I left with a lot of gratitude for the very good relationship we have with our math colleagues.

With the newest ACM/IEEE standards for CS curricula now finalized as CS2023, there was also good interest in the Workbook for designing distinctive liberal arts CS curricula while using CS2023 that I’ve been working on with several of my colleagues from the Committee. Having delivered a seven-hour workshop on its content the previous week and then a three-hour workshop on it at SIGCSE, I think we’ve got a really good session designed for introducing people to the philosophy of the workbook and the major steps. The process is really designed to be carried out by a department, but everyone seems to understand why that will be valuable and I’m optimistic we’ll be seeing some adoption beyond just our limited pilots within the author group. It’s helpful that CS2023 supports the message that departments need to know their individual mission and goals as a first step in curriculum revision, and it seems like our structured process is helpful in digging into that question and relating it to specific curricular choices.

It’s also clear that more Committee guidance about the fairly large and less flexible CS Core will be helpful to the liberal arts community and other smaller schools. I had some good initial conversations in Portland and am pretty sure this will be taking up a good portion of my time this summer.

Still haven’t crafted a cat yet

A couple of gaming related distractions:

I have not played Baldur’s Gate 3 but I cannot recommend enough the video Can You Beat Baldur’s Gate 3 As a Cat? if you have played any games at all in the genre or want to be entertained by cat (and eventually herd of cats) attempting to go on an epic quest. For more context: druids in BG3 have a cat form, and the video shows an attempt to beat the game from this form, which has a variety of limitations. Unsurprisingly, the game was not intended to be played this way. It’s an impressive showcase of both the player’s ingenuity and the open world game structure that so much is possible as a cat anyway.

If you want to exercise your own ingenuity, Infinite Craft is a nice browser game in the genre of “combine elements to get new items, combine them more to get more things”. There’s more clever wordplay in this version than others I’ve tried. Besides the usual “Sand and Fire make Glass” type stuff, you get some fantastical stuff  like “Moon and Dragon makes Werewolf”, can generate abstract concepts like Optimism and Laughter, and some really weird things like Sharknados, Santa Claus Dressing, Super Miso Soup, and Jackson Pollock. If you are lucky you can create a discovery nobody else has found yet. So far, I’ve discovered Mulled Beans and an Ecoark (nope, no idea what those are).

One Thing, Two Thing, Red Thing, Blue Thing

Things I learned this week to keep up with change: How to use trackpad gestures to scroll (because scrolling with the arrow keys is disabled in our CMS). How to enable NFC on my phone (because we can now use our phones as access cards). How to use the new elliptical machines at the gym (because now you need to start using it to get it to turn on). The need to use my trackpad to scroll – or worse my mouse when working at my desk – is the small bit of friction I am hating the most. We all hate interface changes, but I really hate every time an interface leaves behind those of us who still try to do as much of our work as possible without needing to remove our hands from the keyboard.

Things I finished making this week: Syllabi and initial assignments for my programming and security classes. A fringy/furry pink scarf I’ve been plodding away at for years. A zig-zag striped “temperature blanket” inspired scarf I knocked out in a week. A yummy Baklava Babka following this recipe (and yes, it really will seem like too much syrup to pour over the cake and you really should add it all). After a chaotic fall I’ve slowed down for more crafting and baking this past month and now I might even get back to the quilt I started and abandoned from the summer.

Things I put off: Making flight arrangements for a conference in March. Putting away the light up yard deer from Christmas. Depositing a paper check I received. Starting in on a >400 page report I need to work my way through. Cleaning out my closet. The lesson here, as always, is probably that I need to be more realistic in my weekly to-do lists.

Things I enjoyed: A solid start to my 38th semester of teaching and round 32 of programming, my most frequently taught course. Starting to play Gris and finding it every bit as beautiful as the reviews suggested. Having friends over for a wonderful potluck and having a house filled with people I care about (and so much cake!) Deciding that I’m happy to have mostly given up on social media and that I should use that time to reconsider what I want to do with this space that I get to control.