在台大，日子也像是Dr. Welsh描述的翻版，在忙碌之餘，我不得不利用Engadget, Mobile01, Macrumors, Facebook等網站來打發時間和調劑身心。平常得抽空撰寫一篇一篇看起來很偉大卻又能夠用合理的經費在有限時間內完成的研究計劃書，以及向校方和相關單位以幾近乎自我吹噓的方式把一些研究成果以世界一流的角度呈現在報告和paper中。參與一個一個和教學和研究相關的會議時，往往得在分心二用抽空完成上述事項的同時，還必須以不衝撞與會權威人士的方式提供符合自己微薄角色的參考意見。在上課前才趕著做好的教學投影片，發現一堆沒有預習、缺乏實作經驗、毫無求知慾、不敢在上課問問題和回答問題的學生們，似懂非懂地聽著我三小時60張投影片的演講。在跟一群研究生的研討會裡擔綱唱獨角戲，擔任主持人並且負責幫聽不懂的人問問題，以及幫回答不出來的演講者回答問題。說要來談產學合作的小公司，一半是想來得到免費諮詢服務的，另一半則是希望能獲得廉價勞工。花時間所指導的研究生，原本應該是舉一反三的，很多時候是舉三反一，而且反出來的東西還是錯的。一個月之後要送出去的paper，老神在在的學生就是要撐到最後的幾天才寫好稿交上來，為了提昇業績，不得不趕工自己動手全部直接重寫。三更半夜爬起來寫了三十多張立可貼的研究心得，隔天很興奮地告訴研究生說這個趕緊去看看能不能做出世界一流的東西，結果三個月後連一個像樣的survey都沒看到。學生畢業後拍拍屁股走了，留下給學弟學妹一些很難交接的成果。我買了一堆書，收集了一堆papers要看，無奈總是覺得時間不夠用，卻又說不出時間確切花到哪裡去，懷疑是自己缺乏自我管理能力。每年重複一樣的過程來教導和訓練學生，每年都想大刀闊斧地改進教學材料，但每年都留下一堆遺憾和挫折感。
這一切，我只能說，人各有命，殊途同歸。在學術界走系統實作的路線，就是辛苦的，在台灣又格外艱辛。礙於情勢，我只好培養我在這個學術圈裡發展所需的技能和智慧，利用有限的時間有效地去學習新的知識，在幾個月內成為Android和雲端運算的專家（這個圈子現在很多人都是雲端的專家），在幾個月內發表四篇標題有cloud的文章，並且拿到M公司贊助兩年雲端研究的經費，以及另一個M公司一年的Android研發合作案。也因此在忙到快要過勞死，面對這個學術圈裡的種種不完美時，除了為了某些高於個人的理由而努力忍受著之外，想到這些能讓我常常有機會學習和貢獻時的愉快，還有理直氣壯但是孩子氣地購買並且把玩最新Android/iPhone手機、Macbook Air、十二核心的Mac Pro、甚至於container-based cloud的時候，我想：在台大教書的日子也還不錯。（註：當我沒有庸人自擾的時候。）
Day in the Life of a Googler
I was thinking recently about how different my workdays are now that I'm at Google, compared to the faculty job at Harvard. The biggest difference is that I spent nearly 90% (or more) of my time writing code, compared to Harvard where I was lucky if I got half an hour a week to do any programming. I also spend a lot less time at Google procrastinating and reading a zillion stupid websites -- mostly because I'm enjoying the work a lot more.
Here's a short rundown of my typical day at Google:
- 6:30am - Wake up, get son up, shower, breakfast, take dog to the park.
- 8:30am - Leave for work (I take the subway most days).
- 9:00am - Arrive at work. Type passwords into half a dozen different windows to get my work environment back to a sane state. Check email. Check on status of my several jobs running in various datacenters. Page in work from day before.
- 9:30am-10:15am - Work on code to add requested feature to the system I'm working on. Debug it until it's working, write a unit test or two. Fire off code changelist for review. Grab third free Diet Coke of the day.
- 10:15-11:00 - Switch git branches to another project. Take a look at code review comments from a colleague. Go through the code and address the comments. Build new version, re-run tests, re-run lint on the code to make sure it's working and looks pretty. Submit revised changelist and responses to comments.
- 11:00-11:30 - Switch git branches again. Rebuild code to be safe, then fire off a three-hour MapReduce job to crunch log data to analyze network latencies.
- 11:30 - 12:00 - Quick videoconference meeting with team members in Mountain View.
- 12:00-12:35 - Lunch of free yummy food in cafeteria. Regale coworkers with stories of Apple IIgs hacking when I was in middle school.
- 12:35-2:00 - Back at desk. Check email. Check status of MapReduce job - about halfway done. Respond to last set of comments from code review done in the morning and submit the code. Merge and clean up the git branch. Take a look at task list to decide what to work on next.
- 2:00-3:00 - Project meeting with teams in Cambridge, Mountain View, and elsewhere by videoconference. This is my only hour-long meeting of the whole week. It is mildly amusing and I mostly spend the time doing some light hacking on my laptop and hitting reload on the MapReduce status page to see if it's done yet. Check Buzz and post a snarky comment or two.
- 3:00-4:00 - Red Bull infusion to keep energy going for the rest of the day. MapReduce is finally done. Generate graphs of the resulting data and stare at them for a while. Think about why the results are different than expected and write next version of code to generate another set of statistics. Try to get the code to the point where I can fire off another MapReduce before leaving for the day.
- 4:00-5:00 - Whiskey Thursday! Round up a group of colleagues to drink scotch and play Guitar Hero. (I have a nice collection of scotch under my desk. Somehow I have been designated as the guardian of the alcohol supply, which suits me fine.)
- 5:00 - Pack up laptop and head home.
- 5:30-8:00 - Dinner and family time until son goes to bed.
- 8:00 until bedtime - More hacking, if there's stuff I want to get done tonight, or make a few nice cocktails if not.
Contrast this to my typical work day at Harvard:
- 6:30am - Wake up, get son up, shower, breakfast, take dog to the park
- 8:30am - Leave for work (a 20-minute walk from home to the office, and I bring the dog with me).
- 9:00am - Arrive at office. Check email. Groan at the amount of work I have to do before the onslaught of meetings in the afternoon.
- 9:15am - Start working on outline for a grant proposal. About three minutes later, decide I don't know what I want to write about so spend next 45 minutes reading Engadget, Hacker News, and Facebook instead.
- 10:00am - Try to snap out of the Web-induced stupor and try to make headway on a pile of recommendation letters that I have to write. Fortunately these are easy and many of them are cut-and-paste jobs from other recommendation letters I have written for other people before.
- 11:00am - Check calendar, realize I have only an hour left to get any real work done. Respond to some emails that have been sitting in my inbox for weeks. Email my assistant to set up three more meetings for the following week.
- 11:30am - Try to make some token headway on the grant proposal by drafting up a budget and sending off the three emails to various support staff to get the paperwork going.Make up a title and a total budget for the proposal that sound reasonable. Still undecided on what the project should be about.
- 12:00pm - Take dog out for a 20-minute walk around campus. Sometimes spend longer if we run into other dogs to play with.
- 12:30pm - Run over to Law School cafeteria to grab overpriced and not-very-appetizing lunch, which I eat sullen and alone in my office, while reading Engadget and Hacker News.
- 1:00pm - First meeting of the day with random person visiting from a random company in Taiwan who will never give me any money but wants me to spend half an hour explaining my research projects to them in extraordinary detail.
- 1:30pm - Second meeting of the day with second-semester senior who has suddenly decided after four aimless years in college that he wants to do a PhD at Berkeley or MIT. Explain that this will not be possible given zero research track record, but somehow end up promising to write a recommendation letter anyway. Mentally note which other recommendation letters I will cut and paste from later.
- 2:00pm - Realize that I have to give lecture in half an hour. Pull up lecture notes from last year. Change "2009" to "2010" on the title slide. Skim over them and remember that this lecture was a total disaster but that I don't have time to fix it now.
- 2:30pm - 4:00pm - Give lecture on cache algorithms to 70 or so somewhat perplexed and bored undergrads. Try to make the lecture more exciting using extensive PowerPoint animations and wild gesticulations with the laser pointer. Answer a bunch of questions that remind me why the lecture was a disaster last year and vow to fix it before delivering again next year.
- 4:00-4:10pm - Hide in office with door closed trying to calm down after adrenaline rush of lecturing. Gulp large amounts of Diet Coke to re-energize and re-hydrate.
- 4:10-4:20pm - Check email. Check Engadget. Check Facebook.
- 4:30-5:00pm - Last meeting of the day with two grad students working on a paper due in less than a week. They have no outline and no results yet but are very optimistic that they will make it in time. Spend half an hour sketching ideas and possible graphs on the whiteboard while they scribble furiously in their notebooks. Make vague promises about reviewing a draft if I see one later in the week.
- 5:00pm - Walk home with my dog. This is the best part of my day.
- 5:30pm - Get home, immediately sit down to check enormous pile of email that accumulated while I was in lecture and meetings. Forward five new meeting requests to my assistant for scheduling next week.
- 5:45pm - 8:00pm - Family time, dinner.
- 8:00pm - Pretend to "work" by reading email and tinkering with PowerPoint slides for a talk I have to give the next week. Too exhausted to do anything useful, make a drink and read Engadget again.