Twitter
Essays
Random
Sunday
Oct302011

Installing Good Defaults

Mentoring is such a hard and difficult facet of life. You want to pay it forward, you want to help someone grow, you want the best for them. I can only imagine this feeling is what having kids must be like, only much less intense. I agonize over the idea that my thoughts, my actions, actually influence someone. If that's the case, I must spend as much energy as possible to make sure I'm doing something great so the people who look up to me actually have something worth while to learn.

After much thought and discussion, I think I've finally managed to figure out a mentoring philosophy. Not a teaching one, but a mentoring one: install good defaults. We think about this all the time in computer science. Secure by default. Fast by default. Why don't we have the same concept when it comes to people? I think we do, just society calls it something different: values and morals.

When people grow up, when you analyze different cultures, you see different cultures optimize and cultivate different values and morals. It's how people act by default. For example, the default action in a restaurant in Europe seems to be take your time, enjoy the table wine, enjoy the food. If you are in a rush, you have to actively override social norms to do it, it's "rude". The momentum behind the idea of enjoying your meals is so strong that most people do it.

In asian cultures, the default is to value education almost more than anything else for the kids. That's why you see across the board, asian kids generally do better in every test compared to other cultures. It's valued so much that it becomes the default thing to do. If the running default theory in your family is that you will go to college, you most likely will. It takes an inordinate amount of effort to stand up to your parents, culture, and gut to say no.

Morals are another way society tries to teach people because it instills a default. Most people, thankfully, are appalled at the idea of killing someone. Whenever something is morally appalling, eg selling drugs (I don't find this morally bad, I'm just saying society does), it takes a concious effort to do it. Not only that, your initial reaction is to not sell drugs, which makes you very aware of what you're doing.

As a mentor, that's really what you're shooting for. You want to install great defaults for your mentees. The default reaction when something sucks is to recognize that it sucks and makes it better. The default action is to always be kind to other people. The default is to write clean code. It should take an inordinate amount of energy for someone to settle and say their work is good enough.

Other people allude to this property, it just never clicked as a mentor. There's an old Hindu saying "For the first 30 years of your life, you make your habits. For the last 30 years of your life, your habits make you". It's the same idea - instill great habits and great things will happen as an offshoot.

Thursday
Mar172011

The Graduate School Admissions Process

After going through the 2008 recession, to see the money flourish again in 2010, we've had an interesting three years of interviewing potential graduate students. My hope is to guide potential graduate students through the admissions and interview process I've experienced at UCI.

The biggest difference between interviewing for a for profit company and a non-profit educational institution is that there is a fixed length term. Companies hire employees to produce for a few years, with at will employment. This means the person can leave at any time and the company can fire the employee at anytime. Getting a PhD involves the applicant attending school, and graduating in 5 - 6 years. This really changes the interview game because you aren't necessarily looking for someone who is productive from day one. Nor are you really looking for a specific set of technical skills because everything can change within six years. It forces you to look for fundamental character requirements and focus strictly on potential more than current skill, although current knowledge is always a bonus. Also, interviewing graduate students is also a relatively rare and recent opportunity for our lab. I don't remember interviewing any graduate students in 2008 and only a few in 2009. The UC budget cuts really limited the number of graduate students who could enroll and there wasn't enough money to commit to a new student because if a new student enrolled, current students couldn't finish their degree.

The actual process, from a prospective student's case is very much like what happens when you interview with a company. First, we take a look at your graduate application. If you look interesting on paper, we contact you and setup a Skype session. We talk with you in a very casual manner to see what you're interested in, some of your background, and a few technical questions. We also ask for a piece of code that you wrote and are particularly proud of. Systems software requires a lot of hacking skill, so we want to see what you can do. If the Skype session works well and you live in the United States, we fly you out for a few days, wine and dine grad student style, and see what topics come up. At this point, everything is pretty standard. The hard stuff is what defines "good enough" to grant admission?

Technical Skills

A really difficult question to answer is how much technical skill should an incoming graduate student know? Do we test based on their educational background? Is the bar higher if someone has a masters? What if they don't have an undergraduate degree in computer science, but have self taught themselves everything? As an educational institution, rather than a corporate entity, the expectation is that the person can learn fast enough to get a PhD in five years. We don't need specific technologies that are useful today. We don't even need compiler background experience because you can learn the basics in six months, which is a short time compared to the time it takes to receive a PhD. By definition, a university can and should spend more time training people.

