The Elements Of Style: UNIX As Literature

Though I understood how people might be put off by having to remember such willfully obscure utility names like cat and grep, I continued to be puzzled at why they resented typing. Then I realized I could connect the complaint with the scores of “intellectual elite” (as my manager described them) in UNIX shops. The common thread was wordsmithing; a suspiciously high proportion of my UNIX colleagues had already developed, in some prior career, a comfort and fluency with text and printed words. They were adept readers and writers, and UNIX played handily to those strengths. UNIX was, in some sense, literature to them. Suddenly the overrepresentation of polyglots, liberal-arts types, and voracious readers in the UNIX community didn’t seem so mysterious, and pointed the way to a deeper issue: in a world increasingly dominated by image culture (TV, movies, .jpg files), UNIX remains rooted in the culture of the word.

UNIX programmers express themselves in a rich vocabulary of system utilities and command-line arguments, along with a flexible, varied grammar and syntax. For UNIX enthusiasts, the language becomes second nature. Once, I overheard a conversation in a Palo Alto restaurant: “there used to be a shrimp-and-pasta plate here under ten bucks. Let me see… cat menu | grep shrimp | test -lt $10…” though not syntactically correct (and less-than-scintillating conversation), a diner from an NT shop probably couldn’t have expressed himself as casually.

Read the whole piece.

The Google Browser Is Real And On The Way

Now here’s a great way to introduce a new software project – to illustrate it as a comic book!

Scott McCloud illustrates for the world Google Chrome – Google’s browser project.

More details at Google Blogoscoped and Dare Obasano’s.

Database Normalization Heresy

I was Jeff Atwood-ed or Coding Horror-er-ed!

Jeff Atwood linked to an older piece of mine, on some of the lessons we learned, scaling Cofax at Philly.com, to illustrate that database normalization shouldn’t be a religion.

For the record, as I mentioned in my post, we created a set of denormalized tables, however, I should have talked some more about how we kept the original normalized tables. We kept them as our ‘one source of truth’ and took the I/O hit on updates to refresh the flattened tables to optimize database reads. We did this as Dare Obasanjo suggests – as an absolute last resort after optimizing indexes and queries first.

As mentioned at High Scalability and at Joe Gregorio’s, the conversation ‘angered the RDBMS True Believers’.

Jeff’s post was a good one because it challenged orthodoxy, stirred the pot, and brought forth good conversation.

Thanks to Coding Horror for the link. I’m honored.

Electronic Voting Machine Revelations

Washington Post: Ohio Voting Machines Contained Programming Error That Dropped Votes

Brad Blog: Diebold Admits Their Tabulator Software Doesn’t Count Votes Correctly

Bruce Schneier: Diebold Finally Admits its Voting Machines Drop Votes

Development links for today

Coworker Mat Schaffer with an experiment with Maven and JRuby

Dan Moore!: Lesson learned: copying bytes from an OutputStream to an InputStream in Weblogic 8

Software is hard: Firecookie (thanks Jeff)

Mailing list archives: [HttpClient] Unsigned Certificates & EasySSLProtocolSocketFactory

Classic project management graphic: What The Customer Really Wanted

Dare Obasanjo: Fixing the HTTP Polling Problem: Some Thoughts on FriendFeed’s Simple Update Protocol (SUP)

Apple Support: Installing Python IDLE

Is Python More Fun Than Java?

I’m a long time Java developer who has been digging into Python these past couple months. Besides the fact that I expect it to be part of my regular tool belt – it is more fun! Brian M. Clapper shares some good reasons why in his piece “Why is Python more fun than Java?”.

In a similar vein, a poster to Hacker News asks What does Ruby have that Python doesn’t?

What it takes – it’s not praise and neither is it born-with talent

Fellow Comcaster Arpit Mathur: shared some thoughts about 37Signal’s piece “Don’t be so quick to embrace your own ignorance” and reflects on confidence in the workplace.

This made me reflect on a set of material I’ve read over the past few months on what it takes to be “a success” (we’ll skip that word’s definition for now). Much of these pieces apply to the workplace, our sense of self, our belief in what is possible, with more than a few drops of advice for parents in how to inspire the right mindset in those we love.

Fortune: What it takes to be great: The secret? Painful and demanding practice and hard work

NYTimes: If You’re Open to Growth, You Tend to Grow : Those who believe they were born with all the smarts and gifts they’re ever going to have approach life with what she calls a “fixed mind-set.” Those who believe that their own abilities can expand over time, however, live with a “growth mind-set.” Guess which ones prove to be most innovative over time.

Stanford Magazine: The Effort Effect : Dweck found that people who believe personality can change were more likely than others to bring up concerns and deal with problems in a constructive way. Dweck thinks a fixed mind-set fosters a categorical, all-or-nothing view of people’s qualities; this view tends to make you ignore festering problems or, at the other extreme, give up on a relationship at the first sign of trouble. (The growth mind-set, though, can be taken too far if someone stays in an abusive relationship hoping her partner will change; as always, the person has to want to change.)

Malcolm Gladwell: The Talent Myth: On Enron: They were there looking for people who had the talent to think outside the box. It never occurred to them that, if everyone had to think outside the box, maybe it was the box that needed fixing.

NYMag.com: How Not to Talk to Your Kids: The inverse power of praise.: Giving kids the label of “smart” does not prevent them from underperforming. It might actually be causing it.

Harvard Business Publishing: Scott Berkun: How to Win by Studying Culture: An Interview with Grant McCracken: The point is not to dismantle ideas unless they stand in the way of what the new idea is. We don’t want to forget what it is we know, the knowledge we have build up of our markets and our industries over many years of expensive trial and error.

James Carr: How To Not Fit In On A Development Team: Good advice on being part of any team.

Dare Obasanjo: “Don’t fight the Web, embrace it”

A must read: Dare Obasanjo: Explaining REST to Damien Katz:

There are other practical things to be mindful of as well to ensure that your service is being a good participant in the Web ecosystem. These include using GET instead of POST when retrieving a resource and properly utilizing the caching related headers as needed (If-Modified-Since/Last-Modified, If-None-Match/ETag, Cache-Control), learning to utilize HTTP status codes correctly (i.e. errors shouldn’t return HTTP 200 OK), keeping your design stateless to enable it to scale more cheaply and so on. The increased costs, scalability concerns and complexity that developers face when they ignore these principles is captured in blog posts and articles all over the Web such as Session State is Evil and Cache SOAP services on the client side. You don’t have to look hard to find them. What most developers don’t realize is that the problems they are facing are because they aren’t keeping RESTful principles in mind.