1.理解你的需求
成为一个有效率的程序员首先要知道如何正确的支配自己的时间。对时间最大的浪费莫过于去做那些没有用处或者永远不会上线的项目。而导致这种结果的根源往往是对需求理解的偏差。
要最大程度避免这种情况的发生,最好的办法是快速建模,尽可能让演示系统早点出来。对于客户来说,只有看得到摸得着的产品摆在面前,他们才会有兴趣去试用观察,才会在实际的操作中发现供需双方在需求理解上的偏差。否则即使你写上几百页的需求分析文档也只能是自己的一面之词,客户可没耐心去检查这些文档写的是否准确。
另一方面,你应该让每一个阶段的开发成果都能够尽早的提交给客户。让他们以完全不考虑操作合理性和业务逻辑性的傻瓜级操作来发现程序员编程中的固有思维局限。尤其必须让QA尽早的介入到项目开发中来。如果能够每天提交一份测试版本给QA自然是最理想的了,但大多数项目开发做不到这样的粒度,那么就争取每周提交一份可测试版本。重要的是应该让QA和开发能够保持交错并行状态。只有这样,才能让QA尽早发现bug,降低每个bug的修复成本,同时缩减独立测试周期的跨度。
程序员往往不愿意把半成品代码交付给测试人员,相反他们更喜欢在所有代码都完工,达到自己满意的程度之后再让别人来测试。因为在这之前的代码往往存在很多程序员自己知道需要修改(或者故意留待后续补全)的流程缺失和Bug,测试人员并不知道哪些是真正的Bug,哪些只是临时性的运行错误,每次都会一股脑儿作为Bug反馈给程序员。这往往让程序员们心烦。同时测试人员有时候也不喜欢测试这种很多分支都走不通的中间版本。
但不管喜不喜欢,测试并发现问题是测试人员的工作;程序员则应该认识到,Bug反馈得越早就越是件好事情。QA和开发之间的关系往往很敌对,可实际上双方的目标是一致的。“忠言逆耳”古训有之,对于程序员来说就应该“有则改之,无则加勉”。总好过项目完成之后才发现一堆的问题,到那时候再要做修改,基本上都会牵一发而动全身,痛苦的还是程序员自己。
2.保持真实性
尽可能让你的系统运行在最接近真实环境配置下面,使用有实际意义的数据和真实的编译版本,并经常性进行模块整合。如果你的测试环境使用的数据都是些胡乱添加的东西,那么将来和测试数据大相径庭的真实数据这块大冰山早晚会撞沉你的程序。另一方面如果你只在开发环境来编译运行测试,会发现正式发布之后有各种各样莫名其妙的问题产生,到最后原来都是因为环境配置与开发环境有些不起眼的差异所导致。把所有模块整合进行编译联调,看上去应该是最后作的一项附加工作,但实际上这是一项需要在开发过程中经常性进行的工作。只有这样QA才能有最完整的东西拿来测试,得到更多的Bug反馈,同时降低模块整合的难度。
3.理解你的代码
书写规范的代码,并保持代码的整洁。Coding是一门艺术。正如写作一样,同样的文字在文豪的笔下就能够熠熠生辉,读起来赏心悦目;在普通人的笔下大概就只是词能达意的效果了;在某些人的笔下或许就需要研究半天才能猜出个大概来。当然不可能人人都成为艺术家,但至少你可以学会欣赏艺术、学习艺术。书写漂亮的代码是对自己工作的尊重,也是对其他程序员的尊重。如果你的代码中间充斥着大段过时的注释、可读性差的变量/函数,怎么去要求别人或者自己以后能够理解它们?
4.最优编程
把你的时间花在代码的功能上, 而不是去把现有的代码改得对自己胃口(尤其对于那些copy/paste过来的代码);要找到系统的瓶颈进行优化,而不是对那些无益于系统整体性提高的地方做无用功。
5.管理好你自己
也许有人会说计划和进度控制是PM的事情,但一个好的程序员应该比PM更了解自己目前工作的进度。不论上头给的进度计划是否合理,你都应该有自己的原则和概念,清楚知道每天该做什么怎么去做。
6.持续教育
只有不断的学习、实践、犯错误,你才会真正有所提高。在我看来,对于程序员来说最好的老师不在学校,而在书本、网络、社区。学会自我学习才能保持与时俱进。
7. R-E-S-P-E-C-T
互相尊重是一切的基础。
成为一个有效率的程序员首先要知道如何正确的支配自己的时间。对时间最大的浪费莫过于去做那些没有用处或者永远不会上线的项目。而导致这种结果的根源往往是对需求理解的偏差。
要最大程度避免这种情况的发生,最好的办法是快速建模,尽可能让演示系统早点出来。对于客户来说,只有看得到摸得着的产品摆在面前,他们才会有兴趣去试用观察,才会在实际的操作中发现供需双方在需求理解上的偏差。否则即使你写上几百页的需求分析文档也只能是自己的一面之词,客户可没耐心去检查这些文档写的是否准确。
另一方面,你应该让每一个阶段的开发成果都能够尽早的提交给客户。让他们以完全不考虑操作合理性和业务逻辑性的傻瓜级操作来发现程序员编程中的固有思维局限。尤其必须让QA尽早的介入到项目开发中来。如果能够每天提交一份测试版本给QA自然是最理想的了,但大多数项目开发做不到这样的粒度,那么就争取每周提交一份可测试版本。重要的是应该让QA和开发能够保持交错并行状态。只有这样,才能让QA尽早发现bug,降低每个bug的修复成本,同时缩减独立测试周期的跨度。
程序员往往不愿意把半成品代码交付给测试人员,相反他们更喜欢在所有代码都完工,达到自己满意的程度之后再让别人来测试。因为在这之前的代码往往存在很多程序员自己知道需要修改(或者故意留待后续补全)的流程缺失和Bug,测试人员并不知道哪些是真正的Bug,哪些只是临时性的运行错误,每次都会一股脑儿作为Bug反馈给程序员。这往往让程序员们心烦。同时测试人员有时候也不喜欢测试这种很多分支都走不通的中间版本。
但不管喜不喜欢,测试并发现问题是测试人员的工作;程序员则应该认识到,Bug反馈得越早就越是件好事情。QA和开发之间的关系往往很敌对,可实际上双方的目标是一致的。“忠言逆耳”古训有之,对于程序员来说就应该“有则改之,无则加勉”。总好过项目完成之后才发现一堆的问题,到那时候再要做修改,基本上都会牵一发而动全身,痛苦的还是程序员自己。
2.保持真实性
尽可能让你的系统运行在最接近真实环境配置下面,使用有实际意义的数据和真实的编译版本,并经常性进行模块整合。如果你的测试环境使用的数据都是些胡乱添加的东西,那么将来和测试数据大相径庭的真实数据这块大冰山早晚会撞沉你的程序。另一方面如果你只在开发环境来编译运行测试,会发现正式发布之后有各种各样莫名其妙的问题产生,到最后原来都是因为环境配置与开发环境有些不起眼的差异所导致。把所有模块整合进行编译联调,看上去应该是最后作的一项附加工作,但实际上这是一项需要在开发过程中经常性进行的工作。只有这样QA才能有最完整的东西拿来测试,得到更多的Bug反馈,同时降低模块整合的难度。
3.理解你的代码
书写规范的代码,并保持代码的整洁。Coding是一门艺术。正如写作一样,同样的文字在文豪的笔下就能够熠熠生辉,读起来赏心悦目;在普通人的笔下大概就只是词能达意的效果了;在某些人的笔下或许就需要研究半天才能猜出个大概来。当然不可能人人都成为艺术家,但至少你可以学会欣赏艺术、学习艺术。书写漂亮的代码是对自己工作的尊重,也是对其他程序员的尊重。如果你的代码中间充斥着大段过时的注释、可读性差的变量/函数,怎么去要求别人或者自己以后能够理解它们?
4.最优编程
把你的时间花在代码的功能上, 而不是去把现有的代码改得对自己胃口(尤其对于那些copy/paste过来的代码);要找到系统的瓶颈进行优化,而不是对那些无益于系统整体性提高的地方做无用功。
5.管理好你自己
也许有人会说计划和进度控制是PM的事情,但一个好的程序员应该比PM更了解自己目前工作的进度。不论上头给的进度计划是否合理,你都应该有自己的原则和概念,清楚知道每天该做什么怎么去做。
6.持续教育
只有不断的学习、实践、犯错误,你才会真正有所提高。在我看来,对于程序员来说最好的老师不在学校,而在书本、网络、社区。学会自我学习才能保持与时俱进。
7. R-E-S-P-E-C-T
互相尊重是一切的基础。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1596892
相关推荐
如果SqlDbType为Char型或Varchar型,<br>则会认为一个汉字的长度为2.<br>在CommonFunction.Windows.Forms命令空间下,存在相应的DataTextBox\\DataCombox\\DataForm.<br>为开发数据库操作系统提供高效\\快捷的解决方案...
本书名为《高效程序员的45个习惯 敏捷开发修炼之道》,由Venkat Subramaniam和Andy Hunt两位作者共同撰写。书中所提到的45个习惯,不仅涉及软件开发过程、编程和调试工作,还包括了开发者的个人态度、项目和团队管理...
`<div>`用于组织和布局页面内容,`<p>`用于段落,`<h1>`到`<h6>`定义了六级标题,`<img>`插入图像,`<a>`创建超链接。 在商业站点开发中,表单元素是必不可少的,如`<form>`、`<input>`、`<textarea>`、`<select>`...
<br><br>以下书评转自电驴:http://www.v91v.com/ed-info/41/10693.html<br><br>========================================<br> 从编译器的角度观察C++可以使你知其然并知其所以然.本书探讨了大量的C++面向对象程序...
此外,C++标准库还包括了基本类型转换(如`<charconv>`)、容器(如`<deque>`、`<forward_list>`、`<map>`、`<set>`、`<stack>`、`<queue>`、`<unordered_map>`、`<unordered_set>`等)、迭代器、智能指针(如`...
原子操作库(<atomic>)是C++11引入的一个新特性,用于支持多线程环境中的无锁编程。它提供了atomic结构和atomic_flag结构,以及相关的函数和枚举,为多线程编程中的数据保护和并发控制提供了基础。 C++标准库还...
<td>${status.count * 3 + item}</td> </tr> </c:forEach> </table> ``` 这里的`list`应当是一个包含"1,2,3,4"和"5,6,7,8"的列表,`varStatus`用于获取循环的状态,从而实现列的递增。 三、MySQL查询语句 查询某...
map <F8> :cs add .<CR>:cs find s <C-R>=expand("<cword>")<CR><CR> map <F9> :cs find d <C-R>=expand("<cword>")<CR><CR> map <F10> :cs find e <C-R>=expand("<cword>")<CR><CR> map <F11> :cs find f <C-R>=...
【淡蓝色清新设计程序员个人简历网站模板】是一个专为程序员设计的在线个人简历展示平台,其特点是采用淡蓝色调,营造出清新、简洁的视觉效果,以吸引潜在雇主的注意。这种模板通常基于HTML5技术,能够适应各种设备...
PageInfo<User> pageInfo = new PageInfo<>(users); return pageInfo; } ``` 总结一下,本教程详细介绍了如何在Spring Boot项目中集成MyBatis,并利用PageHelper分页插件实现数据的分页查询。这包括了添加依赖、...
本指导书旨在帮助程序员更好地理解其工作职责,确保项目高效、高质量地完成。通过规范化的指导,提高团队协作效率,满足客户需求。 #### 范围 适用于所有从事前端开发工作的程序员。 #### 流程说明 1. **需求收集*...
nnoremap <F6> :ALEFix<CR>:!gdb --args %< %< <CR> ``` 这段配置中,F5会编译当前文件并运行,F6则会使用GDB进行调试。注意,这里假设你正在使用G++编译器,并且已经安装了GDB。如果你的环境不同,需要根据实际...
高效程序员的45个习惯 英文完整版 V.Subramaniam, A.Hunt - Practices of an Agile Developer - Working in the Real World. 2006.pdf
在第二个例子中,`debug.Test`类的构造函数内部的除法运算出错,异常信息定位在`<init>`方法,表明这是在对象创建过程中执行初始化时发生的。 初始化顺序: 1. 首先,JVM会加载类,并解析类的字节码,这个过程中会...
2. `<fstream>`:这个头文件提供了用于读写文件的类,如`std::ifstream`(输入文件流)和`std::ofstream`(输出文件流),允许程序员进行文件操作。 3. `<sstream>`:此头文件包含`std::istringstream`和`std::...
`<position>`可以是一个整数值,表示在目标变量的哪一项之前插入;也可以是一个表达式,计算出的位置用于插入。 3. 使用场景: - 在循环中动态生成代码:当需要根据某些条件生成不同数量的代码块时,INSERT函数...
<TD><TEXTAREA NAME=text ROWS=5 COLS=50 VALUE=""></TEXTAREA></TD></TR> <TR><TD></TD> <TD><INPUT type=submit name=send value="Send the feedback!"></TD></TR> </TABLE></CENTER> </FORM> ``` 这段代码定义了...
STL(Standard Template Library)是C++标准程序库的一个组件,提供了许多有用的函数和类,可以帮助程序员快速开发高效的C++程序。STL中的库函数可以分为几大类:容器(Container)、算法(Algorithm)和迭代器...
这个类提供了简洁且高效的API,允许程序员以结构化的方式访问和修改XML内容。 XML是一种自描述的数据格式,它使用标签来定义数据结构和内容。例如,一个简单的XML文档可能如下所示: ```xml <book> <title>标题</...