Miscellaneous and Useless Information

Computers and technology

Here are some thoughts for students who are considering computing, including computer science and software engineering, as a career. While these tips are particularly geared for high schoolers going to my alma mater, Monta Vista High School, they can apply to many others.

What do I enjoy about computing?

Computers are capable of doing amazing things, but in reality, they’re really dumb. You have to give them precise instructions on how to do something. If you get it wrong, they can’t guess what you want them to do. I find taking a task, breaking it down into smaller pieces, writing instructions to do those small tasks, and putting it all back together inherently satisfying. You get a sense of mastery by getting a sophisticated piece of equipment to do what you want it to do.

I also enjoy the fact that my work has a direct impact of millions of lives. Every time someone searches for something on Google, code that I have written is executed. I certainly feel like I am making a difference.

My typical workday

As a software engineer at Google, my day is not just about sitting in front a computer monitor, pounding out “code” (the instructions that tell the computer what to do). The image of the solitary hacker is a myth.

Before writing any new code, I need to consider how it will work with code that Google already has. It’s like building a structure — you could slap your addition onto an existing building, but that could destabilize the whole structure. Or you can carefully design your addition so that it integrates well with what is already there.

So I will meet with my colleagues to discuss the problem I’m solving and how I intend to solve it, either face-to-face or through e-mail. I may also write a design document that gives all of us one document to refer to.

Sometimes I write code with a colleague, especially if the code is tricky. This process, called pair programming, lets one person type while the other looks up documentation or spot errors on the fly. It can be intense but also more fun, since you’re sharing your joy (and pain) with someone else. It also reduces distractions, since you can’t check your e-mail while your partner is waiting.

Once I’m done writing a piece of code, I then need to integrate it with the existing code. But before I can do that, another software engineer must review the code that I wrote. He or she may (and probably will) point out bugs that I need to fix before integration. I also review the code of other engineers.

Our project team has short status meetings everyday, which last five to ten minutes. Our larger group has status meetings every week, which often last only fifteen minutes. I also attend other one-off meetings about design issues that affect our whole group, and I answer questions that other engineers may have about the work our team is doing.

So a lot of time is spent designing, reviewing, and communicating my ideas with others, not just programming.

Now you’re interested in pursuing computing as a career. How do you start?

Before College

A straightforward way to try out computing is to take AP Computer Science in high school. Since the test uses the Java programming language, you may want to also take the Java programming class that Monta Vista offers, the year before taking AP Comp Sci.

However, suppose you don’t find either the Java class or the AP Computer Science class that interesting, but you’d still like to explore computing. Don’t give up! There are plenty of alternative approaches to learning how to program, a fundamental skill in computing (but not the only one), which you can try on your own. You can also try these before going into AP Comp Sci.

Instead of Java, you could choose another language like Python, which has many conceptual similarities with Java but is less verbose. There are a few tutorials for learning how to program using Python, such as A Byte of Python or Learn Python the Hard Way (I have not tried either of these myself).

There is also an interactive website for learning how to program called Codecademy.

If you’d like to learn programming in the context of a more visual and dynamic environment, Processing is a popular language for creating visual art and animation.

There are several other systems that lets novice programmers create games and visual simulations. These include:

The key is to try these out, experiment, and have fun with it. It will take some time and persistence, but the rewards are well worth it.

By the way, you still have to pay attention to your other classes. Besides math and science, writing and speaking are the most useful skills in your career. If you can’t get your point across to your colleagues, your great ideas will never be accepted.


There is widespread agreement on the top four computer science university programs (in no particular order): Carnegie Mellon, MIT, Stanford, and UC Berkeley. However, there are plenty of great CS programs all over the country, including (but not limited to) Brown, Caltech, Cornell, Georgia Tech, University of Illinois at Urbana-Champaign, University of Texas-Austin, University of Washington, and University of Wisconsin-Madison. It’s hard to go wrong with any of them, so you should also pick a college based on your own personal preferences, such as small liberal arts school versus large research institution.

There are many different ways to teach computer science. For example, Carnegie Mellon, Harvey Mudd, and Georgia Tech design their programs to attract and keep women and underrepresented minorities to computing, which the field desperately needs.

No matter where you go, I highly recommend doing summer internships. These are becoming more and more important for getting a job after college, or for getting into graduate school. Internships expose you to how different companies operate and give you some real world experience.While I was in college, I did two summer internships (IBM and Microsoft).

If you’re considering graduate school, I also recommend doing undergraduate research work if your university offers the opportunity. For example, Caltech has Summer Undergraduate Research Fellowships.

Graduate School

Unlike other science and engineering fields, getting a Master’s or PhD degree in computer science does not automatically mean you will be earning more money or have higher job status than those with a Bachelor’s degree. However, attending graduate school, especially a PhD program, gives you different types of opportunities than a college graduate.

Getting a PhD in computer science means you want to deeply explore a specific topic within a specialty of computer science. This means that the school you will apply to will depend on what specialty you want to go into, such as artificial intelligence or operating systems. For example, the University of Wisconsin-Madison has an excellent program in databases but is not a great choice for human-computer interaction.

By the time you get your PhD, you will know lots of leading figures in academia and industry in your specialty. Networking becomes a key skill that you learn. You also learn how to figure out what questions are still unanswered in your field, and address it in a way that no one else has before. It sounds a little daunting, but that’s what graduate school is for.

In fact, throughout graduate school you come to realize that there are lots of questions out there, and the real problem is how to pick a problem that you can reasonably answer in a few short years, so you can graduate. Persistence and endurance, more than sheer intelligence, is the key to getting a PhD.