Of course, there is a lower bound on what kind of student can really accomplish a PhD. Just like you would never let a baby drive a car, someone who has never hacked a single line of code in their life could never finish a PhD. You don't want to admit a student who is so under prepared that they would never finish a PhD. It's unfair for both the student and the university.

On the flip side, there isn't an upper bound. The exceptional applicant has already written their own virtual machine, their own garbage collector, and developed their own programming language. If you have done this, by all means please join us. The bar for a normal applicant is somewhere in the middle and setting that bar is really difficult. In our evaluation of a new applicant, they have to pass the lower bar, which is much lower than a corporations. A corporation like Google wants to ensure you can be productive and make them money within six months. The graduate school timeline is two years. We know that the first two years of your graduate career, you will not be productive. You'll be learning, taking courses, and if you're lucky touch some research. If you're really lucky, you'll have a paper. The technical question is, can you learn what you need to in two years? The lowest bar, requires the following technical skills:

  • Basic data structures and algorithms
  • The ability or experience of developing, maintaining, and testing programs. It doesn't have to be system software.
  • Some notion of software design / architecture.
  • The ability articulate technical issues - eg, describe a memorable or cool bug you've had.
  • Likes to hack - Probably the most important.

Pluses:

  • Compiler or system software experience.
  • Knowledge of garbage collection
  • C / C++ / Assembler 

It's a pretty short list and a low bar. Some may even say how could such people even possibly accomplish a PhD? Fundamentally, there is a philosophical difference in how we want to admit graduate students. People are here to learn a new skill. People are here to perhaps change their background. And a University should support these endeavors rather than try to make money or papers off these students. Fundamentally, graduate students are training and learning a new skill set. They aren't technically here to produce a product. Papers and software are a by-product of the graduate school experience. The main product is a graduate who has the ability to learn, the opportunity to learn, and the advice of your fellow students.

Culture Fit

Culture fit is one of the most important things we absolutely look for. Tony Hseih nailed it on the head when he built Zappos. You really need to like going to work, like you coworkers, and be able to hang out with them outside of a professional work environment. Likeability is especially important in graduate school because working in a lab sits somewhere between real friends and a professional corporation on the social connection scale. For example, do you need to invite everyone in your lab to a colleagues personal birthday party? It's ambiguous. In a real friend group setting, the answer is yes. In a corporate setting, the answer is no. In grad school, maybe.

Your colleagues live a 5 minute walk away from you. You see them everyday, live with them, and have to generally enjoy their company. If you can't get along, the next five years are ruined for everyone. We really look for people who we can actually be real friends with, not just professional friends. This means have a beer, ask for advice about not just professional issues but personal issues, and go to Vegas together. So what's the culture fit requirement? Be cool. Sorry to be so vague. (The be cool is my personal culture fit).

Funding

When a graduate student is admitted, they usually receive a multi year funding package. Funding is broken down by each academic year with each year paid for by a different department or entity, and thus a different pocket of money within the university. For example, UCI has three year packages for the average admitted graduate student. If you are highly ranked, you may get four years. Less ranked, two years. A standard three year package is broken down via:

  • One year paid for by the advisor.
  • One year paid by the CS department.
  • One year being a Teaching Assistant / Grader.

The remaining years, 4 - 6, are paid for by the advisor or you've already dropped out of graduate school. However, the important kicker is that after your second or third year, you should have advanced to candidacy. At this point, the tuition for a student is reduced to the same price as a domestic in state resident which is a key milestone because international students cost 2-3x more than an in state resident. The university reduces tuition because the university has already committed enough resources such that is has a vested interest in ensuring you graduate.

GRE scores questionably reflect an applicant's intelligence, but for the purposes of funding, they are important. Even if your Skype interview is great, we probably won't admit you unless your GRE scores are high enough to secure a department funding package. It simply costs too much to admit you.

