… and some answers I have given which may or may not help you. I haven’t been coding much, instead I’ve been enjoying nature photography, and sharing it on twitter. It’s why I haven’t been blogging here as much as I used to. As a result, I find myself being asked about photography far more than I am about coding, and so much like with coding, I decided to write up my…
There is no secret to making friends with crows. Like many things in life, it requires time, patience, and disposable income. Step 1: Find Crows. Crows tend to hang out where humans leave trash, so they’re everywhere. Step 2: Leave food out for the crows to eat. Crows are carrion-eaters, they’ll eat almost anything. They like raw peanuts (in the shell, unsalted, not roasted either), they like…
Building a reliable, robust service often means building something that can keep working when some parts fail. A website where not every feature is available is often better than a website that’s entirely offline. Doing this in a meaningful way is not obvious. The usual response is to hire more DBAs, more SREs, and even more folk in Support. Error handling, or making software that can recover from…
Originating in a thesis, REST is an attempt to explain what makes the browser distinct from other networked applications. You might be able to imagine a few reasons why: there’s tabs, there’s a back button too, but what makes the browser unique is that a browser can be used to check email, without knowing anything about POP3 or IMAP. Although every piece of software inevitably grows to…
If you ask a programmer for advice—a terrible idea—they might tell you something like the following: Don’t repeat yourself. Programs should do one thing and one thing well. Never rewrite your code from scratch, ever!. Following “Don’t Repeat Yourself” might lead you to a function with four boolean flags, and a matrix of behaviours to carefully navigate when changing the code. Splitting things up…
Debuggable code is code that doesn’t outsmart you. Some code is a little to harder to debug than others: code with hidden behaviour, poor error handling, ambiguity, too little or too much structure, or code that’s in the middle of being changed. On a large enough project, you’ll eventually bump into code that you don’t understand. On an old enough project, you’ll discover code you forgot about…
Psychological Safety in Operation Teams : Think of a team you work with closely. How strongly do you agree with these five statements? If I take a chance and screw up, it will be held against me. Our team has a strong sense of culture that can be hard for new people to join. My team is slow to offer help to people who are struggling. Using my unique skills and talents comes second to the…
It depends. The problem with distributed systems, is that no matter what the question is, the answer is inevitably ‘It Depends’. When you cut a larger service apart, where you cut depends on latency, resources, and access to state, but it also depends on error handling, availably and recovery processes. It depends, but you probably don’t want to depend on a message broker. Using a message broker…
Last night I found out i’d lost a friend , and if you’ll be patient with my words, I’d like to reflect a little. Mathie was one of the older, weirder, geeks I met. I’d escaped my home town in the edge of nowhere, and it was my first time having a peer group of adults. He’d helped everywhere. With the student run shell server, with the local IRC server everyone…
This week I gave a short talk on a paper I love: End-to-End Arguments in System Design The talk was recorded and uploaded (but not captioned), and you can watch it here: https://skillsmatter.com/skillscasts/8200-end-to-end-arguments-in-system-design-by-saltzer-reed-and-clark
I gave a talk at !!con last weekend, about my favourite programming language scratch: Back in 1971, Cynthia Solomon and Seymour Papert wrote “Twenty things to do with a computer”, about their experiences of teaching children to use Logo and their ideas for the future. They were wrong: There’s a lot more than twenty. Logo’s successor, Scratch, has over thirteen million things that children and…
I found two translations by accident. I can’t tell if they are perfect translations but I am thankful nonetheless. Russian Chinese (Many people mentioned The Wrong Abstraction , and it is worth mentioning here too.)
“Every line of code is written without reason, maintained out of weakness, and deleted by chance” Jean-Paul Sartre’s Programming in ANSI C. Every line of code written comes at a price: maintenance. To avoid paying for a lot of code, we build reusable software. The problem with code re-use is that it gets in the way of changing your mind later on. The more consumers of an API you have, the more…
Technical interviews, as they stand, are at best a proxy for finding people exactly like the interviewer and at worst part of the systematic discrimination plaguing tech . We have very little idea about what makes good code, so it should come as no surprise that we have little-to-no idea how to find people who are good at coding, along with the dozens of complementary skills. Tech interviews boil…
What Your Open Source Culture Really Says, Part One : “What Your Open Source Culture Really Says”, a handy translation guide for the myriad of bullshit that is the world of open source — in particular the corporate exploitation of unpaid work.
Twitter is not great at many things, but it worked well enough for me until now. As much as I enjoy having a public persona on twitter, I primarily use it for arranging my social life. That was until I hit newsy combinator and techcrunch — my mentions filled up with people shouting so loudly, I couldn’t hear my friends anymore. As a short term fix, I forced everyone who followed me to…