Dawei: profilDawei's SpaceFotografieBlogSeznamy Nástroje Nápověda
10.1.2008

雨夜

又是驱车在雨夜
黑色的马路
昏暗的街灯
望着那看不见的地平线
 
二十岁时装出来的沧桑
如今变成了笑脸
还是一颗赤子之心
没有华丽的语言
 
一天又一天
一年又一年
理想看似渺茫
却从未泯灭
 
一年又一年
一天又一天
我在寻找着幸福
不是时间,不是金钱
我只要一双“美丽的”慧眼
31.12.2007

拥抱2008

2007年是个多灾多难的一年。先后遭遇10年不遇的大劫难一次、中小劫难数次。感叹自己并没有被打倒、一蹶不振,反而知耻后勇、愈战愈猛。首先自我表扬一下(鼓掌)。塞翁失马,焉知非福?古老智慧绝非阿Q精神。如若10年前高考我如愿所偿上了第一志愿核物理系,而不是稀里糊涂的学上了计算机,十有八九没有现在处境好。当时可是万念俱灰啊,回头想想老天给我安排了最好的选择。劫难亦或偏得许多年后才看得清。但至少这丰富的07人生经历,俺是先整到手了。挺好!
 
公司里的事情,07年突飞猛进。FaceBook和微软的第一个项目就是基于我来到微软后第一个独立设计的项目。虽然仍是Alpha版本,每日已经有过百万的请求。我和同事打赌,2年后新的服务器占有50%请求。为此我还赌了一美元(争取用人民币结算)。最感谢的还是我的老板。支持我从零开始设计新的架构,我把80%程序重写了一遍。很感激他这么地信任我,我自己也捏了一把汗。创造一个新世界,比改变旧世界要简单很多。08年,我们要对旧的服务器架构进行一次大手术,很可能我主刀。这关乎到Windows Live未来,这一点和老板达成共识,不忽悠。另外国内,要正式运作酝酿近1年半的“二次革命”。想一想6年前的一次革命,不成不怕,国父十次革命才推翻满清。就算不成,俺还有8次机会呢。
 
俗话说:否极泰来。我不奢求运气会变得多好,只要正常发挥对得起我实实在在的努力就满足了。在2007年最后一天,对着庄严的Windows Live Spaces誓师:有信心,有能力同时打胜两场战争,没有困难创造困难也要赢!
 
有人怕黑,实际上是害怕看不见的东西。我不怕黑,但坦白说,我会害怕看不见的未来……但是时间在嘀嗒,唯一能做的就是热情洋溢的拥抱2008!08年将是人生重要一步。成也罢,败也罢。
 
报告完毕,祝大家新年快乐!
22.12.2007

Identities, Contact and the Real Person Offline

“Miscommunication” Scenarios in Daily life

I want to start with some stories to illustrate miscommunication examples that happen in the real life. I am sorry that I have to mess up Bob and Jill’s life again. They are my favorite use case actor and actress since when I was in Pittsburgh.

Scenario 1: Bob is preparing a Xmas party. He is trying to call his old friend Jill’s cell phone +1(425)555-5555. However, Jill changed her cell phone a month ago. Then Bob tries Jill’s office number +1(425)666-6666. Since it is Friday 6PM, no one picks up the phone. Then Bob dials Jill’s home phone +1(425)777-7777, still no luck. So he just left a voice mail.

Scenario 2: Thanks to the new technology and the Internet! Bob is using Windows Live Events to create a party invitation to all his friends. He found Jill’s Gmail account jill@gmail.com and sent her the invitation as well. When Jill returned the call on Monday, Bob realized Jill is only checking Gmail account once a month. As Jill suggested, Bob sends invitation again to Jill’s Hotmail account: jill@hotmail.com

Scenario 3: The party went well. Bob took quite some photos of Jill and shared them on Windows Live SkyDrive with Jill by granting access permission to jill@hotmail.com. Jill just got a new Windows Live account jill@live.com and starts using it every day. However, she has to log back to jill@hotmail.com to view those photos.

