优秀工程师应该遵循的五项原则

Posted on Thu 11 April 2013 in 转载

原文作者/李航

工程师思维与科学家思维的不同

基础研究与产品开发两者既有密切联系,性质上又迥然不同。前者在于发现或发明普适性的理论与方法,后者在于开发实用性的系统与工具。可以说,前者需要的思维方式、基本技能与素质是科学家的,而后者是工程师的。 我经常提醒自己,一定要明确在具体项目中自己到底带着什么“帽子”在工作,是科学家,还是工程师?

优秀工程师应该遵循的五项原则

从本质上解决问题

西方有句谚语:“当手中拿着榔头的时候,你会觉得看到的东西都像是钉子”。根据自己的喜好、特长、习惯来解决问题是工程师的大忌。做工程时最重要的是要面对问题、解决问题。可取的策略应该是探明问题的本质,弄清问题的机理,用最直接、最有效的办法解决问题。经验告诉我们,拐弯抹角地解决问题,效果总是不好的。做工程时并不一定需要理论。只要能够有效地解决问题,其实什么方法都行。“不管白猫黑猫,捉住老鼠就是好猫”在这里也是适用的。当然有理论指导的方法 往往更能抓住问题的本质,以其为工具常常能把问题解决得更好。

遇到问题时我们需要去寻找根源,发现问题的本质。 但怎样才能发现问题的本质?我能想到的方法就是多问多想多做: 问当事人问专家,了解问题现象、来龙去脉、历史经验 大胆假设 动手验证假设 系统地解决问题

动画片《没头脑与不高兴》描写了两位少年:“没头脑”与“不高兴”。“没头脑”做起事来总是丢三落四,“不高兴”待人处事总爱别别扭扭。不久,“没头脑”当上了工程师,“不高兴”当上了演员。“没头脑”设计了一座一百九十九层高的少年宫,楼建好以后,才发现忘记了设计电梯。孩子们为了在这个大楼顶层的剧院看戏,需要带着铺盖、干粮爬一个月的楼梯,害人不浅。其实,我们在日常生活中也能看到不少“没头脑”的作品。工程师需要构建的一定是一个系统。系统一定需要全面、整体、有机的设计,不能有缺陷与差错。切忌成为“没头脑”的工程师。

培养系统思考的能力,考虑问题要尽量全面、然后归纳总结,其实是一个细致活儿,要沉下心才能做到。

站在用户角度看问题

苹果公司的产品,如iPad,用户界面非常简单、直观与易用。据说两岁的儿童也能无师自通,自如地使用iPad。理由很简单,苹果的产品都是为用户着想,站 在用户的角度上设计的。正是因为如此,苹果的产品能够得到广大用户的喜爱和追捧。道理虽然简单,但我们会发现,许多工程师在开发系统时常常做不到这一点, 所以做出的东西,根本不好用。

我曾经同时带过几个开发团队,每个团队负责不同的产品,面对不同的需求方。各个团队的技术能力近似,但用户反馈却差异不小。我仔细观察了反馈最好的团队,这个团队的组长就特别善于从需求方的角度考虑问题,能够通过与其沟通掌握他们的本质要求,用最小的代价来满足需求方的真正要求。

以最小的代价获得最大的效益

汽车大王福特曾说:“对实业家来说,一条重要法则就是尽可能地以最低的代价生产出最高质量的产品,给工人发出最高的工资。”福特公司1908年出的 Model T汽车价格是825美元,当时没有多少人能够买得起,到1924年Model T价格降到290美元,成为一款大众车,在美国每两台售出的汽车中就有一台是Model T。

我在微软参与了Office 2007、Office 2010、Office 2012中SharePoint的开发,具体从事元数据抽取与企业搜索功能的开发。我所在的研究团队开发了文件元数据自动抽取工具,有两种方法实 现:CRF与SVM。CRF的精度比SVM高1个百分点,但就抽取部分的代码量而言,CRF是SVM的若干倍。找SharePoint的架构师 Meyerzon商量,到底采用哪种方法好?Meyerzon毫不犹豫地答道:当然选SVM,因为它的精度只低1个百分点,但所需开发维护的代码量却少得多。对产品来说,开发的代价是不能不考虑的因素。

无论是从产品运营还是架构角度,成本、性能、可靠性这几个指标都要综合考虑。

磨在细处

对工程师而言,上帝就存在于细处!只有精雕细琢、潜心造作,才能做好工程项目。好的系统与工具是靠一点一滴打磨出来的。工程师必须在实际工作中不断磨练自己的技能,以达到手艺精湛、技术娴熟的境地,能够像庖丁一样游刃有余地解牛,像卖油翁一样点滴不溅地倒油。

我编码也就是普通程序员水平,但共事过的同事都说我的代码写得很好:条理清晰,结构合理,内容精炼。这是因为我花了很多功夫写代码。对项目的结构、文件的命名都反复斟酌,函数、变量的命名都细心推敲,对系统的执行效率都不断优化。写好了程序,过一段时间又拿出来检查、评价、修改,直至不能找出毛病为止。

从实际工作做起

以上这些原则都很简单,但真正做好却并不容易,可谓“知之非难,行之惟艰”。重要的是在实际工作中努力依照这些原则去做,养成成为优秀工程师的习惯。培养自己直接解决问题,系统地解决问题,从用户的角度解决问题,考虑效益与代价解决问题的能力。不断提高自己的专业技能,在工作中努力做好细节。你一定知道一些优秀的工程师,他们甚至就在身边,可以把他们作为榜样,虚心向他们请教,学习他们的长处,不断提高自己作为工程师的素质和能力。另外,敢于尝试,不怕失 败,在失败中及时吸取教训,总结经验也是非常重要的。

关于作者

华为诺亚方舟实验室首席科学家。曾任职于日本NEC、微软亚洲研究院。研究方向包括信息检索、自然语言处理、统计机器学习及数据挖掘等。