On this page:
Software Development

Software Development

Software Development

From the first day of the semester forward we expect students (you) to visit this page once per 24 hours.

“To be any kind of professional means being willing to tell the client a truth he doesn’t want to hear.” – Holman W. Jenkins, Jr.


The Lectures page also serves as the schedule for in-class code reviews.


Tuesday, November 23rd, 2021 8:04:43pm

You may wish to run your xmanager on these sample tests for 9 — Help!.


Friday, November 19th, 2021 10:10:43am

The week after Thanksgiving the TAs will hold office hours on Monday and Tuesday, equipped with a preliminary, coarse-grained rubric for Milestone 10. Try to meet with the TAs during one of those days. The TAs will use the rubric to ask you suggestive questions. The goal is to make sure you’re making progress in the right direction, both in terms of readability and correctness.

Monday, November 29


Tuesday, November 30



12:00 PM1:00 PM



01:00 PM2:00 PM



03:00 PM4:00 PM



04:30 PM5:30 PM

Eshwari, on Teams*


05:30 PM6:30 PM




10:00 AM11:00 AM



11:15 AM12:15 PM



12:30 PM01:30 PM



01:30 PM02:30 PM

* Message Eshwari on Teams if you wish to meet with her.


Tuesday, November 16th, 2021 6:13:30pm

On Thursday (11/18) we will once again collect your log books.


Tuesday, November 16th, 2021 5:59:11pm

You may wish to run your xref on these sample tests for 8 — The League.


Tuesday, November 16th, 2021 7:28:18am

Yes, software development and especially quality development can be on the wrong side of what you’d like.


Thursday, November 11th, 2021 10:29:00am

Here is a preview of the rest of the semester to help you plan:


Tuesday, November 9th, 2021 12:28:55pm

Megan & Ryan and David & Matthew are the first "winners" of double bonus points for finding a bug in my code base. They inspected the failing integration tests and noticed an off-by-1 error in mine. Congrats!

Cameron has re-run the test fest and has pushed (upwards and only upwards) revised scores into your repos. Notice that these points are for milestone 6, that is, the old pairs.


Thursday, November 4th, 2021 9:41:44pm

Tomorrow (Friday) morning you will receive an email that introduces you to your new partner and the assigned code base.

The on-boarder should conduct an overview code inspection with the on-boardee as soon as feasible. If the latter then decides that using his/her former code base would be preferable, switch roles so that the two of you can make an informed decision.

If you jointly decide that you wish to switch the code base, the on-boarder should
  • collect five sample project-design decisions that illustrate why the alternative code base is preferred to the assigned one;

  • formulate a justification why the decision of the alternative code base is superior and a two-line executive summary of this justification;

  • turn these five problem descriptions into an HTML memo addressed to your section’s instructor;

    For the few cross-section pairs, address the memo to both.

  • send the memo and a request for a meeting to your section’s instructor by Saturday 08:00pm, CCing the on-boardee and the tech TA.

    For the few cross-section pairs, send the email to both instructors.

To switch, you must meet with your instructor in person by Monday evening and receive the instructor’s blessing, who will then inform the technical TA to set up a new repo.


Tuesday, November 2nd, 2021 4:21:52pm

You may wish to run your xstrategy on these sample tests for 6 — Games!.


Friday, October 29th, 2021 10:03:12am

6 — Games! is the last milestone that you will work on with your current partner. On Friday after the due date for this milestone’s self-evaluation, you will be assigned a new partner (Friday next week) and a new git repository.

After the switch,
  • every pair will consist of a partner who is new to the code base and a partner who has worked on the code base for the past six milestones. This second partner will on-board the first one.

  • some of the pairs currently working on 6 — Games! will present their code base or manager design during the week of November 8.


Wednesday, October 27th, 2021 12:40:04pm

You may wish to run your xlegal on these sample tests for 5 — The Strategy.


Tuesday, October 26th, 2021 2:42:22pm

I (Matthias) have to switch my office hours from Wednesday to Thursday this week; I will still start at 430pm and stay until nobody’s left.

If you’re in trouble on Wednesday before the deadline, send email.


Wednesday, October 20th, 2021 8:18:50pm

The definition of Color used plain English, due to a programming mistake. For those who are curious, the specifications of such pieces are pulled in from the working solution and type-set in a programmatic fashion. The problem was essentially a single letter, rendering them seemingly as English rather than strings. I corrected for the mistake by changing the check for Color with a different predicate. The revised results should be out any moment now or are in your repo already.

Please visit the revised page and use the revised definition from now on.


Friday, October 15th, 2021 5:32:12pm

We have switched Darpan’s office hours from Wednesday to Tuesday. See Communicate.


Wednesday, October 13th, 2021 9:13:20pm

Cade Clark discovered a problem in our specification. Nothing in the JSON grammar prohibits using the same key more than once. That is, the following JSON is grammatically correct:

    { "a" : 1,

      "a" : 2,

      "a" : 3 }

The APIs for any language I know turns this into some internal data representation where "a" is mapped to either 1, 2, xor 3—without indication that this mapping does not reflect the external specification.

While such an object should be ruled illegal, our old specification of Maps allows such key duplication in one case. The test bed will not discover the duplication but it will assign one of the values randomly, and this may mean that your test case fails. If it succeeds by accident, it may fail implementations in other languages and come to our attention this way.

Do not submit such test cases.

Thanks, Cade.


Tuesday, October 12th, 2021 11:09:23am

You may wish to run your xmap on these sample tests for 3 — The Image.


Friday, October 1st, 2021 9:46:31am

