阅读更多

23顶
0踩

非技术
以下是我作为一名程序员经过10几年时间总结出的一些有关于软件开发的经验规则:



开发

1.从小事做起,然后再扩展

无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止。我从来没有妄想过能够一步登天。相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中。

我很喜欢John Gall的这句话:“复杂系统总是源于简单系统的演化。”



2.一次只改变一件事

当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键。换言之,就是使用短迭代。必须确保这个问题解决之后,再转移到另一个问题上。这适用于向下提交。如果在你添加新功能之前需要先重构代码,那么先提交重构,然后再添加新的功能。

3.尽早地添加日志记录和错误处理

在开发新系统时,我做的第一件事就是添加日志和错误处理,因为这两者从一开始就非常有用。如果系统不能照常工作,那么你就需要知道程序中发生了什么——这是日志的作用。错误处理也是如此——错误和异常越早处理越好。

4.每一行新代码必须至少执行一次

在你真正完成一个功能之前,你必须对它进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。不过,不管怎么说,每一行新代码必须至少执行一次。

5.在整体测试之前先进行模块测试

先进行部分模块测试可以节省时间。通常说来,我们在整合不同的模块时也会出现问题,例如模块之间的接口不匹配。但是如果我们能够信任各个组件的话,那么跟踪集成问题就会变得简单得多。



6.所有事情所花费的时间总是比你预期的要长

特别是在编程中,即使一切进展顺利,我们也很难对功能所需的时间做出正确的预算。并且,开发软件时碰到各种意想不到的问题是非常常见的。

侯世达定律其实道出了真谛:做事所花费的时间总是比你预期的要长,即使你在预期中已经考虑了侯世达定律。

7.先了解现有的代码

大多数的编码都需要以某种方式改变现有的代码。即使是新功能,也需要适应现有的程序。所以,在你加进去新的内容前,首先需要了解当前的解决方案。否则,你一不小心就很有可能会打破现有的功能。这意味着,阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因之一——你首先必须了解上下文。

8.阅读和运行

幸运的是,对于理解代码,我们有两种互补的方法。你可以阅读代码,也可以运行代码。运行代码的确是个非常棒的好方法。所以,请确保充分利用这两种方法。
故障排除

9.bug总是难免的

我不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。

10.解决故障报告

每个开发人员都应该花时间去处理来自客户的故障报告,并修复bug。这能让你更好地理解客户的意图,明白如何使用系统,知道排除故障的难易程度,了解系统的设计情况。这也是为自己的开发成果负责的好方法。



11.重现问题

修复bug的第一步就是重现问题。然后你得确保修复之后,问题能够彻彻底底地消失。这样一个简单的规则可以确保你不会误将非问题当作是问题,并确保解决方案真的能够奏效。

12.修复已知错误,然后再看看有没有遗漏的地方

有时候,可能同时存在着几个不同的问题。它们之间的互相作用,可能会让你毫无头绪,束手无策。不要纠结于搞清楚发生了什么,先去解决所有已知的问题,然后再看看还有什么不对的地方。

13.没有巧合

在测试和故障排除时,不要相信会出现什么巧合。就像你改变了定时器的值,那么就会改变系统重启的频率。所以一切都并非是巧合。添加新功能,另一个不相干的功能变慢了?这绝对不是巧合。相反,是你应该仔细调查的内容。

14.关联时间戳

在故障排除时,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。
团队合作

15.面对面的交流最有效

当我们需要讨论如何解决问题时,那么面对面的交流比视频、打电话和电子邮件都要好。



16.橡皮鸭法

遇到你绞尽脑汁也解决不了的问题时,不妨找一个同事,然后将问题解释给他们听。很多时候,当你在叙述时,即使你的同事一言不发,你可能也会突然灵光乍现找到问题的关键。

17.问问题

阅读和运行代码往往非常有助于指出代码的目的和它的工作原理。但是如果你有机会咨询那些更为了解的人(例如原来的程序员),那么千万不要错过。

18.共享荣誉

不要贪图荣誉,该是谁的就是谁的。例如:“Marcus想出了这个主意……”(如果真是他想的话),而不要说“我们想出的……”。
其他

19.尝试