Scenario 4: Jill is very upset after seeing the photos, as they are not as pretty as she had thought. She decided to block Bob’s from Windows Live Messenger for a while. Unfortunately, Bob found Jill was trying to block him because Jill has two Messenger accounts for Bob bob@msn.com and bob@hotmail.com, and she forgot to block both.

Have you seen some glitch here? What’s the root cause?

Identity-based Communication is Problematic

Before we continue, I want to clarify the definition of identity. I do not want to start a philosophical discussion. Rather I want to put it in a practical way, as long as you know what I am trying to say. It is good.

Identity is anything that we can use to distinctively identify an offline person. Identify can be: phones, emails, IM addresses, physical addresses. It can even be devices exclusively owned by the person. As long as we can uniquely identify the device, we can consider the device is an extension of the person.

The miscommunications scenarios given above are Identity-based communication pattern. It is problematic for two fundamental reasons:

1.       Identities change frequently. People change phone number, email address and move to different cities.  Communication channel will be broken as identity changes.

2.       Identities are swarming. You can easily enumerate 10+ identities that people can reach you. The more identities you have, and the more complicated the communication pattern will be.

Identity-based communication is legacy from old days for ages. Unfortunately, the legacy constraint is too strong for us to break through. Even for new technologies, we still build the systems in the identity-based way, which is exactly what Bob and Jill have experienced.

Fortunately, we realize the problem and making progresses to change the situation.

A Better Solution by Linking Identities

There are many good examples of improving identity-based solution by linking identities. Our life is getting better, even though sometime we do not realize what kind of problems those solutions are trying to resolve.

Example 1: Google Grand Central provides a unified phone number solution. For example, in scenario 1, Bob just dial one number, all Jill’s phones will ring until one of them is picked up. Therefore, Bob just need to remember one phone number, rather than three phone numbers to reach Jill. It is an example of linking phone identities.

Example 2: Windows Live Linked ID  provides a solution to easily switch between Windows Live IDs. Therefore, in scenario 2, Jill can switch from jill@live.com to jill@hotmail.com without login back and forth. It is an example of linking email identities.

Example 3: Windows Live Messenger provides a solution to unify Email and IM Address. People might be confused: “hey, what are you talking about?”  Yep, one simple fact that people do not realize is that: “Email is email, and IM is IM”. Email and IM are totally different communication channels. They happen to have the same address does not mean they are the same thing. For example, in China, QQ is IM, but it is not email. Another example, IM with @passport.com domain looks like email but there is no mail box associated with that domain. (Emails sent to @passport.com will be rejected.) The fact that many IM systems using email as IM address is a great example of linking between IM identity and Email identity.

Example 4: Many web sites provide functionality of “register my computer”. So, next time user does not have to manually login again. It is an example of linking the user’s device identity with the user’s account identity. You can also consider finger print reader as a similar example as well.

Example 5: There is another great example of linking email identity and phone identity. However, I do not think I can talk about it now.

Linking identities makes our life better. However it is still not the ultimate solution as it did not resolve those two fundamental problems of identity-based communication: identities are frequently changed and swarming.

Contact-based Communication – One Level Abstraction and the Ultimate Solution

Let’s think over about the first thing of software engineering – requirement elicitation. And let’s go back to scenarios between Bob and Jill, and figure out what are the real requirements.

Scenario 1: Bob is trying to reach Jill via phone. Bob does NOT care +1(425)555-5555 or +1(425)666-6666.

Scenario 2: Bob is sending Jill invitation via email. Bob does NOT care jill@gmail.com or jill@hotmail.com.

Scenario 3: Bob is sharing photo with Jill. Bob does NOT care jill@hotmail.com or jill@live.com.

Scenario 4: Jill is blocking Bob’s IM address. Jill does NOT care bob@hotmail.com or bob@msn.com.

We realize one thing: people are only caring about the real person, rather than his/her identities. When bringing the business online, what we really need is the one-to-one online abstraction of the offline person, rather than the person’s online identities. For the one-to-one online abstraction thing, we reuse and redefine the concept of contact.

Contact is the one-to-one online abstraction of the offline person. It is the collection of the person’s online identities.

