Depression and the Highly Logical Mind

I was saddened to learn of the tragic death, by his own hand, of Aaron Swartz. That a prominent member of my community, our community, the tech community, is gone forever is sad. That he was lost so young is tragic. That he took his own life is a horror.

Aaron Swartz wrote openly about having depression (I don’t like to use “depressed” as an adjective; It’s a disease that you have, not a thing that you are.) And many of the outpourings of grief and support after his death recognized in it a shared experience. The relatability of Aaron’s struggle made the tech world feel even more like a community, as it did after Ilya Zhitomirskiy’s tragic suicide in 2011. For, while depression is dreadful for anyone, it may have a uniquely pernicious effect on highly logical minds.

Read More

CS101 part 3: Memory

In my first two CS101 posts (here and here) we discussed the basic electronic circuits used to compute logic conditions and basic arithmetic. At the end of my last post I alluded to a third element we need before we can construct something worth calling a ‘computer’. That element is memory.

Memory gives us the ability to have the current computation be influenced by the result of past computation. It’s what allows us to compose sequences of basic operations to produce ad-hoc, complex computations. These sequences of instructions are called programs.

Read More

Growth, Jobs and Silicon Valley

A non-technical, political post today (I did warn readers there would be some).

The overriding theme of the upcoming presidential election is jobs, with the candidates sparring aggressively over who can create more of them. Unemployment is still high across the country, and finding work, especially if you’re a new college grad, is a daunting challenge. 

And yet here in Silicon Valley companies can’t hire fast enough. If you’re a new CS grad you’ll have no trouble at all getting several job offers to choose from. Your starting salary, on day one of your career, might be higher than the current salary of either of your parents. And if you’re an experienced engineer, designer or product manager then the sky is pretty much the limit. 

This raises tempting questions: Can the presidential candidates learn from Silicon Valley’s success? Does the tech industry point the way towards a nationwide economic renaissance of job growth?  Is what’s good for startups good for America? And if so, do the political endorsements of tech luminaries carry extra weight?

Read More

Hashing Redux: Proving What You Know

Remember my post about hashing passwords? I recently encountered a tweet exchange between two of my co-workers that used hashing in a novel and nerdy way. 

It started with this:

image

Jorge is posting a quote from Minnesota congresswoman and amateur conspiracy theorist Michelle Bachmann, helpfully providing a link to the source. But he’s also added a mysterious string of letters and numbers in parentheses. Why? Let’s find out.

Read More

Spanner and Planet-Scale Services

Google recently published a much-anticipated paper on Spanner, their globally-distributed database. Spanner is the new pinnacle of Google’s technology stack, supplanting Bigtable at the cutting-edge of scalable databases. The authors will present the paper at the OSDI (Operating Systems Design and Implementation) ‘12 conference in October.

Google’s OSDI papers tend to be seminal: the MapReduce paper from OSDI ‘04 sparked the open-source Hadoop project, which in turn powered the industry-wide “big data” trend. And the Bigtable paper from OSDI ‘06 sparked a host of similar systems (HBase, Cassandra, MongoDB and others) that power services such as Facebook, Twitter, Foursquare and many more. Will Spanner spark a trend in the same way? It’s too soon to say, but there are arguments in both directions.

Read More

CS101 part 2: Binary Numbers

In my debut CS101 post I discussed Boolean algebra, and how any Boolean function can be modeled by a real-life electronic circuit. In this post we’ll explore how this fact provides computers with the ability to do arithmetic.

Natural Numbers

To do arithmetic, you first need to be able to represent numbers. The most basic numbers are the natural numbers, the whole numbers we use for counting things.  To write down a counting number we can simply represent it as a list of ‘things’ of that size. Say we pick the hash symbol # to represent a ‘thing’, then we can write down the counting numbers as #, ##, ###, ####, ##### and so on. Of course we’d also need some symbol, like 0, to represent “no things”. 

Read More

CS101 part 1: Boolean Algebra

Several people have suggested that I write a series of “CS101” posts explaining computer science and software engineering fundamentals, unrelated to anything in the news cycle. This idea appealed to my inner didact, so I’ll try a few posts along those lines and see what responses I get. Feel free to comment and/or suggest topics.

Hopefully, reading these posts will provide non-engineers in the tech industry with a better sense of what goes on under the hood, of what their engineering colleagues do, and of why software engineering is such a fascinating, intricate discipline. To any engineers reading this: you’ll have to forgive my simplification of many concepts, in the interest of clarity and brevity.

I’ll kick off, appropriately, by discussing the lowest level concept in Computer Science…

Read More

A Reliable Whole From Unreliable Parts

Wired Enterprise recently published an excellent article about how Google revolutionized distributed systems, creating the technologies that power not only Google, but much of the rest of the internet. The article gives some much-deserved limelight to Jeff Dean and Sanjay Ghemawat, accurately describing them as “two of the most important software engineers of the internet age — and two of the most underappreciated”. I might also add, “two of the most unassuming”. 

I won’t belabor points already made in that article, but it’s worth emphasizing the key insight that underlies most of that groundbreaking work:

Building Internet-scale systems is the art of constructing a reliable whole from unreliable parts. 

These days this may sound obvious to most engineers. But it’s easy to forget that in the first dot-com era, the “big iron” approach was far more common.

Read More

Zinc and Pants

If you’re interested in Scala and/or in build systems, Typesafe just published a blog post about Zinc, the standalone incremental Scala compiler. Among other things, it mentions the work I’ve been doing on integrating Zinc into Pants (Twitter’s open-source build system; we’re moving towards using it at foursquare).