如果你不知道某种编程语言功能的工作原理,那么不妨写一个小程序来理解它是如何工作的。这同样适用于测试你正在开发的系统。如果我将参数设置为-1,会发生什么?当我在重启系统时,如果服务当掉,会发生什么?以此来研究它的工作原理。

20.带着问题睡觉

如果你正在解决一个很难的问题,那么不妨带着问题睡觉。有科学研究表明,这样做虽然你表明上并没有在主动思考,但你的潜意思却这么做了。其结果就是,第二天再去研究问题,解决方案已经呼之欲出了。

21.跳槽

不要害怕跳槽。和不同的人共事,开发不同的产品,感受不同的公司文化是非常有意思的。



22.不断学习

我们需要不断地学习和了解软件开发。你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。

希望这些经验能对大家有用。如有不当之处,敬请指正。

译文链接:http://www.codeceo.com/article/10-years-20-tips-programmer.html
英文原文:Lessons Learned in Software Development
翻译作者:码农网 – 小峰
  • 大小: 124.9 KB
  • 大小: 46.5 KB
  • 大小: 54.6 KB
  • 大小: 146.3 KB
  • 大小: 45.4 KB
  • 大小: 72.4 KB
来自: 码农网
23
0
评论 共 4 条 请登录后发表评论
4 楼 ayanami001 2015-07-02 15:45
跳槽的确是王道
3 楼 newerdragon 2015-06-17 14:29
QING____ 写道
非常赞同,最赞同就是跳槽:
一名开发工程师,如果在年轻的时候,不能经历多种复杂的产品应用,不能深入了解多种技术场景,最终并不能对技术有非常全面而深入的了解。只demo,不production,纸上谈兵,非常危险。

 
2 楼 njitjiang 2015-05-29 17:34
16条,深有体会,呵呵。
1 楼 QING____ 2015-05-21 14:22
非常赞同,最赞同就是跳槽:
一名开发工程师,如果在年轻的时候,不能经历多种复杂的产品应用,不能深入了解多种技术场景,最终并不能对技术有非常全面而深入的了解。只demo,不production,纸上谈兵,非常危险。

发表评论

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

