没有人是完全独立的孤岛,每个人都是整体的一部分。—— 约翰·多恩

对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码。即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案。
如果不借助搜索技术、网络及集体智慧,现代化高效编程是难以想象的。因此,搜索技巧对高效程序员变得愈发重要。
现在,我们不需要了解和记住如何解决众多的编程问题,可以采用搜索技术。我们正变得更加高效、高生产力,并能够解决更多的问题。但这是否意味着在构建软件时,拥有好的搜索技巧就足够了呢?本文将讨论,搜索技巧在程序员知识的形成过程中的作用,以及如何高效使用搜索技巧。
知识的类型及它在程序员大脑中如何成长。 
有三类知识:
概念知识(为什么、是什么、如果—— 语义上的)——理解软件系统构建过程中的概念、原理、关系及主要方法。根据这类知识,能够找出体系结构或代码必须按特定方式设计的原因,以及从中选择最佳设计方案的备选方案和逻辑是什么。概念知识,不是指用特定编程语言解决特定问题,而是对问题的长远看法和理解。
用途:对复杂的开放式问题寻找新的解决方案,并创建稳健的软件系统。
收获:学习计算机科学、体系结构以及编程概念,在实际实现和经验的基础上,构建自己的理论。
实践性知识(如何做 —— 过程中的)—— 关于如何解决特定编程问题的知识。这类知识不需要深入理解实现方法选择过程中隐含的概念及基本原理。搜索技术在这里最重要,因为对有限的编程语言问题所采取的特定解决方案,搜索能相对容易的加以共享并说明。
用途:用已证实的和已知的解决方案快速解决问题,而不是每次都重新发明一种新的方法。
收获:搜索现有的解决方案,通过例子学习或提出自己的解决方案并以后对其重利用。
隐性知识(专业知识、经验及直觉)——基于软件系统实现过程中所积累的个人经验,在大脑中形成的内在知识。通过强大的大脑功能,隐性知识可以综合并协调其他两种知识。这类知识很难传授,因为它的大部分都存储在我们的潜意识中。在特定环境下,它和直觉一同发挥作用,能够在经验、对概念性和实践性知识的反馈和评估的基础上,制定最佳决策。
用途:利用自己的专长、经验及直觉来实现最佳解决方案。
收获:构建软件并从结果中学习知识。 
设计模式(还有架构、领域及其他)是不同类型知识相结合的有趣的例子:“如何做”的例子,这些例子中隐含的概念及实现过程中积累的经验。这种知识的表现方式是模式成功及广泛应用的原因之一。
随着越来越多的可供使用的实践性解决方案和示例出现在网络上,人们大脑中的实践性知识的价值越来越小。我们不需要记住实践性知识。现在我们能够处理软件构建过程中几乎所有可能遇到的常见编程问题。然而,除能够解决问题的示例或从哪搜索这些示例以外,一名大师级的程序员还知道更多的知识。他能够提出自己的解决方案,制定大部分最佳决策,并采用最好的方式应用它们。
此外,很难在网上找到新的、复杂的、领域性的及特定环境下的问题的解决方案。而且,对所有重要的软件工程,在制定优秀解决方案的过程中,都需要高水平的软件开发理论、这些理论的应用经验、对系统的深入了解、问题空间及环境等相关知识。
因此,在软件开发过程中,概念知识和隐性知识仍然是非常重要的。在使用搜索技术时,我们应当努力扩充各种知识,而不是仅仅解决特定问题。随着解决更高级问题的能力的提高,你会取得成功,成为更高效的程序员。 
可解决实际问题的高效搜索
A. 查找
1. 定义——弄清楚要解决什么问题,并以要查找的内容为焦点。网络上有如此多的有趣的材料,以至于搜索过程能轻易地占掉你全部的工作时间(和个人时间)。
2. 检索(使用标准的Google、代码搜索或其他的检索引擎)—有很多关于如何高效的使用检索引擎的建议。
3. 浏览结果(内容的质量、可信度及专业技术的水平;如果资料的可信度过低,无须再看)-> 阅读 -> 评估(人力物力、所需工具及函数库)
B. 使用
1. 复制代码 – 单独复制(针对这一目的,带有长钉技术的显式单元测试最适合)
2. 清除代码 – 仅保留最小限度、相关性代码,清除解决方案中的其它代码。
3. 在系统中应用代码。
C. 学习
1. 理解——你做了什么及你为什么那样做——从代码和实现中学习。
2. 扩充知识——
实践性知识:解决问题的特定方法、技巧及风格;
概念知识:学习新概念、提炼现有的并构建自己的概念;
隐性知识:明智地使用并学习搜索到的解决方案,经验会自然而然地得到增长。
3. 收集(链接、意见、参考文献、阅读清单)—任何对你今后搜索、发现及学习有用的有趣信息。为这些目标积累知识。
来源:伯乐在线(原文:How to use search skills to become an effective programmer)

