/learning

A place to record notes from talks, papers and code walkthroughs

Introduction

I've recently decided to go back to the original sources on a range of software engineering and CS topics in order to deepen and strengthen my current practice. My current practice has come from a university degree, observing others, reading blog posts and books, and building various pieces of software over the past 25 years.

This particular stage of my engineering journey emerged out of:

  • being challenged by a colleague who was exploring Object Oriented Design in more depth than widely accepted practice (typically what is called class-oriented programming).
  • watching many Kevlin Henney talks in which he points back to the old papers
  • being challenged by Tom Gilb to "read the papers your heroes read"

Papers

Why bother reading all these old papers?

A lot of it comes from a realisation that it is possible to be a perfectly acceptable practicioner - writing clean code, thinking through designs, making sensible architecture choices etc. by reading all the current theories and listening to the latest talks, but to grow you need a strong conceptual model beyond just learnt practice (no matter how broad). Building that conceptual model generally means going beyond your teachers to their teachers. As Kevlin Henney has recently very clearly stated, there is much from the early days of computing that is still relevant. It is a constant surprise to see statements of problems that are still with us today (albeit generally on a different scale).

What to expect in this repository

Every week or two I'm going to be looking at a paper - long enough to read, re-read and mull over its contents and implications. Then I'll write a few notes up here. I can't guarantee they'll be original or even interesting thoughts but if anybody actually ends up reading them then perhaps they'll go and read the original papers for themselves.

Queue

  • [BROOKS87] Brooks, Frederick P., "No Silver Bullet: Essence and Accidents of Software Engineering," Computer, Vol. 20, No. 4 (April 1987) pp. 10-19.

  • [LISKOV88] Barbara M. Liskov. Data Abstraction and hierarchy, ACM SIGPLAN Notices - Special issue: 'OOPSLA '87: Addendum to the proceedings, Volume 23 Issue 5, May 1988. Pages 17 - 34

  • [LISKOV-WING94] Barbara M. Liskov & Jeannette M. Wing. A Behavioural Notion of Subtyping, ACM Transactions on Programming Languages and Systems, Vol 16, No 6, November 1994. Pages 1811-1841.

  • [TRYGVE1979/2007] Trygve Reenskaug. The original MVC reports (THING-MODEL-VIEW-EDITOR - an Example from a planningsystem, May 1979 & MODELS-VIEWS-CONTROLLERS, December 1979)

  • [TRYGVE03] Trygve Reenskaug. The Model-View-Controller (MVC) Its Past and Present, Handout, 2013

  • [COPE/TRYGVE14] James Coplien & Trygve Reenskaug. The DCI Paradigm: Taking Object Orientation into the Architecture World, Agile Software Architecture, Aligning Agile Processes and Software Architectures, 2014, Pages 25–62

Need full references

  • Out of the tar pit - Ben Moseley & Peter Marks

  • A Design Methodology for Reliable Software Systems - B.H. Liskov

  • Architectural Styles and the Design of Network-based Software Architectures - Roy Thomas Fielding

  • Big Ball of Mud - Brian Foote and Joseph Yoder

  • On the Criteria To Be Used in Decomposing Systems into Modules - D.L. Parnas

  • Go To Statement Considered Harmfal - Dijkstra

  • Meltdown - Moritz Lipp et al.

  • Spectre Attacks: Exploiting Speculative Execution - Paul Kocher et al.

Talks

Queue

I've seen many of these talks before but I intend to watch them more closely, take notes and make observations

Hexagonal Architecture

Microservices

Functional Programming

  • Mark Seemann - Functional Architecture - The pits of success

Walkthroughs

Queue

  • ILSpy - IL Decompilation tool, C#
  • NLog - Advanced .NET Logging, C#

Other ideas

  • ImageSharp
  • Math.NET Numerics
  • V8
  • Roslyn
  • Node JS
  • SharpDevelop