方法与工具
从最近遇到的几个故事说起.
故事一:
某天晚上和室友聊天,谈到使用Vim阅读代码,室友也是使用Vim的人,他说用类似ctags的查找定位功能不多,更多的时候,他阅读一段代码,要定位一个功能点,首先是从阅读代码文件的组织,了解项目的功能等入手,等这些都基本清楚了,定位起来就会快很多.我虽然认为,ctags实在是Vim里面一个很不错的功能,不用这个实在可惜,但是他说的那套定位思路其实也是不错的方法.其实我自己用惯了ctags类的功能之后,阅读代码的时候也会用惰性,更多的时候是要靠这些工具来帮我定位,而不是通过自己主动的思考和分析.
故事二:
我的经验里面,写完一段代码之后的第一次编译,如果编译器报错越少,那么可以认为这段代码将来可能出现bug的几率越小,简而言之,我认为代码的质量与第一次编译的报错数量成反比(哦,不用拿helloworld类的程序跟我钻牛角尖了:).有些人写的代码,哗哗的写了一大段,写之前不考虑好,只想着到时候写的不对了可以在编译由编译器的报错来帮忙找问题,这个思路是不对的.编译报错越少的代码,说明了作者写的时候思路更清晰一些,考虑的更周全一些,所有的这些流程上的步骤走的都不错了,所以才有最后编译报错少的结果.编译报错应该是写代码的结果之一,而不应当当成了找代码问题的手段,这样的思路,本末倒置了.
故事三:
进入新项目组后,组内对代码编码的流程有比较严格的要求,包括写一个API之后需要写一个针对这个API的各种情况的测试用例,提交代码的时候,需要走codereview流程,需要使用cpplint检验代码风格,需要将对应的测试用例也提交上去.这一套流程走下来,提交代码的频率比之以前,降低了很多,但是不可否认的是,也确实提高了代码的质量.假设一个功能,由N个API构成,如果能对这N个API都做过详细的测试,保证它们的输入和输出在各种情况下都能符合要求,那么很显然的,最后这个功能也应该是正确的.反之,越是到了测试阶段需要使用类似gdb这样的调试器来定位问题的,会越让人不放心---因为没有制度和流程的保证,谁也不能说将来可能在哪个点会出问题.它可以帮你定位问题,但是没有办法告诉你已经没有问题了,最后这一点,最终还是要通过严格的单元测试等流程来保证的.与第二个故事相同,我认为,在测试阶段使用gdb定位问题的次数也与代码的质量成反比:)
这几个故事综合起来,想要表达的是,做一件事情,需要有流程,制度的保证,当然也需要工具(比如这几个故事里面提到的Vim,gcc,gdb),但是工具就是工具,它只是一种手段,没有办法替代正确的思路,流程和制度等,仅能在整个过程中起到辅助的作用.而且,过分依赖工具,也会给人以惰性(比如前面提到的使用编译器编译代码来找错,比如使用gdb来保证功能正确性等).
所以,更应该提倡的是正确的流程,制度,有了这些,项目的质量才能有所保证.比如,在写一个功能点时,需要具体分解为哪几步,每一步有哪几个API,针对它们的测试用例有哪些,测试时的输入和输出有哪些,需要考虑的异常情况有哪些,等等的.这些都考虑清楚了,再动手写,久而久之,我想这方面的能力会慢慢的提高.
故事一:
某天晚上和室友聊天,谈到使用Vim阅读代码,室友也是使用Vim的人,他说用类似ctags的查找定位功能不多,更多的时候,他阅读一段代码,要定位一个功能点,首先是从阅读代码文件的组织,了解项目的功能等入手,等这些都基本清楚了,定位起来就会快很多.我虽然认为,ctags实在是Vim里面一个很不错的功能,不用这个实在可惜,但是他说的那套定位思路其实也是不错的方法.其实我自己用惯了ctags类的功能之后,阅读代码的时候也会用惰性,更多的时候是要靠这些工具来帮我定位,而不是通过自己主动的思考和分析.
故事二:
我的经验里面,写完一段代码之后的第一次编译,如果编译器报错越少,那么可以认为这段代码将来可能出现bug的几率越小,简而言之,我认为代码的质量与第一次编译的报错数量成反比(哦,不用拿helloworld类的程序跟我钻牛角尖了:).有些人写的代码,哗哗的写了一大段,写之前不考虑好,只想着到时候写的不对了可以在编译由编译器的报错来帮忙找问题,这个思路是不对的.编译报错越少的代码,说明了作者写的时候思路更清晰一些,考虑的更周全一些,所有的这些流程上的步骤走的都不错了,所以才有最后编译报错少的结果.编译报错应该是写代码的结果之一,而不应当当成了找代码问题的手段,这样的思路,本末倒置了.
故事三:
进入新项目组后,组内对代码编码的流程有比较严格的要求,包括写一个API之后需要写一个针对这个API的各种情况的测试用例,提交代码的时候,需要走codereview流程,需要使用cpplint检验代码风格,需要将对应的测试用例也提交上去.这一套流程走下来,提交代码的频率比之以前,降低了很多,但是不可否认的是,也确实提高了代码的质量.假设一个功能,由N个API构成,如果能对这N个API都做过详细的测试,保证它们的输入和输出在各种情况下都能符合要求,那么很显然的,最后这个功能也应该是正确的.反之,越是到了测试阶段需要使用类似gdb这样的调试器来定位问题的,会越让人不放心---因为没有制度和流程的保证,谁也不能说将来可能在哪个点会出问题.它可以帮你定位问题,但是没有办法告诉你已经没有问题了,最后这一点,最终还是要通过严格的单元测试等流程来保证的.与第二个故事相同,我认为,在测试阶段使用gdb定位问题的次数也与代码的质量成反比:)
这几个故事综合起来,想要表达的是,做一件事情,需要有流程,制度的保证,当然也需要工具(比如这几个故事里面提到的Vim,gcc,gdb),但是工具就是工具,它只是一种手段,没有办法替代正确的思路,流程和制度等,仅能在整个过程中起到辅助的作用.而且,过分依赖工具,也会给人以惰性(比如前面提到的使用编译器编译代码来找错,比如使用gdb来保证功能正确性等).
所以,更应该提倡的是正确的流程,制度,有了这些,项目的质量才能有所保证.比如,在写一个功能点时,需要具体分解为哪几步,每一步有哪几个API,针对它们的测试用例有哪些,测试时的输入和输出有哪些,需要考虑的异常情况有哪些,等等的.这些都考虑清楚了,再动手写,久而久之,我想这方面的能力会慢慢的提高.
相关推荐
本文将详细解析“osgb格式转obj,osg转osgb,osgb转ive,ive转obj”等相关知识点,以及如何使用相应的互转工具。 1. osgb格式: OSGB(Open Scene Graph Binary)是一种基于Open Scene Graph (OSG) 的二进制文件...
标题中的"C语言转C#语言工具"是一款帮助程序员将C语言编写的代码转换为C#语言的工具。这种工具在跨平台开发或者需要利用C#的特性时特别有用,例如在.NET框架下工作。C语言是一种底层、高效的语言,而C#则提供了更...
"C转Java工具"就是这样一个工具,它能够将大部分C语言的语法转化为等效的Java语法,使得C语言编写的程序能够在Java平台上运行或者进行进一步的Java优化。这个工具的出现,对于那些已经拥有大量C语言代码库但又希望...
CDM方法学工具提供了明确的界定标准,确保项目的减排目标与全球气候变化目标相一致。 2. **基准线设定**:确定如果没有该项目,预计的温室气体排放量。这是衡量项目减排效果的重要参考,也是计算碳信用的关键。 3....
PDF转WORD工具是一种实用软件,专门设计用于将PDF文件转换为可编辑的Microsoft Word文档格式。在日常工作中,人们可能需要对PDF文件进行修改或编辑,由于PDF的固有特性,直接编辑通常较为困难,因此这类转换工具显得...
单片机编程与烧录是电子工程领域中的基础工作,其中涉及到不同的文件格式,如HEX和BIN。本文将深入探讨这些格式以及“单片机hex转bin工具”的相关...掌握这类工具的使用方法,对于提升单片机项目开发效率具有重要意义。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和应用程序之间的数据传输,因为它易于读写,...在实际开发中,了解和掌握这些工具的使用方法对于提升JSON处理能力是非常有益的。
"TXT转BIN工具"就是这样的一个实用程序,它允许我们将文本文件转换为二进制文件。这种转换在很多场景下非常有用,比如编程、数据存储或者逆向工程等。接下来,我们将深入探讨这个过程以及相关知识点。 首先,我们要...
生成的Java Bean类会包含与XML元素相对应的字段,以及用于设置和获取这些字段值的方法。 描述中提到的"xml 转Java bean工具"进一步强调了这是一个专注于转换功能的工具。它可能是通过命令行界面或图形用户界面操作...
本文将详细介绍OZIP格式、如何将其转换为ZIP格式,以及相关工具的使用方法。 首先,OZIP格式是OPPO手机官方用于卡刷包的特定压缩格式,它包含了系统更新或恢复所需的全部文件。这种格式可能包含特定的头部信息和...
在JNI开发中,通常会编写Java代码来定义本地方法,然后使用JNI头文件生成对应的C/C++代码,编译后与Java字节码一起运行。 C++转Java工具的工作原理可能包括语法解析、类型映射和代码重构等步骤。它会读取C++源代码...
总之,批量转UTF8工具是处理大量文本文件编码转换的高效工具,对于需要处理多语言内容或进行跨平台协作的用户来说,掌握其使用方法是非常必要的。无论是个人项目还是企业级应用,这种工具都能显著提高工作效率,减少...
2. **工具类**:创建TreeUtil类,提供`listToTree(List)`方法,接收一个Node列表,返回转换后的树结构。 ```java public class TreeUtil { public static List<TreeNode> listToTree(List<TreeNode> nodeList) { ...
总结一下,`MapUtils`工具类是Java开发中的一个实用组件,它简化了`Map`数据与实体类之间的转换。通过提供便利的方法,开发者可以快速地将键值对数据转换为具有相应属性的对象,反之亦然。这种数据转换能力在处理...
本文将深入探讨这一工具的原理、使用方法以及注意事项。 首先,我们需要理解什么是“转区”。在Windows系统中,每个操作系统都有一个默认的区域设置,它定义了系统如何处理字符编码,包括显示文字的方式。当运行...
综上所述,"java转js工具"是一个重要的开发辅助工具,它帮助开发者在Java和JavaScript之间架起桥梁,使得跨平台开发变得更加便捷。然而,使用时需要注意语言特性的差异,以及转换过程中可能出现的问题和挑战。
这种工具的主要功能就是为IPv6用户建立与IPv4网络的连接。 **IPv4与IPv6的区别** 1. 地址长度:IPv4使用32位地址,最多可提供约43亿个地址,而IPv6使用128位地址,理论上可以提供几乎无限的地址数量。 2. 地址表示...
VB代码转C#代码工具是一种专门用于将Visual Basic (VB)编写的代码转换为C#语言的工具。这种工具在跨平台开发或者需要在不同编程环境中重用代码时显得尤为重要。VB和C#都是.NET框架下的编程语言,它们在语法和结构上...
J2C工具的核心功能在于它能解析Java源代码,理解和转换其中的语法结构、类、对象、接口、方法等,将其转换为相应的C++语法。这涉及到对两种语言的语法规则、类型系统、异常处理、内存管理等方面的深刻理解。例如,...
"hexASCII互转.exe"这个文件很可能是一个实用工具,用于帮助用户方便地进行ASCII和十六进制之间的转换。这样的工具通常会有简单的用户界面,用户只需输入文本或十六进制数,点击转换按钮,程序就会自动完成转换过程...