The time for switching languages has passed. Only one or two pairs have taken the opportunity to submit a “memo of resignation,” which is about normal. So it’s time to post a Twitter (whatever that is) thingie that I have come across recently:

[Andrew is a bit of a language designer but mostly a security researcher.]

It is fine to stick with your languages but if you didn’t take the opportunity to find libraries that make your life as easy as my solutions indicate it should be, you have not truly accomplished the goals of the first phase of this course.

Spend some time on this problem. It will pay off large interest down the road.


Wednesday, September 29th, 2021 9:29:06pm

If you have to switch partnerships, you received an email by 6pm today.

Also, if you didn’t catch it class, 2 — The Map is out and will help a bit with 1 — The Analysis.


Sunday, September 26th, 2021 7:48:10am

Take a look at The Game: Trains, Trains.Com, a Plan, and 1 — The Analysis. But, don’t work on the problem with your partner yet.


Friday, September 24th, 2021 3:21:41pm

Jacob C. discovered a typo in the TCP port specs of E — TCP. (So did Ben L. I knew the number was wrong but forgot to Google it before I release E.) It’s fixed and it’s good practice to check how I fixed the write-up.

Of course, this fix is completely irrelevant to you. We’d be foolish to check such an extreme case when the real purpose is to make sure you find a library for working with TCP I/O streams.


Friday, September 24th, 2021 10:08:39am

Notes for the lead-in Lectures are now available on-line.

The Lab Book section is now up-to-date. Please read the revision carefully. Start your lab book when you know who your initial partner is for the project.


Thursday, September 23rd, 2021 7:05:51am

Assignment E — TCP of the TAHBPL series is out.


Tuesday, September 21st, 2021 3:03:31pm

We re-ran the test fest for C — JSON to accept larger input files and a wider range of JSON numbers. Your scores stayed the same or rose.


Saturday, September 19th, 2021 7:43:55am

Assignment D — GUI of the TAHBPL series is out. We will explain the solution on Monday morning.

Please don’t forget to read the chapter on egoless programming.


Monday, September 13th, 2021 11:37:07am

Most of the TAs will start holding office hours this week. You can find them in from of WVH 308. See Communicate. Neha C. will start office hours next week.


Friday, September 10th, 2021 11:10:42am

A memo needs a header. To: Ben Lerner, co-CEO, co-CTO, co-CfooO, co-CbarO of GamesGalore!
From: Matthias Felleisen, mere developer
Date: 8 September 2021
Subject: the choice of programming language

After a brief investigation of several languages with respect to the requirements document, our team has decided to use Racket for the first game project.

It addresses the stated requirements. Racket meets all four explicitly stated requirements. (1) When a Racket application is launched, the launcher applies the exported main function to the command-line arguments on a position-by-position basis. Alternatively a program can access the arguments via a call to current-command-line-arguments. (2) The JSON module in the standard library accommodates stream-based parsing. (3) Dating back to its very origins, Racket comes with a highly expressive, portable GUI framework. While it is somewhat dated compared to web frameworks, it is far more than a “rudimentary” framework, and an interface will look pleasing to the eye. (4) Finally, Racket has modules in the standard library for several conventional protocols, including udp, tcp, ftp, and http. The documentation [1] for these pieces of functionality is by far the largest and best organized of all candidate languages, though perhaps a bit less professional than Java’s.

Every paragraph is dedicated to one thesis and its support. As for the “nice to have” part of the requirements, the Racket package comes with a (somewhat slow) IDE with some unusual features. Additionally there are several Racket plug-ins for VSCode; one of them has the official support of the Racket team [2]. The language supports several built-in unit-test frameworks, and its tool suite comes with a unit-test element. The Racket team has published research papers on debuggers and profilers, and it is well-known that their publications are always supported with quality implementations.

Punctuation such as ":" must be used according to American style guides. One aspect distinguishes Racket from all other languages on our list: its extensive meta-programming facilities. With these facilities, we expect to build abstractions that separate specifications from implementations, making the code easily accessible and—with such focused single points of control—easily modifiable.

Admitting to downsides is a good idea. The easily identified downside of Racket is its extensive use of awfully round parentheses, which application developers obviously have to hate. We have asked the Racket team to add support for braces, which in all likelihood will also increase the language’s performance. (We insisted on not adding required white-space tabs, because it is well known that such languages are slow.)

You get a bonus point for cross-references that support your claims.

[1] See docs.racket-lang.org. The search box gives easy access to the relevant documentation.

[2] See the front-page of racket-lang.org, specifically the box on editors and IDEs.


Thursday, September 9th, 2021 7:29:40am

Homework TAHBPL B — The Very Basics is out.


Wednesday, September 8th, 2021 4:43:44pm

This is a simple test concerning changes to the web site.

First, a careful reader of the web pages discovered that some sections still referred to “remote” participation. These passages were left over from a time when it wasn’t clear whether we’d go hybrid or in person. They are removed now.

Second, we had to move some office hours. The ones posted now are going to stay until we have a better sense of how much/little need there is.


Saturday, July 10th, 2021 5:30:41pm

Welcome to Software Development Fall 2021.

See Abstract for a concise course description.

The quote at the top of the page characterizes how the instructors will lead this course as professionals. They firmly embrace the idea that if you pay a lot of money for education, the instructors have an obligation to deliver as much value as possible. The course is an intensive experience.

If you choose to take the course, familiarize yourself with the web site as quickly as possible. For the first couple of weeks, TAHBPL will grow every couple of days; after that, Project Milestones will evolve every week. Any out-of-the-ordinary changes will be announced on this front page.


Degüello (No Surrender!)