On the flip side, if you are a stellar student, we might not admit you. If the department reserves a package for a student, but the student has a very high chance of going somewhere else such as Stanford, the money goes away if the student doesn't actually come to UCI. Most graduate students don't understand that the advisor matters more than the actual institution. And so many students who can get admitted to UCB but with a smaller package, will go to the more prestigious universities. UCI attempts to lure students with four year packages, but it doesn't always work. Instead, admissions try to target those students who would probably accept UC Irvine's offer, taking the middle chunk rather than the superb student.

For example, this year, we had a stellar student who currently has a masters degree. He has been working for a major industrial research lab for a few years and is going back to school to get his PhD. He already knew everything about virtual machines, had stellar code, and could probably be the post doc for the lab rather than an incoming graduate student. He got an offer just because he was fantastic, but we are reluctant to believe that he will actually come to UC Irvine. We'll see what happens.

Actual Admissions

Admission decisions are made by a committee comprised of all the university faculty. A specific advisor may want to admit you, but the admissions committee must agree to the admissions unless there are some extraordinary circumstances. If you are a stellar applicant and impress the faculty member, you will have a very very high chance of being admitted to the university. However, at the end of the day, the committee is the one who decides admissions, and therefore nothing is ever really final until the committee approves.

What I Look For

Disclaimer: This is what I, Mason, look for and is not indicative of the general lab policy. There isn't even an official lab policy rather than what's happened in the past. Everyone has their own thing they are looking for, their own style, and how they see "fit".

Coach Wooden - "Nobody cares how much you know (until they know how much you care)"

Personally, I try and follow Coach Wooden. I give a lot of leeway for not knowing anything about compilers, although it does make me question as to how and why you want to join a systems software lab. I care much more about whether or not a person likes to hack. How much they care about their code quality, how much they care about the presentation of themselves and their code, matters much more to me than any particular domain knowledge. One of the things I like to do is ask prospective students to send us some of their code. Just by looking at the code, you can see how much they care about programming. You can gleam how much experience they have and whether or not they are trying to improve the quality of their code.

Outside of their technical abilities, I'm also trying to see if this person is someone who is constantly improving themselves. If they are committed to improving their skills, and genuinely interested in the field, the get more bonus points than someone who is just applying. They may even be better off than someone who has some experience in systems software. If they have shown that they have the hard work ethic required to actually generate some results, awesome.

Of course, accurately gauging an applicant's ability to not only program, but project into the future whether or not they are suitable to accomplish a PhD is incredibly difficult. You will never really know, and each person is a bet.

Personally, I like voting for the underdog, because I'm a terrible interviewee and I've been given so many lucky breaks because I didn't know anything about VMs when I entered. I don't think I would be able to get through the interview process we have today because enough students have some compiler experience. I forgot where I read it, but some CEO of a startup said their engineering culture and interview process became so rigorous and tough that the original engineers didn't think they'd be able to get in. It hurts my ego, but I feel like we're at that point today. The students are getting better and better and that's for the best.

Good luck.

Side Note: International students, the informatics and software engineering department at UCI study software methods (eg waterfall method, agile development). It is not a major you should apply to, at least at UCI, if you want to do lots of programming.

P.S: Any feedback on how we should admit prospective graduate students is appreciated.

Friday
Jun042010

Crafting a Vision

Vision is the ability to articulate a future. The secret to vision is to twofold: Asking why, and asking why not? 

Asking why starts the process of understanding why something is the way it is. It's focused on the present and asks historical questions of how we got from point a to point b. Why is the web this HTML CSS, JavaScript mess? Why are fossil fuels such an important fuel in our economy? To understand any context, you need to read history and find out what happened and for what reasons. Otherwise you'll be bound to make the same mistakes over and over. 

Once you know why something is the way it is, you can create a plan for the future. Why not is a question that implies the future. Why not have a computer on every desk? Why not have all my data across all my devices? Why not have only digital books? Why not takes you from the present into the future. Vision emerges from why not.

Whatever ideal future pops into your head after asking why not needs to be articulated. That articulation is your vision for the future. And like all marketing, a vision has a few components.

Two Kinds of Vision

One kind of vision is jumping on the general trends and working on incremental improvements. For example, it's pretty easy to say that hybrid cars are the way to go, and that the United States will require more fuel efficient cars. If I was Toyota or Ford, I'd be working on more fuel efficient cars as people want cars that can go further on a gallon of gas. As Kevin Rose on Twit said, this is riding the current wave. It's also a lot easier to do well in. If the stock market is going up, you can pretty much pick anything and make money.