After clarifying the definition of identities and contacts, the ultimate communication solution can be described in three phases. Please note: we consider any interactions between two people (requester and recipient) are within communication problem domain, which include email, phone, IM, mailing, and even permission granting and revoking etc.

1.       Communication endpoints (requesters and recipients) should be contacts rather than identities.

2.       Requester decides communication channel.

3.       Recipient decides the binding of his/her identities and communication channels.

For example, Bob decides sending invitation to Jill’s personal email. Jill decides which email address (jill@gmail.com or jill@hotmail.com) is used as her personal email.

Conclusion

When the offline people come online, they are shielding behind their identities. Over years, software systems are designed based on people’s online identities. Due to the fundamental weakness of identity, those systems are running into problem when trying to resolve communication problems.  Ultimately, we need to shift the design principle from identity-based to contact-based solution, which is one level up abstraction and one-to-one mapping of the real person offline.
1.11.2007

感受《在路上》

这次回去对我触动最大的就是这首《赢在中国》的主题曲《在路上》。每一句都深深触动着我。

  • 人生价值在于过程而非结果
  • 没有什么可以失去,因为我们本来就不真正拥有什么
  • 不要担心失败,虽不能轻易说男儿四海为家,但是有个理解并且能温暖你的人就够了
  • 困惑疲惫的时候,想想这是我们自己的选择,而后义无反顾
  • 可以失败,不可放弃。失败可以重来,放弃了也许会一生懊悔。

深深地祝福为了理想与抱负不懈努力的兄弟们!

 《在路上》

   那一天,我不得已上路
   为不安分的心
   为自尊的生存
   为自我的证明
   路上的心酸,已融进我的眼睛
   心灵的困境,已化作我的坚定
   在路上,用我心灵的呼声
   在路上,只为伴着我的人
   在路上,是我生命的远行
   在路上,只为温暖我的人
   温暖我的人…

18.10.2007

Dynamic Yunnan

Just came back from Yunnan, the most dynamic province in South China next to Vietnam. Trying to describe it with few sentences.
 
  • Slow pace: It seems that the flies are the fastest thing out there. 
  • Relax: I was too relax and forgot to remind myself of being relax.
  • Snow Mountain: It is raining season. I can only see a corner of the holy mountain for 5 minutes. But I love it, because it gave me an opportunity of using my imagination. Distance and blury preserve the beauty.
  • Ethnic minority groups: There are 52 ethnic minorities (out of 56 in total of China) in Yunnan.  They are as colorful and as pretty as the rainbows I saw.
  • Food: I love the food. (Maybe I was trained by Vietnam noodles back in Redmond).
  • Romance: Small town - Li Jiang, bars and clubs are famous for romantic stories. I cannot agree more. For those that still single, it can be a good destination. Anyway, I am with my parents, so do not ask me obvious questions. :)
30.9.2007

Too serious...

Being seriously complainted of being "too serious" for several times, by many people at many places, could be a serious problem. Working like being in the battle, behaving like a soldier. I realize I need a serious vacation. Do nothing but concentrate on being relax and focus on taking rest. And this time, I am very serious.

Will be in China for vacation from Oct 4th to Oct 21st.

16.9.2007

理解《仰望星空》

温家宝发表与人民日报,全文如下:
 
    我仰望星空,
    它是那样寥廓而深邃﹔
    那无穷的真理,
    让我苦苦地求索、追随。

    我仰望星空,
    它是那样庄严而圣洁﹔
    那凛然的正义,
    让我充满热爱、感到敬畏。

    我仰望星空,
    它是那样自由而宁静﹔
    那博大的胸怀,
    让我的心灵栖息、依偎。

    我仰望星空,
    它是那样壮丽而光辉﹔
    那永恒的炽热,
    让我心中燃起希望的烈焰、响起春雷。
 

 
大家见仁见智, 这是我的理解:
1. 暗示治国理念上一大本质转变, 从"战天斗地" 到 "敬畏天地" 追求 "天人合一". 马列主义比较崇尚暴力,和中国传统思想有些格格不入.此诗篇是个回归自我,正本清源的信号.
 
