普林斯顿大学工程学教授David Billington说过:
“科学是要发现早已存在的事物,
而工程是要做出过去从未存在的事物”。
要成为一名优秀的工程师,透彻了解工程师文化是大前提。
而工程师文化,就是在这个组织内,形成一种以解决问题为核心展开的思考。树立价值取向、思维方式和共同认识。
工程师文化即在这种共识下开展编码活动的集体潜意识。
01 | 工匠精神
其实工程师文化有点像工匠精神。在工匠精神中不得不提到一个词叫:物勒工名。
所谓的“物勒工名”,指的是器物的制造者要把自己的名字刻在器物上,以方便管理者检验差评质量,核心是:“物勒工名,以考其诚,功有不当,必行其罪”。
对于我们软件技术工程师来说,我们所提交的每一个行代码都有一个提交记录,出现了bug 都能找到所对应的人。我们没有办法完全杜绝掉bug,因为我们只是普通人,人类从认知革命到农业革命再到后来的科学革命,我们走了很多弯路,但我们不断地在思考,我们不断地在钻研,我们不断地在寻找一种更好的方式去解决问题。
当我们解决了对应的问题,我们会进行一个总结,总结完之后,我们所得到的那就是经验。我们不断地提高自己的专业领域的知识,为的就是将产品打磨得更加完美。
一个人之所以能够成为“工匠”,就在于他对自己产品品质的追求,他不惜花费大量的时间和精力,钻研琢磨,反复改进产品。努力把产品的品质从99%,提升到99.9%、再提升到99.99%、99.999%、99.9999%……
这就是由工匠精神传承下来的工程师文化。
02 | 既要自由,也要效率
一个工程师如果精神不自由,就很难跳出老套的思维模式进行创新;而如果不对效率进行提升,那这个创新可能永远不会接地气。
精神上的自由具体表现在:
自我驱动。自己管理自己是最好的管理。最失败的管理就是家长和保姆式的管理,兴趣出发的工作才可能迸发出真正的动力。
灵活的工作时间和地点。工程师们更多的是脑力工作,而不是体力工作,工作上时间和地点的自由安排可以让工程师们的脑力工作更有效。Remote是一个很不错的工作方式,开源社区基本上都是这种方式。
信息平等。信息的平等,大的包括战略、方向、目标、财务,小的包括文档、代码、和知识的共享等。同样也表现在意见表达上,任何人都有可能表达自己的意见和建议的平等机会,这样才会激发出更多的思路和思辩,从而有不同的更好的思路出现。
不害怕错误。处理错误的正确的姿势是分析总结教训,而不是惩罚故障人。前者让人改善进步,后者让人萎缩不前。最大的错误就是不敢犯错,最大的问题就是不敢直面问题。
而工程效率具体表现在:
简化。简化不是简陋,简单的东西通常意味着用户更好理解,也意味着更容易的维护和运维。就像Amazon推行的Working Backwards里说的那样,一个新的产品或功能,产品经理需要写三个文档:媒体公关文、用户手册、常见问题,三个文档总共加起来不超过两页A4纸,且不准用任何图片说明,目的就是为了让产品简化和容易使用。
残酷无情地推行自动化。编写程序的最本质的目的就是自动化。自动化需要大力开发提高生产力的工具,比如:持续集成,持续部署,自动化运维,基础自动化运维,甚至自动化的运营工具。通过自动化把人类从繁琐又重复的工作中解放出来,也让机器发挥最大的价值。
加强抽象能力。抽象是简化的一部分,一方面,抽象意味着重用和通用,另一方面抽象意味着强大的扩展性,以适配各种可能性。比如Google的MapReduce/BigTable/ProtoBuffer,FaceBook的Thrift,以及全线AWS产品都用到的Amazon Lock Framework(一个分布式锁框架)都可以参考学习抽象能力。
开发高质量的产品。因为高质量的代码,不但可以容易地修改和维护,还可以因为少处理线上故障,从而有更多的时间去为未来做更多创造性的工作。保持严谨的Design Review,Code Review的习惯,都是工程师文化的一部分。
03 | 保持追求,保持创造
做工程师我觉得要能够坚持5个追求:
1、对代码的追求。大家要养成习惯,对某一个问题不太理解,先去看看代码。机器唯一能懂的只有代码,问题的真相都在代码里。
2、对数据的追求。一个优秀的工程师,发现数据有一点点异常的时候,就会去刨根问底。
3、对标准化的追求。当我们的工作逐渐熟练之后,就会发现很多内容都是大同小异,通过分层、沉淀、抽象,以合并同类项的方式,用越少的代码内容解决越多的问题,这就是中台能力。一个优秀的工程师,需要对抽象、标准化有很高的追求。
4、对极致的追求。比如一件事情可能需要花一小时来完成,优秀的工程师往往可以用分钟级、秒级、甚至毫秒级来对事情进行分解、衡量。
5、对开放的追求。也就是我们所理解的开源,因为只有一个开放的系统,才可能是一个有生命力的系统。
网友评论