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.

image 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!)