2. 中国社会面临最大挑战: 心灵空虚. 物质文明过速发展, 精神文明被摒弃. 整个社会, 急功近利, 心浮气躁, 短视, 缺乏理想与信仰. 暗示政府要重新加强精神文明建设的意愿。帮助整个社会从追求“发展”转变到追求“和谐”。
 
3. 最后一段看似有些蹊跷, 从 "波澜不惊" 到“暗流汹涌”. 是在显示一种决心去迎接挑战:民生?反腐?或是台海?
12.9.2007

文摘:寻找幸福

很少转贴文章,不过这篇非常值得一读。多多少少纠正一下曾经教育误区,
 
 
几则摘录:
……
我们来到这个世上,到底追求什么才是最重要的?
 
本-沙哈尔坚定地认为:幸福感是衡量人生的唯一标准,是所有目标的最终目标。
 
“人们衡量商业成就时,标准是钱。用钱去评估资产和债务、利润和亏损,所有与钱无关的都不会被考虑进去,金钱是最高的财富。但是我认为,人生与商业一样,也有盈利和亏损。 具体地说,在看待自己的生命时,可以把负面情绪当作支出,把正面情绪当作收入。当正面情绪多于负面情绪时,我们在幸福这一‘至高财富’上就盈利了。长期的抑郁,可以被看成是一种‘情感破产’。整个社会,也有可能面临这种问题,如果个体的问题不断增长,焦虑和压力的问题越来越多,社会就正在走向幸福的‘大萧条’。”
……
一项有关“幸福”的研究表明,人的幸福感主要取决3个因素:“遗传基因、与幸福有关的环境因素以及能够帮助我们获得幸福的行动。而积极心理学,可以帮助人们活得更快乐、更充实。幸福,是可以通过学习和练习获得的。”
……
“一个幸福的人,必须有一个明确的、可以带来快乐和意义的目标,然后努力地去追求。真正快乐的人,会在自己觉得有意义的生活方式里,享受它的点点滴滴。”
……
从汉堡里,总结出了4种人生模式:第一种汉堡,就是他最先抓起的那只,口味诱人,但却是标准的“垃圾食品”。吃它等于是享受眼前的快乐,但同时也埋下未来的痛苦。用它比喻人生,就是及时享乐,出卖未来幸福的人生,即“享乐主义型”;第二种汉堡,口味很差,里边全是蔬菜和有机食物,吃了可以使人日后更健康,但会吃得很痛苦。牺牲眼前的幸福,为的是追求未来的目标,他称之为“忙碌奔波型”;第三种汉堡,是最糟糕的,既不美味,吃了还会影响日后的健康。与此相似的人,对生活丧失了希望和追求,既不享受眼前的事物,也不对未来抱期许,是“虚无主义型”;会不会还有一种汉堡,又好吃,又健康呢?那就是第四种“幸福型”汉堡。一个幸福的人,是即能享受当下所做的事,又可以获得更美满的未来。
……
为什么当今社会有那么多“忙碌奔波型”的人呢?本-沙哈尔这样解释:因为人们常常被“幸福的假象”所蒙蔽。

我们所处的社会环境和文化背景是这样的:假如孩子成绩全优,家长就会给奖励;如果员工工作出色,老板就会发给奖金。人们习惯性地去关注下一个目标,而常常忽略了眼前的事情,最后,导致终生的盲目追求。

然而一旦目标达成后,人们常把放松的心情,解释为幸福。好像事情越难做,成功后的幸福感就越强。不可否认,这种解脱,让我们感到真实的快乐,但它绝不等同于“幸福”。它只是“幸福的假象”。

