Steve Klabnik

“The most violent element in society is ignorance.” - Emma Goldman

Read this first

A eulogy for my 20s

Today is the last day of my 29th year of existence. I’ve been thinking about it a lot, which is extra strange because I don’t generally care about birthdays. I’m not much of one for holidays in general. So why do I care about this one?

My 20s have been an extreme period of growth. At the start of it, I thought that I was going to live in my little farming town, get married to The Girl, go to mass every Sunday, and pretty much do exactly what everyone else I knew had done. If you’re reading this, well, you know a very different me. Before my 20s, I had only left the country once, a short trip to Toronto. I had barely even left my state. I was smart, but cocky, and incredibly sheltered. I was the very embodiment of a stereotype.

I’ve come a long way.

The root of my anxiety about being 30 comes from something that my brain is constantly whispering into my ear: “You don’t have enough

Continue reading →


DOCember: documentation + December

There are few things I appreciate more than using software projects that have good documentation. When I’m new to the project, documentation is invaluable for helping me get going. When I’m not new, good documentation helps me get the information I need to :shipit:.

About a month ago, I was tweeting about this topic, and several of us came up with an idea: similar to how November is National Novel Writing Month, why not have a similar month for programming?

Here’s the idea: in December, let’s try to work on the documentation for the projects we work on. Make it 50k words like NaNoWriMo, make it 24 pull requests, whatever floats your boat. Your future self will love you for it.

Continue reading →


Rescuing Resque… again.

A long time ago, there was a big open source project, which was a huge part of the Rails world, but had almost no maintenance. This project was Resque, the go-to way to write background jobs for your Rails application. I attended a talk where the current maintainer was clearly getting burned out, and so, offered to help. The problem is, things have changed.

It wasn’t just me. It was a bunch of people. We all used Resque, and loved it, and wanted to make it better. We made plans for a big 2.0 to pay off a bunch of technical debt, simplify the codebase, and add more features. A ton of people chipped in, I had some awesome remote pairing sessions. Things were good.

But slowly, we all started to drift away. One contributor changed jobs. Another decided to spend more time with family. I got discouraged, and then, there was a strange situation in which I accidentally released an entirely

Continue reading →


“The Rust Programming Language” will be published by No Starch Press

I’m happy to bring you some news: “The Rust Programming Language” is going to be published, in physical form, by No Starch Press. I am really excited to work with No Starch on this: they’ve published some of my favorite programming books, like “If Hemingway Wrote JavaScript”, “Ruby Under a Microscope”, and “Ruby Wizardry”.

Another reason I’m keen to work with No Starch on this is that they believe in publishing freely available material: we’re going to take the existing manuscript, whip it into shape, make a nice paper book out of it, and merge the changes back into the official documentation. So the improvements will get back to everyone, even those who can’t afford a physical copy.

The authorship credit is to “The Rust Project Developers,” as other people have contributed significantly: we even have an active PR to re-write an entire chapter. Rust is a team effort.

Oh, and one last

Continue reading →


Community Versions for Rust

Rust has been through a lot of changes in recent years. As such, tutorials get out of date. We’ve occasionally said that including rustc -v in your blog posts would be helpful, but today, I saw this tweet go by:

After some quick hacking, I’ve modified it to work with Rust. You can find the project here: https://github.com/steveklabnik/rust-community-versions

TL;DR: Put this into your blog post, substituting the appropriate date and title:

<iframe
  width="178" height="24" style="border:0px"
  src="http://steveklabnik.github.io/rust-community-versions/2013/10/18/pointers-in-rust-a-guide.html">
</iframe>

Then, make a pull request adding a new post with some front-matter:

---
layout: post
url:

Continue reading →


The Language Strangeness Budget

I’ve always loved programming languages. I’ve spent plenty of times with many of them, and am fortunate enough that language design is now part of my job. In discussions about building Rust, I’ve noticed myself making a particular kind of argument often in design discussions. I like to call it ‘the language strangeness budget’.

When building anything, it’s important to understand why you are building it, and who you are building it for. When it comes to programming languages, building one is easy, but getting people to use it is much, much harder. If your aim is to build a practical programming language with a large community, you need to be aware of how many new, interesting, exciting things that your language is doing, and carefully consider the number of such features you include.

Learning a language takes time and effort. The Rust Programming Language, rendered as a PDF, is about

Continue reading →


Ouroboros

One of the things that I love about open source is its ability to send improvements across projects. Sometimes, an improvement in one project ends up improving its upstream. This kind of network effect really gets to the core of it for me: steady, constant improvement.

I saw an example of this today that makes me smile. Before Rust’s 1.0 release, I wrote a chapter about the Dining Philosopher’s problem. Incidentally, I’m really happy to use classic CS concepts in the Rust docs, hopefully exposing them to people who didn’t get the opportunity to get a degree in computer science. Anyway, towards that end, I decided to cite Tony Hoare’s classic CSP paper. Other funny aspect of that: I started my implementation using channels, but ended up using mutexes instead.

Anyway, today, a new contributor spotted a typo. The PR message made me smile:

Looks like this was an issue in the source

Continue reading →


Hope

“The people are unstoppable / Another world is possible”

This has long been my favorite protest chant. For me, it gets to the heart of the matter: another world is possible. If I’m honest with myself, most days, I don’t really believe that the world will get better. We often present history as a kind of positive progression: the world has only been getting better, more tolerant, and less poor as the years go by. I don’t feel that, though. What I see is imperialism, consolidation of power, and rampant racism/sexism/etc. Liberalism presents itself as an end of history, the final stop on the line. That’s unacceptable to me, but I usually feel like the only one.

The start of this post sounds depressing, but I’m only writing it because I actually feel positive, invigorated. I’m writing this post from the Barcelona airport, about to board the plane home. It took me a while to figure this

Continue reading →


An introduction to economics under capitalism

The dismal science a difficult one. Many people have strong opinions about economics, and it determines many of their other political beliefs. As someone who has significantly different thoughts on this topic than many of my peers, I’m writing this post out to give a basic explanation as I see it. That doesn’t mean I’m inventing something here, just explaining the model that I currently prefer. I’ll give sources at the end, if you want to dig deeper. Speaking of ‘deeper,’ this is also an introduction, one could easily write a book or three on this topic. I’ll try to be clear where I’m making an assumption, and why I’m making it.

Finally, this is very much a draft, I may make small, or even maybe major errors. Nobody’s perfect. My spelling is terrible, and there’s a bug where my browser spellcheck isn’t working… anyway.


Let’s start from the beginning. And that beginning starts with

Continue reading →


An alternative introduction to Rust

Lately, I’ve been giving a lot of thought to first impressions of Rust. On May 15, we’re going to have a lot of them. And you only get one chance at a first impression. So I’ve been wondering if our Intro and Basics are putting our best foot forward. At first I thought yes, but a few days ago, I had an idea, and it’s making me doubt it, maybe. So instead of re-writing all of our introductory material, I’m just going to write the first bit. A spike, if you will. And I’d like to hear what you think about it. This would take the same place as 2.4: Variable bindings in the existing structure: They’ve installed Rust and gotten Hello World working.

$ rustc --version
rustc 1.0.0-dev (dcc6ce2c7 2015-02-22) (built 2015-02-22)

 Hello, Ownership

Let’s learn more about Rust’s central concept: ownership. Along the way, we’ll learn more about its syntax, too. Here’s the program we’re going to talk

Continue reading →