→ A valid counterpoint

From Poul-Henning Kamp:

That is the sorry reality of the bazaar Raymond praised in his book: a pile of old festering hacks, endlessly copied and pasted by a clueless generation of IT “professionals” who wouldn’t recognize sound IT architecture if you hit them over the head with it. It is hard to believe today, but under this embarrassing mess lies the ruins of the beautiful cathedral of Unix, deservedly famous for its simplicity of design, its economy of features, and its elegance of execution.

One of Brooks’s many excellent points is that quality happens only if somebody has the responsibility for it, and that “somebody” can be no more than one single person—with an exception for a dynamic duo. I am surprised that Brooks does not cite Unix as an example of this claim, since we can pinpoint with almost surgical precision the moment that Unix started to fragment: in the early 1990s when AT&T spun off Unix to commercialize it, thereby robbing it of its architects.

It’s very easy for me to get overly confident in the open source movement and ethos as the only way forward. It’s good to hear a valid counterpoint every once and a while.


Observations from a Node newbie

It’s been a few months since I started playing around with Node.js, and in the last few weeks I started writing my first full application in Node. I’ve found myself really enjoying it, even if I have not figured out all the nooks and crannies yet.

In this time I’ve come to realize that Node is very different than other languages/frameworks I’ve coded in. Most of these differences impressed me, but some of them led to quite a few frustrating moments. This list below is a subset of my observations of a few months of working with Node—all just my personal opinions, of course.

  • Everything in Node just feels, well, fast. Most of my web development work lately has been with Rails, and I know this probably feeds into the old stereotypes of Ruby, but Node feels faster. Not that Ruby is slower actually, but Node feels lightning quick
  • Everything about Node is flexible. Because of the nature of Node and its implementation, it is incredibly flexible. Even within most of the established frameworks it is incredibly easy to write your application exactly as you want it. In many ways Node feels like the dream of those who love higher level languages. Throw the right npm modules into your package.json, and off you go
  • Everything about Node is almost too flexible. For good or for bad, it feels like I can do anything I want. From reading blogs and other community discussions, it seems like there is not yet a “Node way” in all but the most fundamental aspects of the language
  • It’s still JavaScript. I don’t mean that solely as a knock. Much of the power and flexibility of Node comes from the language underneath it. But, all the things about JavaScript that bug me are still there, and they still bug me. But there is enough value in the whole package to make it worth it. To like it even
  • Asynchronous, event-driven programming is a great fit for the server side. Especially for APIs. Today, I would’t pick a different tool
  • YMMV, but for me the community is still coalescing, and there is not yet a consensus on the “Node way” for many things yet. One of the things I earnestly love about Rails is the fact that the community has a cohesive point of view on how to use the framework. You don’t have to follow it, but it makes discovering and adopting best practices easy, which is good for the coder and their users
  • I have not found the right way for me to do TDD in Node yet. Maybe it’s a lack of tools, or maybe I just haven’t found what works for me, but testing is very important for me and I’m not yet comfortable

→ Realism on Swift

David Owens:

Swift has it’s warts. It’s a baby that’s trying to grow up quickly in a world that is harsh. The question I’ve been asking myself, both through these posts and throughout the weeks is really this: are Swift’s warts and ugly places worse than those of Objective C’s? Will they be tomorrow?

For the last week I’ve worked bit by bit on rewriting my first iOS app in Swift. Several years ago I wrote this app for my wife because she could not find a grade scale app on the App Store that was easy to use or not ugly. A few weeks later I installed this app on her phone, and she’s been using it ever since.

When I first created the app it was for iOS 5. As the years have gone on I did a few things to keep it up to date, particularly for iOS 7, but I never moved to Auto Layout. With the launch of the iPhones 6 and 6 Plus, I decided it was time, and I figured I’d use Swift. Why not, right?

It’s been a good exercise for me, and I’m learning to really like the language. I am more comfortable in Swift with my little bit of knowledge than I ever was in Objective-C, which I know far better. I enjoy it, but it’s not perfect. That’s why I appreciated this post from David Owens so much. It’s not perfect, but it’s what we’ve got.


I can’t escape the analog world

I work in a company that has been paperless for two decades. At home we have a ton of devices, more than one for every use case. I had a Palm Pilot in college. I haven’t sent a letter in the mail in over a decade. All of my to-dos and calendars are digital. And yet, I can’t escape the analog world of pen and paper.

Of course, the truth is that I don’t want to escape it. I love pens and paper. I love the feel of writing with a good pen. I love the physicality of a notebook. I carry a Field Notes book with me everywhere, every day.

I’m completely stuck in between analog and digital. If I take notes digitally they are easy to find, and easy to copy and send to others. If I take them with pen and paper I remember them more easily, and I am prompted to act every time I open my current notebook.

I don’t have a good solution to this problem. I don’t know how to get the best of both worlds. And yes, I’ve googled this many, many times. I’ve spent hours of blogs of the similarly afflicted. I’ve found solutions that come close, particularly archiving notebooks via photo in Evernote, but none of them have been practical for me.

So today I will go to work with my good pens and my notebook. I will sit down in my first meeting with my laptop open, and paper and pen beside it. I will continue living in between these worlds, because I don’t have another option.