A simple way to estimate how interested I’ll be in a given project. It’s a checklist; for each item, if the project fits the description, add the associated points. Points can be negative.
I will work face-to-face with peers: +100. On my own, I get demoralized, bored, edgy, stressed, and find it hard to concentrate. I want to speak face-to-face to my colleagues. Skype is not a substitute. I want to pair program. I want to moan about little problems and celebrate little successes. …
I wrote an ELF binary which, when run, prints itself on standard output:
$ ./quine > quine2
$ md5sum quine quine2
It doesn’t “cheat” by reading its own file. Instead, it uses how ELF binary files are loaded into memory. To explain how the program works, I’ll show you it byte-by-byte. Along the way, we’ll learn about files, programs, the ELF format, and tools for working with these things.
The program ./quine is just a file. This means it is a named list of bytes, just like text files, images, videos, etc. We can view the…
Wikipedia, if you haven’t heard of it already, is the world’s biggest software project. At almost a billion lines, it’s twice as large as healthcare.gov. It’s coded in a homegrown Turing-complete programming language, and the full thirteen years of history is kept in a homegrown version control system. The final built artifact — an online encyclopedia — gets more traffic than Twitter.
What text editors do contributors use to write this software? Just one: an HTML <textarea> element. It’s decorated with some buttons for common…
I often see stories associating software development with depression and other mental health issues. A lot of people saw a 2013 talk by Greg Baugues in which he talks about his bipolar disorder and the possible suicide of one of his co-workers. There are a lot of posts talking specifically about Aaron Swartz. There’s a website and forum devoted to the topic of developers with depression. The perception amongst developers is that we are a high-risk group for depression and related disorders.
I’m sure you’ve heard the following claim before: “finally, language L has first-class functions; now we can do functional programming!” But first-class functions are simply not relevant, and here’s why.
A language L is “functional” to the extent that a “function” defined in L is actually a mathematical function. The property that makes L a functional language is not the existence of first-class functions, but the existence of mathematical functions.
These two properties, being first-class and being mathematical, are orthogonal. …
We live in a world obsessed with solutions. Every article or paper claims to be a solution to something. We award merit to an idea to the extent that it solves a problem. Sometimes we even call something a ‘solution’ without ever stating what the problem is that it is a solution to. Even in an intensely entrepreneurial space like Hacker News, where the phrase ‘pain point’ is common, almost every post is a proposed solution. We tell people they are creating ‘solutions in search of problems,’ but how are they to know what the problems are? …
Your software company is driven by financial incentives. Your price model for the end user is simultaneously an incentive model for your company. Bad incentives can impel you to make bad software. Here are some ways that your product pricing can incentivize you to make bad software.
Nix is a package manager. ‘Nix’ is also the name of the programming language that it uses. The language can actually be used independently, without any package management at all. Here I show the Nix expression language by example. My approach is to introduce expanding subsets of the language: at any point you can stop reading and have a full understanding of the subset introduced up to that point.
I’ll assume you’ve already installed Nix. Next stop, hello world! From the terminal, run:
How many old files in your repository could be removed without breaking anything? A significant number, if your repository is non-trivial. Humans are terrible at garbage collection, because orphaning doesn’t break test suites and doesn’t show up in code review. But how about if your CI process was able to tell you:
This commit might have orphaned these files:
This kind of warning guards against two kinds of failure:
Below is a graph of git activity on a fairly large project. Does it look intimidating to you? It does to me, despite using git every day for years.
The problem is that these graphs just show everything. Traversing this graph is like using Google Maps at maximum zoom to plan a trip across Europe. There is no concept of zooming in or out; no distinction between the highways and the dirt tracks.
Instead, I want to pass a set of ‘interesting’ commits to a program and have it show me their topological relationship. Do they point to the same…