Leaving IBM

To be honest, this is probably the most difficult post I have ever written. This is majorly because there is a ton of stuff I want to say but I’m unsure whether I should keep them public or should keep it to myself. Another factor that makes this post hard to write is because the span of drafting. I have been drafting this post since April in 2016, right after when I decide to start the whole process of quit-IBM-and-get-a-PhD project.  I used to use this post as a log to record things and feelings when somethings happens around me at IBM. Frankly, if I take a look at the stuff I record (mostly are rantings) retrospectively, lots of stuff still hold but the anger just passes away with the time. So, that year-long drafting really makes me hesitate even more because the mood when those stuff are written are gone. However, two years can be a significant amount of time and quitting IBM can be called “an end of era” and I should give a closure to my happy-and-bitter experience with IBM anyway. So, here it goes.


Thank you, IBM!

I’m really thankful for the opportunities working with IBM. This experience really makes me grow both technically and mentally.  Technical-wise, I have the opportunity to get hands on experience with DB2 development. DB2 as a database engine is extremely complex. It has over 10 million lines of code and it is way beyond the scope of any school project. Working on those projects are quite challenging because there is no way you can get clear understanding of every part of the project. I still remember when I attend the new hire education on DB2, there is one guy says: “I have been working on the DB2 optimizer for over 10 years but I cannot claim with certainty that I know every bit of the component I own.” This fact really shocks me and based upon my experience so far, his claim still holds but with one subtle assumption, which I’ll talk about later. There are lots of tools are developed internally and reading through both the code and tool chains are a great fortune for any self-motivated developers. I pick a lots of skills alongside: C, C++, Makefile, Emacs, Perl, Shell, AIX and many more. I’m really appreciated with this opportunity and I feel my knowledge with database and operating system grow a lot since my graduation from college.

Mentally, there are also lots of gains. Being a fresh grad is no easy. Lots of people get burned out because they are just like people who try to learn swim and are put inside water: either swim or drown. I’m lucky that my first job is with IBM because the atmosphere is just so relax: people expect you to learn on your own but they are also friendly enough (majority of them) to give you a hand when you need help. I still remember my first ticket with a customer is on a severity one issue, which should be updated your progress with the problem daily. There is a lot of pressure on me because I really have no clue with the product at the very beginning. I’m thankful for those who help me at that time and many difficult moments afterwards. That makes me realize how important is to be nice and stay active with the people around you.  Because no matter how good you are with technology and the product, there are always stuff you don’t know. Staying active with people around you may help you go through the difficult moment like this by giving you a thread that you can start at least pull. In addition, participating with toastmasters club really improve my communication and leadership skills and more importantly, I make tons of friends inside the club. Without working at IBM, I probably won’t even know the existence of the toastmasters club. If you happen to follow my posts, you’ll see lots of going on around me when I work at IBM. Every experience you go through offer you a great opportunity to learn and improve yourself. Some people may look at them as setbacks but for me, I look at them as opportunities.


( the picture on the left is all the comments people give to me about my speech and on the right is the awards I have earned inside the club in these two years)

With the help of all those experience, I have developed a good habit of writing blogs (both technical and non-technical), reading books, and keep working out six days per week. All those things cannot be possible if I work at a place where extra hour work commonly happened. I’m very thankful for IBM for this because staying healthy both physically and mentally are super critical for one’s career. Even though those stuff don’t directly come from IBM, but IBM does provide the environment to nurture this things to happen.


IBM has its own problem. The problem is centered around people. There are many words I want to say but I think I’ll keep them secretly but I want to show my point with a picture:


I don’t know why IBM’s term “resource action” on firing employees and the sentence “IBM recognize that our employee are our most valuable resources.” bother me so much. I probably just hate the word “resource” as a way to directly describe people and how this word get spammed so much around IBM. I know everyone working for a big corporation is just like a cog in a machine. However, what I feel based upon lots of things happened around me is that IBM as its attitudes represented by its first-line managers (because those people I commonly work with) makes this fact very explicitly. It hurts, to be honest. No matter how hard you work and no matter how many prizes you have earned for yourself and your first-line manager, you are nothing more than a cog in a machine, which is not worth for high price to have you around because there are many cogs behind you that are ready to replace you. They are much cheaper, much younger, and more or less can work like you because your duty in the machine is just so precisely specified, which doesn’t really depend on how much experience you have had under your belt. To me, that’s devastating.

This leads to the problem that talented people are reluctant to stay with company. My mentor and the people are so good with DB2 have bid farewell to the team. That’s really sad to me because they are the truly asset to the company and the product. The consequence of this is that crucial knowledge is gone with people. Some quirks existing in the product are only known by some people and once they leave the company, the knowledge is gone with them. That makes mastering of the product even harder. That’s the subtle assumption that the person makes during the new hire education and that’s also part of the problem when working with legacy code. The whole legacy code issue is worth another post but one thing I now strongly believe is that any technical problem has its own root cause in company culture and management style. To me, I’m not a guru now but I cannot see the way to become a guru with my current position, which scares me the most

That’s it for this section and I’ll leave the rest to my journal.


“Research” Interest

This week Friday, I meet with my future roommate in Beijing. During the lunch, we had a conversation about each one’s research interest. My roommate, likes me, is also a CS graduate student at Austin. However, unlike me, he has a clear vision about what direction he is going to pursue in graduate school. He just finished his undergraduate degree in Automation department at Tsinghua University. Automation department, as he explained, is similar to a mixture of mechanical engineering and electrical engineering. He has interest in mathematics since high school and naturally, he wants to work on machine learning theory in graduate school with emphasis on computer vision (CV).

