I like solving problems. Programming is part of that.
As a teacher, I’ve written code mainly to solve problems for myself and the people I know, or to model the process for students. I’ve also reviewed and graded tens of thousands of lines (at least!) of student code in Java, Racket, Scheme, SQL, and C. I have conducted code walkthroughs of student code in programming class, teaching students what to look for when reviewing code.
Teaching also involves writing plenty of instructions and specifications. Here’s an example of a programming project spec I wrote for the second semester of an intro programming class.
Below is a non-exhaustive list of projects I’ve worked on or contributed to.
- racket-cookies: an RFC6265-compliant implementation of cookies (client- and server-side) for Racket.
- racket-jwt: an implementation of JSON Web Tokens.
2022: For auticon US:
- Python scripts using openpyxl to extract employee skills data from Excel workbooks for analysis and for generating employee profiles in HTML.
- A Python link checker for the Excel spreadsheet containing our in-house SQL curriculum.
- A SKOS knowledge base, consisting of (1) job skill and role data I compiled and organized in an easy-to-edit Excel workbook, (2) a Python library to extract the data, (3) a Python script to load the data and emit a SKOS knowledge base in the form of Turtle/RDF triples, and (4) a Makefile for performing the extraction and then using a reasoner (EYE) to validate the extracted data against the SKOS spec and infer additional relations.
- Excel VBA event handlers for logging and validating changes to hiring data.
- bash and Python scripts for running student SQL code and checking query output against an answer key (for exact match or up to row/column permutation)
2020: A script for generating a paper gradebook and planner for left-handed teachers, written for a teacher friend and documented sufficiently for a competent programmer without Racket experience to experiment with changes to the parameters.
2020: A script that simulates perfect shuffling of a deck of cards:
2018–19: As a choral director and singer, I know directors need to know the vocal ranges of singers and songs, to choose songs that fit the singers’ ranges. I wrote a script that extracts pitch info from a MusicXML file of four-part vocal music, and generates an image of summary histograms that can then be inserted into the last page of the sheet music PDF, permitting directors to see the needed vocal ranges at a glance:
2014: In studying the pancake-sorting problem, I wrote some code to generate trees of possible pancake-stack states using BFS, find critical paths from root to leaves, and render the results:
2008: I implemented an algorithm in Java (working in Eclipse) for finding the quasi-inverse of a database schema mapping.
2000: I developed a prototype language for writing “nanopass” compilers, as described in the subsequent paper A Nanopass Framework for Compiler Education.
A few Quora posts I’ve written about programming:
- What is computer programming?
- As a student of philosophy how can programming help me? Is it worth learning?
- How many complete words can be typed from within the ASDF (left hand) position on the QWERTY keyboard? How about the JKL: (right hand) position?
- Why is there so much hype surrounding monads when it is just a special case of continuation-passing style?
- What is the best explanation of the QuickSort partition algorithm?