10CodingPrinciplesEveryProgrammerShouldKnow,我也看过一些著名的科技公司。最近我和我的团队碰巧聊了聊我的这些经历,聊的结果是我们在编码的时候应该知道一些原则。这不是规则,也不是指南。它们只是我编写和运行代码时要牢记的一些原则。1.偏执这对我来说几乎是与生俱来的。我几乎是通过自学成为一名程序员的。我从不相信计算机,我不相信我刚刚修复的错误真的被修复了,我不相信任何东西。我什至不相信自己。在我检查了几次之前,我不会相信我已经理解了我希望的问题。偏执狂是我的朋友,我想它应该是我们每个工程师的“右臂”。我们必须多疑的是,总是应该有另一种方法来证实一个假设,或者另一种方法来查看我们错过了什么。虽然这在很多时候看起来很愚蠢,但有时它可以发挥至关重要的作用。2.不要欺骗计算机换句??话说,“避免抽象泄漏”(注:抽象泄漏是指任何试图降低或隐藏复杂性的抽象。实际上,它不能完全屏蔽细节。复杂的细节,试图隐藏的总是有可能泄露出去)。随心所欲地使用系统,不要创建自己的用法。不要期待任何奇迹。如果系统使用规模超过当前规模的三倍,则必须考虑重新设计。电脑是最老实的孩子,你要是欺骗了它,它一定会狠狠反咬一口。3.保持简单我们喜欢创造新事物和解决难题。这就是我们开展这项业务的原因。但很多时候,我们发现某个问题是可以解决的,但并不代表现在就是解决它的好时机。我一直认为自己是一个麻烦的程序员——我喜欢干净、简单且易于理解的设计。不要认为这很容易,这是一个相当大的挑战——任何人都可以用复杂的方式解决问题,但只有优秀的程序员才能以简单易懂的方式解决问题。尤其是真正直接思考问题的关键,更是难上加难。理解是关键。要知道程序员大部分时间都花在维护代码上,而不是写代码。4.优化最好的诫命是不优化这出自约翰·本特利的经典著作《编程珠玑》。(它旨在帮助我们像经验丰富的程序员一样思考。虽然已经出版多年,但上面的很多教训在当今社会仍然适用。)优化可以采取多种形式:速度、后验形式、潜在规模、可能的用途等。问题是大多数优化最终都是无用的,而根据定义,优化或多或少会使设计复杂化。因此,最好的优化戒律是,除非您完全了解整个问题,否则不要进行优化。(他的第二条诫命仍然是:“不要优化”,意思是即使你明白了,除非你真的需要,否则你不能优化。)5.不要只是修复错误;修复所有可能的错误。无需担心您的错误。每个人都讨厌错误,我也是。我讨厌让我犯错误的系统。而且我真的非常讨厌修复同一个错误,所以为了避免这种情况,每当我修复一个错误时,我都会考虑以下问题:这个错误现在还会出现在哪里?以后哪里更容易出现?是什么导致此模式下的错误?我能一下子抓住他们吗?6.不断做假设由于我大部分时间都在自己的创业公司工作,我养成了不断问自己“我为什么要这样做?这样做解决了什么问题?有没有更好的解决方案?”的习惯。如何?是不是还有什么更重要的事情我还没做呢?”我们应该保持这种态度,并不断问自己这些假设。真正需要解决的问题是什么?是不是只解决效果不追根究底?解决方案完整吗?完成了吗?值得吗?7..长远考虑。放慢速度跑得更快这可能是最重要的一点。作为工程师,我们喜欢富有成效:创造、创造、再创造。但如果我们不能放眼长远,我们就会作茧自缚,让***越来越难做任何事情。有时候,我们还没有弄清楚问题就直接写代码,最后不得不放弃。有时,我们的解决方案虽然对局部问题有效,但会使事情变得更糟或产生更严重的后果。有时我们匆忙而没有完成设计,这导致其他人以后要花更多的时间来修复它。有的时候我们就是懒得好好写,直接抄袭或者借用别人的内容。原因可能是我们太忙了,赶不上项目进度,不想花时间考虑。……这些案例不胜枚举。也有人说这比我遇到的好多了,呵呵。但我还是要重申——我们的目标是构建最多的功能,拥有最广泛的用户。所以,要放长远的眼光。8.关心自己的代码这个我觉得没有必要解释太多。可悲的是,现在很多人不时地把它从他们的脑海中抛开。为你的工作感到自豪!关心你自己写的代码!如果我想偷懒走捷径,我就告诉自己,种瓜得豆。如果我现在偷懒,以后可能会面临一大堆乱七八糟的代码,最可怜的还是自己。当然你不必极端——在谷歌,我经常开玩笑说其他工程师对待代码就像对待自己的宠物一样,而我与代码的关系更像是牧场主——务实,而不是情绪化。话虽如此,代码不行的时候还是忍不住发脾气。9.成本、速度、准确度这是软件中的铁三角关系,也是全世界软件工程师努力的目标。但这不是自满和自满的借口。事实上,所谓优秀和伟大的程序员之间的区别,往往在于他们对这个铁三角的驾驭能力——伟大的程序员通常会尽最大努力尽可能地实现这三个目标。我们都应该努力成为伟大的程序员。但话说回来,两者不可兼得,当我们不得不放弃这个铁三角时,我们必须明白我们要妥协的是什么,为什么要妥协,是否是当前形势下最正确的选择。10.***,保持好奇心,不断学习好吧,这看起来更像是职业建设。但如果你没有好奇心,不愿意学习新事物,不再关心新技术和新语言,那你为什么还从事这一行呢?上述编码原则可能并不完美。如有不同意见,欢迎指正,听我说。英文原文:CodingPrinciplesEveryEngineerShouldKnow翻译链接:http://www.codeceo.com/article/10-coding-principles.html
