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

简介: 如何使用搜索技巧来成为一名高效的程序员没有人是完全独立的孤岛,每个人都是整体的一部分。—— 约翰·多恩对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。

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

对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码。即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案。

如果不借助搜索技术、网络及集体智慧,现代化高效编程是难以想象的。因此,搜索技巧对高效程序员变得愈发重要。

现在,我们不需要了解和记住如何解决众多的编程问题,可以采用搜索技术。我们正变得更加高效、高生产力,并能够解决更多的问题。但这是否意味着在构建软件时,拥有好的搜索技巧就足够了呢?本文将讨论,搜索技巧在程序员知识的形成过程中的作用,以及如何高效使用搜索技巧。

知识的类型及它在程序员大脑中如何成长。

有三类知识:

概念知识(为什么、是什么、如果—— 语义上的)——理解软件系统构建过程中的概念、原理、关系及主要方法。根据这类知识,能够找出体系结构或代码必须按特定方式设计的原因,以及从中选择最佳设计方案的备选方案和逻辑是什么。概念知识,不是指用特定编程语言解决特定问题,而是对问题的长远看法和理解。

  • 用途:对复杂的开放式问题寻找新的解决方案,并创建稳健的软件系统。
  • 收获:学习计算机科学、体系结构以及编程概念,在实际实现和经验的基础上,构建自己的理论。

实践性知识(如何做 —— 过程中的)—— 关于如何解决特定编程问题的知识。这类知识不需要深入理解实现方法选择过程中隐含的概念及基本原理。搜索技术在这里最重要,因为对有限的编程语言问题所采取的特定解决方案,搜索能相对容易的加以共享并说明。

  • 用途:用已证实的和已知的解决方案快速解决问题,而不是每次都重新发明一种新的方法。
  • 收获:搜索现有的解决方案,通过例子学习或提出自己的解决方案并以后对其重利用。

隐性知识(专业知识、经验及直觉)——基于软件系统实现过程中所积累的个人经验,在大脑中形成的内在知识。通过强大的大脑功能,隐性知识可以综合并协调其他两种知识。这类知识很难传授,因为它的大部分都存储在我们的潜意识中。在特定环境下,它和直觉一同发挥作用,能够在经验、对概念性和实践性知识的反馈和评估的基础上,制定最佳决策。

  • 用途:利用自己的专长、经验及直觉来实现最佳解决方案。
  • 收获:构建软件并从结果中学习知识。

设计模式(还有架构、领域及其他)是不同类型知识相结合的有趣的例子:“如何做”的例子,这些例子中隐含的概念及实现过程中积累的经验。这种知识的表现方式是模式成功及广泛应用的原因之一。

随着越来越多的可供使用的实践性解决方案和示例出现在网络上,人们大脑中的实践性知识的价值越来越小。我们不需要记住实践性知识。现在我们能够处理软件构建过程中几乎所有可能遇到的常见编程问题。然而,除能够解决问题的示例或从哪搜索这些示例以外,一名大师级的程序员还知道更多的知识。他能够提出自己的解决方案,制定大部分最佳决策,并采用最好的方式应用它们。此外,很难在网上找到新的、复杂的、领域性的及特定环境下的问题的解决方案。而且,对所有重要的软件工程,在制定优秀解决方案的过程中,都需要高水平的软件开发理论、这些理论的应用经验、对系统的深入了解、问题空间及环境等相关知识。

因此,在软件开发过程中,概念知识和隐性知识仍然是非常重要的。在使用搜索技术时,我们应当努力扩充各种知识,而不是仅仅解决特定问题。随着解决更高级问题的能力的提高,你会取得成功,成为更高效的程序员。

可解决实际问题的高效搜索

A. 查找

  • 1. 定义——弄清楚要解决什么问题,并以要查找的内容为焦点。网络上有如此多的有趣的材料,以至于搜索过程能轻易地占掉你全部的工作时间(和个人时间)。
  • 2. 检索(使用标准的Google、代码搜索或其他的检索引擎)—有很多关于如何高效的使用检索引擎的建议。
  • 3. 浏览结果(内容的质量、可信度及专业技术的水平;如果资料的可信度过低,无须再看)-> 阅读 -> 评估(人力物力、所需工具及函数库)

B. 使用

  • 1. 复制代码 – 单独复制(针对这一目的,带有长钉技术的显式单元测试最适合)
  • 2. 清除代码 – 仅保留最小限度、相关性代码,清除解决方案中的其它代码。
  • 3. 在系统中应用代码。

