- 浏览: 1031652 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
对于程序员来说,最有激情的一件事也许是领导或参与开发新项目,按照《走出软件作坊》的阿朱的话来说是在白纸上作画;与之相对的,对程序员来说最无趣的一件事应该是老系统维护。
新项目能给人带来成就感,在这个过程中,大家可以尽情地展示自己的技能,尽情地享受产品一天一天成型给自己带来的快乐。
老系统维护就让人沮丧了:做好了不是自己的功劳,做不好就是自己的无能。想把自己懂的那些设计模式、框架、 OO、 ORM、 AOP、IoC都施展出来?别逗了,能把之前没有文档支离破碎打满补丁惨不忍睹的代码弄明白就不错了,再说,原有的架构往往禁锢你发挥的空间,让你有劲使不出。
10月中旬,我来到新部门,没几天,就接手一个项目 ——一个工具软件的开发。
具体的情况是这样的:
1. 工具是客户定制的,要满足客户的一系列要求;
2. 业务人员初步的方案是在公司 A软件的基础上修改,使用 B软件产生的数据,我们的工具输出的结果供 C软件使用。其中 B软件是正式产品; C软件是 B软件的重构版本,和 B并不完全兼容,还未开发完成,计划年底上市; A软件正在测试阶段,还不完全稳定; A、 B、 C包括我要开发的工具软件都是基于单机版;
3. 时间是一个月,要出能用的一个产品,当然,考虑到实际情况,将它定为为过渡产品,之后还要重构和增加功能,比如网络协同;
4. 数据库采用的是一种具有特殊格式和特殊使用方法的数据库;
5. 产品 A属于一个部门, B、 C属于另一个部门,都和我们不是同一个部门;
6. A部门和 C部门要赶着年底的产品发版,非常地忙;
7. 我对业务一无所知,对软件 A、 B、 C一无所知,对这个数据库的使用一知半解;
8. 没有文档可以利用;
9. 代码的编写,是我一个人在战斗;
……
典型的老系统维护。
为了给自己打气,我也列举了一下有利的一些方面:
1. 我对这种程序语言比较熟悉;
2. 我有着几年的工作经历,有了一些处理这类问题的经验;
3. 业务人员非常配合,能够尽其所能给我讲解业务知识;
4. 公司文化非常好,同事之间很友善,矩阵型的组织方式便于资源的协调;
5. 代码质量不差,风格比较统一;
……
一个多月过去了,经过磕磕绊绊,和一些日子的加班熬夜,终于出了一个版本,更重要的是,在这个过程中我同时整理着老系统维护的一些方法和经验,试着总结出一个通用的流程,希望可以给自己以后类似的工作一个指导,也希望能给面临同样问题的同行一个参考。
我整理出的整个流程包括 10个 步骤,粒度的原则是每个步骤都不需要再细分,直接可以做事。也就是说,这里面没有理论,可以作为作业书了。这些方法主要来源于我的同事的经验、书中的知识 (比如阿朱的《走出软件作坊》)以及我的实践。这其中还用到了一些工具,也穿插着介绍,在本文的最后,会给出一个完整的列表。
接下来我将结合我这段时间的工作,介绍一下流程的每一个步骤。
第一步 调整心态
这并不是开玩笑,也不是在唱高调,心态对于做一件事的过程以及这件事的结果至关重要。
之前已经提过了老系统维护面临的困难,既然无法改变,就要勇于去接受,沮丧的心态对无益于自己的行动,首先要让自己有积极的心态。退一步,即使没有积极的心态,至少不带着情绪做事,不从心里就开始排斥。
这并不容易,我采取的办法主要有两点:
1. 给自己制定一个让自己觉得有挑战性的 目标。
2. 使用一个 小卡片 ,早晚各一次检视自己的心态变化。早上对自己鼓励,进行精神暗示,晚上对一天总结,及时调整。
针对我接手的项目,我给自己定的目标是用两个月的时间开发出满足客户需要的并且具有可维护性的软件产品。
顺带说一句,我们公司要求目标的制定符合 SMART-C原则,即具体的、可度量的、可实现的、相关联的、有时限的和有成本的。
为了不让自己过分疲劳,我对目标进行了细分,基本按照一个月一个周期,汲取了 Scrum中的 Sprint的思想。
经过一个简单的转换,恼人的 老系统维护变成一个具体明晰的目标,同时我的目标中满足客户需要是公司对我的要求,而软件具有可维护性是我自己给自己的要求,这样,这件事更有挑战性了, 也有趣一些了。同时,可维护性意味着自己要对代码进行重构,慢慢的一件维护工作转变成一件开创性的工作,心态也开始积极起来。
有了这个目标还不够,还需要采用一些手段来维持自己的心态。我的方法是用一个不大的卡片,最上面简要写着自己的目标,下面是积极心态的一些要求,每天早晚检视,在做到的条目上打勾,通过卡片强化自己的心态调控。
至于哪些是积极心态,我列举了一下(看过李践老师的《行动日志》的应该可以会心一笑了):
乐观自信
保证完成任务
绝不找借口
勇于承担责任,绝不推卸责任
当日事当日毕
坚守承诺
第二步 弄清要做的事情
这似乎有些简单,事实上却不简单。
程序员对业务的理解本身会带着一些先入为主的偏见,这里的先入指的我们常常带着技术的观点去倾听业务问题,并根据自己的直觉作出判断。
特别是自己对业务不熟、对之前的代码不熟、对将要做的事情不熟,我们很容易陷入彷徨的境地,甚至会有挫败的感觉,进而影响自己的心态。
下面是很常见的场景:
1. 业务人员:“明白了吗”
技术人员:“明白了”
……
技术人员:“这个流程是怎么回事?”
业务人员:“不是说过了吗?”
技术人员:“这么多东西我哪记得住?”
2. 技术人员:“做完了,你看看”
业务人员:“你这是啥啊,我明明说的要 @#¥”
技术人员:“你就是这样说的,不信你看”(从一堆的草纸中翻当时画的圈圈线线)
3. 技术人员:“怎么连个文档也没有?”
业务人员:“这么简单的问题还要文档?你怎么理解能力这么差啊?”
技术人员:“你自己写代码得了”
造成这些问题可能有下面这些原因:
1. 技术人员对业务背景不了解,无法跟上业务人员的思路和节奏;
2. 专业的不同造成理解偏差,有些问题业务人员觉得简单但是实现起来不容易,有些问题业务人员很熟悉而没有考虑到技术人员的业务储备;
3. 心态问题,技术人员怕被人认为自己能力差,没有及时反馈问题,不懂的地方寄希望于会谈后的总结,结果在事后往往记忆的还不如当时深刻,从而形成恶性循环;
4. 使用草图的形式,交流之后草图往往一团乱麻,无法查看和复用。即使草图清晰,也只能看到结果而看不到之前的推导过程;
5. 还可能有一些客观原因:文档不全,其他部门配合问题等等。
对于如何弄清要做的事情,或者说如何把握好需求,我采用了下面的方法,其中包括一个工具 ——思维导图。
1. 在了解需求之前先 做好准备 ,比如将之前类似的程序运行一遍,了解主要功能;尽可能寻找相关文档,了解业务背景;列出自己不明白的地方和待确认的地方;列出计划和提纲,不要一次接受太多的业务知识;
2. 在和业务人员交流的过程中,学会 确认 。对于一个业务点或者问题,在业务人员讲解之后通过自己重复和确认一次,保证自己已经理解到位了;
3. 放 平和心态 ,不要因为怕被别人以为理解能力差就不懂装懂,如果当时表示理解了之后出错或者反复询问更会被人理解为能力差,并且会被认为执行力差;
4. 使用工具记录谈话要点,不要只是在纸上涂画,这样容易遗忘,可以使用 思维导图 来记录(可以使用 MindManager软件,软件的使用说明我也总结了一下,请参考MindManager使用说明 );
5. 和业务人员一起尝试使用 建模 工具,使得业务人员和技术人员有共同的方法论和工具,避免因为专业的不同造成的理解偏差;
其中思维导图工具 MindManager能够很好地帮助我们理清思路,记录过程,甚至可以作为计划工具来用,推荐大家试试。甚至,有一些错误它也能和Word一样帮我们发现,比如下面的Scrum。
发表评论
-
eclipse使用SVN创建,合并分支[转]
2011-11-11 17:11 928之前一直使用"小乌龟"进行分支建立与 ... -
持续集成之“依赖管理”
2011-08-04 18:10 818来源: infoq 发布时间: 2011-0 ... -
持续集成理论和实践的新进展
2011-08-04 18:10 1005作者: 肖鹏 来源: InfoQ 发布时间 ... -
Maven原理和Maven2新特性
2011-06-30 16:02 1055Maven的基本原理和Maven2的新特性 用Maven做项 ... -
结合Maven2进行J2EE项目构建
2011-06-29 21:13 1213一.背景 Maven2 的基本 ... -
用Maven做项目管理
2011-06-29 21:10 1047用 Maven 做项目管理 在 Java世界中我们 ... -
天生一对"Maven2+Jetty" -- Maven2创建并管理WebApp
2011-06-29 19:21 1313Maven2代比1代改进很多,其中主要强调的是--它不仅仅是个 ... -
Maven实战(四)——基于Maven的持续集成实践
2011-06-28 13:16 977Martin的《持续集成》 ... -
Hudson+Maven+SVN 快速搭建持续集成环境
2011-06-28 13:07 1033hudson 是一个可扩展的持续集成引擎,Hudson非常 ... -
敏捷开发、极限编程
2011-06-27 00:35 892什么是敏捷开发?一种以人为核心、迭代、循序渐进的开发方法。在敏 ... -
敏捷开发简介
2011-06-27 00:34 1219在软件工业界,敏捷开发已成为众多高效开发团队的制胜之道。它不仅 ... -
用SecureCRT连接VMware中的Linux系统
2011-06-16 22:03 1614一、预备知识: Secure: SecureCRT将S ... -
持续集成之路——Maven
2011-06-15 15:04 743写在前面 ... -
持续集成之路——Maven(续)
2011-06-15 15:02 875接上篇)在新创建了项目之后,可以看到目录结构: ... -
持续集成之路——搭建Maven私服
2011-06-15 15:01 1097在开发过程中,有时候会使用到公司内部的一些开发包,显然把这些包 ... -
Maven仓库管理-Nexus(转帖后加强版)
2011-06-15 15:00 2052前面我讲到为什么要使用Maven, Maven的安装,以及如何 ... -
maven下nexus的搭建,jar包上傳等注意事項
2011-06-15 14:58 2506nexus是用來搭建本地jar ... -
解决nexus下载maven索引的问题
2011-06-14 23:23 3190在上个周五在公司的一 ... -
Maven仓库管理-Nexus(转帖后加强版)
2011-06-14 00:50 1121前面我讲到为什么要使用Maven, Maven的安装,以及如何 ... -
Hudson+Maven+SVN 快速搭建持续集成环境
2011-06-08 01:04 862hudson 是一个可扩展的持 ...
相关推荐
在现代计算机系统管理中,U盘系统维护盘成为了一种不可或缺的工具。它能够帮助我们在系统出现问题时进行修复、安装或备份,尤其在没有光驱或者网络连接不便的情况下,U盘系统维护盘显得更为实用。本文将详细讲解如何...
遗留系统是企业历史遗留下来的老一代信息系统的统称,它们可能因为技术、业务、市场等多种因素需要进行更新或替换。根据系统的业务价值和技术水平,遗留系统可以分为四种策略: - 改造策略:适用于技术含量高、业务...
### 计算机系统维护之光驱维修详解 #### 光驱故障概述 光驱作为计算机的重要外设之一,在日常使用过程中难免会出现各种故障。针对光驱的常见故障及其维修方法,本文将从机械故障、光学故障以及电子部件故障三个...
总的来说,新老系统迁移及整合是一项复杂的工作,涉及到数据处理、系统设计、接口开发和运行维护等多个技术环节。成功的迁移和整合不仅需要技术上的精确操作,还需要对业务流程的深入理解,以确保系统的稳定性和业务...
老毛桃U盘启动工具是一款深受用户喜爱的系统维护软件,尤其在系统重装和紧急恢复方面发挥着重要作用。这款工具的主要功能是将普通U盘转换为可引导的系统修复或安装盘,使得用户能够在电脑无法正常启动时,通过U盘...
总之,维护老客户是一项长期且细致的工作,需要关注客户需求,提供优质服务,建立深厚的信任关系,并适时创新以适应市场变化。通过有效的客户维护策略,IT企业能够巩固客户基础,实现可持续发展。
老Y文章管理系统是一款广泛应用于网站内容管理的软件,它的V2.5sp2静态版本是该系统的一个特定更新,旨在提供更加稳定、高效且安全的文章发布与管理功能。这款系统适用于个人博客、企业官网或者新闻资讯类网站,帮助...
综合上述三个策略,可以发现,老客户转介绍是一个系统性工程,它涉及到服务、激励和维护等多个环节。企业要想提高老客户转介绍的效率和质量,必须在这三方面下足功夫,最终实现老客户成为企业稳固的、自发的营销力量...
工程运行管理的关键在于建立一套完善的电子档案系统,从而提高工程图纸的查找、使用效率以及工程的维护和改造设计的便捷性。通过将老图纸数字化,可以有效地减少因图纸磨损、污渍、遗失等问题带来的不便,同时为未来...
总结起来,《天天一泉老款小区售水机充值管理软件V5.22》是一款专业且实用的工具,它为老旧售水机的管理工作提供了智能化解决方案,提升了管理效率,增强了用户体验,对于优化小区售水服务具有重要意义。
老毛桃U盘启动制作工具是一款实用的系统维护软件,主要功能是将普通U盘转换为可以引导电脑启动的工具,方便用户进行系统重装、修复或应急操作。以下是使用这款工具的详细步骤和相关知识点: 1. **下载工具**: ...
对于嵌入式开发、物联网项目或者对老旧设备的维护来说,这类工具是非常有价值的辅助手段。 总之,“TCP转串口工具”是现代与传统通信方式之间的一座桥梁,它使得开发者能够利用强大的TCP/IP网络功能,轻松地与依赖...
### 如何从零开始开发一款嵌入式产品 在当今高度发展的科技环境下,嵌入式系统作为连接物理世界与数字世界的桥梁,在多个行业中扮演着极其重要的角色。从家电到汽车,再到工业自动化设备,嵌入式产品的应用无处不在...
磁盘格式转换是一项常见的系统维护任务,特别是在处理不同操作系统之间的兼容性问题时。通过使用Windows自带的`convert`命令或者第三方磁盘管理工具,可以轻松地将FAT32格式转换为NTFS格式。不过,在进行转换前,请...
此外,绿联USB转RS232串口线的推出,对于维护和升级老旧设备提供了极大便利。许多工业设备虽然功能强大,但因为缺乏更新的接口而难以接入现代化的计算机系统。通过绿联USB转RS232串口线,可以轻松将这些设备连接至...
【标题】:“艰难的老系统改造”涉及的主要知识点 在“艰难的老系统改造”这个文档中,主要讲述了对一套过时的DCS(分布式控制系统)进行升级改造成新系统的全过程。以下是一些关键知识点: 1. **DCS系统**:DCS是...
综上所述,EMMC转TF卡的PCB工程文件涉及了硬件设计、接口转换、PCB布线、软件兼容性等多个层面的知识,对于有经验的电子工程师来说是一项挑战性的任务,但对于设备升级和维护来说具有重要的实际意义。
综上所述,电力系统变电运行设备的维护是一项综合性的技术工作,涉及到设备选型、安全规程、故障诊断和持续改进等多个方面。通过提升维护水平、采用先进技术和强化人员培训,可以有效保障电力系统的安全稳定运行,...
系统维护的目标之一是提高管理效率,这在经济效益评价中属于间接效益。 在信息化管理机构设置方面,文档强调了设置原则包括效率原则、精简原则和灵活性原则。信息化管理机构的设置应遵循以上原则以提高管理效能。 ...
总的来说,RS232转USB驱动软件是解决老旧RS232设备与现代USB接口计算机兼容问题的关键。通过正确的驱动程序,用户可以继续使用他们的RS232设备,而无需购买新的USB兼容设备。这种技术不仅节省了成本,还方便了旧设备...