design(13/1)

Web development is both imperative and declarative

Jeremy Keith explores Imperative/Declarative web development and how team culture defines the paradigm a project chooses more than the language itself in this Youtube Video. It’s insightful and short: only 22 minutes. Jeremy defines imperative programming in terms of control. Imperative programs stipulate each step (instantiate this array, iterate over this collection, put items that meet this criteria into the instantiated array). Side-effects are minimized, but the code must also describe everything that must be accomplished.…

Choose your analogy carefully

The analogies one uses to describe their work disclose important aspects about how they view one’s craft. These analogies then shape the tools which are created and dangle on one’s toolbelt. Two of my favorite analogies, teaching and pottery share the same goal of undermining the development-as-bricklaying mindset around which many development tools have organized. The brick-laying analogy (and the managerial mindset that software is “built”) has created tools which don’t fit the work.…

Most grocery stores are dehumanizing

One of the worst experiences I have on a weekly basis is buying food at the local Safeway. A gloomy pall sits on everyone inside. From the staff to the customers, no one wants to be there. But neither is there an alternative. The first weeks at an unfamiliar grocery store I’m condemned to re-walking re-walking corridors of boxes and cans in search of a few items I can’t seem to find.…

Teach the computer with tests

Thanks to Mikel Evins' post Programming as teaching I realized that my favored programming style is at odds with common practice. I knew something was off from the kinds of conflict I’d have with other developers, but Mikel made the difference stand out to me. Early in my corporate programming career I became enamoured with testing. Unit tests, integration tests, component tests, you name it. It was strange to me at that time that I hadn’t cared much about testing until I joined a corporation.…

Note taking process towards an end

Purpose is one perspective you might take when researching note-taking and the tools at your disposal. Another is process. Baldur reduces all note-taking into three steps: Collect, Contextualize, and Map. Collect The first step is simply to get the note into your repository. Whether it’s a cardboard box or a digital Kanban board, the priority is speed and reference. Contextualize This step will have different needs depending on the writer’s purpose.…

Note taking tools and strategies

A broad review of note-taking strategies for long-form writing was conducted by Baldur Bjarnason in a three-part series as part of his Colophon Cards project. Before reading Baldur’s excellent research, you should know that notes are a means to an end. Much of note-taking is a form of idea-hoarding, but Baldur’s research is sourced from writers who use note-taking for something, whether a thesis, a book, or some other project.…

Notes as maps or boxes

In The Different Kinds of Notes, Baldur concludes that there are essentially two organizational strategies, Boxes and Maps. Baldur deduces the two strategies differ only in what must be internalized. Boxes A box is a context-external organizational unit. A cardboard box, a digital folder, a binder and a desk drawer might all qualify. Anything which matches the context label of the box can be found inside. In my system, tags are a type of box.…

Pick a software language for your project

I’ve read many articles from software developers about the value of learning multiple software languages. It may not be for everyone, but that’s been a good path for me. I enjoy the challenge of learning new idioms, solving challenges in new ways, and reading the codebases of my favorite tools. One problem these suggestions don’t address is how to make choices after you’ve learned a half-dozen languages. If your employer runs a MSSQL/.…

Unix philosophy

A number of maxims have gained currency among the builders and users of the UNIX system to explain and promote its characteristic style: Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new “features.” Expect the output of every program to become the input to another, as yet unknown, program. Don’t clutter output with extraneous information. Avoid stringently columnar or binary input formats.…

Angular maxims

This is an incomplete list of maxims I’ve gleaned while working on Angular/RxJS development. favor identifier over index simplify loop with iterator swap smart components observe state over input organize subscription chains with pipes one subscription per resource distinguish series and one time observables 💬 RxJS has a reputation for being complex, hard to understand, and hard to use. A deserved reputation, to be honest. I’ve used RxJS in a project to great effect, it made an impossible problem possible, but getting your head around it isn’t trivial.…

Thoughts on online note taking

There’s a magic in Andy Matuschak’s Digital Garden. The glory of it’s deeply-linked organization is greatly aided by his custom viewport. Navigation happens like this: To browse the contents of a linked note, hover over for a snapshot. To review the full note, click the link and it’ll appear to the right as though it’s been added to a stack of notecards. One can follow links down a thought-path, viewing the last note and the present note side-by-side, or peruse several nodes off the same note without ever using the browser’s Back button.…

Use HTTP response objects

As Victoria mentions in her post, the type of code you’re writing affects how you’ll handle errors. Her example matches code that integrates with other systems on the same machine (and probably other cases). The code I’m writing these days, when it’s not JavaScript, is for back-end services. I’ve discovered that services delivered over HTTP/S are best implemented to capture exceptions in the service and return response objects. I’ll usually do something like this:…

Encompass complex thought with diagrams

The software project I’ve been building has grown to the point that it’s no longer simple enough that I can reason about it without the assistance of a diagramming tool. To my surprise, there are a proliferation of such tools, but few open source versions I could spin up today. Then I discovered PlantUML! I was a little turned off by the simplistic website, but once I began to use the tool I was thoroughly impressed.…

Intelligencia product design critique

##Product Description An Intelligencia coffee bag is an individual work of art. From its bright red color to the quality of the bag itself, every detail has been architected towards the founder’s vision, “Illuminating Coffee.” The structure of the bag is strong. The seals hold, and the bag’s opening is a Ziploc hidden behind a pull tab rather than the traditional twist-tie. Because of the quality, it begs to be recycled rather than trashed.…