Now comes to my turn. That’s a hard question I have been thinking about for a while. I don’t have clear vision on what I’m going to pursue next. I think maybe I’m too greedy and want to keep everything. However, I also realize that I may not be as greedy as I thought initially. I know I don’t want to work on computer architecture, computation theory, algorithm, compiler, network. Now, my options really just choosing among operating system, database, and machine learning. For the machine learning, I even know I probably won’t choose computer vision eventually (still want to try a course though) and I more lean towards the natural language processing (NLP). However, picking one out of those areas is just too hard for me now, even after I did some analysis in my last post trying to buy myself into picking machine learning only. There is always a question running in my head: why I have to pick one? Sometimes I just envy the person like my future roommate who doesn’t have this torture in his mind (maybe he does? I don’t know).

This feeling, to be honest, doesn’t new to me. When I was undergraduate facing the pressure of getting a job, a naive approach is just locking oneself in the room and keeping thinking what profession might suit me the best. After two years of working, I grow up enough to know that this methodology on making choice is stupid and I also grow up enough to know that “give up is a practice of art”. Why I’m in this rush to pick the direction I want to pursue even before I’m taking any graduate course yet? Why can’t I sit down and try out several courses first? Because I want to get a PhD in good school so bad. Let’s face the fact that people get smarter and smarter in generations. Here “smarter and smarter” doesn’t necessarily mean that people won’t repeat the mistake that happened before. It means that people will have better capability to improve themselves. Machine learning is not hot in 2014 from my experience in college. Back that time, Leetcode only has around 100 problems. I have no particular emotional attachment to machine learning material when I’m taking the AI class. Maybe because wisconsin has tradition in system area? I don’t know. However, in 2017, everyone, even my mother who is a retired accountant, can say some words about AI, machine learning. Isn’t that crazy?

On my homepage,  I write the following words:

I like to spend time on both system and machine learning: system programming is deeply rooted in my heart that cannot easily get rid of; machine learning is like the magic trick that the audience always want to know how it works. I come back to the academia in the hope of finding the spark between these two fascinating fields.

Trust me, I really mean it. Maybe because I graduate from wisconsin, I have naturally passion for system-level programming, no matter it from operating system or database. Professor Remzi’s system class is just a blast for anyone who wants to know what’s going on really under the software application layer. Professor Naughton’s db course is fully of insights that I can keep referring to even I begin to work a DBMS in real world. Wisconsin is just too good in system field and this is something that I can hardly say no even I have work so hard lie to my face saying that “system is not worth your time”. What about machine learning? To be honest, great AI dream may never accomplish. Undergraduate AI course surveys almost every corner of AI development but only machine learning becomes the hottest nowadays. Almost every AI-related development nowadays (i.e. NLP,  Robotics, CV) relies on machine learning technique support. Why I’m attracted to machine learning? Because it’s so cool. I’m like a kid who is eager to know what is going on behind magic trick. Machine learning is a technique to solve un-programmable task. We cannot come up with a procedure to teach machine read text, identify image object, and so on. We can solve these tasks only because the advancement of machine learning. Isn’t this great? Why both? I think machine learning and system becomes more and more inseparable. Without good knowledge about system, one can hardly build a good machine learning system. Implementing batch gradient descent using map-reduce is a good example in this case.

I just realized that I haven’t answered the question about rushing towards the making decision. In order to get a good graduate school to pursue PhD, you need to demonstrate that you can do research. This is done by publishing papers. Most of undergraduates nowadays have papers under their belt. That’s huge pressure to me. Master program only has two years. I cannot afford the time to look around. I need to get started with research immediately in order to have a good standing when I apply to PhD in 2018.

So, as you can tell, I have problem. So, as a future researcher, I need to solve the problem. Here is what I’m planning to do:

  • Take courses in machine learning in first semester and begin to work on research project as soon as I can. I’ll give NLP problem a chance.
  • Meanwhile, sitting in OS class and begin to read papers produced by the Berkeley Database group. People their seem to have interest in the intersection between machine learning and system. This paper looks like promising one.
  • Talk to more people in the area and seek some advice from others.
  • Start reading “How to stop worrying and start living

Will this solve the problem eventually? I don’t know. Only time can tell.

Some thoughts on learning

刚才在YouTube首页随便打开了一个推荐视频,视频的名字叫做How to Learn Faster with the Feynman Technique (Example Included)。我个人其实很少点开这种带有非常强烈功利色彩的标题去看的,更别提是这种方法论的视频。并不是说我讨厌这类视频,我只是觉得这类视频看多了,如果不立刻去实践的话,看了也没有任何效果,反而浪费掉了很多时间。这个视频本身不长5分钟左右,看完后,我不仅觉得这个方法可以试一试,而且更重要的是让我回忆起过去看过的一些东西以及一些想法。所以赶紧记录在这里。


