Typing is not the problem

You used to write CSS

body {
  font: 12px Helvetica, Arial, sans-serif;
}

And then Stylus came along

body
  font 12px Helvetica, Arial, sans-serif

cssondiet and typing font was too much

body {
  fo- 12px Helvetica, Arial, sans-serif
}

The programming world has been working hard to save keystrokes: those darn { and ; are disappearing by the hour.

But short is not simple. Typing is not the problem.

The complexity of programming is conceptual. You don’t solve a problem of complexity by reducing the number of characters on a page.

Ever wondered why vim doesn’t start in insert mode? It’s because programmers spend a minority of their time writing code and the majority thinking, debugging, and editing away their mistakes.

Trade the energy of using preprocessors and remembering the meaning of variables named z weeks after naming them, and spend it on documentation, tests, and contemplating modes of failure. Write code in full words and sentences of thought, with English in between. It’s good for the future, good for maintenance, and will save time in the long run.

See Also

Binstock: You seem fastidious about always giving people credit for their work.

Alan Kay: Well, I’m an old-fashioned guy. And I also happen to believe in history. The lack of interest, the disdain for history is what makes computing not-quite-a-field.

Let’s embrace attribution and adaptation: creation doesn’t happen in a vacuum.

It’s easy to lose the storyline of why things are made and where inspiration comes from - especially with open source software where the foundations are destroyed and rebuilt each year.

Recently I’ve been using See Also as a way to make this explicit. It’s simply a heading that can be in a readme file or a blog post. It can serve as a pointer to similar projects or even just things on the same topic. For projects with heritage, it can serve as a sort of historical hint. For some projects like simple-statistics, See Also outgrew the readme and has a standalone page.

Explicitly crediting the sources of our ideas is good for the community, and sharing our knowledge of suggestions and similarities will make the web easier and friendlier to explore.

See Also

  • See Also is named after by Wikipedia’s See Also section that sits just above citations.
  • Curator’s Code is a similar project that defines a new sign and differentiates between direct & indirect discovery. A freeform approach that doesn’t rely on symbol recognition feels more right to me: with English, you can specify more complex and subtle ideas than you can with a link.

ownership

ownership is a powertool for distributing permission to publish npm packages.

This is a templated version of an in-house tool at Mapbox called mapbox-owners. Mapbox is a lot of people and maintains numerous open source projects, such that frequently people need to ask for npm ownership of new projects. I wrote mapbox-owners to automate this conversation: in one command, anyone can give ownership of a module to everyone.

~/src/turf-jsdoc〉turf-owners turf-jsdoc
adding 7 owners to turf-jsdoc
✓ tmcw ✓ cwmma ✓ cspanring ✓ jseppi
✓ jvrousseau ✓ mourner ✓ morganherlocker

Working on Turf - a GIS system composed of 54 modules and counting - made me consider both dimensions of the problem, both modules and people. It’s likely that Turf’s modules will evolve all-at-once occasionally due to generated code. The Turf team will also grow - there are 8 maintainers and counting. Hence ownership-all: a command that iterates through a list of modules and a list of users, adding each user to each module. In turf’s case, it automated 432 calls to the npm owner add command.

When new people join, add them to the list of users in your owners module and publish a new version to have them added by default. So far ownership hasn’t dealt with the problem of removing owners, but that’d be a great contribution to the open source project.

ownership is designed to be forked, not used directly. Fork, rename, and manage as you’d like, so that you can npm install mycorp-owners and run mycorp-owners to use it with your team.