这三个阶段你需要重点关注的是,第一,养成良好的工作习惯,笫二,培养自己的执行能力一一说白了就是脚踏实地,做好工作中一点一滴的事情。不要小看这两点,因为只有养成好的工作习惯,并且能够保质保量完成任务,一位软件工程师的单兵责养才算基本建立起来。越是复杂的系统 工程,对单兵素养的要求就越高,软件工程师这一行尤其如此。
差异 :即使没有规范也得自我要求
什么叫优质代码?在我看来,所谓优质分为三个等级:可读 中级: 扩展 高级:可重用
请记住,好的代码没有止境,如果不追求好的代码,你就只是一个“代码操作员”。
不是写的人己的代码整洁 算整洁, 而是读的人觉得整洁才算整洁。
整洁代码的核心在千,你心里要装着将来要阅读这段代码的人,从方便阅读的角度去布局、设计。
用一种方式解决多种问题,是避免重复原则的精髓,所以写代码写到高级阶段,其实是做数学建模。
于这个原则,我自已发明了一句话叫“没有依赖就没有伤害”一你不依赖千我,你崩溃了和我没关系;你依赖于我,你崩溃了牵连着我也出问题。在软件工程师的世界里,我们是不喜欢依赖的,我们喜欢脱钩,喜欢低耦合
我想说的是,做测试需要你正着想、反着想、侧面想,脑补各种可能性 这种批判性思考、逻辑思考 、系统思考,以及举一反三的思考能力很容易被忽略,但只要注意训练,你会有这个能力的
很多人强调工作中上级的指引,期待有一位技术很牛还愿意带人的上级,能够手把手地教自己 这固然是好的,但在我看来,和厉害的同事在一起工作,对一个人的成长帮助更大
所以我给新人的建议是,要想方设法和公司里非常优秀的同 事一起工作,长此以往,别人身上解决问题的方法和能力, 潜移默化地成为你的 部分 和他们在 起,你基不会掉队,还有可能慢慢变成第一梯队里的人
第一,互为磨刀石 在日常工作中,我写好代码会请他帮我 review ,他写了代码我也帮他 review, 我们就这样长期互相挑毛病,毫不避讳地指出对方代码里可能存在的问题这个过程中,相互信任非常重要,因为软件工程师大多容易沉浸在自己的问题里,又不太善于做高情商的表达,一遇到沟通问题,尤其是给代码挑毛病这种事,一句话说不好就容易引发误会 有了相互信任的伙伴,你就不再需要花费时间和精力去想这句话该怎么说,那封邮件怎么写之类的问题,你们之间无需猜疑、有话直说,就算你无意间说了不太客气的话,对方也能理解并接受,不会放在心上。
第二,互为回音壁 我在谷歌做的是偏研究型的工作,当时我在做 Zanzibar 这个项目时,很多时候解决 个问题有好几个方案,想到很多种可能,但我不确定选哪个,这时我找我的搭档 Ruoming Pang 讨论,把我的想法讲 遍,和起商量 他不见得会给我 个确定的答案,但讨论的过程能帮我理清思路,可能我自己说着说着就知道该怎 办了。我们在做工程的时候,特别需要有个这样的搭档 像回音壁样给你反馈、帮你梳理
如果说新手阶段的工作重点是执行任务—一上级告诉你任务是什么、要完成什么目标、一步一步怎么做,你按计划完成就好;那么到了进阶阶段的重点就是你要独立完成一个工作模块、独立设计程序,别人不会告诉你步骤,你需要自己找方法解决问题。这个阶段的关键能力叫作设计能力——-你要学会分析需求,弄清楚模糊不清的问题;你要学会做技术调研,找到最佳解决方案;你要学会对问题进行抽象和拆解,你要学会搭建原型、设计架构 ..进入进阶通道,你在工作上不再止于做执行,而是要更多地发挥创造性,独立设计和优化;在团队里不再止于埋头完成自己的事情,而是要做好一个项目从头至尾的把控,协调内外部的合作关系;在学习上不再止于跟别人学、碎片式地学,而是向内精进,搭建起自己的知识体系。如果你做好了这些,你的工作能力就能实现质的转变。
程序前需要先进行需求分析,这也是软件工程师和产品经理进行充分沟通的环节。在这个过程 中,最重要的确定那些模糊的东西。要知道,在代码的世界里, 就是 1'0, 非黑即白 ,没有灰色地带一—只有把需求定义得清清楚楚、于干净净,你才能写出代码来。要想明确模糊不清的问题,有两个方法可以用。
第一,明确问题的边界条件
第二,关注不可预期案例
写文章时 我给你一个命题,你来构思文章结构怎么搭,分几个段落,每个段落表达什么主题,它们之间如何承接设计程序也一样 。一个需求来了,你要考虑怎么把它用程序实现出来,一个程序分成几个不同的模块,每个模块干什么,它们之间怎样协同配合。
从众多的实例 案例中归纳总结出通用的方法和规则,是抽象的核心思想
那具体要怎么抽象呢?简单来说就是 个概念或种现象包含的信息进行过滤,移除不相关的信息,只保留与某种最终目的相关的信息