这个方法的核心就是explaining the concept。一个典型场景就是去office hour找老师问问题:在你向老师解释完问题,你的疑惑点,以及你的解决方法之后,很有可能出现的情况就是还没等老师说话,你就说:“噢,我懂了。谢谢老师!” 然后转身跑出了办公室。这个场景体现出两个要点:1. explaining the concept确实非常重要 2. 也许这个问题已经在我们的内心里过了无数遍,却只有我们向另一个人解释的时候我们才会 “噢!!!!”。 第一点不难理解。但是第二点确是极度困难:我们从哪里能找到一个愿意天天听我们explain what we have learned的人呢? 上面的视频提出了一种解决办法,步骤如下:

  1. 找张纸,把你要解释的概念写在纸的最上头
  2. 假装有一个第三方在场,用你自己的语言向他解释这个概念。这里作者有几点强调:
    1.  用最通俗易懂的语言来解释
    2. 不要仅限于定义。挑战自己,用例子,图等形式来确定你可以把所解释的概念实际运用起来。
    3. 把在场的这个第三方想像成一个小孩子。这么做的好处就是小孩子会经常问“为什么?” 这个会让我们做到对这个概念的细节有百分百的理解。
  3. 在做完前两步之后,你就要重新回顾你在哪些地方解释出现模糊,拿不准,或者不知道。这些地方就是我们对这个概念理解薄弱的地方。我们要做的就是拿出资料将这些模糊点搞清楚。这步和考完试改错题非常相似。
  4. 这步其实是第三步的引申。就是看之前哪些解释的地方运用了复杂的语言或者堆砌了大量技术概念。我们要做的就是尽力把这些地方用更简洁的语句进行重写。

视频介绍的这个方法其实在各种我所看过的资料里都有体现过。比如在The Pragmatic Programmer一书中讲如何debug一节时,作者介绍的一个技巧叫做”Rubber Ducking”:

A very simple but particularly useful technique for finding the cause of a problem is simply to explain it to someone else. The other person should look over your shoulder at the screen, and nod his or her head constantly (like a rubber duck bobbing up and down in a bathtub). They do not need to say a word; the simple act of explaining, step by step, what the code is supposed to do often causes the problem to leap off the screen and announce itself.

It sounds simple, but in explaining the problem to another person you must explicitly state things that you may take for granted when going through the code yourself. By having to verbalize some of these assumptions, you may suddenly gain new insight into the problem.

这个”Rubber ducking”的来源就是其中一位作者在早期的时候看见一个很厉害的developer经常拿着一个”a small yellow rubber duck, which he’d place on his terminal while coding”。

The Lady Tasting Tea一书的前言中作者也提到作者在写着本书的时候收到了来自他的妻子很多的帮助。因为他的妻子不是statistician,所以如果作者用很technical的语言来写的话,他的妻子根本就看不懂。所以这迫使作者不得不采用更加通俗易懂的语言来解释统计背后的哲学及观念发展。

这也让我想到我最开始写Tech blog的一个主要motivation就是把我所学的东西通过文章的形式解释出来,争取消灭掉不懂装懂的情况。而视频方法的3,4步就是未来我在写tech blog的时候需要更加注意的地方:不要把所学的内容进行简单的归乃重复,要注意用更加简略的语言讲述出来。这里题外话一句:我发现将知识点内嵌在文章里是一个非常不错的保存知识点的方式。这么做我感觉会使知识点不会过于碎片化,并且提供充足的上下文将独立的知识点很有效的串联起来。这也许是“connect the dots”的一种体现吧。


“The first principle is that you must not fool yourself — and you are the easiest person to fool.” — Richard Feynman

Thoughts on PhD


This post serves as a record of thoughts regarding PhD. This post is from the person who is about to embark on the journey of getting a PhD. The thoughts from this post may look stupid or naive for someone who has already gone through the phase. However, based upon my past experience, if you don’t have some baseline for something that you decide to begin fighting for, you can barely have a measure on how much you have progressed when you actually start to fight, and highly likely, you may fall into the same trap over and over again for future similar situations.

Let’s dive into …

I have been considering getting a PhD since my sophomore year at University. This page summarizes some commonly-seen motivation for people getting a PhD. I think mine can be partly described as “Dr. Hu — sounds cool!” and “Eternal quest for knowledge (yeah right!)”. Another part, I guess, probably be the childhood dream of becoming a scientist. However, now, after two years working in industry, I realize that the most important motivation for me to get a PhD is that I want to have the ability to solve the problem that nobody explores before. This is different from quick learner because quick learner means grasping the material that has already studied before quickly. But, that doesn’t mean he can handle the unexplored area very well. I like to ask “why” when I face a problem but gradually I realize that I don’t have enough knowledge and more importantly, the confidence to solve some of crazy ideas in my mind. So, getting a PhD means I build some good knowledge foundation in some specific area and process the ability to solve any open question, even it is from the area that I haven’t explored before.

However, getting a PhD is a non-trivial task and itself demands lots of commitment. I personally view PhD and marriage are two the most serious commitment a person can ever give in his entire life. I try to play “rational” card here by doing some evaluation beforehand because I’m type of do-something-that-can-be-successful person and several years of study in economics make me become more and more like a “risk-averse” kind of person. So, I do various RA jobs in various departments (i.e. Math, Psychology, Biostatistics) to get a sense of what PhD life might look like.  The result is not good for me because I find out that working on some topics that you have the least interest in can be a lot like being in jail. However, those undergraduate research experience also has its positive side.  Imagine if I jump into the graduate school directly and choose some direction that I have no interest in (i.e. medical imaging),  I am sure that I cannot survive till the end. Sometimes I feel that the process of making decision is a two-way street: one way to do is to pick something that fits you from the pool; the other way is that you get rid of the choices that definitely do not work for you and then see what is left inside the pool. Apparently, for me, the latter strategy works slightly better.

