2010 CS Convocation Address
One More Lesson
by 2010 BU/CS Distinguished Alumnus
|Graduates, parents and family, faculty, staff, and honored
I want to thank Professors Bestavros and Sclaroff for this honor, and extend my sincere thanks to the selection committee for this award. I also should thank my parents and my wife Jenny, who are all here today, for everything that they've done to support me over the years in one pursuit after another. I feel incredibly lucky to be here today. I've never been someone who aspired to give an address at a graduation ceremony. I've always just followed my passions, spent time on those things that interested me most, and tried along the way to do what was right and to give back to the community that has supported me so strongly. This recognition made me realize that in most cases we don't achieve through a grand gesture or giant leap, but rather through small decisions made every day that lead us to great places.
When I first received the message that I'd been selected, I was quite surprised, certainly grateful, but also anxious about delivering an address to you graduates - the brilliant and talented twenty ten class of the Computer Science department. Hopefully what I'll do today is offer some advice and a few lessons I've learned in the last eleven years, and most importantly, celebrate your achievement of a significant milestone in your lives.
This milestone is historically and traditionally called "commencement."
I don't know about you, but I always sort of bristled at that word. Here you all are, having successfully navigated years of extremely difficult study, having achieved a fantastic accomplishment, and the very word that is used to name the day on which you celebrate that is a synonym for "beginning." I think it appropriate to reflect on something of an ending, as well. Chances are a lot of you have studied music - studies have shown that students who excel at mathematics tend to be musically inclined - so for this moment here, let's consider this a fermata. A brief pause between one phrase, held as long as the conductor thinks is appropriate, before the beginning of the next.
We are here to celebrate your completion of studies in an incredibly detailed, increasingly important yet sadly misunderstood field. In a lot of ways Computer Science has pervaded popular culture, and the operation of a computer - and in many cases, the programming of a computer - is something undertaken by people of any background. I find the study of Computer Science is similar to the study of the English language - we are all, more or less familiar with the basic concepts, but most of us never take the time to learn all the nuances behind the every day tasks and uses. The fact that you know those details is a fantastic skill, one that makes you effectively an ambassador between the everyday world and the digital world.
Consider that in your four years, you've probably learned more languages than any international relations student. And yes, I realize that they are programming languages, and I realize that you're not supposed to actually *speak* Java or Perl, but that's never stopped you from doing it, has it?
Learning how to communicate with a computer in its own languages makes you that much more capable to talk to other people about computers, which is a very valuable skill. Like any spoken or written language, programming languages are nothing more than constructs through which to express ideas, and learning multiple languages has trained you to think of programs from different perspectives. I was able to build a career at Accenture, a large consulting company, based on this ability. I started as a developer and moved up into architecture, then design, then product management, and finally product strategy. Along the way the training and understanding I gained here about how code works, and what technology can and can't do, and how to translate between a functional need and a technical solution have stayed with me, and helped me work with business users to solve key problems.
This, when you get right down to it, is what a computer scientist does. Even pure research is done with a focus of solving a problem, just a specific theoretical one.
In my case, I sit between a user and a developer and translate intent into a real product. You all have this experience from your studies, taking high-level requirements or problem statements and developing a solution from scratch. You've done it in Professor Sclaroff's graphics class, shining imaginary lights on imaginary teapots, and you've done it in Professor Beyer's networking class, recreating the fabric of the Internet from the ground up, and in each case you've been given little more than a sheet of paper outlining the desired outcomes.
The other key component of your training, in my view, is that you learned from the ground up. You may not have liked building a compiler and linker, or making your own TCP server, but doing so gave you volumes of experience in how systems and applications that are usually taken for granted really work. Many programmers and developers use shortcuts like visual editing tools and development environments that generate code. Many more use prewritten API to build applications, as a child might build a LEGO castle with pre-fabricated pieces. There's nothing inherently wrong with this; any field of study grows by encouraging each generation to stand on the shoulders of the generations that came before, and to make discoveries based on previous discoveries. Your understanding of how it all works, though, top to bottom, lets you go deeper and make more interesting, better performing solutions.
As an example, one of my first projects was working on a content management system responsible for publishing web pages for local television stations. The system needed to perform well under heavy load that could be generated by significant news events, as informing the public in the midst of a crisis was what the local sites were for, after all. Because I knew how code should work, I was able to review the product's own internals, and find some very big performance-draining bugs, when even the product's own vendor couldn't.
Besides being an ambassador of sorts between the regular world and the technological realm, you have also become budding psychologists. Seriously -- think about the last time you had to do a peer code review, or grade another student's programming project. Within the first five minutes, didn't you find yourself saying, "what in the hell was this person thinking?"
As frustrating as this experience may have been, I hope you find it liberating knowing that the whole field of study, as complex as it can be, can usually be traced back to some person's intent, and is nearly always predictable and repeatable.
I'll tell you a short story: I started out as a biochemistry major here at BU, and in my first year I had an inorganic chemistry class that came with eight hours a week of lab time: four hours each Tuesday and Thursday. This was the last class I took toward that major for two main reasons. First, testing a chemistry experiment can be like trying to recreate a car crash. It takes hours to set up, you get one run at a result, and the slightest immeasurable change in the environment blows up the outcome. One lab we ran required drying crystals in a kiln to remove the water -- this turned them from blue to white -- then we used those crystals in a reaction where the presence of water would ruin the result. As my station was on the other side of the room from the kiln, by the time I removed my crucible and walked back across the dank basement lab, flecks of blue kept creeping into my sample, indicating contamination by the water vapor in the air, and I never did get the result we wanted.
A computer science project, on the other hand, does exactly what you ask of it, even - and especially - when you're not completely clear on what you're asking it to do. The computing environment is consistent, and any changes - like time of day, or available memory - change predictably.
The second reason I changed majors, and perhaps the more important one, was that the answer to any natural science question is essentially, "because." Natural scientists reach a point where understanding breaks down eventually, and they have to explain it away using immeasurable or unprovable concepts, or simply ignore the question, and say "we just don't know yet." Computer science, on the other hand, reduces every question to "because someone made it that way." I find it's liberating to know that there's an answer -- and an answer understandable to a human brain -- behind each question. Depending on the question, It can take eons to get to that answer, or test all the possible outcomes, as I'm sure Professor Levin can tell you, but once you've found it you *know* it's right. Unlike any other field of scientific study, computer science is built entirely upon our own creations, bounded only by our imagination and the processing power of the latest machines. Studying and understanding creations of computer scientists is an act of psychology, trying to get inside the original programmer's intent. It's for all these reasons that I believe CS to be one of the most creative fields of study there is.
So you've all learned quite a bit in these last few years, likely more than you realize today, and have achieved a status that many people will never achieve. You are ambassadors, psychologists, and wizards and magicians, really, since as Arthur C. Clarke said, "Any sufficiently advanced technology is indistinguishable from magic." And as such, I congratulate you for this amazing accomplishment, and on the years to come helping your grandparents set up their Facebook accounts.
That said, this is "commencement", you do have a beginning here on your hands as well as an ending, and I'm sure that many of you are wondering what comes next. Well, here I have a little secret for you, one that might sound a little frightening at first.
You will never stop being a student. Ever.
My parents are here, and they were probably the first people to ever ask me what I wanted to be when I grew up. It's a question I ask them now, too, because I realized a while ago that we never really stop growing, and therefore, never really "grow up." Life is a learning experience, each and every minute of it. I imagine myself some hundred or so years from now in a hospital bed, and just as I'm about to expire I roll over and bump into a button, raising the bed under my legs. Just as I exhale my last breath, the last thought of my life will be "Oh, so that's what that button is for."
One of the things I liked most about my job as a consultant was that every three to six months I got a completely new role with completely new problems to solve. I would go from a project at a telephone company, running a billing conversion, to a television station, designing systems that manage the flow of new content. This was a thrilling concept to me, in that it meant I got to confront new challenges, and develop new solutions to those challenges, on a frequent and regular basis. I've had the luxury of being encouraged and even required to learn each and every day, even if the lesson I learn isn't immediately applicable to the task at hand.
Being a continuous learner is a critical need for any computer scientist. For example, I'm sure some of you have downloaded the development kits that Apple provides for making iPhone applications, and maybe have even created a few. Consider for a moment that this device did not exist when you started your coursework here. What is the next device, the next platform, the next big thing that will require you to commit hours of your free time to study and learn it? And just as importantly, how will you choose which to study, and which to let go by the wayside?
Let's face it - this is a burden that comes with your chosen field, and while other scientists and engineers need to keep up with new developments or techniques, few see the pace of change that computer scientists do. This is a very good thing for you. Because you've trained your minds to be ever more absorbent, to take in more and more information, you can use that skill for fields other than just technology.
A couple weeks ago, at Senior Breakfast, they took an unscientific poll of the students in attendance. Just fewer than half said they had a job lined up after graduation, about one quarter said they were going on to graduate studies, and the rest - more than one fourth of the graduating class, simply didn't know. Now, I realize your parents are here and I don't want to start a fight or anything, but I envy those of you without a plan right now.
Hopefully you'll be thinking about travel, something I've recently become an enormous fan of doing, because when done right it is a total immersion program in "things to learn." The first time I went to a country where I didn't speak the language I was bewildered, unsure of where to go and how to navigate, but as I got my bearings I started to see the people and the cultures behind the languages, and to see more of what was similar - and different - from my own experiences.
My wife Jenny started a charity called ProjectExplorer in 2003, and from its beginning I've been using the skills I learned here at BU to help other people find those kinds of discoveries. Travel is a fantastic way to learn more about the world around you, but more importantly it's a fantastic way to learn more about yourself. We at ProjectExplorer try to help people, students in particular, who wouldn't have had the chance to travel, to find that experience on their own. We do this by posting videos to the site that let people see these experiences first hand, and provide all the research they'd need alongside to understand the background and history of a place, in addition to the visual.
So yes, if you have the chance to travel, take it. But even if you don't, and even if you have a job lined up starting on Monday, you will have hundreds of chances to feel the way you may have first felt when you landed on an unfamiliar shore. I hope you take advantage of these opportunities.
It's a common theme in commencement remarks to encourage people to go out in the world and find themselves. This always struck me as a little passive: as though your true calling was a lost umbrella, and if you just hunted enough you might find it. The truth of the matter is that you, now, have the opportunity to *create* yourself. You've gathered the tools you need here to do nearly anything, and you're at a point when you have nothing but time ahead of you to explore.
Try some things out. Play in a band. Write a novel. Join a kickball team. Learn to bake. You never know what you're going to find that you like to do. And this goes both ways - you may discover something you always thought you'd love, but end up finding hopelessly boring. This is where the best part of being a computer scientist comes into play: the skills you've learned can be applied to almost any field. All you need to do now is find what excites you most, and use your skills to support it, and make it better.
These discoveries can come randomly as well. Opportunities to grow will present themselves, and you probably won't even realize at the time. You'll be invited to lunch with someone, or out for a drink, and suddenly you'll find yourself in a fascinating conversation on a topic you didn't even realize interested you. You'll be at a party, one that you didn't really even want to attend, and see someone across the room who will change your life in a million ways. You'll be doing your job, same as every day, when someone will come to you with a new task, and before you know it you're publishing a white paper on your experiences, and giving interviews to the international press.
Each of these has happened to me in the short time since I graduated here, and many more as well. And for as fascinated as I am about how lucky I have been, to have had these chances at life, I wonder just as much about those roads not taken, those invitations not accepted. Who knows where they might have led?
For this reason, graduates, I encourage you to say yes. Say yes whenever you can afford it, and occasionally even if you can't, because you never know which meeting, which lunch, which party, is going to be the one that changes your life forever.
Take the chances that come to you, and remember - while we call today "Commencement" it's really neither the beginning of anything, or the ending of anything either. You're a life long learner, and today is simply one more lesson.