Once you have a PhD, you have the opportunity to get a job where you can look farther out in the future than most people, especially if you become a professor or join a research lab at a company like Microsoft or IBM. These jobs are nearly impossible to get without a PhD. But at the same time, you will become “overqualified” for jobs that only need a Bachelor’s degree. So getting a PhD changes your opportunities, but it doesn’t necessarily broaden them.

Give it a shot

I hope you consider computing as a career. It’s rewarding and satisfying in its own way, and the fact that it’s also in high demand is just a bonus. Even if you decide to do something else later, the skills you learn in computing will serve you well. Good luck!

In my previous blog post, I noted my surprise and distaste for the term “Pasteboard” over “Clipboard” in Mac OS X. It seemed like an unnecessary change in terminology. However, a friend and long-time Mac user later pointed out to me that OS X still calls it a Clipboard, for example, Edit→Show Clipboard in the Finder. In fact, he had never heard of a Pasteboard until reading my blog.

This encouraged me to dig a little deeper. The term “Pasteboard” was inherited from Mac OS X’s ancestor, NeXTSTEP, which used it in its user interface (see The Complete Guide to the NEXTSTEP User Environment for an example). “Pasteboard” is still used in Apple’s documentation for programmers. However, while NeXTSTEP may form the technical foundation for OS X, the classic Mac OS, which always used the term “Clipboard,” is the basis for Mac OS X’s user interface, so “Clipboard” has mostly won out.

So why does the X11 application use the term “Pasteboard”? I can only speculate that the X11’s developers wanted to the distinction between X11’s CLIPBOARD and OS X’s Clipboard as clear as possible, and that computer geeks, who are likely the only ones who would use X11 in the first place, would be familiar with the term.

Last night, I worked on an SVG file that Caitlin Kelleher had created with Inkscape (for the cover of the proceedings of VL/HCC 2011). I also used Inkscape, but it took a few tricks on my Mac to get it to work properly.

  • I wanted to use Helvetica Neue for all of the text, but it wasn’t included in Inkscape’s Fonts drop-down list. I had to copy the font from /System/Library/Fonts to /Users/my_username/Library/Fonts for Inkscape to load it. None of the other fonts in the system folder had problems loading.
  • I also could not use Helvetica. Whenever I chose it, Inkscape kept switching me to Sans. I never figured out what was wrong.
  • I tried to copy some objects from one Inkscape window to another, but the pasted objects were converted into a bitmap. This is because X11 synchronizes its CLIPBOARD and PRIMARY buffers with Mac OS X’s Pasteboard* as much as possible, and something got lost in translation. I turned off the synchronizing by going to X11 → Preferences… → Pasteboard tab and turned off Enable Syncing.
  • I wanted to import an EPS file which contained vector graphics, but Inkscape can’t import EPS files directly. Instead, I opened the file in Preview and then saved it as a PDF. Inkscape then imported the PDF perfectly.

Hopes this helps others using Inkscape on a Mac!

* The clipboard on Mac OS X is called a pasteboard? Bleh!

Back in May, Bob Taylor spoke with Guy Raz at the Computer History Museum about his days at ARPA, funding visionary projects such as Douglas Engelbart at SRI and the ARPAnet, and founding the Computer Systems Laboratory at PARC. Here are some of my favorite quotes of Bob Taylor from that conversation:

  • Computers were abominable to use. (To the audience) How many of you have punched holes in cards? (Most of the audience raises their hands.) You look a lot smarter than that.
  • There are four people that claim to be the father of the Internet. What does that say of the morals of the mother?
  • “Mission-oriented research” by definition can’t be research.
  • (Someone who questioned the importance of the research Taylor was funding said to him:) “If what you’re working on is so important, why isn’t IBM working on it?” What do you say to an idiot like that?

Powered by Twitter Tools

One day after the iPad was introduced, reactions in the tech world have been mixed, so I watched Apple’s announcement to see for myself.

There are quite a few features the iPad lacks: multitasking, a camera, Adobe Flash support, HDMI video output, USB ports, an SD slot, and so on. But remember that at first, the iPhone didn’t 3G or native apps for a whole year. And who would have thought you could successfully sell a smartphone without copy and paste for two years? I bet the iPad is starting out the same way — start off with just enough features to get people hooked, figure out what’s really necessary, and then add on.

If you paid attention to Steve Jobs’ pitch, he may have talked about features and specs, but he really emphasized the experience of using the iPad. “The Internet in your hands,” he said over and over again. Hey, it may look like just a giant iPhone, but once you actually try it out, you’ll be hooked. He’s trying to appeal to your emotional, sensual side — which helps explain why a lot of left-brained geeks weren’t buying his spiel.

A few other random thoughts:

  • I found it quite interesting to see what were essentially full-screen iPhone menus being used as pop-up menus or sidebars in iPad applications. If Apple designs its SDK well, it may not be too difficult to create one application that works on both the iPhone and the iPad.
  • The home screens look anemic on such a large screen. The icons look too small, and the spacing too large. I’m surprised Apple didn’t put more design work into this.
  • For input, I didn’t believe the rumor that the iPad would require you to learn a complex set of gestures, but I was hoping for something more interesting than a virtual keyboard (hello, ShapeWriter). I’m curious to try it out and see how well it works. While the iPhone keyboard isn’t perfect, it works better than I expected on such a small screen. And at least you can use a Bluetooth keyboard with it.
  • The biggest surprise for me was how aggressive the pricing is, $500 to $830.

I’d love to get my hands on an iPad, try it out, and see whether it’s as “magical” as Jobs claims. But even if it is, I won’t buy one yet. I never buy the first generation of a gadget, and in the case of the iPhone, it was a good idea. Let’s see what the iPad 2 is like.

Congratulations to the HCI researchers in MIT Technology Review’s list of top 35 innovators under 35: Jeff Bigham, Jeff Heer, Shahram Izadi, Shwetak Patel, and Jamie Teevan. Represent!

Next Page »