So, I choose to work in industry for two years to find the things that I have passion about.
There isn’t much left in my choice pool by that time: I either pick from AI or from system.  For AI,  my focus is majorly on the application of ML techniques, such as CV, NLP. For system, my choice is distributed system (i.e. distributed database, distributed file system).  So, I need to carefully think about the pro and cons for which track I decide to pursue. Like I said in my offer choice post, there can hardly be a perfect choice that meets your need by any measure. Preference ranking in economics may be too ideal.  There is always trade-off. After spending two years working in database, I realize that I’m not really a hardcore system guy.  The most attractive feature from system is that I can do lots of coding. The coding here is naturally different from coding in, say, ML. In system, most of coding is done involves implementing data structures, data process models, and so on. However, for ML, coding is more like a direct translation of some mathematical formulas. However, the problem I find out about system research is that it is hard to propose problems that can directly link to the industry level production. This problem becomes clear to me after I attend DTCC 2017 last week.  The key success element for building a system is the production painpoints or user scenario. Alibaba and Tencent build system just to cater their specific business scenarios. In my view, the system has value once it can solve some specific problems that are not formed from someone’s imaginary. This can be very hard for newcomers who just join inside academic circle. In this case, advisor may work like a offer manager who regular visits companies to see what kind of problems they try to solve and bring those practical problems back to the research group and hopefully these issues can be resolved by his students. Research is all about solving problems and great research comes from the problems that have or potentially have great impact in the industry or people’s daily life.

In addition, if I recall the fun course experience from my undergraduate, I realize that I have much more fun with manipulating formulas and work out the problem that has strong connection with people’s daily life. The biggest trend right now is on big data. However, to be honest, for database system developer like me, I can barely get in touch with actual big data in my daily work. So, whether the system I build is robust enough to handle the actual big data, I don’t know. The only thing I can say is that I implement the design correctly. So, I feel like it is really hard to work out some good system by spending most of the time in school. This idea is partially confirmed by the trend that people jump out of academia and head to the industry like this.  However, even I have spent almost all the space so far talking about the “problems” I have observed about system research. I do enjoy the “traditional” programming scheme that system research possess. Rather than taking some data and train a somewhat blackbox network to achieve outcome, traditional if-else programming feels more rewarding for a hardcore programmer.

For AI, things can be radically different from system. Specifically for ML, one thing I learned is that ML is used to solve for the task that can hardly solvable by traditional programming, like autonomous driving, pattern recognition. Those stuff has strong connection to people’s daily life, which means can make a lot more impact. This is some historical pattern that can be easily observed: serving individual people is lot more profitable than serving big companies. Doing research on system is a lot like serving big companies if we consider the problem: who needs to build infrastructure from scratch? However, working on AI is a lot like serving people by making iPhones. If we observe the trend of companies like IBM and Apple, this analogy can easily work. So, even programming in ML is less satisfying in my sense, we just need to embrace the future to better maximize our utility.  Of course, mathematics are quite bit involved in the field of AI, and tweaking parameters of learning models can feel quite subjective. However, I guess that’s some obstacles I need to face. The rationale is same as before: there is no perfect choice and we just need to try even if we have only 10% confidence about success.

Last word …

The motivation for considering this issue right now is that I need to start planning my course schedule for the upcoming semester. The course schedule can be balanced between system and AI. But, it can also be AI focused. So, I really need to evaluate myself to see which direction I want to go.  There is a famous quote in China: “Choice matters!”

Takeaway from DTCC 2017

由于同事出差,我有幸参加了在北京国际会议中心举办的第八届中国数据库技术大会(Database Technology Conference China 2017)。这是我第一次参加业界交流大会,内心还是格外兴奋的。这次大会确实有很多的收获,我想用这篇博客记录下来。本来我想用英文记录的,毕竟对于计算机领域,英文是我的“母语”,但是介于分享主要以中文为主,所以我就还是以中文来记录了。



Get some sense from the peers

Focus on your own product is quite important. However, it’s even more important to see how your peers doing. I’m not an architect yet but I feel it’s helpful to begin thinking like an architect and see what the problems that your peers are facing and how they try to solve them. In addition, by knowing how’s the going with your peers, you may get a measure of yourself: is the work you are doing on the same level as your peers? Are you in a good shape in the job market? What’s the gap you need to fulfill skill-wise?

Deepen the understanding of the field

Even almost two years working on the database field, I still think myself as a newbie. This is mainly because database is arguably the most complex software that people can ever make and there are tons of stuff I don’t know. So, I want to see in a high level that what’s the trend of the field and what kind of reflection that people derive from their day-to-day engineering practice. I think this may help me to catch-up with the masters.

AI or System?

As I disclosed in my last post, I decide to head back to school and get a master degree. To be honest, my ultimate goal is to acquire a PhD in Computer Science and currently I’m actively preparing for it. The most important question is that which field I want to study?  I have two options and I have some interests in both fields: AI and System. Why these two options and not others is worth a whole new post and I don’t want to discuss here. So, my task for now is to gather as much information as possible about these two fields and see which one looks more attractive to me. This event is extremely helpful because it has sharing on System as well as on AI.

Day 1