如何使用搜索技巧来成为一名高效的程序员(很好的总结)相关推荐

  1. 如何使用搜索技巧来成为一名高效的程序员

    没有人是完全独立的孤岛,每个人都是整体的一部分.-- 约翰·多恩 对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序.如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码.即使是经验丰 ...

  2. 想要成为一名优秀的程序员,这十八招必看

    文章目录 第一招:速学能力 第二招:理解能力 第三招:编程能力 第四招:使用能力 第五招:编码能力 第六招:注释能力 第七招:思维能力 第八招:英语能力 第九招:学习能力 第十招:思考能力 第十一招: ...

  3. 如何成为一个优秀的程序员_如何成为一名优秀的程序员

    如何成为一个优秀的程序员 by Amy M Haddad 通过艾米·M·哈达德(Amy M Haddad) 如何成为一名优秀的程序员 (How to be a great programmer) Wh ...

  4. 成为一名成功的程序员要做到以下10点?网友:是真的吗?

    编程是一个没有极限的职业,所以要成为一名优秀的程序员,你必须超越现有已存在的极限.在程序员职业生涯的开始阶段,他们将面临许多挑战,面对困境,他们之中有一些人将会放弃,而只有少数人会坚持到底,并成为这个 ...

  5. 如何成为一名优秀的程序员(四)

    ...偶从初中的时候就开始学编程(数据结构和C),高中的时候帮大四的朋友 做计算机专业的毕业设计... 后来高考,也许是舆论影响,也许是家庭压力,也许是受同学感染, 还是奋力于这个天知道有没有意义的考 ...

  6. 想要入IT行业成为一名程序员很难吗?

    我不是计算机专业毕业的,现在IT行业发展这么好所以想转向IT发展可以吗?要成为一名程序员很难吗? 在中国,虽然程序员这个职业已经非常普及,但大多数人对程序员的了解还仅仅停留在薪资高的层面上.至于为什么 ...

  7. 如何成为一名成功的程序员

    编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域.你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识.只是对编程感兴趣还不足以功成名就--众所周知,我们工作起来像疯子. 编程是一个没有极限的职业,所 ...

  8. 一名新晋程序员的自述:我的编程自学之路

    我相信每个程序员都具备自学的能力,因为如果没有自身的努力,我们不会成为一名优秀的程序员. 大概交代一下故事背景 2016年,我被计算机科学专业录取.计算机科学家需要研究如何使用计算机解决广泛问题及其应 ...

  9. 我要成为一名优秀的程序员!

    2019独角兽企业重金招聘Python工程师标准>>> 2013年的3月14号,所谓的白色情人节,这天我很不幸.在班级篮球比赛中,我上篮落地时不小心搞到小腿骨折,然后在恐慌中被送进了 ...

最新文章

  1. ubuntu samba 安装
  2. spg app android,GitHub - spgwzp/AndEsptouch: esptouch for android ,ESP8266网关配对
  3. linux编译openssl
  4. 109_Power Pivot客户ABC(帕累托)分析度量值写法(非计算列)
  5. Kubernetes 核心概念 1
  6. 编程修养 阅读笔记四
  7. Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
  8. Python3.2官方文档翻译--迭代器
  9. 字符串统计,一个中文算2个字符,一个英文算一个字符
  10. eclipse生成ant build.xml打war包
  11. 1074 Reversing Linked List (25 分)
  12. 利用N2N内网穿透,并实现直连
  13. linux ps1详解,Linux-玩转系统提示符PS1
  14. IEEE论文小技巧-pdf转eps使色彩保持RGB不变及去边框
  15. 共享办公室,月赚2万-5万的阳光创业项目
  16. Havel-Hakimi算法
  17. Java开发的基中之基
  18. 图书采购管理系统分析
  19. Java学习(二)---SE阶段回顾
  20. cocos2dx系列--颜色混合BlendFunc

热门文章

  1. 财务自由?这样做微信开发可以吗?
  2. 七牛报错error: Error Domain=NSCocoaErrorDomain Code=256 “未能打开该文件。
  3. mysqldump -u root -p a E:\a\a.txt; 找不到错误了
  4. 【文献阅读笔记】KAM Theory Meets Statistical Learning Theory: Hamiltonian Neural Networks with Non-Zero Trai
  5. 【翻译】DataHub:流行的元数据架构讲解
  6. Java、JSP个人日程管理系统
  7. L1-040 最佳情侣身高差 - java
  8. JS逆向解密凡科网密码
  9. Mac 终端命令汇总
  10. day68 Django--中间件