这就好比一个人头痛好了之后,他会为头不痛而高兴,这是由于这种喜悦,来自于痛苦的前因。“忙碌奔波型”的人,错误地认为成功就是幸福,坚信目标实现后的放松和解脱,就是幸福。因此,他们不停地从一个目标奔向另一个目标。
……
本-沙哈尔总结出这样3种工作境界:赚钱谋生、事业、使命感。
如果只把工作当成任务和赚钱的手段,就没有任何的个人实现。这样每天去上班,只是必须而不是想去,他所期盼的,除了薪水,就是节假日了;工作当事业的人,除了注重财富的积累外,还会关注事业的发展,如权力和声望等。他们会关心下一个升职的机会,期望从副教授到终身教授、从教师到校长、从职员到主管、从编辑到总编辑;假如,把工作当成使命,那工作本身就是目标了。薪水、职位固然重要,但他们工作,是因为他们想要做这份工作,动力源自内心。工作是一种恩典,而不是为人打工。他们对工作充满热情,在工作中自我实现,获得充实感。他们的目标,正是自我和谐的目标。
……
不同的人,会在不同的事里找到意义。如创业、当义工、抚养子女、行医、甚至是打家具。重要的是,选择目标时,必须确定它符合自己的价值观、爱好,符合自己内心的愿望,而不是为了满足社会标准,或是迎合他人的期待。“真我的呼唤”,就是使命感。
 
“在追求有意义而又快乐的目标时,我们不再是消磨光阴,而是在让时间,闪闪发光。”
……
为了更好地记住“幸福课”的要点,本-沙哈尔还为学生简化出10条小贴士:

1.遵从你内心的热情。选择对你有意义并且能让你快乐的课,不要只是为了轻松地拿一个A而选课,或选你朋友上的课,或是别人认为你应该上的课。

2.多和朋友们在一起。不要被日常工作缠身,亲密的人际关系,是你幸福感的信号,最有可能为你带来幸福。

3.学会失败。成功没有捷径,历史上有成就的人,总是敢于行动,也会经常失败。不要让对失败的恐惧,绊住你尝试新事物的脚步。

4.接受自己全然为人。失望、烦乱、悲伤是人性的一部分。接纳这些,并把它们当成自然之事,允许自己偶尔的失落和伤感。然后问问自己,能做些什么来让自己感觉好过一点。

5.简化生活。更多并不总代表更好,好事多了,也不一定有利。你选了太多的课吗?参加了太多的活动吗?应求精而不在多。

6.有规律地锻炼。体育运动是你生活中最重要的事情之一。每周只要3次,每次只要30分钟,就能大大改善你的身心健康。

7.睡眠。虽然有时“熬通宵”是不可避免的,但每天7到9小时的睡眠是一笔非常棒的投资。这样,在醒着的时候,你会更有效率、更有创造力,也会更开心。

8.慷慨。现在,你的钱包里可能没有太多钱,你也没有太多时间。但这并不意味着你无法助人。“给予”和“接受”是一件事的两个面。当我们帮助别人时,我们也在帮助自己;当我们帮助自己时,也是在间接地帮助他人。

9.勇敢。勇气并不是不恐惧,而是心怀恐惧,仍依然向前。

10.表达感激。生活中,不要把你的家人、朋友、健康、教育等这一切当成理所当然的。它们都是你回味无穷的礼物。记录他人的点滴恩惠,始终保持感恩之心。每天或至少每周一次,请你把它们记下来。
2.9.2007

重温古诗 与君共勉

饮酒
陶渊明 

结庐在人境,而无车马喧。

问君何能尔,心远地自偏。

采菊东篱下,悠然见南山。

山气日夕佳,飞鸟相与还。

此中有真意,欲辨已忘言。

12.8.2007

R.Ozzie: 'The platform of the internet really is the data'

It was from an interview with Ray Ozzie 2 years ago. I came cross this article while thinking about the question I have recently: What a good online service platform should be? The question may or may not be related to this interview, but the article itself is definitely worth a read.

http://acmqueue.com/modules.php?name=Content&pa=showpage&pid=349&page=1 

WENDY KELLOGG: Tim O’Reilly, founder of O’Reilly Media, coined the phrase “the architecture of participation,” meaning a lot of amateur and casual programmers piling on and building interesting things off the snippets of codes and applications that are out there. What are the open APIs and standards that a developer should keep track of in collaborative applications? Do you have any tips on how to craft an API amenable to this kind of open participation, to put things out there that can get picked up and reused?

RAY OZZIE: Dan Bricklin also has a great phrase, “cornucopia of the commons,” that refers to the same thing—about how the commons becomes more valuable than the different pieces that are contributed. I think it’s a very important concept and spans far beyond collaborative software. It’s really what is defining this next wave of the Internet.

