程序员
【转载】我在 20 年的软件工程师生涯中学到的事情
(1)优秀的软件工程师不仅编写代码,还会考虑谁将使用它、为什么使用它、如何使用它。牢记用户需求才能创造良好的用户体验。
(2)水平再高的程序员,也会在自己擅长的领域犯错,如果遇到复杂的问题,就更是如此了。始终牢记,最好的代码是没有代码,或者不需要维护的代码。
(3)任何软件工程师的主要工作都是交付价值。软件只是达到目的的手段。
(4)警惕那些很长时间没有编写任何代码、却在设计系统的人。
(5)Bjarne Stroustrup 有一句名言:"只有两种计算机语言:人们抱怨的语言和没人使用的语言"。大型系统也是如此,每个系统最终都很糟糕。
因此,不要太在意代码的优雅和完美,而要持续改进,创建一个可用的系统,让开发者喜欢在其中工作并可以提供价值。
(6)10倍程序员是一个愚蠢的神话。我只见过程序员将代码规模增加了10倍,最终结果是你必须修复10倍的bug。
真正要做的不是找到神话中的10倍程序员,而是要避免出现0.1倍程序员。那些浪费时间、不寻求反馈、不测试代码、不考虑边缘情况等的程序员,必须保证让这样的人远离我们的团队。
(7)人们说他们想要创新,但实际上,他们想要通常的只是某种新颖性和业务成功。如果你的创新改变了人们做事的方式,大多数情况下会得到负面反馈。如果你相信你正在做的事情,并知道它真的会改善事情,那么就准备好迎接一场持久战吧。
(8)数据是系统中最重要的部分。数据可能会比你的代码寿命更长,保持数据的有序和清洁,避免脏数据,从长远来看,会得到很好的回报。
(9)一直存在的旧技术不是恐龙,而是鲨鱼。它们很好地解决了问题,所以一直活到了现在,没有被快速变化的技术浪潮淘汰。
不要轻易押注新技术,只有在充分理由的情况下才替换正在发挥作用的旧技术。那些老式的技术工具不花哨,也不令人兴奋,但它们可以完成工作,不会给你带来很多个不眠之夜。
(10)很多软件工程师除非被问到,否则不会发表意见。不要因为有人没当面发表意见,而认为他们没什么要补充的。有时,会议上嗓门最高的人是我最不想听的人。
(11)如果将人们与他们的工作成果分开,他们就会不太关心他们的工作。软件工程师和所有人一样,需要有主人翁的感觉,从头到尾拥有整个流程,直接负责交付价值。
让一群充满激情的人完全拥有设计、构建和交付软件的所有权,令人惊奇的事情就会发生。
(12)面试最好用于了解某人是谁,以及他们对特定专业领域的兴趣程度,对于试图弄清楚他们是否将成为一个优秀的团队成员,那是徒劳的。
(13)始终努力构建一个更小的系统。
有很多原因会推动你,去构建一个比原先设想的更大的系统,人类似乎有一种提供更多功能的欲望。你应该抵制这种欲望,在满足设计目标的前提下,始终努力构建一个更小的系统,这样你最终会得到一个比最初设计更好的系统。
【转载】谷歌14年工作的教训
大约14年前,我加入谷歌,以为这份工作就是编写优秀的代码。
这个想法部分正确。但随着时间的推移,我越来越意识到,真正成功的工程师不一定是最优秀的程序员,而是懂得驾驭代码之外一切的人。
下面就是我得到的经验教训。有些教训是我走了几个月的弯路得到的,还有一些需要数年才完全领悟。它们都与具体的技术无关----技术变化太快,根本无关紧要。
(1)工程师想在大公司生存,必须学会沟通。
因为在大公司,团队是组织的基本单位,推进项目必须跟其他团队沟通。项目越大,你花在跟其他人、其他团队沟通的时间就越多,比编写代码的时间还多。大多数"慢"的团队实际上是不沟通的团队。
为了顺利沟通,清晰是第一位的要求。它不仅可以加快沟通,还能降低代码风险。最优秀的工程师都会用清晰易懂的代码来代替炫技。
为了提高表达的清晰性,你可以尝试写作和去教别人。如果你能用简单的语言解释某件事,你就是真的理解它了。
(2)想要得到晋升,必须有人为你说话。
职业生涯初期,我曾认为优秀的工作成果代表了一切,但我错了。代码默默地躺在代码库里,不会为你说话。
那些对你至关重要的会议,你本人很可能没有机会参加。你需要你的经理、同事在会上提到你、推荐你。他们可能这样做,也可能不会。
平时工作中,你尽量不要为自己增加阻力。如果开会的时候,你赢得每一场辩论,很可能就是在积累无声的阻力。你之所以"赢",不是因为你说服了别人,而是因为他们不再与你争论,放弃了,将会在其他场合表达这种不满。
(3)专注于你能控制的事情,忽略你无法控制的事情。
很多事情,你改变不了,不要为这种事情烦恼。这不是被动接受,而是策略性分配精力。如果你把精力浪费在无法改变的事情上,就等于放弃改变那些原本可以改变的事情。
(4)简化工作往往可以提高绩效。
当系统运行缓慢时,人们的第一反应是增加缓存层、并行处理和更智能的算法。有时这样做没错,但我发现,删除不必要的工作几乎总是更有效果。下次进行优化之前,你要先问问自己这项工作是否应该存在。
(5)时间比金钱更有价值,你要抓紧时间。
职业生涯初期,你用时间换取金钱,各种事情都做----这无可厚非。但到了某个阶段,情况就完全不同了,你会开始意识到,时间才是不可再生资源。你要专注于那些对你最重要的事情,放弃其他事情。