Program Interfaces, Patterns and Anti-patterns

One of the most important roles of senior engineers and architects is to define the boundaries between programs. This must be done thoughtfully, with a firm understanding of what is being abstracted, and foresight of evolving needs.

Unfortunately, these skills are typically learnt the hard way. This course is our attempt to rectify that, providing a tour of program interfaces, patterns and antipatterns through a series of case studies and exercises.

We cover many specific API designs in detail, but the ultimate objective is broader: students should leave with greater confidence that their own API designs will stand the test of time.

Topics covered

  • Text-based wire protocols (e.g. HTTP, SMTP, telnet)
  • Binary wire protocols (e.g. redis, postgres)
  • Application-level RPC and remote query (e.g. CORBA, SOAP, REST, HATEOS, grpc, GraphQL)
  • Interchange and archival via “human readable” formats (e.g. tsv/csv, yaml, xml, edn, json)
  • Interchange and archival via schema-free binary formats (e.g. msgpack, fressian, llvm bitcode)
  • Interchange and archival via schema-based binary formats (e.g. bmp, elf, pdf)
  • Interprocess communication (including the Unix process interface, BSD sockets and the ZeroMQ API)
  • Low level, performance-sensitive interfaces (including posix system call table and CPU ABIs)
  • Identity encoding (e.g. uuid, DNS, email, uri)


This course assumes 1-2 years of work experience as a software engineer with some exposure to a mix of program interfaces.

Schedule and fees

This course is next scheduled to run Tuesdays and Fridays 6pm-9pm and Sundays 2pm-5pm for three weeks starting Tuesday, 7 March 2017. The total price is $1,800.

San Francisco, California
© 2016 Bradfield School of Computer Science