WWC SF book study of the textbook, Concepts, Techniques, and Models of Computer Programming (CTMTP).
- Official book site: https://www.info.ucl.ac.be/~pvr/book.html
- Publisher site for book: https://mitpress.mit.edu/books/concepts-techniques-and-models-computer-programming
- Women Who Code SF: https://www.womenwhocode.com/sf
Currently, the event series lead envisions a 2 hour real-time session over video twice a month. This session is to discuss questions and issues that arose during reading and exercises; reading the text and doing the exercises is are both homework between sessions! 1.5 to 2 hours of text study and an hour of exercises are the envisioned commitment between sessions. This may be more or less depending on the attendee's background. The sessions build on each other, so be prepared to commit; the series is not drop-in. The lead anticipates a year for the series.
Homework in the form of exercises is a work in progress. For an example: 01: Introduction to Programming Concepts.
CTMCP covers many popular (and not so popular) models of computation in a minimally formal and rigorous way for software engineers and other computer programmers outside of theoretical computer science. The benefit is a rigorous grounding without deep academic background, which leads to clearer thinking and code.
Model of computation is a formal term for programming paradigm. The term programming paradigm (https://en.wikipedia.org/wiki/Programming_paradigm) is usually tied to specific real-world programming languages, and typically refers to programming language design choices that seek to optimize some aspect of computer programming or machine execution by limiting the expressive power available to a computer programmer (thereby exerting programming opinions on the programmer). Model of computation instead refers to how an abstract machine executes statements and "computes". By focusing on an abstract machine, and not on real-world programming languages, CTMCP approaches the study of models of computation from a more purely theoretical basis.
Minimally formal is still formal. If one has not attempted to work through such computer science classics as:
- Structure and Interpretation of Computer Programs (SICP or The Wizard Book)
- Introduction to Algorithms (CLRS [acronym of the authors])
- Programming Language Theory (PLT)
- Design Patterns (GoF [acronym for Gang of Four, the authors])
One may find this journey intense. With the exception of GoF (very informal), each of these is much more formal that CTMCP, but gives one the idea of what formal theoretical computer science looks like.
It is absolutely unnecessary to have worked through these texts before! They are provided as examples to illustrate what to expect. The event series lead highly recommends at least looking at SICP to get an idea of what is involved.
The target audience of this book study is practitioners in industry (i.e. software engineers, probably in user space). Both so-called backend engineers and frontend enigneers will benefit. Deployment architecture (i.e. microservice layout) and DevOps will likely not benefit, though the text does cover actor-model concurrency. 5-10 years of professional experience engineering systems is recommended. Less experience is needed if the professional has spread out that experience aggressively across a diversity of system architectures. More experience is recommended if the professional has focused on a single architecture but the person has progressed linearly in roles. (CTMCP is a large exercise in compare and contrast, so a diversity of exposure to architectures is recommended.)
Those with less experience are certainly welcome! Just be prepared to work! The book study can provide some support, but be prepared to work alone!
Jenny Kwan is a technical founder with 22 years of experience in software engineering, mostly on data systems at scale (as of 2021). This includes low-level user-space application processes focusing on resource optimization and concurrency correctness with timing guarantees, all of the way up to distributed architectures for resilience, recovery, operability, and economy. She has experience both with designing and implementing system components from "scratch" (i.e. high-level programming languages with their standard libraries) to integrating stacks with commodity-off-the-shelf components. She has led teams in both a project and line management capacity and is keenly interested in the tradeoff between human and machine efficiency as well as the tradeoff between individual and team productivity.
Her interest in this text is a more formal grounding in the abstract study of vector clocks and timing guarantees, especially with regards to abstract machine design.