I believe that the platform of the Internet really is the data, and by putting data out there that is re-mixable into different types of applications, we can get interesting, unanticipated results. The most fundamental standards around that start with XML, but it really revolves around what some people call microformats, small formats that are easily understood and generated by a broad variety of applications, such as iCal, hCal, and vCard, and then encapsulating them in RSS.

RSS is an extremely important standard. It’s the HTML of the next generation of the Web, or some people might refer to it as the Unix pipe of the Internet. It’s a way of channeling data from one application to another in very interesting and robust fashion. Again, I think it’s important as a technique far beyond just collaborative software." 

5.8.2007

Dialog With a Tree

“I own you, tree”
The wind blows the leaves. The tree is laughing.
“I was born 100 years ago, where were you?”
“I mean from now on, I own you.”
“I will be here another 100 years, where will you be then?”
“Well, now, right now, I own you!”
“What can you do, even so?”
“What can I do?” I am irritated, “I can cut you down, and use your trunk to build my house and burn your branches to warm up my place”.
The tree seems scared.
“Or I can take care of you, if...”
The tree interrupts me before I finish, “I am thankful to the sun, the breeze, the rain and the earth. But none of them ever claim the ownership, why do you think so?”
I do not know how to response.
“Oh boy, do you really own anything?”
The wind blows harder. The tree laughs louder.
“I do own my soul, so I can have this dialog with you.” I replied.
 
==============================
Inspired by the book "The Little Prince"
7.7.2007

A Good Example of Bad Design

Originally Posted at http://blogs.msdn.com/dawei

Two weeks ago, ProClub (a.k.a Microsoft gym) introduced a new lock system in the locker room, which requires inserting your member card before locking the cabinet. I left my member card inside the lock the first time I use it. I am a discipline person, left or forgot something rarely happen to me. I only left my work badge once, even that time I was still carrying the empty badge holder.

I blamed myself for being careless. The next day, I went to ProClub to get my card back. The front desk lady was so nice to me. She went to an A4 printer paper box fully stacked with member cards. She grabbed hand full cards with last name start with “G”. I felt less guilty since my last name is only 2 characters, which could be easier for her to help me find my card back. It is all because of my carelessness. I asked her how many member cards in that box? “Few hundred” she answered peacefully and said “thanks for your patient”. I roughly estimated: an A4 box can hold nearly 4 ~ 5 hundred cards; From another angle, a hand full of cards can be 50 to 70, which all have last name start with “G”! Assuming five thousand people visit ProClub every day, nearly 10% people left their cards in the lock for the single day, and it was already the second week after the new lock system was in place. If 10% people make the same mistake, it could no longer be called “user error”. I felt relieved and I know whom I should blame – the lock designer.

What’s the requirement? What is the problem the designer was trying to resolve? I asked the front desk lady, the old locks system work perfect for me and why we change them. The answer is to prevent single person from using multiple lockers. (I do not want to argue if it is a valid requirement. We assume it is valid.)

What’s the design problem? I’d say the lock does not provide a way to remind the user of leaving member card inside the lock. Or put in another way, the design does not provide necessary indication of the existence of member card in the lock.

How to solve the problem? Simply put, provide necessary feedback. There are two solutions in my mind. #1: make the front panel keep on flashing light as long as there is a card inside the lock. #2: after user unlocks the cabinet, the lock should keep on beeping until the owner removes the card from the lock.

How to prevent this happen to me? I will program my life to prevent this happen to me again. Did I just say “program my life”? Yep, I am damn good software engineer. I will wrap my sock around the visible part of my card after inserting it to the lock. When I dress, it will remind me of removing my member card from the stupid lock.

1.7.2007

人生观与价值观

本打算周日下午写一篇关于同步算法的文档,总结几个月来的研究成果。但是最近发生的一件事情,却让我心情久久不能平静。触发我写了这篇文章。
 