年度主题解读 (曹鹏 – 京东金融副总裁)


  1. Finance领域受到了机器学习的冲击,最近几年有越来越多的FinTech公司出现。机器学习在这种公司的主要应用从这个分享来看是对客户群体更加精确的定位和分析。相应的,对于量化交易策略的作用,这个分享没有涉及。我最近一直比较关心机器学习在金融领域的应用,但是从这个分享上,我没有找到我想要找到的答案。因为,在我看来,对客户群体的精确定位是一种机器学习的通用应用,并不具备金融行业的独特性。
  2. 数据公司在我看来是一个不错的创业想法。分享中提到数据对于京东金融的重要性。他们不仅要求数据的广度,也要求数据的厚度。一个重要问题是数据是具有很强的时效性和冷热变化的。一年前顾客的消费记录对于现在来说并不具备非常强的指导意义。因此,京东金融每天都要收集大量的数据(~6TB)来保证整个分析的准确性。同时,演讲者透露出即便在这种情况下,他们觉得数据还是远远无法满足他们的需求的。这个就能解释为什么IBM最近收购了The Weather Company和医疗影像公司Merge Healthcare:无非就是看上了这两家公司的数据。这让我想做数据贩卖商会不会是一个不错的创业点子呢?

数据库发展概览 (吴承杨 – 甲骨文)


  1.  在去IOE喊了那么多年的今天,Oracle的市场占有率依然有56%之多
  2. 数据库的未来是云:这里演讲者用一个case讲述hybrid cloud的重要性。企业现在面临的问题是如何将公有云的数据和本地服务器上的数据有效的对接在一起以及如何将公有云私有化等。整场演讲更像是Oracle解决方案介绍会,技术方面很少涉及,但是指出了未来数据库发展的方向:上云。
  3. 演讲者台风不错,是一个不错的演讲者。

数据技术的下一站 – 数据应用 (王桐 – 永洪科技)



达梦如何冲击核心业务系统 – 国产数据库的产品发展之路 (韩朱忠 – 达梦数据)

我觉得这个分享可能是今天最励志的分享了。整个分享讲的就是一个国产小厂商是如何奋斗和外资数据库斗争,一点点争取市场份额,成长到今天这个样子的。这里边讲到的一个关于他们对这个用C写的数据库的SQL优化能力进行提升的例子。 他们曾经遇到过一条SQL, 长达3.9K行,换句话说就是粘到word文档里能粘350多页。里边包含着17个inner join, 557个子查询, 831个or筛选, 1000+个查询字段,2731个case when。他们通过不断优化将这个SQL语句从几百分钟降到不到1秒。另外一个故事是讲国产数据库生存的艰辛。因为大企业及银行电信等核心产业的数据库都是采用外资的, 国产根本进不去。国产只能在中小企业市场去竞争。但是,这家数据库通过自身的不断努力,终于拿下国家电网的单子以及西藏和东方航空的单子。这在我看来是非常了不起的成就。这就让我对IBM产生了反思。我不觉得我们DB2能在不经过针对性的优化的情况下就能处理这么复杂的SQL语句。这个例子也让我觉得要么我们是在用我们的名声和过去的积累在赢得客户,要么就是DB2售前的同事在做POC的时候super tryhard。我明显感受到我们和这些国产数据库在努力程度上的差距。也许有一天我和他们的地位会呼唤?我相信这是IBM高层不愿意看到的事情。我们确实该努力了。

SSD的IO Determination特性在数据库业务优化中的应用与拓展 (阳学仕 – 宝存科技)

这个是从storage上出发来讲如何用软件模拟硬件来提升读写速度。换句话说,这个分享带给我的思考就是数据库怎样才能利用IO determination提升读写速度。这里讲的IO determination我粗浅理解看来就是让硬盘上的应用能更加和谐共处,并通过提升应用优先级,IO资源上下限,以及时间上对读写顺序进行优化等方式来使应用获得所需要的资源。另外SSD对于网络发展的匹配也有涉及:通过硬件的提升,我们现在基本可以做到本地写入和通过网络写入远程只有10几微秒的差距。这些在我看来是属于OS的领域。硬件对DB的加成这个方向让我感到耳目一新。

面向未来的数据库体系架构的思考 (张瑞 – 阿里巴巴)


  1. 国内厂商和IBM在对待数据库上有本质上的区别。国内厂商如阿里巴巴,腾讯,以及百度都是以自身业务痛点作为出发点对自家的数据库进行开发和改造。所以相应的,这些家的数据库改造,提升都是带有极强的针对性的。他们的数据库架构可能并不具备非常强的通用性。相反,IBM是把数据库作为产品来销售的,因此在数据库本身设计上考虑到的更多是面面俱到,大而全的尽可能满足所有用户类型的需求。这就导致在某些场景下,IBM的DB2做不到像AliSQL, OceanDB, TDB那样强劲。因此,在超大型公司做数据库,最终方向可能都是“私人订制”。
  2. 机器学习与系统结合的越来越紧密。这里演讲者提到他们想在未来把自动运维转换到智能运维上面来。SQL不再是DBA来手动看,而是通过ML的某种方式来进行优化。这些阿里的人还没有想好但是他们觉得这是未来的方向。


下午听的有”百度NewSQL数据库系统”, “Tencent MySQL内核优化解析”, “滴滴大数据应用”,“自然语言技术在文智趋势分析产品上的应用”。百度上最大收获是说现在分布式事物数据库非常的热,如果研究透,就没有在国内趟不过去的问题。另外一点收获就是不要过分崇拜Google系统。虽然细节我没有听的特别懂,但是从演讲者言语间我感受到,黑猫白猫抓到耗子就是好猫。有的时候不能太学究。而且系统之间即使是理念一模一样,但是由于implementation不同,也会导致巨大的性能差异。

