转载自 someok http://someok.blogbus.com/logs/2004/11/471262.html
我在程序员的时候,我一开始追逐这个API怎么用,数据库SQL怎么写更优化,Dcom技术的细节,然后我发现我写出来的产品为了符合客户需求必须要大量修改,但是我的代码却粘在了一起,第一个感觉就是一个函数太长,一看就头痛,而且一个函数干了好多事。这些事本来可以一段一段的,每段写上注释,然后有意义命名,自己管理错误和内存,然后把这些函数连在一起,
然后我作了这些:
1、小函数;
2、写上注释;
3、有意义命名;
4、自己管理错误和内存;
5、流程函数;
最后我发现我这些函数可以组合成各种各样的流程,我的程序终于好修改了,我很高兴。但是我又发现,我的界面和我的流程混在了一起,另一个程序也想使用我的函数,但是我的函数中有对我的特定界面关联的代码,我不能连界面一起都给他,因为他有他的界面,但作的事我已经实现了,于是我把功能函数和界面控制分开了
我就作了这些,我的代码很容易理解,即使新员工,只要他看完业务手册和数据结构,他就明白我代码为什么这么写。而且我的函数由于都是自己负责输入参数和输出参数的校验,有明确和统一的报错信息,所以很容易找到错误进行BUG修复。由于我的程序都是小函数组成的,都有明确报错,所以错误很容易找到,经过测试组的专业测试后,我的代码很稳定,即使出错,也扩散不大,都是小bug,对系统整体没有大影响
虽然我在前进的过程中也经历过困惑,一心钻在OOP和设计模式中。但是有可能是功力不够,不得其解。看着Delphi的源码,应用了很多的OOP和模式,并且他的类库多年发展也没有多大的改变,所以深信OO和模式的威力,而对自己的能力很灰心。但是代码还得继续写,还想进一步提高,于是才摸索出现在的一套做法。既实用又简单应用,每个人都能办到。
我认为我的代码方法已经可以满足现在的产品制造,并且在软件性能调整上也积累了一些珍贵的经验。我发现性能最容易提高也效果最明显的就是用SQL profilter,优化SQL。优化代码,因为涉及到业务,很不好着手。优化数据库结构,由于代码都是构建在特定数据表之上,所以这是最难改的地方,但是我高兴了没多久,我又遇到问题了。因为我的程序即使再好改,但是客户的需求真是千奇百怪,我每天在接听用户的电话,并且修改用户千奇百怪的问题。我很烦。于是我作了实施员。我想真正看看客户到底怎么回事。于是我理解了很多。我明白了很多的事情不是技术和软件所能解决的,而是现实环境的弊病。但是这个弊病还不是一个工程就能解决的,这是一个复杂的网。所以这些问题我就说服用户不要用软件来处理,因为软件是死的,而人的做法是灵活的。而且我发现用户虽然提了很多需求,但是有的需求他一个月用不了一次,但是修改起来却不容易。有的需求修改完,在实际应用中却发现不可行,那个需求只是客户想解决过去的问题而想的一个办法根本没有经过实际的校验。有的需求修改来修改去都是表面问题,在实际应用中才发现重点问题没有提需求所以上线又搁下了,我作了总结:
1、软件擅长大数据量计算和查询,还有数据联网共享,如果需求不能发挥软件特点,就不让软件实现。这样我少修改了一些;
2、有的需求都是表面需求,修改了也用处不大,反而耽误了重点需求的提出和修改,所以告诉用户只修改核心功能。但是用户提了很多需求,不修改完不上线。后来发现,由于他们没有深刻理解我们系统的整体思想,所以没有上线实际用,根本不知道新改的功能是否好用。用户只是脱离了整体,单独思考想怎么就怎么,没上线根本他不知道后果,怎么说也不行,就得让他看见教训他才反悔,但是已经修改了。往往出现这样的情况。最后得出一个结论:一次只提三个需求,并且用书面提出,免的说了不算算了不说。核心功能的需求修改可以满足80%的日常使用就上线。这样我少修改了很多;
3、并且我在实际做工程中,积累了大量的经验,写成FAQ,各种成功案例,让用户在没有提需求之前先看看自己到底有多少老软件实在不能解决而才买新软件帮助的事。新软件就是解决你过去解决不了的事。如果你没有解决不了的事,提什么需求;
我的产品终于可以很快完成上线,所以可以大规模推广市场了,但是我们的产品制造又出问题了。因为客户越来越多,客户的需求越来越多。我们需要开发更多的系统,但是我们的时间有限,我们的人手有限,而且我们的人手大多是新手。怎么办。我们遇到了灾难。我们的代码质量因人而异。我们的版本管理混乱。我们的文档没有人编写,大家都被分配到用户处去上线。怎么准备数据字典,怎么切换系统,怎么记录客户需求,怎么管理系统,怎么修改代码,我们没有任何记录。现场不能离开程序员一步,一离开用户出事了就不知怎么办,没有任何可查的资料。于是我又做了项目管理,我们缺少很多规范。事有千万,先从紧处来。写文档费时间,就开会给大家讲做事的经验。实施和代码修改需要什么必要规范就制定什么规范。在这期间最容易犯的错就是中央集权,什么事都必须自己做主。下属不管大事小事都请示你。我被搞的什么都干不了,都成了救火队员。我的团队陷入了混乱之中,因为我烦乱之中作了很多饮鸩止渴的决定。我于是又犯了一个错误,我说你们能决定的事尽量自己决定,不要问我,我权利下放。结果是:各自作各自的事,互相不通知。有的事没人管,有的事多人修改,各有一套。
我终于明白了,我作了以下总结:
1、项目经理是找到得力的人,指导他们做事的方向。如果下属不知如何作时,及时提供给下属做事方法;
2、制定规范,其实也就是做事方法;
3、制定计划,分配人力去作。检查结果;
4、有紧急事务立刻做出果断解决,继续前进;
我的团队终于平静了下来,但是大家都很疲惫。大家干的很累,但是由于实施和修改消耗了大量的钱,我们没有赚钱,大家什么都没有得到。团队很灰心,也很失望。我下了计划,我自己都很灰心,大家认为再努力也不会再有结果,所以拖拖拉拉,进度和成本已成不可再提的事情。人,缺少了精气神,就什么都没有了。我们就是缺少了这些。我就开始重新建立团队的精神。我发现有人为了跳槽开始学习新的技术,而这种技术是公司现有产品不需要的,但是他们却在上班时间作。我先从此下手。我讲了技术的方向,让他们认清他们现在所学将会很快淘汰。我又讲了现在市场的实况,让他们认清外面公司也不好过。我还讲了我们所从事的行业多有潜力,我们公司将有新的举措。人心又开始一点一点收回了。
但是我们仍然需要完成那些未收尾的工作,仍然需要去奔赴新的客户市场。虽然员工很疲惫,虽然我们刚从飘摇中过来,但是我们不能止步,因为我们为盈利而存在,我们别无选择。我能够将代码写的很好,性能很高,产品制造很有计划和成本控制,团队很有战斗力。但是我发现了一个问题,我们的产品市场不再扩大了。市场份额大规模开拓已很艰难,因为新产品的新鲜感已经过去了。我们在动荡的日子作的项目给公司带来了阴影,公司一直没有大赚钱,投资方很生气。我明白了。公司毕竟是为利润而存在的。公司不是为产品制造而存在,不是为了解决别人的问题而存在。赚钱是第一位。不赚钱即使你在媒体上作的很风光也一文不值。有人靠手赚钱,有人靠嘴赚钱,有人靠脑子赚钱,有人靠身体赚钱,不管黑猫白猫,只要抓住老鼠就是好猫。成在营销,败在管理。我开始关注资本运作,联盟伙伴建设,市场营销,客户关系营运。
我知道,生活才刚刚开始。
分享到:
相关推荐
程序员的一生是一个漫长的旅程,需要不断学习和提高自己的技术。你需要具备基础知识和概念,还需要有热情和追求。作为一名程序员,你需要不断思考自己的性格是否适合这个职业,并不断提高自己的技术和能力。
讲述一个程序员一生的经历,一生的工作方向,从开始学习,就业,工作到成功的整个流程。
程序员专用的百科全书,内含各种语言包括C、java、html、js、css、.net、MySQL、汇编语言、Linux、微信公众平台..............,各种网络知识,包含某些项目教学、只有你想不到的,没有资源没有的、该文件为一个快捷...
使用快速排序,我们可以将成绩单拆分为两个部分,然后通过递归方式不断将数据分割下去,直到每个子列表只有一个元素。最后将各个子列表中的最高成绩进行比较,找出整体最高成绩。 二、搜索算法 搜索算法是一种能够...
如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知识,我们毕业后能帮助...
在IT行业中,程序员们以其独特的创意和编程技巧来表达情感,"程序员代码表白-爱你一辈子.zip"就是一个典型的例子。这个压缩包文件包含了程序员们用代码来传递爱意的方式,让我们一起深入探究其中蕴含的IT知识。 ...
例如,在排序部分,讲解了“数组变换”问题,这是一种需要考生根据数组的初始状态,通过加上或减去一个确定的数值来实现将数组中所有元素变为相等的数值,而且要达到最小的操作次数。解题时,需要考虑数组中元素的...
- 技术仅仅是创业过程中的一个工具,并非成功的关键因素。 - 成功的创业者需要具备多方面的能力,包括人际交往、市场营销等。 #### 分析: 技术本身虽然重要,但它仅仅是实现创业目标的一个手段。真正的创业成功,...
2009年到2017年软考初级程序员的真题和答案还有模拟试题
总之,C/C++是程序员生涯中不可或缺的一部分,它们既可以帮助理解计算机底层工作原理,也能提供高级的编程工具。深入学习和熟练运用C/C++,不仅可以提升个人技能,也有助于在软件开发领域取得成功。无论是对新手还是...
《2006-2013软考初级程序员试题分析与解答》是一个包含历年全国计算机技术与软件专业技术资格(水平)考试(简称“软考”)初级程序员级别的试题解析的压缩包。这个资料集主要涵盖了2006年至2013年间的试题,为备考...
本项目为Java程序员量身打造,涵盖了Html、Java、Shell、Python等技术的全面学习资源,总计1764个文件,其中包括1123个PNG图片、624个Markdown文档、3个Java源文件、3个文本文件、1个Git忽略文件、1个MD文件、1个ZIP...
一个人在一生中需要经过很多职业培训才能成为一个资深或者专业的人员。而在国内大家的观念中,职业培训还没有被大家广泛的认同。" 对于更高级的技术人员,他们所关注的就不是解决基本的生活问题了。他们所关注的...
一个人在一生中需要经过很多职业培训才能成为一个资深或者专业的人员。而在国内大家的观念中,职业培训还没有被大家广泛的认同。" 李巨锋认为,程序员在职业生涯规划中需要了解行业的需求情况,了解市场容量和发展...
这部分内容帮助程序员理解如何在一个团队环境中协作开发,遵循最佳实践,确保软件质量,比如使用Git进行版本控制,利用敏捷开发方法进行项目管理。 算法与数据结构是程序员提升编程能力的关键,书中可能包含了排序...
- **长期价值**:一本好的技术杂志不仅能够提供即时的知识和技能,还能激励读者不断追求更高的成就,并且可能会影响一个人一生的职业选择。 ### 2. 《程序员》杂志的历史地位 #### 知识点概述: - **标志性意义**...
操作系统是另一个重要的领域,主要涵盖进程与线程、内存管理(如虚拟内存、页表)、调度算法、同步原语(如互斥锁、信号量、管程)以及I/O模型等。面试中,面试官可能会询问你在实际项目中如何处理并发问题或者如何...
7. 最后,有些句子表达了对未来的期许和愿望,例如“我一生都在等待直到你闯进我的世界我只想对你说:余生请多指教”,这里的等待可以理解为在代码中等待执行的线程,而“余生请多指教”则像是一个函数的调用,希望...