事情是这样的,有个美国华裔朋友决定辞职到中国义务任教一年,上周五是她在公司的最后一天。看了她的信后,除了惊讶后,还有理解与感动。她是一个基督信徒,二十几岁,风华正茂,意识到世界上不是所有的人都能受到平等的教育,为了自己的理想与信仰,放弃微软优厚的待遇,放弃美国舒适的生活,不远万里,来到中国。这是什么样的精神?这是毫不利己,专门利人的精神!(这段话有点耳熟)个人觉得,也许这件事情会让很多人汗颜。我们常常讨论车子,房子,法国大餐,阳光海岸度假等等。除了关心自身的利益之外,是否真的为社会,为心爱的祖国贡献了什么?(我是真想,只不过我在等我的美国绿卡啊,唉不说了……)上我BLOG的都是我的朋友,没有意思让大家感到尴尬,各有各的难处。我只想分享以下我的心情,同时在伟大的党的生日这天,发一句牢骚:我接触的上帝培养的人,比党员“实在”多了!(注:“实在”在东北话是形容词,不是副词)
 
述归正传,今天讨论的是人生观与价值观。前一半太复杂,我也没搞明白,暂且不谈。就谈一谈价值观吧。价值观嘛,说白了,不整“洋”的,就是对价值的看法。譬如说我那朋友,在美国一年十万美金没问题。医疗保险,健身补助等等暂且不记。在中国一年一分不挣还有可能倒贴。在美国就算扣除生活费和个人所得税,里外里五万美金没了,还不包括一年事业上的机遇成本。从钱的价值观角度看,赔大了!但是如果从理想与信念的角度上考虑,便不难理解。
 
别人的理想与信念,我不好揣测。这里讲一讲我的亲身体会。加州的时候我曾经接触过一个民间非营利组织,是海外留学生资助贫困地区学生的活动。一个小学生一年的学习生活费用,也许只是美国中档餐馆两个人的一顿饭钱。看着可怜巴巴孩子的照片,我的仁爱之心为之一动,资助了10个三到四年级的孩子。(这个年龄段辍学率比较高,可以参考山西煤窑童工的年龄)。我承认也许这只是妇人之仁。但是回到对价值的讨论,一顿美餐24小时灰飞烟灭(闹肚子除外),但这笔钱却可以改变一个孩子一生的命运。俺是有经济头脑的软件工程师,这笔买卖一个字:值!每当我嚼着$2.99 Subway Daily special的时候,心里这个美啊~
 
我想很坦诚的说一句,选择美餐或是资助他人,完全在于个人选择。完全没有高尚与自私之区别。每个人的人生观与价值观不同。最重要的是对别人的选择表示理解与包容。我只想建议尝试一下不同价值观的体验。譬如说,拿出努力工作一天的薪水,无偿奉献给最需要这笔钱的人。我不敢保证以后你会不会后悔,但是有一点我可以确信:你会从全新的角度理解金钱的价值,感悟人生的意义。
 
Trust me! 
26.11.2006

Accuracy of Design

How many times we realize that the software was implemented in the way very different from the original design? It is an overused example to describe the problem we are facing every day. Software engineers hate to write design document, and it will change during implementation anyway. That’s the reason I never call design doc review until I have implemented certain amount of the code and have the confidence about the design accuracy. In addtion, sometimes design docs are more about recapping what we have done rather than the guideline for implementation. I do not think it is because some software engineers are incapable to design accurately, but why?

Let’s give a real life example, say you are planning the trip to the following address
 
   One Microsoft Way
    Redmond, WA 98052
    U.S.A.

I am pretty sure you will do a good and accurate trip plan by using tools like http://local.live.com. What if I give you the following address (my home address in China)?
   
Bi Tao Bei Yuan
   
Zhong Shan District,
   
Dalian, Liaoning 116001
   
P.R.China

Even you might have excellent trip plan, you will not very confident by issues like, foreign language, life insurance, car rental, hotel, food, medical emergency etc. It is exactly the same problem we are facing in software design - there are many vital  Most of projects we are working on today are like trips to foreign countries, which we have never been to. There are uncertainties along the way and some unknown issues will not pop up until you actually get there. How to deal with those hidden issues and make your design more accurate? There are couples of lessons I have learned over years and want to share them with you. You are welcomed to add more. 