腾讯的讲的非常Technical, 加上演讲者是技术出身,整个session非常的煎熬,感觉就是内核优化是个大坑,需要很扎实的DB知识。最后两场我选得是和机器学习相关的。不得不说没有达到我心中的理想。滴滴介绍的是他们一些数学模型应用的场景。我感觉演讲者应该是加入滴滴时间不长,并没有从一些模型上讲出个所以然来,反倒是应用场景上更让我感受到经济学家也是有用武之地的:比如说如何运用高峰涨价来调控司机和打车人之间的供求关系,以及如何收取取消订单等行为给平台所带来的损失。也许是民怨太重,整个滴滴分享感觉像是个新闻发布会。最后的自然语言技术应用是非常无聊的。演讲者是产品经理出身,主要介绍了下腾讯是如何针把NLP技术应用在新闻上的。非常泛泛,没有提及一些NLP上的技术难点,非常失望。

Day 2


  • Informix现在是和物联网IOT紧密的捆绑在了一起

在IBM我的邻居就是Informix Technical Support组。他们组的老大之前也分享过Informix在物联网领域的应用。这在我看来是为Informix这个昔日的巨人在找新的发力点以获得新生。这点也在今天题为“万物互联时代的数据库支撑平台–SinoDB”上获得了印证。SinoDB可以理解为Informix的fork因为这个公司从IBM这里获得了Informix的源代码的授权。不得不说的是IBM在这里变成了吐槽的对象,这些以Informix元老员工成立的公司认为IBM并没有善待Informix这个继子。他们认为是时候把自己的“孩子”重新领回来让他茁壮成长了。这也让我不得不思考当初IBM收购Informix到底是为了什么?问了问和我一同参会的同事,Informix的代码是否已经和DB2的有机的融合在一起现在还是个未知数。这也让我明白为什么在Oracle收购MySQL之后会出现这么多MySQL的fork:毕竟不是亲儿子。

  • 问题的多重性和domain knowledge的重要性

下午场我就是盯着机器学习专场在听。其中我觉得来自连家的“机器学习技术在房屋估价中的应用”的分享最为有意思。分享的内容其实从标题就可以猜出个八九不离十。这个分享一个重要的信息就是机器学习并不是以算法为核心的而是以建立在以domain knowledge为支撑的加工过的data的基础上的。对于链家的问题就是他们的数据量是十万级的,远不及一些图像处理或者文本处理的亿级别的数据。另外他们的数据是类别变量和连续变量混合,连续变量有数量级差异;以及不可避免的脏数据。这些都很大程度上决定了要基于domain knowledge的feature engineering和针对数据特点的算法确定。现在想想也就不难理解为什么从在本科上统计课到现在看的Prof. Andrew Ng’s ML课程,大家拿到数据的第一步都是plotting:就是为了能更好的结合自己的domain knowledge来观察数据特点及预处理。另外说一句就是,在我看来从昨天的滴滴大数据应用到今天这场链家的机器学习应用,他们本质上处理的问题都是属于经济学范畴。与经济学中计量经济所不同的是,机器学习的方法更加暴力:分析数据就是分析数据,而不是先要把问题归类到经济,然后按照经济的科班套路先建模再通过数据验证模型的套路来解决问题。我这里不想说也不够资格说哪个解决问题的方式方法更好。我想说的是一个问题放在不同角度来解决套路真的是完全不一样。站在不同位置上看待同一个问题也许能会擦出更加明亮的火花?

Day 3

最后一天就是全天的专场了。前两天听下来基本上对System, ML方向有了个粗略的sense。到了第三天我就把重点放在了其他一些领域比如说区块链。这里我觉得讲的比较好的就是“区块链与大数据技术结合的商业应用”这场。可以看出的是区块链作为一个新兴技术,由于账本本身是公开的,可以把 这个想象成一个巨大的只支持insert和select的数据库,那么对于这个数据库里的数据挖掘和针对这个数据库所能做的一些优化就成为了现在区块链届关注的重点。据介绍现在这个账本已经有3,400G这么大。我另外了解到,分布式账本这种技术应用场景还是非常广泛的。比如说红十字会接受捐赠就可以利用区块链技术使得所有捐款信息完全透明公开。说句题外话,现在任何一个项目都需要不同类型的人才。系统,AI都有自己施展拳脚的空间。







研究生选offer和本科选offer还是有些不一样的。我还依稀记得本科选校的时候,就是在wisconsin和illinois之间选。那个时候主要是看综排并辅以专业排名。2010年wisconsin还是可以排到US News 35位的。另外看了看wisconsin在自然科学,社会科学排名方面都是基本在北美前10左右。最后学费上wisconsin也是低于illinois不少。所以最后就选择去了wisconsin。现在来看选择wisconsin我是一点没有后悔的。因为在那里锻炼了我坚毅的品格。课业的压力和暗无天日的长冬对于任何一个人从心理到生理上都是非常大的挑战。后来,忘记在哪里看到了一种叫badger holds的说法,说wisconsin出来的人不管走到哪里都能hold住全场。我想此言还是有些道理的。

到了研究生选校就是另外一番策略了。一般来讲是专排高于综排。换句话讲就是在研究生阶段是专业排名要比综合排名更加重要的。但是,在计算机领域,有四大神校:MIT, Stanford, UC-Berkeley, 和CMU。这四所学校是基本可以做到综排和专排兼顾的。所以如果被这四所学校录取的话,基本上可以做到无脑选择去了。这里说的是基本上,说明也有例外。这里我会在后边说。下面谈谈我对择校的反思。

