Steve Jobs, the Xerox Alto, and computer typography

A few nights ago I met a wonderful woman at a pipe organ concert who worked for several decades at Xerox, programmed in the Mesa and Cedar languages, as well as Smalltalk on the original Altos.

She told me that she eventually left programming because she felt like modern computing and programming had become bureaucratic and process-oriented, more like engineering and less creative. These days she was more interested in statistics and data science.

Personally I’m glad to see computing and programming mature into a engineering discipline, but I would also very much like to see programming embraced as a creative endeavor. I hope that it’s possible to do both: embrace modern type systems, property-based testing and metaprogramming to build reliable systems, while interacting with clean and beautiful tools and interfaces instead of the modern mess of HTML/CSS/JavaScript (or similar messes in other technology stacks).

Advertisements

Yesterday I rewrote about half (the entire front-end) of a project that took me and two other collaborators several months to complete a few years ago. At the end of a solid work afternoon, I had things compiling and running, but in a very buggy state. Unexpectedly, the associated feelings turned out to be somewhat bittersweet and conflicted. I’m happy and proud of how much I’ve improved in the years since I first worked on this project, but I’m also sad thinking of how much faster and better things might have gone originally if I had known back then all the things that I know now.

Later in the evening, I learned something new (GADTs and how to use them in OCaml), which makes me hope that in a few years I’ll be even more capable than I am now. At the same time, I’m also wary of falling into the trap of rehashing old projects and ideas with new tools and techniques, rather than moving forward into new areas.

A part of me really wants things to be “just right”, not just when it comes to work, but in the rest of my life as well. It’s almost a visceral when I have to deal with things that don’t seem (close to) perfect for long periods of time. But at the same time, keeping a steady pace of progress in research and engineering requires knowing when things are “right enough” and moving on to the next thing.

Navigating that boundary isn’t something that I have a lot of experience, but I’m hoping that just like my programming skills, it’s going to be something I get better at in the coming years.

Problem: I am a human being

A relevant excerpt:

“If you are a person who has come of age during the time of ubiquitous internet access and github, you cannot know what having access to the source code of an entire operating system meant in the mid 90s. When I saw the impact this access had on my own life in the coming years, I began to view closed source software as unethical. In a society that was increasingly mediated by software, restricting access to learning about software works is in my opinion a means of control and subjugation.”

For me, growing up in India, that time was the early 2000s. My first Linux distro was Ubuntu, thanks largely to Canonical shipping out Ubuntu CDs to people around the world, something that seemed like a ludicrous idea at the time.

I wouldn’t be where I am without free software (both free as in beer, and free as in freedom). Also, Star Trek.

Hundreds of Little Things

Last week I came across a blog post about the new release of an image editor called Acorn. I don’t use Acorn, but one part of the post appealed to me. In a section titled “Hundred of Little Things” the author talked about fixing bugs in Acorn:

It took months and months of work, it was super boring and mind numbing and it was really hard to justify, and it made Acorn 5 super late. But we did it anyway, because something in us felt that software quality has been going downhill in general, and we sure as heck weren’t going to let that happen to Acorn.

Most of my past week was fixing lots of small and annoying little bugs in my summer project. Some of them were edge cases in the core functionality of the system, but a lot of them were little bits and pieces and rough edges that I would have normally just let pass. I do agree that software quality seems to be going downhill in general. One way to fix it is to pay attention to all the little things that we usually let slip past. On a related note, I think that writing software in a way that doesn’t allow these little things to slip past us is still unnecessarily difficult and complicated, but that’s a matter for another post.

Sunday Selection 2015-08-16

Around the Web

Mad as Hell: How a Generation Came of Age While Listening to John Stewart

Last week marked John Stewart’s last week on The Daily Show. I enjoyed his last few episodes, but part of me was really wishing that his last show would include a takedown of the Republican debate. This isn’t the most in-depth post about his years at The Daily Show, but I think it captures effectively how many people of my age feel about John Stewart and the show.

Meditation vs medication: A Comic Essay on Faciing Depression

I’ve meditating more regularly in recent months as well as reading more about meditation, mindfulness and Buddhist philosophy in general. At the same time, depression is a growing concern, especially among people involved in technology and for me personally as well. I’ve also come to realize that there is a certain taboo surrounding anti-depressants: a latent fear that medication will fundamentally change who we are. I don’t think any one article can completely tackle this complicated bundle of issues, but this is a good place to start.

Programming Sucks

If you’ve ever wondered what the day-to-day life of a programmer is like, or the state of our technology is, this post gives a only half-joking look at behind the digital scenes. If you lived in the trenches yourself, you will find yourself nodding along, and maybe shedding a tear or two. There should probably be a trigger warning associated with this article.

From the Bookshelf

Radical Acceptance by Tara Brach

Talking of meditation, my most recent foray into that world came in the form of this book. It’s not about meditation per se, but rather involves using meditation as a tool to become more comfortable with our lives, face our inner demons, and accept the way things are as a focal point for living a better life. The book is replete with personal stories from the author’s life (and those of her patients) and includes helpful guided meditations to get you started.

Video

Forging the Hattori Hanzo Katana

I’ve always had a fascination with Japanese culture and martial arts, and Hattori Hanzo’s monologue is probably my favorite part of the Kill BIll movie. The movie doesn’t actually show you how the sword is forged, so here is a video that does. The narration could have been better, but it’s still a very entertaining (and educational) video.

The Brain-Hand Barrier