Most people have a vision of the first kind. They look at current trends and capitalize on them. Tons of companies were doing search prior to Google. They were even advertising with search, but Google had a better way of searching when search was becoming the big app of the internet. Dell computer rose so fast since they sold commodity computers directly through the web as everyone started needing a computer. You can be hugely successful riding a big wave.

The second kind of vision is creating a wave where nobody else is. Steve Jobs has done this multiple times. Everyone in the smartphone market was doing their own crappy phones until Steve Jobs came out and said here is a radically new kind of phone. Touch started the current smart phone innovation wave we see today. Microsoft created the computer business with a vision of a computer in every home. Amazon became the go to online retailer by instilling in us that shopping online for everything is viable. When you create something that changes your expectations and how you live, it creates a new wave. These are game changing visions and only few companies ever hit these high notes.

There is a rare version of the second kind of vision that cements you in history. This is when everything changes. The internet is a whole new kind of wave, a different kind of communication medium. Thomas Edison is famous for inventing an electricity distribution system. The Wright brothers for harnessing flight defined generations after them. These things only come once every few decades, but they are truly revolutionary. 

Vision is Social

The critical thing about vision is to understand how your change impacts society. Nothing, no matter how technically competent, how technically awesome, will ever actually be realized without understanding the social impact. Every vision must scratch a social itch. Every technical solution is just a means to somehow scratch the itch. Mobile devices feed our need to check anything, anytime, anywhere. We are addicted to the internet. An iPad lets me be lazy and surf the web in my bed. Cars solve the fundamental problem of becoming frustrated waiting too long to travel somewhere by horse. Electricity rids the annoyance of lighting a candle. If you aren't solving some kind of human problem, you don't have a vision. You only have a solution to a technical problem.

Vision is Scalable

Your view of a better world needs a scale. It doesn't matter what that world is, and at what scale, but you do need to define your scale.

Vision can be a very small and personal endeavour. I want to lose 10 pounds this year. The whole new years resolution tradition is giving yourself a one year vision. When you're asked: where do you see yourself in five years? Your answer is really a vision at the personal level.

Vision can scale up and start affecting other people. You want to become a great mentor and influence the young to achieve their potential. This kind of gift is of tremendous value, and lots of people really love being teachers for that reason. They love seeing their past students grow into respectable adults. This vision is at an inter-personal scale.

Thinking bigger, you can start to influence your industry. The Google Android team probably has a vision where everything can be done via speech to text technology. Google itself wants everyone to search for things on the internet in whatever way they feel most comfortable. They have a world that redefines how we find things online.

Scaling up starts getting into solving regional issues. Lowering drug use in New York City starts getting into community issues. Removing air pollution from Beijing prior to the Olympics is a regional issue. Still too, perhaps one day, the middle east will no longer be a hotbed of violence. These are concrete regional visions.

You could start thinking at the global level, or even higher. At the global level, every global leader at least verbally, would love to stop using fossil fuels as the main energy source. Eliminating a whole class of energy use is a vision at an amazingly high scale. 

NASA gets to have the grandest kind of vision since they are the only ones doing the things they do. Who else gets to study the universe? Who else gets to think of things like terraforming another planet. NASA could have a satellite in every neighboring galaxy by 2050. Or they could build a machine that sits on an asteroid and sends back data for the next 50 years. 

Vision scales, you can have multiple visions at each scale, you just need to know where on the scale your vision sits.

Vision Grows

Vision isn't stagnant. It changes with time and with market conditions. It has to be flexible enough to weather all the different fashions that may happen and still leave enough room to for organic growth. Zappos' vision is to have the best damn customer service in the world. However, when they started, it was probably something like "let's make buying shoes a great experience". It grew into have the best damn customer service in the world. Amazon probably didn't have the vision of becoming the de facto online shopping experience, including digital media. Jeff Bezos back in the 1990s probably just wanted to have all the books in the world. Like a person, your vision grows with time.  

Vision is Abstract