先说下结果。这次我录取的项目有: CMU-SV MS-SE, Brown MS-CS, NYU MS-CS, GaTech MS-CS, UT-Austin MS-CS, UCSD MS-CS, CornellTech MMeng-CS, Columbia MS-CS. 最后我选择了UT-Austin MS-CS。

Know your goals:  employment or research?

这里说的是上Master的目的:是直接毕业找工作还是想要为未来PhD做准备?这条在本质上决定了选择offer的大方向。很少有项目能做到两者兼顾的。首先说说直接毕业找工作。如果是为了直接毕业找工作的话,那么学校placement statistics, 地理位置就要在决定过程中占有相对大的比例。与之相应的research实力,课程设置,导师等就不是考虑的重中之重了。如果以这个标准来看,CMU-SV MS-SE,Brown MS-CS, GaTech MS-CS, UCSD MS-CS, Columbia MS-CS, NYU MS-CS, CornellTech MMeng-CS就是些非常不错的选择了。再来说说研究方向,这里我们要看的就是教授,研究方向了。这里我并不是要说鱼和熊掌不可兼得,我想说的是每个项目都有不同的侧重点。

Big Department or Small Department?

系的大小也是影响决定的一个重要因素。Brown是第一个给我offer的,同时也是让我心动了很长时间。原因就是以Brown为代表的这种小而精的系,每个教授可以给每个学生最大的attention, 系里的氛围像大家庭一样。换句话讲,人均资源相对于那些大系来说会多一些。但是任何事物都不是完美的。系小的缺点就在于课程设置不会那么丰富并且研究领域会出现侧重:不会每个领域都会有教授的。我再来说说系大的特点。系大基本上就是系小取反。你面对的可能是更加激烈的竞争,资源就这些,每个人要去try their best to fight for the resources. 这里没有人会去babysitting,所以学生会被要求更加独立。但是,这不就是现实社会么?

Do a campus visit if you can!

其实专业排名,系的大小,你的兴趣所在都只是生活的一部分。最重要的是你要选择一个自己感觉到舒服的地方。毕竟在接下来的一到两年里,你要在这里学习生活。这个时候Campus visit就显得非常重要。去实地感受一下这里是不是真的适合你。去一个不适合自己的地方是一件非常痛苦的事情。我之前去过NYC,知道在NYC学习是一件多么不容易的事情,所以我知道如果可能的话,我还是比较适合college town。另外,在wisconsin学习的经历告诉我,天气同样是不可忽视的因素。这些都是排名等数据无法明确告诉你的。再多说一句,但凡在外边读过书的人都会知道图书馆的重要性。Wisconsin在这方面做的是非常非常好的。为什么呢?因为整个学校有43个大大小小的图书馆。我上学的时候最新欢光顾的就是Memorial, Law, Music,Astronomy, Econ这几所图书馆。每个系的building都会有图书馆的存在。如果我想的话,我可以根据心情挑不同图书馆来学习。但是,比如说GaTech, 整个campus只有一座图书馆,这对于一个喜欢泡图书馆的人来说,是非常难过的。这些因素都会很大程度影响一个人两年时间的开心与否的。

Carefully research the program!

其实在申请的时候去非常详细研究一个program是非常困难的。为什么呢?因为你的时间有限,而且研究的非常详细的话(比如哪个老师不好好备课,哪个老师上课很难这种),如果最终没有录取的话,那么你的努力就会白费。所以,很多人都是从一些指标和项目的粗略描述上来决定是否申请。但是,在得到录取结果后,就不能如此草率了。当时在做决定的时候,我最终在GaTech和UT-Austin做选择。我的做法是把每个学校老师和我兴趣沾边的都去翻了一遍,并且把两所学校的课程,每门课的主页都去翻了一下。我发现GaTech因为online master的原因,相当部分的课是看视频上课,老师负责答疑的。比如说,Machine Learning for Trading 这门课。上过MOOC的人都应该知道,网络版的课难度是比不上实体课的。因为受众群体不一样。这样如果你是想锻炼自己研究能力,去训练读paper的能力的话,像GaTech可能就不太适合。

打算这篇博客其实想了很久,因为在4月15日前我真的是非常纠结。但是,所幸的是,我还是仔细的去比较了每个项目,去发现项目之间的nuance, 然后做出了非常艰难的取舍。本来在写之前感觉自己会滔滔不绝写出很多。但是等真正落下笔去写,会发现其实选校的依据并没有自己想象的那么多。总结一句话,就是知道自己想要什么是整个选校过程中最重要的依据。但是,话说回来,这条哪件事不适用呢?



First time ever working as a host

I’m not sure how system works in other parts of the world, but in China, we usually throw a company-wide “party” near the end of the year. By “party” I don’t mean that people got hammered and play silly. The “party” is sponsored by the company as a thank-you event for all the employees. During the “party”, we usually do multiple rounds of lucky draws for the prizes and we also produce some shows – dancing, solo, rap, and so on. That is what we called “年会” in Chinese. Even for international companies like IBM, there is no exception to this convention.

Probably due to the really early spring festival (in January), we put off our “party” until today (Feb. 18th). However, I have to say that the preparation of this event starts long time ago. The audition for the host is on Jan. 14th and I’m guessing the preparation for this event really starts near the end of 2016. The reason I want to participate this event this year is that I want to make full out of the IBM experience. Usually, I’m not a huge fan of participating a big crowded entertaining event as an audience. I want to be in it and try to learn or have unique fun from my participation if possible. In addition, I have joined Toastmasters club for more than a year now and I want to see if I can really make some progress on the public speaking. One day when I actually receive the email calling for host audition, I make no doubt and click the “signup” button.