I’ve never been a particularly fast typist. Despite reading Steve Yegge’s very entertaining Programming’s Dirtiest Secret once every few months or so, I’ve been stuck in the 40 to 50 words-per-minute range for a few years now. Most of the time, this is not a big problem, for multiple reasons. In the last few months, I’ve been mostly writing code, not words (as witnessed by the rather low rate of posts on this blog). When you’re using a fairly succinct and powerful language (like OCaml) and working on research code, the major bottleneck to getting things done is often your thinking speed, not your typing speed. And for the rest of the times there are well-chosen Emacs keybindings deeply ingrained into your muscle memory.

I’d like to start writing more honest-to-goodness words—I’m pulling this blog out of the mothballs, I’m keeping a daily log of my research work and possibly a personal journal. And that’s on top of the usual emails and IMs and other sundry typing activities. As I’ve been ramping up my word count, I’ve been noticing something curious that’s purely anecdotal and quite possibly, completely wrong. But this is my blog and something is often better than nothing so I’m going to put it here for all eternity.

I claim (completely without proof) that when writing words (at least non-technical words) the bottleneck can often be your fingers. If you’re a slow typist (or an adequate typist, like me) you find yourself frantically trying to get ideas and thoughts down before they all slip away like water between your fingers. As a result, increasing typing speed can actually be better in at least two ways: first, typing faster lets you get raw thoughts down much faster leaving you time to come back and edit later. I know that a lot of people subscribe to the philosophy of writing slowly, even going so far as to using pen and paper to slow themselves down. Personally, I’m in the Hemingway camp — write drunk; edit sober. Since I have absolutely no intention of becoming an alcoholic, I’ll go with “write fast; edit slow”. It’s boring I know, but I like my liver and my brain cells.

Second, for a certain type of personality (including me), knowing that you’re fast enough to get something down without a major interruption in whatever else you’re doing makes you more likely to actually put it down, rather than having it banging around inside your head. For more on why getting things out of your head is helpful, I point you to the last book I read Overwhelmed: Work, Love and Play When No One Has the Time and a tl;dr review/article of the same name.

Both of the above are benefits from fast typing, apart from the professional benefits you might get (for which I point you back to Steve’s post).

So to conclude: type fast, type lots, edit slow, publish some. There’s probably a rant about RSI and how the Hobbit movies could have been made better and shorter with a good editor that can be extrapolated from that last sentence, but that will have to wait for another day.

Amazon’s Digital Wonderland

A few weeks ago I found myself in Seattle, WA. Contrary to popular belief, it was a rather bright and sunny few days (if somewhat chilly). Here’s an obligatory picture of the Sky Needle.

Sky Needle

Anyways, on the first day there I fought a mostly losing battle against travel-induced tiredness (I was up at 4:30 in the morning) and walked around downtown for a while, somewhat zombie-like. I spent the most of the next day in one of Amazon’s new buildings attending their first ever PhD Symposium. I got to meet Amazon employees like Swami Sivasubramanian, one of the creators of Amazon’s Dynamo database, as well as fellow graduate students like Rahul Potharaju. The day was full of interesting presentations and the breaks in between were packed with lots of cool conversations. I presented my current project, Merlin(excuse the visuals) and got some good feedback. All-in-all it was a great day, I had a wonderful time and I hope Amazon keeps having more of these research Symposia.

But that’s not what this post is about. Personally, I think of Amazon as a retailer first and a technology company second. In fact, I’ve even written a post about their exemplary customer service. Even though I’ve known about EC2 for years and have used both S3 and Glacier as personal backup, the idea of Amazon as a technology company has always been at the back of my mind. In fact, it was only while attending the symposium that I really thought about the full weight of Amazon as a technology services company.

After coming home I looked up the keynote from Amazon’s recent Re:Invent conference. The keynote shows off some of their more interesting recent technology (including new EC2 instances) as well as client technologies built on top of it (including companies like Netflix and Vimeo). I also stumbled across Dave Winer’s post on Amazon’s support of static JavaScript applications and why that’s so interesting and important.

The more I think about it, the more I like Amazon. They make incredible technology, employ lots of really smart people and have a refreshingly honest and direct business model in an industry dominated by advertising and harvesting user data. From computation, to storage, to scalable DNS, Amazon offers a suite of services that’s just about stunning in its breadth. Though I’ve had little use for their services personally (apart from Glacier for backup), I can see myself extensively using their systems and technology if I was building any of type of scalable, distributed service.

Even as I write this, I’m trying to come up with excuses for trying out more of their technology. What would I build? I honestly don’t know. But looking at the range of Amazon technologies and thinking about the possibilities reminds me of the feelings I got when I first started programming and learning about computers.

In many ways, the world has changed since I started writing code about 12 years ago. I had a lot of fun writing LOGO and BASIC programs and then hacking together little Perl scripts. Today I find myself wondering what the loosely coupled services and technologies offered by Amazon and other cloud computing services enable. I wonder if the new programmers of today, still learning on primarily single-threaded, single-box computing platforms, should be encouraged to move on to the brave new world of instantly accessible, practically unlimited computing power. I wonder what we’ll achieve if we were to take distributed, connected computation as the starting point, rather than the state of the art.

As an ending note, let’s think about Microsoft. It’s become standard to talk about Google as today’s Microsoft, but I’m starting to wonder if that title doesn’t rightfully belong to Amazon. I’m not talking about monopolistic activities or questionable business practices, but rather their similarities in making computing more popular. Microsoft’s goal (ostensibly) was to put a computer in every household. Amazon, for its part, has commoditized high-powered computing and distributed systems and made them available to people with modest budgets. I suppose the more things change, the more they stay the same.