published on in Learning
tags: fafl, golang, go, python
series: Fridays Are For Learning

Fridays are for learning.1 These are some interesting links for the week ending June 8, 2018.

  • Go for industrial programming.” As time goes on, I have embraced this kind of thinking more and more. While the term “industrial programming” seems to be intentionally distancing, the idea that building systems that are intended to last (even as individual developers come and go and business requirements change) requires specific attention to succeed really makes sense to me. As is often the case, this is a general topic discussed in terms of a specific technology, but the insights are definitely not restricted to Go.2

  • An experiment with distributed finite state machines (with associated repo), aiming for the middle ground between regular task queues (in which workflow must be managed by the application) and something like Airflow, in which an entire external system is needed to manage a workflow. Finite state machines are extremely useful and somewhat undervalued in my opinion.

  • Advanced multi-stage build patterns for Dockerfiles.3 After struggling against Dockerfile limitations for literally years, my interest has largely moved on to alternative ways to build container images (such as img, which uses BuildKit underneath) but these patterns are useful for those still stuck dealing with the current docker build.

  • On failure modes, specifically related to software versioning and considering vgo’s minimal version selection algorithm, which is (as may be expected) an elegant solution to a math problem but one which is in my opinion largely disconnected from reality. I think one of the top dangers in software engineering is solving the problem that we want to solve rather than the one that we actually have.

  • Redis 5.0 is now in release candidate stage; a major new feature is Redis Streams, basically an implementation of a lightweight log data structure. I can think of lots of situations where a log structure would be useful, but not at the cost of setting up something like Apache Kafka; it looks like this will fill that niche nicely.4 There’s some interesting additional comments from 'antirez in the discussion on the orange as well.

  • Finally, a talk from JSConf EU 2018 by Node.js creator Ryan Dahl, “10 Things I Regret About Node.js”.


  1. If your work won’t let you spend even 10-20% of your time keeping up to date with your profession, quit your job and find a better one!

  2. Note that the nursery idea for managing concurrency is brought up again. As I’ve mentioned previously, now that we have a name for this type of flow control we’ll probably see it come up again and again.

  3. Amusingly, with the introduction of multi-stage builds and build arguments, Dockerfiles now have a limited form of flow control. I wonder if they will discover in time the same things Dijkstra did: explicit, less general flow control makes things better, not worse.

  4. If I were less sane, I might seriously look at using Redis Streams in my reimplementation project.