First of all, identify the scope. Believe or not, many projects do not have a clear scope until they are called code completed. Put in another way, the scope of software are determined by development timeline. It is not anyone’s fault. It is just nature of software development – unpredictability. I am not saying that we should clearly define the scope before design, which is not practical. However, I strongly believe we should have clearly defined and prioritized items in a pipeline, which will go into scope. An analogy: we do not have to eat everything in the plate, but we need to know what are left over there. By having the big picture in mind, we can avoid changing software design dramatically whenever we adjust the project scope.

Secondly, identify the problematic items in the scope. Those items are unfamiliar to us and will cause uncertainties to the project. We do not want to get into a situation that, when the project is 80% complete and find out that a critical component is technically not feasible. Another good example is about uncertainties from non-functional related requirement. Say, we design online gaming software over some platform, later we realized that the platform cannot provide the real time messaging channel required by your gaming software. What a nightmare if we have almost completed most of our code on top of this platform?

The third, eliminate the uncertainties by concept proof prototyping. This is the skill I learned back in CMU. Uncertainties or hidden issues in software development can cause dramatic architecture change or fail your project right away. To ensure we are heading the right direction, we need to do some experiments. They can be very small and even throw-away projects, however it should cover the real concern we have in mind.

Actually, all three steps above should be done before the design is started!

There was a myth I heard back in college when I was 20. They said, “Software development is a job like being a model, it might not be a good option for you after 35.” I had believed this for many years. Until more and more stories I learned, I realize one thing: compared to other jobs, software development values experience more, as the fact it is way more complicate.

19.10.2006

夜归

车泊树下
雨飘满天
夜已过半
几人未眠
 
莫是伊人
端坐窗边
雨声淅淅
烛影切切
 
右手执笔
左手拂面
笔舞翩翩
面流笑颜
 
丽人丽人
莫我肯念
回眸一笑
断肠十年
22.9.2006

黎明 (1995年4月23日)

在天色破晓之前,我爬上高耸矗立的山巅,仰望远处无边的大海,深蓝的天幕,和那璀璨的星辰。
 
白日里如此喧嚣的城市,平静的躺在我的脚下。她从睡梦中醒来,张开惺忪的双眼看着我。忽明忽灭的街灯依稀地点亮在城市的角落。这些灯光如此柔弱,却又如此执著。它们孤独而又坚强地送别停留许久的夜,却依然从那疲倦的眼眸中流露着笑容。它们在企盼着晨光的撒落。
 
山顶偶尔有一两片浮云流过。这浮云的气息清凉湿润,凝结着大海的呼吸。而海,似乎比谁起的都要早。她怕惊扰人们的好梦,只是轻轻地送着一只只满载的船舶。船儿在母亲的怀抱中,撒娇似的吟着,吞吐的烟雾,向自己的彼岸驶去,渐渐消失在海天相交的曲线中……
 
又是一个黎明的时候。我沉醉在这一切的美丽之中,第一次感到时间流逝如此之快。就像这眼前的景色,转瞬便会消失,从此无法寻觅。
 
青春亦是如此,美丽而短暂!
 
我独自伫立山巅,双手合在胸前。就让我的灵魂去宇宙飘游吧!我要去感受它的心跳,去向时间祈求永远。
 
=================================================
PS: 今夜偶尔翻开17岁写的日记。深深被这篇积极向上的文章所感动。
20.9.2006

上帝在追討人們犯下的罪
我們無法逃避
不死的良心逼我們去懺悔
曾經的夢想讓我們感到卑微
 
親愛的,告訴我
怎樣才能幫你洗刷你的罪?
我有熱血、我有汗水,還有一滴眼淚
 
親愛的,告訴我
怎樣才能幫你洗刷你的罪?
我什麽都願意給
 
愛過、錯過
錯過、愛過
今生無悔
9.9.2006

Rain

Rain
Like spirits in the dark
Following me wherever I go
I have no place to hide
 
Rain
Like the wavering streetlight
Flowing through the windows
Dancing by my side
 
Rain
Like the stars in the sky
Though I can not see their faces
They are singing with blinking eyes
 
Rain
Makes this moment so quiet
So I can see through myself
And enjoy this peaceful night
 
=================================================
What will happen if all the programmers start writing poems instead of code?
Hahahaha...