Boy, I have to say that show business can be quite energy consuming. Unlike working as a programmer dealing with physical or virtual devices, the central task in show business is around people. You need to try really hard to get people like you and enjoy the whatever stuff (i.e. voice, words, sentences, gestures) you deliver. The first big checkpoint for me is to pass the audition. When I actually get agenda for the audition, I realize the competition is somewhat fiercer than I thought. There are around 15 people competing for the hosts – two boys and two girls. Someone even tells me that the returning hosts from the previous year are also in this game. The task for audition is to read part of the script from previous year while staring at the camera. This makes me super nervous because camera is really like a black hole: you never get the feedback from the stuff you send to it. I have to push all my energy out and make myself super hype for this job even though that’s really not who I am in the daily life. I raise my voice super loud and weave my over-dramatic gestures in between. I walk around the stage like some rap star and try to make myself the owner of the stage. At some point, I feel blackout. I don’t care what lines I’m reading and I just push my boundary to make the whole atmosphere super hot. On my way to home, my brain couldn’t function properly and I fall deep asleep in the cab. Luckily, after almost two weeks, I get the callback from the casting director.

The next huge part of the task is working on the lines and repeatedly rehearsal with the other three hosts. Just like those documentary or footage showing what actors do in set on TV, we need to sit around and go through the script line by line to make sure we are working as a cohesive group to make the actual event go as smoothly as possible. Also, another big reason for this grinding is to get to know your partner. What he is comfortable with and what he is not. Probably unlike actors, we have almost full control on what we can say on the stage. Usually, we sit together and come up with a draft and then we send them to the review and then we repeat the same cycle for another draft. By the time we on the stage, the draft number is 21. The hardest part for me is that you need to separate the role from the actual yourself. In other words, I have to repeatedly tell myself that what you play on the stage is really not who you are in your daily life. People will not judge you by any means. This can be super hard and I can sense that actors may need to repeatedly tell themselves about this point specifically when they are really into the part they are playing. In my situation, since my partner and I are really the rookie to the hosting, we are in charge of the pre-show warmup and the transitions between different programs. Director definitely do not want to leave the lucky draw part for us because in that part, you need to deal with many big bosses who will be the guest to actually draw the number on the stage. You cannot say their titles wrong, you cannot say their names wrong and there are no script for bosses, so you have to act smart to handle any unexpected incidents. In order to make the atmosphere warm before the show, the casting crew’s idea is to play games. One of the game is that the audience needs to make the facial expression based upon the host description and I’m the one who makes the demo, which is a trademark facial expression of a famous Chinese comedian “小岳岳”:


I have to say it is a big challenge for me because I don’t use weibo, which is the major repository for those GIFs and I’m not really into this meme style setting. But I somehow still make it and with some self-loathing mindset.

Rehearsal is really time consuming and frustrating. We do rehearsal yesterday from 1pm to 10pm and this morning from 9am to 12pm. The major part of time has nothing to do with hosting but with the program itself. The reason we stuck in there partly due to we need to work on the actual transition and keep refining lines. Some problems about the lines can hardly be observed by reading off the stage. For example, originally, my partner should make a gesture by putting her arms in parallel to make me look like I’m doing the facial expression in TV. However, we realize that this is impossible to do on the stage because she is holding a microphone on one of her hands and the distance between she and me is beyond her reach. Another example is from the other group. Since they are majorly in charge of the lucky draw part, there are lots of gadgets need to be put onto the stage. For instance, the box contains all the numbers that the guest should pick from. We don’t really consider there is a time chunk we need to say something to avoid the awkward silence while the staff try to put the box on to the stage. There are many examples like this when we do rehearsal and to my surprise, new problems happen no matter how many times we have rehearsed on the stage.

1:30pm today is when we need to actually get the job done. Without doubt, problems happen. My partner has really slim body and the address she choose is a little bigger. It takes almost 20 minutes for her to somewhat fix the address on her body and we are supposed to be on the stage to do pre-show warmup at 1:30pm. In the end, the warmup is cut into only one game and the order of lines are messed up. I don’t blame my partner because things always happen for a live show. This makes me realize there is really a lot of stuff need to practice and to learn as a professional host and experience for this profession is really really important. One thing in this scenario is that you need to be smart and keep your rhythms  on the stage even the procedure doesn’t meet with your expectation.

Overall this is really a unique experience for me and I actually learn something from it. The following is some notes I take when we have a training with a professor from Communication University of China. The session is conducted in Chinese and I don’t know the corresponding term in English. So bear with me:

  • 视线一般瞄准主机位。若紧张可以斜向上25度。
  • 视线一般要照顾到每位观众。以主机位为轴,左右45度形成的扇形为实现覆盖区域。
  • 视线一般要照顾全场,即左手区域,中间区域,右手区域,每个区域视线停留5秒左右
  • 上台四点一线:头,肩,臀,脚后跟。站直。不可以有小动作,乱晃
  • 男士那麦克风的手自然下垂。上台时也保持这样姿势即可。
  • 话筒离下嘴唇两只手距离,保证收音效果。

Lastly, let me post some photos from the event as a good memory for this incredible journey.

This slideshow requires JavaScript.