C. 学习

  • 1. 理解——你做了什么及你为什么那样做——从代码和实现中学习。
  • 2. 扩充知识——
  • a. 实践性知识:解决问题的特定方法、技巧及风格;
  • b. 概念知识:学习新概念、提炼现有的并构建自己的概念;
  • c. 隐性知识:明智地使用并学习搜索到的解决方案,经验会自然而然地得到增长。

 

  • 3. 收集(链接、意见、参考文献、阅读清单)—任何对你今后搜索、发现及学习有用的有趣信息。为这些目标积累知识。

你还有其他高效搜索代码的诀窍吗?欢迎在评论或微博中和大家分享。

马上到年末了,自己也对今年做了一下总结,自己有哪些优点,有哪些还需要加强。每当我想到今年比较满意的地方,对比之前,就会有这样一个思考:如果以前的我要是知道这些该多。在这里给大家分享一下经验,让新人少走一些弯路。

做事要积极主动,态度决定一切

说这些,可能有人会觉得,这些都明白,都是大道理,只是怎么样执行的问题,下面我举一个真实的例子。

我曾经带过的两位新人,A君上班,交代给他负责的东西,是永远没有结果的,我交代给A做一个数据展现的部分,A君告诉我他不会JSP的技术,我给他 推荐了一些书籍以及我曾经写过的demo,并告知不能光学,要有成果展示,可以通过这个数据展现来学习jsp技术,但是最后的结果是他下班就走,走之前没 有跟我汇报任何进度,我最后只能换人做这个东西。这里我并不是推荐职场新人要加班,但是做事的态度要认真负责,新人可以对技术不懂,但是要有负责的态度, 起码应该汇报一下今天的进度。

再来对比一下另一位B君,也是同样接到这个任务,首先B君懂jsp,但是他不懂JSTL,我给了他时间学习,结果B君在很短的时间内,学了JSTL 并将总结发给了我,我相信这么短的时间内,他毕竟掌握的有限,但是学习了,又有总结,这种态度令我非常满意。在第二天,B君就把数据展示做出来了,而且确 实是我想要的样子!不得不说,同样的事,同一水平线,不同人做的时候,态度和积极性就决定着一切,所以一个人只要工作态度好,我相信这个人的工作绝对不会 差。

提问的技巧

作为一个新人来说,不懂就要问!这里我要说两点:

1、 如果是单纯技术上的问题,如果可以google到的,我认为就可以自己消化掉!问的问题一定要先google,然后带着自己的想法,去问一些有经验的人,收获会更大!(推荐阅读:《如何使用搜索技巧来成为一名高效的程序员》)

举个例子:曾经的我,埋头写代码,那时候很怕上司知道自己不会这,不会那!所以拼命的掩盖自己不会的东西,自己查资料,下班了问同学,上论坛发问。 但是由于逻辑和现实需求不一样,所以结果并不理想!如果那个时候,我把自己不理解的地方和上司谈,也许会很快的就能完成这个任务,而不是返工。

2、如何提问?问谁?

很多新人不知道如何提问,也不知道问谁。我的建议是,先把你要问的问题梳理好,最好可以有电子版或者打印版的整理,方便其他同事查看和解答。然后就是提出的问题,要让回答的人感兴趣,这样他不但会给你解答问题,还有可能将问题延伸,让你学到更多的知识。对于如何让回答的人感兴趣,就是仁者见仁,智者见智了!看个人发挥了!

对于问谁,我觉得你不了解其他同事的时候,要先问你的上司,当你了解了你的同事每个人擅长的领域之后,就应该把自己的问题归类,然后问最擅长的人。这样会事半功倍!

任务分解

不知道大家做事都是怎样一个逻辑,当年的我做事就是一团糟。当我拿到一个日志分析的任务的时候,就想着做,埋头苦干,但是自己越做,脑子越浑,完全 找不到头绪。后来,上司找到我,给我做出了任务分解,我按照任务分解来做,清晰了很多。直到现在,我还保持着做任务分解的习惯。

其实做任务分解可以帮助你更深入的了解你要做的事情,任务分解包括一个事情,你需要分几个步骤去做,每个步骤要做到什么样子,什么程度,多长时间做 完。几个步骤为一个里程碑。如果具体做的时候发现一个步骤的事情做起来超过了一个星期,我觉得这属于任务分解的不够细,需要将这个任务再次分解,让你的工 作更透明,更有效率。可以使用一些任务分解工作,将自己的工作路线和步骤明确,要善用工具。

