阅读更多

22顶
3踩

编程语言

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

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



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

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


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


  有三类知识:

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

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


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

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


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

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

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


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


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


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

  A. 查找

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


  B. 使用

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


  C. 学习

  • 1. 理解——你做了什么及你为什么那样做——从代码和实现中学习。
  • 2. 扩充知识——
    • a. 实践性知识:解决问题的特定方法、技巧及风格;
    • b. 概念知识:学习新概念、提炼现有的并构建自己的概念;
    • c. 隐性知识:明智地使用并学习搜索到的解决方案,经验会自然而然地得到增长。
  • 3. 收集(链接、意见、参考文献、阅读清单)—任何对你今后搜索、发现及学习有用的有趣信息。为这些目标积累知识。


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

 

 


  本文出处:伯乐在线 - 职场博客
  本文链接:http://www.jobbole.com/entry.php/371

  Via:softwarecreation 文章推荐:关关  编译:伯乐在线 敏捷翻译组 - 牛冬梅

  如需转载,但请注明文章来源和超链接等版权信息,否则视为侵权,谢谢合作!

  • 大小: 41.6 KB
  • 大小: 39 KB
  • 大小: 32.8 KB
来自: www.jobbole.com
22
3
评论 共 11 条 请登录后发表评论
11 楼 JEye17173 2010-12-15 17:15
合理利用,优势互补.
10 楼 angel243fly 2010-12-12 16:25
过度依赖搜索其实是更加悲哀的
9 楼 海底行者 2010-12-07 19:29
好多人都不以为然,认为要背会了文档的。我真替他们感到悲哀。今天终于遇到志同道合的
8 楼 liyaxi 2010-12-07 18:45
我就是这样做的, 不过给好多人建议, 他们都不以为然。
7 楼 greedsluck 2010-12-07 18:05
同意阿!很有道理!
6 楼 t0uch 2010-12-07 12:36
但事实上有时候搜索引擎并不能解决问题,还是仔细去读源代码吧
5 楼 smilerain 2010-12-07 12:01
使用搜索技巧只能让你成为一名能够解决问题的程序员。
要高校更多的精炼和积累。并且这些东西是保存到大脑这个超高速记忆体里边才行
4 楼 superhanliu 2010-12-07 08:29
too long to see
3 楼 zhytx 2010-12-06 20:41
有道理啊,高效搜索很重要
2 楼 greedsluck 2010-12-06 15:47
很喜欢啊,现在就是搜索!
1 楼 transist 2010-12-06 13:36
很有道理。。。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 《深度探索C++对象模型》 构造函数语义学 第二章笔记

    本章主要介绍类的构造函数有关的语义(semantics)1.默认构造函数

  • 构造函数语义学

    一Default constructor的建构操作 nontrivial default constructor的四种情况: 1. “ 带有 Default Constructor ” 的 Member Class Object class Foo { public: Foo(); Foo(int); } class Bar { ...

  • 如何使用搜索技巧来成为一名高效的工程师

    如何使用搜索技巧来成为一名高效的工程师?没有人是完全独立的孤岛,每个人都是整体的一部分。——约翰·多恩对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,...

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

    没有人是完全独立的孤岛,每个人都是整体的一部分。—— 约翰·多恩   对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。...因此,搜索技巧对高效程序员变得愈发重要。   现在,我

  • 深度探索C++对象模型第一章 关于对象

    C语言中,“数据”和“处理数据的操作”十分开来的。由一组“分布在各个一功能味道想得函数中”的算法所驱动,他们处理的是共同的外部数据。而在C++中,则使用的是独立的“抽象数据类型abstract data type(ADT)”所驱动。从软件工程的角度看“一个ADT或CLASS hierar5chy的数据封装”比"在C程序中程序迎的使用全局数据好"。加上封装后的布局成本C++在布局以及存取时间上的额外

  • 深度探索C++对象模型第五章 构造、解构、拷贝语义学

    5.2  继承体系下的对象构造一般而言编译器所做的扩充操作大约如下:1、记录在initializataion list 中的data members 初始化裁做会被放进 constructor的函数本身,并以members 的声明顺序为顺序。2、如果有一个member 没出现在member initialization list 之中,但是他又一个default constructor ,那么

  • 深度探索C++对象模型第六章 执行其语义学

    6.1  对象的构造和解构对象的解构发生在离开当前区域之前,而不是说大括号之前对象数组:编译器调用一个宁为vec_new()的函数,产生出以class object对象构造而成的数组。void * vec_new(void * array,      //  数组的起始地址                size_t elem_size,  //  每个class object的大小   

  • 深度探索C++对象模型第三章 Data 语意学

    C++ standard 不强制规定“base class  sunjects的排列次序”“不同存取层记得data members的排列次序” ,也不规定“virtual funcitons 和 virtual base class“的实现细节3.1  Data member 的布局C++ standard要求:在同一个access section 的member 按次序排列,而各自之间不一定

  • 深度探索C++对象模型第七章 站在对象模型的尖端

    7.1 Template Template的“具现“行为 (template instantiation)编译器看到template的声明,并不做任何的事情,只有等到template instantiation的时候, 定义出一个template class object 或者 template class refrence(引用必须初始化),才会相应的准备template class 内

  • 深度探索C++对象模型第四章 Data 语意学

    4.1 Member的各种调用方式   Nonstatic Member Functions : 速度和一般的Nonmember function 有相同的效率。 编译器会对nonstatic member function进行改造。加入this参数,改变函数内部的对member data 的使用方法,改变函数的名字--相当于nonmember function . 这里面有一个函数名字的处理

  • 风光储直流微电网Simulink仿真模型:光伏发电、风力发电与混合储能系统的协同运作及并网逆变器VSR的研究,风光储直流微电网Simulink仿真模型:MPPT控制、混合储能系统、VSR并网逆变器的设

    风光储直流微电网Simulink仿真模型:光伏发电、风力发电与混合储能系统的协同运作及并网逆变器VSR的研究,风光储直流微电网Simulink仿真模型:MPPT控制、混合储能系统、VSR并网逆变器的设计与实现,风光储、风光储并网直流微电网simulink仿真模型。 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能系统)、逆变器VSR?大电网构成。 光伏系统采用扰动观察法实现mppt控制,经过boost电路并入母线; 风机采用最佳叶尖速比实现mppt控制,风力发电系统中pmsg采用零d轴控制实现功率输出,通过三相电压型pwm变器整流并入母线; 混合储能由蓄电池和超级电容构成,通过双向DCDC变器并入母线,并采用低通滤波器实现功率分配,超级电容响应高频功率分量,蓄电池响应低频功率分量,有限抑制系统中功率波动,且符合储能的各自特性。 并网逆变器VSR采用PQ控制实现功率入网。 ,风光储; 直流微电网; simulink仿真模型; 光伏发电系统; 最佳叶尖速比控制; MPPT控制; Boost电路; 三相电压型PWM变换器;

  • 以下是针对初学者的 **51单片机入门教程**,内容涵盖基础概念、开发环境搭建、编程实践及常见应用示例,帮助你快速上手

    以下是针对初学者的 **51单片机入门教程**,内容涵盖基础概念、开发环境搭建、编程实践及常见应用示例,帮助你快速上手。

  • 【Python毕设】根据你提供的课程代码,自动排出可行课表,适用于西工大选课_pgj.zip

    【Python毕设】根据你提供的课程代码,自动排出可行课表,适用于西工大选课_pgj

  • 【毕业设计】[零食商贩]-基于vue全家桶+koa2+sequelize+mysql搭建的移动商城应用.zip

    【毕业设计】[零食商贩]-基于vue全家桶+koa2+sequelize+mysql搭建的移动商城应用

  • 电动汽车充电背景下的微电网谐波抑制策略与风力发电系统仿真研究,电动汽车充电微电网的谐波抑制策略与风力发电系统仿真研究,基于电动汽车充电的微电网谐波抑制策略研究,包括电动汽车充电负 载模型,风电模型,光

    电动汽车充电背景下的微电网谐波抑制策略与风力发电系统仿真研究,电动汽车充电微电网的谐波抑制策略与风力发电系统仿真研究,基于电动汽车充电的微电网谐波抑制策略研究,包括电动汽车充电负 载模型,风电模型,光伏发现系统,储能系统,以及谐波处理模块 风力发电系统仿真 ,电动汽车充电负载模型; 风电模型; 光伏发现系统; 储能系统; 谐波处理模块; 风力发电系统仿真,电动汽车充电微电网的谐波抑制策略研究:整合负载模型、风电模型与光伏储能系统

  • Vscode部署本地Deepseek的continue插件windows版本

    Vscode部署本地Deepseek的continue插件windows版本

  • 模拟电子学中滤波器的F0和Q参数详解及各类滤波器的设计方法

    内容概要:本文详细介绍了滤波器的两个关键参数——截止频率(F0)和品质因素(Q),并探讨了不同类型的滤波器(包括低通、高通、带通和带阻滤波器)的设计方法及其特性。文章首先明确了F0和Q的基本概念及其在滤波器性能中的作用,接着通过数学推导和图形展示的方式,解释了不同Q值对滤波器频率响应的影响。文中特别指出,通过调整Q值可以控制滤波器的峰谷效果和滚降速度,进而优化系统的滤波性能。此外,还讨论了不同类型滤波器的具体应用场景,如低通滤波器适用于消除高频噪声,高通滤波器用于去除直流分量和低频干扰,而带通滤波器和带阻滤波器分别用于选取特定频段信号和排除不需要的频段。最后,通过对具体案例的解析,帮助读者更好地理解和应用相关理论。 适合人群:电子工程及相关领域的技术人员、研究人员以及高校学生,特别是那些需要深入了解滤波器设计原理的人群。 使用场景及目标:适用于从事模拟电路设计的专业人士,尤其是希望掌握滤波器设计细节和技术的应用场合。目标是让读者能够灵活运用Q值和F0来优化滤波器设计,提升系统的信噪比和选择性,确保信号的纯净性和完整性。

  • QUARTEUSⅡ在EDA技术中的应用: CPLD/FPGA电路设计全流程解析与实例展示

    内容概要:本文主要讲述了利用QUARTUSⅡ进行电子设计自动化的具体步骤和实例操作,详细介绍了如何利用EDA技术在QUARTUSⅡ环境中设计并模拟下降沿D触发器的工作过程,重点探讨了系统规格设计、功能描述、设计处理、器件编译和测试四个步骤及相关的设计验证流程,如功能仿真、逻辑综合及时序仿真等内容,并通过具体的操作指南展示了电路设计的实际操作方法。此外还强调了QUARTUSⅡ作为一款集成了多种功能的综合平台的优势及其对于提高工作效率的重要性。 适用人群:电子工程、自动化等相关专业的学生或者工程师,尤其适用于初次接触EDA技术和QuartusⅡ的用户。 使用场景及目标:旨在帮助用户理解和掌握使用QUARTUSⅡ这一先进的EDA工具软件进行从概念设计到最后成品制作整个电路设计过程的方法和技巧。目标是在实际工作中能够熟练运用QUARTUSⅡ完成各类复杂电子系统的高效设计。 其他说明:文中通过具体的案例让读者更直观理解EDA设计理念和技术特点的同时也为进一步探索EDA领域的前沿课题打下了良好基础。此外它还提到了未来可能的发展方向,比如EDA工具的功能增强趋势等。

Global site tag (gtag.js) - Google Analytics