没有人是完全独立的孤岛,每个人都是整体的一部分。—— 约翰·多恩
对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码。即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案。
如果不借助搜索技术、网络及集体智慧,现代化高效编程是难以想象的。因此,搜索技巧对高效程序员变得愈发重要。
现在,我们不需要了解和记住如何解决众多的编程问题,可以采用搜索技术。我们正变得更加高效、高生产力,并能够解决更多的问题。但这是否意味着在构建软件时,拥有好的搜索技巧就足够了呢?本文将讨论,搜索技巧在程序员知识的形成过程中的作用,以及如何高效使用搜索技巧。
知识的类型及它在程序员大脑中如何成长。
有三类知识:
概念知识(为什么、是什么、如果——
语义上的)——理解软件系统构建过程中的概念、原理、关系及主要方法。根据这类知识,能够找出体系结构或代码必须按特定方式设计的原因,以及从中选择最佳
设计方案的备选方案和逻辑是什么。概念知识,不是指用特定编程语言解决特定问题,而是对问题的长远看法和理解。
●用途:对复杂的开放式问题寻找新的解决方案,并创建稳健的软件系统。
●收获:学习计算机科学、体系结构以及编程概念,在实际实现和经验的基础上,构建自己的理论。
实践性知识(如何做 —— 过程中的)—— 关于如何解决特定编程问题的知识。这类知识不需要深入理解实现方法选择过程中隐含的概念及基本原理。搜索技术在这里最重要,因为对有限的编程语言问题所采取的特定解决方案,搜索能相对容易的加以共享并说明。
●用途:用已证实的和已知的解决方案快速解决问题,而不是每次都重新发明一种新的方法。
●收获:搜索现有的解决方案,通过例子学习或提出自己的解决方案并以后对其重利用。
隐性知识(专业知识、经验及直觉)——基于软件系统实现过程中所积累的个人经验,在大脑中形成的内在知识。通过
强大的大脑功能,隐性知识可以综合并协调其他两种知识。这类知识很难传授,因为它的大部分都存储在我们的潜意识中。在特定环境下,它和直觉一同发挥作用,
能够在经验、对概念性和实践性知识的反馈和评估的基础上,制定最佳决策。
●用途:利用自己的专长、经验及直觉来实现最佳解决方案。
●收获:构建软件并从结果中学习知识。
设计模式(还有架构、领域及其他)是不同类型知识相结合的有趣的例子:“如何做”的例子,这些例子中隐含的概念及实现过程中积累的经验。这种知识的表现方式是模式成功及广泛应用的原因之一。
随着越来越多的可供使用的实践性解决方案和示例出现在网络上,人们大脑中的实践性知识的价值越来越小。我们不需要记住实践性知识。现在我们能够处理
软件构建过程中几乎所有可能遇到的常见编程问题。然而,除能够解决问题的示例或从哪搜索这些示例以外,一名大师级的程序员还知道更多的知识。他能够提出自
己的解决方案,制定大部分最佳决策,并采用最好的方式应用它们。此外,很难在网上找到新的、复杂的、领域性的及特定环境下的问题的解决方案。而且,对所有
重要的软件工程,在制定优秀解决方案的过程中,都需要高水平的软件开发理论、这些理论的应用经验、对系统的深入了解、问题空间及环境等相关知识。
因此,在软件开发过程中,概念知识和隐性知识仍然是非常重要的。在使用搜索技术时,我们应当努力扩充各种知识,而不是仅仅解决特定问题。随着解决更高级问题的能力的提高,你会取得成功,成为更高效的程序员。
可解决实际问题的高效搜索
A. 查找
1. 定义——弄清楚要解决什么问题,并以要查找的内容为焦点。网络上有如此多的有趣的材料,以至于搜索过程能轻易地占掉你全部的工作时间(和个人时间)。
2. 检索(使用标准的Google、代码搜索或其他的检索引擎)—有很多关于如何高效的使用检索引擎的建议。
3. 浏览结果(内容的质量、可信度及专业技术的水平;如果资料的可信度过低,无须再看)-> 阅读 -> 评估(人力物力、所需工具及函数库)
B. 使用
1. 复制代码 – 单独复制(针对这一目的,带有长钉技术的显式单元测试最适合)
2. 清除代码 – 仅保留最小限度、相关性代码,清除解决方案中的其它代码。
3. 在系统中应用代码。
C. 学习
1. 理解——你做了什么及你为什么那样做——从代码和实现中学习。
2. 扩充知识——
a. 实践性知识:解决问题的特定方法、技巧及风格;
b. 概念知识:学习新概念、提炼现有的并构建自己的概念;
c. 隐性知识:明智地使用并学习搜索到的解决方案,经验会自然而然地得到增长。
3. 收集(链接、意见、参考文献、阅读清单)—任何对你今后搜索、发现及学习有用的有趣信息。为这些目标积累知识。
你还有其他高效搜索代码的诀窍吗?欢迎在评论或微博中和大家分享。
现在的编程很大程度上依赖你是否擅长利用Google。你想实现的代码,99%的可能是别人已经实现过了的,并且放到了Stack
Overflow或Github上。开发人员的办公桌上也不再需要一大叠教科书:相反,我们只需要将疑问键入到搜索框中,寄希望于它显示在第一页的9个搜
索结果中即可。
很多很多人没有意识到的是,Google在这里扮演了非常重要的角色。正如我们已经着迷于使用键盘快捷键来提高编码的速度和敏捷性,但是,有许多命令选择可以让你的Google小助手达到一个新的水平。下面我们就要介绍开发人员是如何最佳使用其中一些命令的。
精确短语搜索
如果用引号封装部分或全部的搜索内容,那么Google将对输入的短语进行精确搜索,不像它平常单独搜索词语那样。这是我在Google上最常用的go-to幂函数。
这对于开发人员搜索异常字符串时,真的非常有用。如果你确定你想要一个没有方差的精确异常,那么这可以剔除掉结果中令人讨厌的部分。
举例
"Failed to parse configuration at: logging.appenders.[0]" mvn assembly plugin
括号中的内容就是具体的异常文本,后面是我抛出的相关特定条件以帮助精确搜索。
排除条件
在我们小小的编程世界中有很多重叠的部分。相似名称的项目,以及反复使用的术语可以使得梳理搜索结果时,变得令人非常沮丧。然而要想排除一些搜索结果也非常容易:只需在单词前添加一个“ – ”符号。
举例
Spark Java -Apache
在Java中很烦人的一件事就是有sparkjava和Apache Spark。如果只想搜索前者,那么通过“-Apache”可以轻松删除所有基于Apache的结果。
相关条件
想知道对于某一种技术的替代品是什么吗?那么就需要相关关键字的支持。给出一个URL,然后它会返回具有类似内容的网站。在实践中,我发现它在寻找替代技术、替代框架,或找一些附加的和兼容的东西时,很有用。
举例
related:mongodb.org
现在我们就有很多类似的和可替代MongoDB的NoSQL数据库了。
文件类型
你知道你可以在Google中强制你想要搜索的文件类型吗?这在寻找可打印的备忘时,真的很有用,因为你可以指定PDF文件,虽然它可以应用于大量的搜索。
举例
IntelliJ shortcuts filetype:PDF
站内搜索
我经常发现搜索一个网站或一个论坛是可怕的。幸运的是,Google允许避免这样的情况。你可以指定Google搜索一个网站或一个子域。
举例
intellij shortcuts site:stackoverflow.com
延伸!从Chrom直接搜索网站
Chrome浏览器支持自定义的搜索引擎。非常强大,特别是如果你总是要搜索某个网站,例如StackOverflow的话。
首先,右键单击地址栏,然后选择Edit Search Engines(修改搜索引擎)。
在出现的对话框中,滚动到“Other Search Engines(其他搜索引擎)”的底部。假设我们要增加对Stack
Overflow的支持。首先,我们要将“Stack
Overflow”作为引擎的名称。第二步,我们需要快捷方式:启用后,我们将此输入到地址栏,确定这就是我们要使用的引擎。我设置的快捷方式是
“so”。然后,我们需要一个网址,在这个网址中我将用%s替换搜索条件。如果我们用Stack
Overflow做一个示例搜索,检查URL,我们就可以看到哪里用%s替换条件:
用%s替换条件之后,就是http://www.s
在地址栏中键入“so”,然后按空格键。Chrome就会自动告诉你,你可以搜索Stack Overflow。
转载请注明:学时网 » 如何使用google搜索技巧来成为一名高效的程序员