A vision has to fit into one sentence. I don't think any powerful vision that really spreads can be any longer since a vision requires that other people buy into it and act on it. You need people to not only want your change, but believe that your change can happen. You have to entice them and let your vision be loose enough that those who listen to it can visualize it. "Let's put a man on the moon". Simple, powerful, easily visualizable, and easy to act on.

If your vision is too concrete, people won't come up with ingenious ways to act on your vision. Zappos' vision of having the best damn customer service in the world lets their employees do awesome things like free shipping both ways and a no questions asked return policy. Bill Gate's philanthropy is not only amazing but simple: Improve health in the third world. You can imagine all kinds of ways to do it, its a powerful message, and you can easily visualize an African kid not being sticks and bones. 

Vision isn't Execution

Vision gives people a destination, but that doesn't mean you'll get there. You still have to execute. Vision and execution are two separate ideas. If you have a vision but can't execute, it doesn't matter. Someone else may come and execute your vision, your idea of the future may be so inevitable that it happens anyway, but at the end of the day, if you can't capitalize on it, what's the point? 

The actions with the most impact have execution and vision go hand in hand. Like Peter Drucker said:

"The best way to predict the future is to create it." - Peter Drucker

 

Other Links:

* Thanks to Christoph Kerschbaumer and Michael Bebenita for proofreading and feedback.

Monday
Feb012010

The Real Value of an Internship

Most people assume that the most valuable thing you get out of an internship is a full time job once you graduate. While I'd be silly not to assume that a full time job is extremely valuable, especially with 10% unemployment, there is a second more valuable aspect: The ability to explore.

Once you graduate and start working full time, you start getting paid. And money = a chain on your leg. You're limited to work on only the stuff that is important to the company, not your own personal development. Worse, it's socially unacceptable to leave a company if you've been there less than a year. Jumping is detrimental to your career, greatly limiting how fast you can explore new interesting things to work on.

Internships buy you the ability to try out different companies, different types of jobs, without the social penalty of leaving.

Discovery is so much more important than any pay check, immediate technical skills you learn, or people you meet. It lets you find out what you really like working on. Of course it's much easier to say it post undergrad and after being an intern eight years. No doubt a stable paycheck is a very tempting carrot. It's very difficult to say no to a *perceived* high paying job while in school. Anything more than minimum wage is considered a gold mine. No more ramen! Plus, you get the first real taste of freedom, the ability to tell your parents that they don't have to take care of you anymore. An amazing feeling, but at what cost?

I think two years after undergraduate, I can safely say that it sacrifices the long term for some short term gain. I know many friends who are giving up on their passions. You can see their dreams dwindle, suffering a slow painful death in the gutter. I look at the end result: my mother who just recently retired, my cousin who is in her mid thirties and countless others. When I compare them to others who still love their jobs, the only difference I see is that they spent the time to discover what they really liked to work on.

Which is the real problem internships solve. They let you discover the breadth of work available without the social stigma of being "uncommitted". The technical skills you learn will help you in the future. The people you meet will leave a mark, a lesson that you can carry with you. But at the end of the day, the feeling of working on something you love or hate is what's truly valuable. Because within three months, if you hated it, you can leave. If you love it, you've found a new path - and that's worth more than any full time job offer.

 

Finding an Internship

This section really didn't fit into the essay, but I know its difficult to find a regular job, let alone an internship. Tips:

  1. Use craigslist, jobs.joelonsoftware.com, and any other job board and look for internships year round. Many are CoOps, which are really a fancy term for part time.
  2. If you're close to graduating (within a year), apply for a full time job and ask if you can start now, but part time. Worked for me. Just say it helps you reduce ramp up time :).
  3. The hiring window for most tech companies is between October - January. It's a lot harder to find a summer internship any other time.
  4. These rules seem to go out the window in graduate school.
Wednesday
Nov182009

Defining a Good Academic Paper

A "good" academic paper is defined as "presenting a new idea".  Half of a good paper is about content: how great is your idea? That alone is a difficult task, highly controversial, and a gut feeling.

The other half is how well the idea is presented. Every presenter, book and teacher can present new ideas in something you can understand, given enough time. But nobody has time, so a paper has to be incredibly easy to understand, which makes writing a good paper exponentially harder. A paper also has to explain not only the idea, but it's context. A ground breaking climate model is useless unless I know why I need one.

