CS巴别塔(1)

这是你应该做的

Posted in Uncategorized by Kenny Yuan on 2009/12/04

——“阿姨!你的钱包掉了!”
——“谢谢你!小朋友!你真是一个心灵高尚的人!”
——“不用谢!这是我应该做的,我的名字叫少先队员……”(伴随着一串银铃般地笑声,小朋友消失在风里,没有留下姓名……)

嗯,我承认这是恶搞了一把那个年代的小学生作文——韩寒出现之前的那种小学生作文。这种作文中有一个隐含的前提:“拾金不昧、做好事不留姓名”这种事情,在那个时代的背景下,会被判断为“这是我应该做的”。


那么,在换了一个时代背景之后,什么才是“你应该做的”呢?或者我们换一个容易观察的角度——在一个特定的职业中(医生/教师/学者/警察/记者/公仆/开发商/律师/法官/摔倒的老太/etc),什么才是“你应该做的”呢?怎样算是平庸?怎样算是正常?怎样算是杰出和优秀?做到什么程度才算是完成了本职工作,才算是完成了“你应该做的”事情?

——既然我这个BLOG是和“码农”这个职业息息相关的,那现在我们就假设你是一个码农:

你精通各种算法,宰杀了无数遍“猪”与“鸡”(珠与玑),对RBTree/BSPTree/SuffixTree/HashTree的原理和应用张口就来;你会估计和比较各种算法的O/Θ/Ω/OO;你知道如何深入浅出地讲解算法,知道如何编程实现和实测的表现,你还能够在实际工作中选用正确的算法……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你精通不少语言,也精通一些很“难”的语言中的很“讨厌”的特性,比如C++中的重载决议/偏模板特化/名字空间/多继承/etc,你还能够紧追语言的“最新发展”,对GC/closure/multimethod/Continuation/AMB这些“新发明”的东西了如指掌(嗯,好吧,其实这些不是新的,只是从LISP那里借鉴了一下下)……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你懂得多数流行平台的开发,掌握多数开发包的API;你能够使用各种辅助工具进行综合、高效地调试;在解决问题时你有丰富的经验和清醒的头脑,以及实证至上的谨慎;你对开发/profiling/testing有良好的理解和实践,模式/重构/TDD/etc对你来说是合手的工具而不是限制你的牢笼……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你了解不同用户的兴趣在哪里、对软件错误的容忍度有多高,你知道不同设备上的用户习惯于如何操作,你知道用户愿意在哪个功能上掏钱,你懂得如何借鉴和超越竞争对手的产品,你能够跟上当前用户对功能的期望(甚至预见到未来的)……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你了解可用性的意义、懂得色彩学,能够设计出有条理、不凌乱的界面,能够发明用户喜爱的操控方式,能够设计贴心、聪明的功能,还能够用PS/AI/Painter制作素材,并且用程序实现你的设计……那么,你觉得自己很优秀,还是说“这是你应该做的”?(另,引用:“说一个软件具有‘可用性’,能算是一种赞美吗?只是合格罢了!”)

你精通计算机原理结构,知道各种外设的IO速度,对它们访问方式有精晰的理解,会写device driver,而且你还知道典型外设产品的可靠性在什么样的数量级上……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你设计过不同规模的系统,知道在什么样的级别下应该使用什么样的技术;你知道性能热点通常在哪里,也精通于查找和解决热点;你知道如何平衡功能、时间和质量,知道如何在特定情况下取舍;你知道流行的架构的优缺点,你知道哪种硬件能够构成什么样的系统、当机时间控制在什么样的级别上;你知道如何安排指标去区分高低端产品,知道在给定的预算/成本下能够提供什么样的产品,你还知道如何对系统进行cost down却不会损失可靠性……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你熟悉各种软件开发模式;你有丰富的知识积累,却又不守旧、勇于接受新鲜事物;你非常善于开会,能够在很短的时间内取消语言表面上的分歧让大家达成一致……那么,你觉得自己很优秀,还是说“这是你应该做的”?

你勤劳肯做,工作中不偷奸耍滑,很有大局观而且也重视细节问题;你性格温和,乐于助人,团队成员都说你是一个非常好相处的人,连没见过面的同事也对你赞不绝口……那么,你觉得自己很优秀,还是说“这是你应该做的”?

……

造句练习:你能够……能够……还能够……即使在XX的时候也能够YY……那么,你觉得自己很优秀,还是说“这是你应该做的”?

……

如果你做到了以上若干条(注),那么在我看来,你成功地完成了你自己的本职工作,完成了自己做为一个工程师(而不是科学家)的“应该做的事情”——也许你比身边人的平均水平要高出一截,也许你超过了整个业界的平均水平,但那是不是就意味着“优秀”呢?如果那仅仅是你“应该做到的”呢?

最后,你做为一名人类,能够进行独立的思考,在清晰逻辑和丰富知识的基础上拥有批判性的思维,你懂经济、懂民主;你不愤青、不脑残、不意淫、不从众;你不受洗脑和煽动的影响、不信武术和中医……那么,你觉得自己很优秀,还是说“这是你应该做的”?

……

在你的眼里,什么才是“你应该做的”?

……

延伸阅读
(下面的每一个链接都能对应到上面文章里的某句话,用来例证,而不是证明)
Teach Yourself Programming in Ten Years, by Peter Norvig http://norvig.com/21-days.html
The Pragmatic Programmer 注重实效的程序员, 中文摘录版 http://qiri007.spaces.live.com/blog/cns!99F80D7BAD95F281!8913.entry
Algorithm Repository, by Steven Skiena http://www.cs.sunysb.edu/~algorith/
快排为什么那样快, by Pongba http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quick/
Beating The Averages, by Paul Graham http://www.paulgraham.com/avg.html
http://www.xys.org/xys/ebooks/others/science/dajia10/zhongyi2621.txt
97 Things Every Software Architect Should Know, http://97-things.near-time.net/wiki/97-things-every-software-architect-should-know-the-book
Anti Pattern, KornerHill译自Wiki http://blog.csdn.net/KornerHill/archive/2008/05/03/2373577.aspx
常见逻辑谬误(转) http://groups.google.com/group/pongba/browse_thread/thread/2cfa868f6a098d6b/7e300428d0bd8866
Java语言学校的危险性, by Joel Spolsky, 阮一峰(译) http://www.ruanyifeng.com/blog/2008/12/the_perils_of_javaschools.html
What Every Programmer Should Know About Memory, by Ulrich Drepper
Proebsting’s Law, by Todd Proebsting; Moore’s Law, by Gordon Moore

注:上面列举了许多的条目,但是这些条目涉及了很多领域,所以并不要求一个人同时具备这些能力。

(完)

Tagged with: ,