大数据文摘来源:Medium编译:高燕、蒋宝尚谷歌以招程序员难着称。它不仅需要程序员有很强的编码能力,还需要良好的编程习惯。那么在写代码的过程中,有哪些非常有价值的套路是我们可以借鉴的。这篇文章的作者是谷歌的软件工程师SteveMerritt。下面他将介绍一些他在谷歌日常工作中以及与各个层次的程序员(见习生、大学生、实习生)合作时会用到的技巧。举个例子来说明这个过程。假设有一个问题:给定两个字符串sourceString和searchString,如果sourceString包含searchString,则返回sourceString中第一个字符的索引。如果sourceString中没有searchString,则返回-1。先画图坦率地说,马上敲代码是荒谬和懒惰的。就像你写文章之前,你得先弄清楚你的假设和论点,这样才能保证文章的内容是有意义的。如果不这样做,你可能会逐渐意识到自己写的东西可能跑题了,不仅浪费时间,还会影响心情。写代码也是一样,这时候你可能会觉得像洗头水一样难受。通常,问题的解决方案乍一看似乎很简单,但事实并非如此。先把它写在纸上会帮助你找到问题的解决方案,并证明它可以在不同的情况下使用,所有这些都是在输入代码之前完成的。所以不要急于编码,更别想编码了。然后你就有足够的时间做一些事情,比如添加分号和逗号。画个图,画个箭头,或者在方框里写个数字,总之,用任何能帮助你描述问题的方法。我们的目标是解决问题,所以不要局限于键盘,请使用您的笔和纸。先设计一些简单的输入。如果函数正在处理一个字符串,那么abc就是一个很好的例子。试着想象正确的结果是什么,然后梳理出你是如何解决问题的以及使用了哪些步骤。假设字符串的值如下:sourceString:"abcdyesefgh"searchString:"yes"我的思路:可以看出sourceString中包含了searchString。但是我该怎么做呢?从左到右读取sourceString,并将每组3个字符与'yes'进行比较,看它们是否匹配。比如'abc','bcd','cde'等。当读取索引4处的字符时,发现'yes'所以我确定有一个匹配从索引4处的字符开始可以处理所有可能的场景。它应该在找到匹配项时返回正确答案,并在找不到匹配项时返回正确答案。想象另一对字符串:sourceString:"abcdyefg"searchString:"yes"我们从左到右读取单词sourceString,并比较每组3个字符,看它是否匹配'yes'。读取索引4处的字符,我们看到“yef”,它看起来是相同的,但实际上不是,因为第三个字符不同。因此,我们一直向右读取并得出没有匹配项的结论,因此我们返回-1。我们已经能够确定解决问题所需的步骤顺序(在编程世界中,我们称之为算法),并且我们已经在不同的情况下进行了尝试并得到了正确的结果。基于此,我们认为该算法是有效的,然后我们应该对其进行算法化。用文字写出来在思考了上一步识别出的算法之后,我们可以尝试用文字写出来。这样做可以让步骤变得非常具体,方便我们后面敲代码的时候参考。从字符串的开头读取。查看由3个字符(或searchString中的字符数)组成的子集。如果与searchString一致,则返回其字母的索引号。如果我们读到字符串的末尾并且没有匹配项,我们返回-1。编写伪代码伪代码不是真正的代码,但它的结构类似于代码。下述是我上文算法的伪代码:foreachindexinsourceString,thereareNcharactersinsearchStringletNcharsfromindexonwardbecalledPOSSIBLE_MATCHifPOSSIBLE_MATCHisequaltosearchString,returnindexattheend,ifwehaven'tfoundamatchyet,return-1.这样写就更像真实代码了:foreachindexinsourceString,N=searchString.lengthPOSSIBLE_MATCH=sourceString[indextoindex+N]ifPOSSIBLE_MATCH===searchString:returnindexreturn-1伪代码和真实代码的相似度取决于你。通过长期的练习,你会找到最适合自己的形式。转化为代码提示:如果问题比较简单,也可以将上面的步骤一起完成现在我们要开始思考语法、函数参数、语言规范了。你不一定能一口气把代码写完整,没关系,先把你会的写下来。functionfindFirstMatch(searchString,sourceString){letlength=searchString.length;for(letindex=0;index