相关推荐

  • 10+年程序员总结的20+条经验教训,看完必须转发、收藏、学习

    对于初学者还是有用的开发经验,适合开发者的使用

  • JSP页面翻译原理

    众所周知,每一个JSP页面都会被Web容器编译成一个Java类,供web容器调用,并且生成HTML叶面回馈给用户。而了解其中的变异方法和规则,对我们学习JSP是非常有好处的,可以说学习好了这个编译原理,就已经学习好了大部分的JSP知识,剩下的工作就只剩下熟记一些tablib和反复应用以使自己更加熟练而已了。。 先来看一下JSP页面所对应的Class的基本结构。每一个JSP页面都会被编译成成如下的格...

  • JSP的几种中文解决方案

    学习J2EE至今,项目也只做了两个,中途遇到一些问题,最多的可能要数中文显示及插入数据库的中文问题。现总结如下:(一)定义中文转换方法:新建JSP页面,命名为toChinese.jsp 也可以是别的;定义方法为:String toChinese(String str) {  String rs = null;  byte[] temp;  try {    te

  • JSP中表达式的使用

    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) JSP表达式用于向页面中输出信息,其语法格式如下: <%= 表达式 %> 参数说明: 表达式:可以是任何Java语音的完整表达式。该表达式的最终运算结果将被转换为字符串。 下面举一些简单示例演示...

  • jsp页面值集转换、数值类型转换中文描述

    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://ja.

  • jsp的中文处理解决方法(原创)

    jsp的中文处理解决方法(原创)    和Java一样,JSP是目前比较热门的一个话题。它是一种在服务器端编译执行的Web设计语言,因为脚本语言采用了Java,所以JSP继承了Java的所有优点。可是在使用JSP程序的过程中,常遇到中文乱码问题,很多人为此头疼不已,初学的时候我就深受其害,而且使用平台不同,中文乱码问题的解决方法也不同,无形中增加了学习JSP的难度。其实,在彻底了解相关原因后,问题

  • (转)10+年程序员总结的20+条经验教训

    今天看到一个【10+年程序员总结的20+条经验教训】,转了几个如下开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再...

  • 老程序员总结的四条工作经验教训,一部血泪史,推荐观看

    期间踩过很多坑,今天特意总结四条经验教训,送给年轻的程序员们。程序员在工作中,接需求的时候,千万不要做小需求、小优化、小迭代。你以为是偷个懒,减轻自己的工作量,其实大大加重了自己的工作量。在你做了很多...

  • 老程序员总结的16条经验教训

    这 方面我的经验教训也是惨痛的。我大概前后购买过5-6个笔记本,以前的都是1万多元一台,最近买的是一台是1万多给女朋友的,自己买了一台是7500元左 右,手机大概换过接近10个了,这些钱加起来也足够有10万以上了,...

  • 如何在JSP中处理中文

    如何在JSP中处理中文 在一个Web应用中经常需要向服务器传递一些参数,一般通过form向服务器发送一个POST请求。在参数中有可能包含中文信息,如用户信息登记、购物定单中的地址信息等等。参数字符串一般用本地字符集进行编码,如中文采用GB2312或GBK字符集,英文或西欧文字采用ISO8859_1字符集,但在Java程序中一律采用Unicode处理字符串,这就需要有一个编码转换的过程。不幸的是,现

  • 解决JSP数据输入中文乱码问题

    网上有不少文章总结JSP处理中文的问题,页面的问题现在基本上已经不成为问题了,解决的办法很简单,在页头加上 :一般就能解决问题了,另外meta type最好一致: 而此法并不能解决用户输入的数据是中文的问题,用户在表单中填入的数据,如果是中文(或任何非ISO字符集),程序处理时(比如放入数据库),就会出现问题。解决办法是,在下一页(就是处理post/get请求的页/serv

  • 解决JSP中文乱码问题

    大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果J

  • JSP中文问题解决方法

    JSP页面输入中文乱码 JSP代码编写是让许多人头疼的,因为在许多代码的编写中是不会报错的只能自己去发现修改。这几天我就快被JSP中的中文乱码给逼疯了。 起初只是在jsp页面输出时乱码,但是这个经过老师的讲解是很容易就解决了,当第二次出现乱码时,就不太好解决了,各种百度各种找资料才解决掉,但是这次的中文乱码是有很多种情况的,需要依据自己代码的问题而进行解码。 1、JSP页面代码中文输出乱码 这是最常见也是最容易解决的中文乱码问题,这是因为我们使用了其他国家的编码,这是我们可以改用***UTF-

  • 解决JSP中文显示问题的几个方法

    解决JSP中文显示问题的几个方法总结了以下几条方法:1、在jsp页中加入一条语句: 中文显示就正常了。 2、对于从网页中的文本框通过String parameter = request.getParameter(“parameter”);方式获得的字符串,均是8859_1的编码,如果想把它显示在网页上就必须得用parameter = new String(paramet

  • 工作10年程序员总结的10个血泪教训!

    这方面我的经验教训也是惨痛的。我大概前后购买过 5-6 个笔记本,以前的都是 1 万多元一台,最近买的这台 1 万多是给女朋友的,自己买了一台是 7500 元左右,手机大概换过接近 10 个了,这些钱加起来也足够有 10 万...

  • 工作 10 年的程序员总结的 10 个教训

    这方面我的经验教训也是惨痛的。我大概前后购买过 5-6 个笔记本,以前的都是 1 万多元一台,最近买的这台 1 万多是给女朋友的,自己买了一台是 7500 元左右,手机大概换过接近 10 个了,这些钱加起来也足够有 10 万...

  • 十年程序员总结经验

    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年...

  • 2021年程序员个人年终工作总结10篇

    2021年程序员个人年终工作总结10篇1 我是一名程序员,在过去的一年里,软件研发部团结协作,以及在公司这充满奋斗的环境下,我以严肃认真的工作态度和百折不饶的精神,努力的完成了公司的各项工作,在软件研发、团队...

  • 一位工作了10年的程序员总结了这10个血的教训

    1.不要轻易换笔记本电脑,不要跟潮流,不要买过多的电子产品,不要过于频繁的更换手机这方面我的经验教训也是惨痛的。我大概前后购买过 5-6 个笔记本,以前的都是 1 万多元一台,最近买的这台 1 万多是给女朋友的,...

Global site tag (gtag.js) - Google Analytics