主动汇报 + 主动沟通

曾经的我就是埋头苦干,但是从不汇报进度,其实这样是不好的。后来我的领导找到我,问我的进度,才发现意见有所分歧,理解有差距。索性只能重新来过。

新人一定要注意这个事情,有情况,有成果,有可展示的东西就一定要及时的主动汇报这个事情的进度,做成果展示,在对事情有不理解的时候也需要主动的沟通,使之和所有参与人员的意见一致再去做,保证你做的事情的正确性和有效性。

记住一句话:当领导找到你问进度的时候,你是被动的!

上面几点,看似简单,做起来很难!到现在任务分解和提问很多职场新人是不具备的,需要慢慢磨练,但是我们相信,只要有良好的态度,良好的习惯,工作一定会慢慢越来越好!相信自己的明年会越来越好!

目录
相关文章
|
Cloud Native 容器 Kubernetes
1.1 云原生历史
云原生的发展历程和 CNCF
2257 0
|
存储 数据处理
GDPR
【10月更文挑战第7天】GDPR
713 7
|
8月前
|
监控 搜索推荐 数据挖掘
多维度组织支撑:提升CRM线索客户资源分配效率
在当今商业环境中,客户关系管理(CRM)系统是企业提升销售效率和客户满意度的关键工具。其中,多维度组织支撑下的线索客户资源分配尤为重要。它通过自动化分配、个性化服务和数据分析,优化销售流程,提高转化率与客户体验。实施步骤包括建立统一平台、制定分配规则、优化跟进流程及数据驱动决策。实际案例如联想和海康威视借助CRM系统实现了全流程优化,显著提升了销售效率与业绩。这一趋势助力企业在竞争中脱颖而出,实现可持续发展。
|
安全 搜索推荐 数据挖掘
什么是TikTok机房?有什么用?
TikTok机房是专为高效管理多个TikTok账号设计的系统或场所,配备大量硬件设备和海外代理IP,可模拟真实用户行为,提升内容推广效率。通过自动化工具批量操作,不仅能规避账号关联风险,还能实现精准营销并优化数据分析。使用时需注意合规性、安全性和数据保护。
|
8月前
|
存储 安全 搜索推荐
云服务器和一般服务器有什么区别?
云服务器结合了独立服务器的性能与灵活性,具备更低的成本和高度定制化的特点。它提供独立的操作系统、磁盘空间及资源,支持快速扩展和降级配置,确保安全性和隐私性。相比共享主机(适合轻量级应用)和独立服务器(适合高性能需求),云服务器更适合个人用户、中小型企业和开发人员,兼具成本效益与灵活性。
914 4
|
10月前
|
Python
Python调用函数并获取返回值
通过本文的介绍,我们详细了解了如何在Python中定义和调用函数,传递参数,以及获取函数的返回值。掌握这些基本操作是编写高效、清晰和可维护Python代码的基础。希望这些内容能够帮助你在实际编程中更好地使用函数。
342 18
|
存储 关系型数据库 MySQL
MySQL 索引结构及其优劣
【10月更文挑战第12天】不同的索引结构各有其适用场景,在实际应用中,需要根据数据特点、查询需求等因素综合考虑选择合适的索引结构。同时,过多或不合理的索引也可能会带来一些负面影响,如增加存储开销、降低数据插入和更新的速度等。因此,在设计索引时需要进行合理的规划和优化。
307 57
|
9月前
|
人工智能 搜索推荐 Cloud Native
2025年企业营销的制胜指南:AI、Alpha世代与全渠道实战策略
2025年企业营销的制胜指南:AI、Alpha世代与全渠道实战策略
|
11月前
|
编解码 IDE KVM
Happy coding,明基RD280U使用分享
最近尝试了明基的专业编程显示器 `RD280U`,28寸4K分辨率,3:2屏幕比例,适合编程。支持硬件级防蓝光、抗反射面板,接口丰富,支持KVM。自动亮度调节、编码模式和软件辅助功能,使其在编程体验上表现出色。如果你对专业编程显示器有需求,这无疑是一个不错的选择。
379 12
|
存储 数据安全/隐私保护 云计算
多云网络环境:定义、优势与挑战
多云网络环境:定义、优势与挑战
298 5