A "good paper", needs to "present a new idea in an easy to understand way".

Present doesn't say much nor does it imply any kind of usefulness for the reader. Press releases present something new in an easy to understand way, but most are useless. The whole point of a paper is to expose your idea to the rest of the community, so that they may be able to use it to solve their problems. Perhaps we should be trying to "teach" someone. But that isn't the case either as teaching implies a hierarchy - a teacher/student relationship.  In reality, they are colleagues that have equal weight, and you are hoping that they will like your idea. Which maybe means you are trying to sell a new idea. But "selling" has a horrific connotation of stuffing something down your colleagues throat. The only word that I could think of that implies respect, while still explaining an idea, is inform. A paper isn't trying to teach, or sell, but trying to inform a colleague of a new idea. We can change our definition of "good" to:

"Inform a colleague of a new idea in an easy to understand way"

This is a fairly abstract definition, but a good starting point. The definition of "new" is murky and depends on the field. How much stuff has to be new? Does the whole system have to be new? Does every paragraph have to present a new piece of information? I'm not sure, and I don't know how to define "new". My guess is, it'll be like what the U.S. Supreme Court said about explicit images: "I'll know it when I see it". Just make sure in your paper, the reader can see the "new" part. Put big circles, stars, lots of noise, and in big bold letters, the "new" part of your research.

The hardest part of writing a good paper is making it easy to understand. The most difficult part of making something easy to understand is culture. Even determining the responsibility of understanding something is cultural. In Outliers, Malcolm Gladwell explains the notion of "transmitter" versus "receiver" oriented communication. Most western or "transmitter oriented" cultures say that the writer has to ensure that the reader understands the message. In "receiver oriented" cultures such as eastern cultures, the person listening has to decode the message. Since most scientific papers are published in English, a "good" paper means it is the responsibility of the author to ensure that the reader gets it. The paper has to be proofread by many different people, rewritten, and edited many, many, many times. Most papers are difficult to understand because they are just written, not edited.

Culture also brings up the issue of writing style. I'm unfamiliar with how all Europeans write English, but American English is very different from English written in Germany/Austria. American English, at least after speaking with friends who majored in English, is good when it is concise. Short and simple. On the other hand, Germanic English, is concerned with being "precise", or adding lots of details. And by precise I mean that every thought related to the sentence is explained, in the sentence, with every nuance covered trying to eliminate all possible avenues where a point can be attacked, which of course creates sentences that are strung together to make a very long sentence without the use of periods, making each sentence difficult as an American to read. (eg. The JIT does xyz versus A JIT compiler can do xyz. We do escape analysis versus we do escape analysis for single threaded programs). American readers will hate your writing if you make it overly precise (me!) and Germans will hate your writing if you make it short and concise as your sentence is no longer "precise". I'm sure there is an "Asian" version of English, but I have no idea what that is yet.

The other non-culture hurdle of making something easy to understand is deciding on what is background information. How much can you assume someone knows? Most people guess too much. Dumping all the background information in the world makes a great textbook for an undergraduate course. Assuming everything will ensure that nobody knows what you're talking about. Try to imagine someone who has taken one or two courses in the subject and nothing more. If in doubt, give an extra sentence for background explanation. Don't feel bad if you scratch your head over what's background information because it's a really hard problem. (A website that contains a list of terms and definitions that everyone in the field should know has wiki potential written all over it.)

The easiest way to overcome these hurdles is to use examples because it solves the problem of abstract ideas, background information, and writing style. As much as scientists say they love the abstract, people can't think that well in the abstract. Self contained examples solve a lot of the background information problem. And many writing style issues go away if I already have experience with the example.

The best examples are the ones that start out with a simple case and slowly add new ideas, creating a holistic picture. It's hard to create one example to cover everything. But if you can't do it, your paper isn't focused enough or you haven't thought hard enough. Keep thinking.

A good academic paper, needs to "inform a colleague of a new idea through concrete examples". I've only written two papers, read too many, and I'm sure my definition will change with more experience, but that's seems to be better than most after two years in grad school.

 

Other Resources:

* Thanks to Christian Wimmer, Michael Bebenita, and Ali Haeri for proofreading.