Volume Two
I don’t think there will ever be a second volume of Software Design by Example in Python, but if there is, I’d like it to include the examples listed below. What I’d like even more is if a handful of software engineering professors used some chapters from the existing book in their course, then assigned one of these topics to their students as a final project and share the results with me. I’d be very happy to combine and edit the results, and I think that having a chapter with their name on it in a published book would be a pretty cool achievement for an undergrad.
-
A file compressor because compression algorithms are both important and cool.
-
A fuzz tester. If you haven’t read The Fuzzing Book yet, you really should.
-
A discrete event simulator like SimPy (but much simpler), mostly to show how co-operative multi-tasking works.
-
An object-relational mapper that targets a very simple subset of SQL (but which does show how to implement foreign key relationships).
-
Dynamic autocompletion. Showing possible continuations of what’s been typed so far is straightforward; showing how to update the tree of possibilities as new things are typed is a lot more fun.
-
A simple search engine. I’d like something more sophisticated than TF-IDF, but I don’t know what that would be.
-
A continuous integration system that runs jobs and reports results on each commit to version control. Its real purpose would be to show people how to manage processes, e.g., how to interrupt a job if another commit occurs before the job completes and how to limit the time each job is allowed.
-
An issue tracker with authentication and workflow management. (The issues are just there to motivate authentication and workflow as objects.)
-
Speaking of authentication, OAuth.
-
A fault-tolerant virtual machine like BEAM. (The existing book has a simple VM; perhaps this could extend it?)
-
TCP, because the lack of networking in the current book is its biggest weakness.
-
DNS, for the same reason (though I doubt I could make anything as fun as Julia Evans’s Mess With DNS).
-
A scale model of Docker Compose or Kubernetes, which wouldn’t have to be much more complicated than this tool for running concurrent examples.
-
A VPN. (Remember, these are scale models with only a fraction of the functionality of the real thing.)