Skip to content

Instantly share code, notes, and snippets.


Brian Marick marick

View GitHub Profile

Writing Elixir tests for greater long-term value: tricks and tools

Short summary: There are "tricks of the trade" for writing readable, maintainable tests that help produce a more coherent system. This talk shows some of them, with an emphasis on code you can use or copy today.

Longer description:


I see tweets like this:

 "The coronavirus outbreak has me thinking back to when I was a server 
 and worked a week straight while I was really sick and it turns out I had 
 the swine flu and was probably spreading it to everyone because I couldn’t 
 take off work and I’m sure that will happen with this"

I'd like to somehow help out people for whom medical care is too expensive, who don't get paid sick leave, who might get fired if they don't tough it out:

  • You’ve talked a lot in the past about releasing regularly and constantly having a shippable product. At the same time, companies like Google and Facebook have the “single branch” approach where everyone commits to the master branch, so anyone can break anything at any given time. When you’re operating at the scale of these companies, with thousands of developers, do you think the approach of continuous deployment to one branch is flawed?

  • You mentioned in your lightning talk about being naive in the face of expertise that you had assumed it was an immutable fact that developers would never like writing tests. As students, much of our work is graded by an autograder where other people take the time to write the tests, and we generally only have to worry about writing the code. Do you think teaching computer science in this way reinforces the idea that developers should not be worrying about testing? And how do you think CS education should change to adapt a test-first approach?

  • I know that Agile scrum


The Agile Manifesto ( is important, including the second principles page, which people hardly ever read.

Here are some things of mine they could look at. I’d be happy to receive email that might help a pair of us decide on better questions.

For those inclined to look at videos, they could randomly pick one of these:

marick /
Last active Jun 23, 2019
Process philosophers

A proposal to improve the speed at which reliable knowledge about software development is created

Extracted from a talk at NewCrafts Paris 2019, titled "Learning From How Science and Philosophy Progress".


  • Interaction rituals, the scene, and scenius
  • Science and reliable knowledge
  • Software and reliable knowledge
  • Scenes have places
View npm.txt
1393 $ /usr/local/lib/node_modules/node/bin/node[82126]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
1: /usr/local/lib/node_modules/node/bin/node[82125]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
1: /usr/local/lib/node_modules/node/bin/node[82122]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
1: /usr/local/lib/node_modules/node/bin/node[82123]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
1: /usr/local/lib/node_modules/node/bin/node[82127]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
1: /usr/local/lib/node_modules/node/bin/node[82120]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
1: /node::Abort()usr/local/lib/node_modules/node/bin/node[82121]: ../src/ node::PlatformExit(): Assertion `(err) != (-1)' failed.
node::Abort() [/usr/local/lib/node_modules/node/bin/node] [/usr
marick /
Last active Sep 26, 2018
Language descriptions from Bordeaux talk


  • Clojure excels at transforming streams of data. It’s great at taking data flooding in from a network, changing it, and storing it into a database.

  • Clojure code is interoperable with Java programs because it’s compiled to run on the Java Virtual Machine. For Java shops, that means it’s easy to adopt gradually. (It’s just one more JAR!)

  • There is a mostly-compatible implementation, ClojureScript, that runs on the JavaScript Virtual Machine (that is, in-browser). Many open source libraries work in both implementations, and you can write your own libraries to work that way.

  • There is a lot of emphasis on performance. The underlying data structures are tuned to work fast. For many many execution profiles, you can expect performance not too different from Java’s.

View reverse.txt
> To show the use of `map` and `andThen`, let me define a function
> `headButLast` that takes the `head` of a `List String` and removes its last
> character:
> {lang=elm}
> ~~~~~~~~~~~~~~
> > headButLast ["Dawn"]
> Just "Daw" : Maybe.Maybe String
> ~~~~~~~~~~~~~~


Like a lot of the early agile advocates, I was programming in the 1980's, when programmers didn’t tend to be people who thought it was a way to become rich. As I thought of it at the time (and it might even be true), programmers were divided into two categories: corporate drones and people with a strong math/physics attitude, including a lot of received wisdom about elegance and simplicity.

I was the latter. So were a lot of people who’ve come to be identified with “Agile”. What we noticed was that when programmers like us had power, we tended to favor our own values over those who were actually paying for the software we were writing. We’d force users to think in terms of our abstractions instead of their own — which tended to be messier, less abstract.

Some of us became “reformed sinners”, became much more inclined to err on the side of letting the users’ needs drive the software. We still had our values, but not at the expense of theirs. Sometimes a magical thing happens: we can find abstractions

You can’t perform that action at this time.