Skip to main content


Showing posts from July, 2011

Go: A Second Impression

My initial impressions of Go have always been somewhat negative because I was comparing it to things like Scala, Haskell, and Python. However, having read a good part of the tutorial, I've changed my opinion. I really like Go! Go doesn't try to be an extension of C to make it more like Smalltalk--that's Objective C. Go doesn't try to be the end-all-be-all of object-oriented languages derived from C--that's Scala. Since it neither maintains backwards compatibility with C nor adds a ton of features, I originally had a hard time getting excited about Go. Now I see that Go is a modern language that tries to follow what I think of as C's philosophy . It's simple, elegant, small, and native. There's an old saying: Do not seek to follow in the footsteps of the wise men of old. Seek what they sought. - Matsuo Munefusa (”Basho”) I think that perfectly describes Go.

Humor: Proving Programs

I've always been weary of programming proofs. For instance, I can mathematically prove that 4195835 / 3145727 > 1.3338. However, I know of certain Pentium processors that would disagree with me. If I try to prove that the following bit of C code prints out "Hello World": if (4195835.0 / 3145727.0 > 1.3338) printf("Hello World\n"); else system("rm -rf /"); I might be a bit surprised when it deletes my hard drive instead ;) 1 bunny + 1 bunny = 2 bunnies, right? Well it depends on their sexes. It's possible that in a given time period, 1 bunny + 1 bunny might equal 5 bunnies. As I joked in a previous blog post, "All models are wrong. Some models are useful." I really think this same thing applies to proving programs. Donald Knuth famously said , "Beware of bugs in the above code; I have only proved it correct, not tried it."

Books: Masterminds of Programming

I just finished reading Masterminds of Programming: Conversations with the Creators of Major Programming Languages Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. In this unique collection, you'll learn about the processes that led to specific design decisions, including the goals they had in mind, the trade-offs they had to make, and how their experiences have left an impact on programming today. In short, I really enjoyed it. Here's an extremely abbreviated and opinionated summary: Adin D. Falkoff (APL) made programming as mathematical as possible. Thomas E. Kurtz (BASIC) was generally a nice guy who wanted to bring programming to the masses. Charles H. Moore (FORTH) frustrated the heck out of me. He stated that operating systems are the software industry's biggest con job. I disagree. Operating systems protect me to some degree from bad and malicious code. They also let m

Books: Python 3 Web Development Beginner’s Guide

Packt Publishing asked me to review Python 3 Web Development Beginner's Guide . I'll have to admit, it's a bit of an odd duck. A better (albeit overly verbose) title might have been "An Introduction to Rich Internet Application Development Using jQuery UI, a Very Modern Version of Python, a Relatively Old Python Web Application Framework Named CherryPy, and an Ancient Version of HTML Written by a Guy Who Uses Windows". The first tipoff that this book was a bit strange was that the author uses Windows and some combination of Firefox and IE. It seems like most web developers use OS X (or occasionally Linux), and they prefer Chrome over IE. The next tipoff was the use of jQuery UI. jQuery UI is a very modern technology which is often used to build rich internet applications. RIAs really aren't the sort of thing that I would expect to see in a book for beginners. What happened to the old days when beginning web applications focused on the server dynamical

Google I/O 2011

I went to Google I/O May 10-12, 2011. Note that the first day of Google I/O was my second day as a Google employee. These are my personal notes. If you're interested in any of these talks, you can find them on YouTube. Keynote One of the slides during the keynote showed a picture of an android eating an apple. There were 5000 people in the room for the keynote. There were 110 cities watching at viewer parties. Android has come a long way: 100 million activations, 450,000 developers, 215 carriers, 310 devices, 112 countries, 400,000 activations per day, 200,000 apps in the Android market, 4.5 billion apps installed. Android 3.1 is Honeycomb. Android can now act as a USB host. Hence, you can now get a keyboard and a mouse for your tablet. You can use an X-Box controller with it. Android 3.1 will be used for Google TV. Android market will be available on Google TV. Ice Cream Sandwich will be the new Android release. The hope is for one Android OS everywhere. It will b

Software Engineering: Code Reviews vs. Peer Programming

I've been thinking lately about the benefits of code reviews vs. peer programming. In general, I think most companies that really care about code quality use either code reviews or peer programming. Various companies are famous for using either one approach or the other, which leads me to wonder which approach is better under which circumstances? Pivotal Labs is famous for doing full-time peer programming. It's well known that they do a good job writing software. However, I wonder if full-time peer programming might be too expensive for mundane code. I also wonder if it makes sense to work as a pair when someone needs to spend a few days reading, learning, and researching. In contrast, Google is famous for code reviewing all commits before checkin. Certainly this frees up engineers to get more work done since they can spend a high percentage of their time working in parallel on separate tasks. However, I wonder if a code reviewer really has the ability to make the same

Amazon Web Services Summit 2011: Navigate the Cloud

On June 21, 2011 I went to an Amazon Web Services conference in San Francisco. These are my notes. In general, the conference was informative, but a bit subdued. It was about a quarter of the size of Google IO, and they weren't giving away anything huge for free. Furthermore, it was only one day, and the size of the crowd was much smaller. However, that makes sense since they have multiple of these conferences per year. Nonetheless, it was interesting, and I learned some stuff. Keynote The part of the keynote was given by Dr. Werner Vogels, the CTO. AWS doesn't lock you into an OS or language. There are 339 billion objects in S3, and S3 handles 200,000+ storage transactions per second. On a daily basis, they add as much capacity as they had in total in 2000. Spot pricing allows you to spin up an instance when the price is right. AWS CloudFormation deploys a stack of software. AWS Elastic Beanstalk is easy to begin and impossible to outgrow. CloudFormation and Elast


I just wrote my first blog post for the YouTube API blog: Introducing : is a platform for third-party applications that enable users to create videos. The idea is simple. The third-party application runs in an HTML iframe on YouTube. The user creates a video with the application, and then the application uploads the video to YouTube for the user to watch and share. To read more, check out the story on the YouTube API blog .