不知不觉做软件已经做了两年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差得太远。通过这几年的软件开发,积累了一些经验而已,先谈谈自己的经验,其实我的经验也不足,只能算是这几年来在编程方面的一些看法吧。
第一、什么叫编程。有人说:“编程讲究是一个整体的平衡性”。“平衡性”是软件的很重要的部分,从平衡性的角度去考虑编程,就会抑制你想要用最新技术,最新系统等等一些想法。因为从平衡性的角度考虑,只要你的软件有一个瓶颈出现,你的程序就是失败。你首先要考虑的是怎么消除程序中可能存在的一些瓶颈。在这个基础上你才有权利去考虑提高你程序的性能最新的技术,最好系统,如果你的代码不行。什么都等于没有做。因为你的程序有性能瓶颈存在。
第二、怎么编程。我想很多人看到这个问题,一定会在心里:“这个地球人都知道”。暂且听我说。我说的怎么编程不是要说怎么写详细的代码,而是你的程序最终是怎么完成的。但实际上编写代码可能在程序的生产过程中是占有时间比较少的一块。我个人觉得编程要包含以下的几个部分:
1、市场潜力分析
分析你要写的程序能不能卖出去,市场份额是不是很大。
2、同类产品竞争分析
看看你的同类产品的优缺点。
3、技术可行性分析
依据本公司的技术实力看在给定的时间内能否实现需求说明中的功能。
4、软件设计
写出详细的软件流程,数据流程。主要算法。软件架构等(参考软件工程)。
5、编写代码
模块的功能的代码实现。用一种语言实现上面的功能,在编写代码时,要注意书写文档说明。永远记住:代码是给人看的而不是给机器运行的,计算机在执行程序时是不怕累的,而人在看代码时是非常累的,良好的编码习惯,至少保证自己能够随时看懂几个月前自己所写的代码,尽量让你的代码能够很容易的被别人理解,写代码时想想你会不会在两个月后被别人骂。在调试的时,要耐心好,编写代码其实就调试和改错。一个好的程序运行没有瑕疵,没有臭虫。到底是什么内在的因素使然呢?其实这并不神秘,我们只需要偶尔用点心思提醒自己,无论是使用C/C++、C#、Java、Basic、Perl、COBOL 还是 ASM 进行编码,所有好的编码无不显示出同样的特点:简洁 、易读、模块性、分层、设计、效率、优雅和明晰。
6、bug测试和改错
错误是一种严重的程序缺陷。测试的目的是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量。
7、交付用户使用
8、维护与再生工程
很多软件产品不是一次性的买卖。比如在电信、金融等领域,有些软件系统要用十几年,对软件进行维护是必不可少的。还要根据用户的要求增加新的功能。
这些事,有的是市场的事,有的是软件构架师,系统分析员的事,还有的是编程的事。但是在很多小公司,本着小公司事必亲恭的办事原则。大家多了解一点是不会有错的。
举个具体的例子来说。假如我要编写一个共享软件。我要怎么做呢?
1、要好好想想我要写的软件有没有“钱”途。时间在15天-30天左右。
2、好,我已经决定要写xx软件了。
3、在网上找几个对xx最有威胁的同类软件,分析它们优缺点。要它们的优点,不要他们的缺点。
4、根据前面分析的结果,大概的列出xx软件应该具有的功能表。
5、写出1.0版的基本功能表,菜单功能表,写出1.x的功能表。
6、选择编程语言。
7、上网找类似的源代码,算法。RFC标准文档。好好研究一翻。
8、根据你选定语言,算法,标准文档,写出xx的详细设计文档。
9、按照设计文档编写代码。
10、测试和软件的加密,防止别人破解软件。
11、交给用户使用。
第三、哪里有资料,标准文档。
代码的世界是千变万化的, 在开始一个新的项目之前,完全可以找一个类似功能的代码来看看。这样可以更好的改进你的程序。有时还可以加快进度。还有当新的技术出来时,你要看看相关的文档。虽然不要完全了解它的功能,好处。但是你至少要知道新的技术能用在什么地方。怎么用。配合什么用能更好的发挥它的作用。编写软件不是全部的东西都是自己写的,有很多的功能是一种标准。也许是标准算法。像图形的,图象识别的,多媒体的,加密解密的算法。
所以你要知道你可以从哪里找你要的资料。我把我知道的都写在这里
源代码和技术资料站点
http://www.csdn.net (中国软件网)
http://www.vchelp.net (visual c++/mfc开发指南)
http://www.vckbase.com (vc知识库)
http://www.vchome.net(阿蒙编程之家)
http://www.testage.net(测试时代)
http://www.51cmm.com(软件工程专家网)
http://www.51icon.net (图标资源下载)
图像处理的网站
http://www.image2003.com (数字图像网)
http://www.pris.edu.cn (北邮模式识别与智能系统网站)
http://www.chinaai.org(中国人工智能网)
看雪学院
http://www.pediy.com
http://toye.yeah.net http://www.bestcracks.net (大量软件破解注册码)
http://www.chinaunix.net (UNIX)
http://www.linuxeden.com (LINUX)
第四、要掌握的工具
下面的工具也许你用过,也许你没有用过。不过没有关系的。同行的高手会教我们怎么用的。
1、数据库工具
数据库建模工具,代表 powerdesigner
数据库分析工具,很多大型的数据库都会带的。
2、流程图设计,代表 visio 2000
3、case工具, 代表 rose
4、代码分析工具,内存检测工具
代表 bounderchecker,smartcheck
5、编辑器
代表 Ultra Edit,vi
6、源代码管理
代表 vss ,cvs
7、编程工具
代表 VB,VC,JAVABUILDER,ECPLISE
8、测试工具
代表 C++ Test,LOADRUNNER,WINRUNNER
9、安装打包工具
代表 installshield,Wise Install Master
第五、要掌握的知识
因为每一个人的发展方向不一样,所以大部分人的知识结构都不一样。象一些基本的计算机基础知识大家都知道,每个人都有自己的爱好,所以自己的发展方向不一样,有的人做系统开发,有的人做驱动开发,有的人做编译器开发,有的人做图象处理与识别开发等等。但是有几点应该是一样的。
1、英语能力
主要的新的技术,文档资料都是用英语来首发的。如果要学到更好更新的知识,技巧。不懂点英语也是不行的。也不要指望有人给你翻译出来。一般来说,这些资料,看的懂的人不需要翻译,看不懂的人没有办法翻译。所以大部分的资料还是英语原文的。当然也有很多的人在翻译这些文章,但是对于这么多的资料来说,翻译过来的只是很小很小的一部分。
2、设计能力
虽然一般来说,大公司有软件构架师做应用系统技术体系构架,系统分析员做设计。但是70%-80%的小公司,可就不一定了。知道一点软件工程的知识,知道一些文档设计工具怎么用。或者知道应该有哪些设计文档。也是很有好处的。
3、语文写作能力
编程时候,大部分时间都是在写代码。但是代码的注释,各种文档的编写,测试报告,说明文档,使用手册这些都需要文字功底的。 还有用email,bbs,qq这些工具与人交流的时候,如果话都说不清楚,那交流就更谈不上了。水平提高进步也就有点问题了。
4、学习能力
没有几个人是全部学会了再去工作的。这个不是很现实。目前社会也不太允许这样做。一边工作一边学习是很常见的。也许很多人是在工作之中才学会做某些事情的。很多技能也是这样会的。此外,很多新的项目的到来。很新的技术的到来都要求我们能适应新的工作环境,新的工作要求。如果没有好好的学习是很容易被一个项目浪费掉的。
第六、知道自己要做什么,要学什么,要发展什么。
随着信息技术的高速发展,软件技术越来越多,越来越先进。如果我们什么都想知道。天哪,那我们一辈子也学不完。作为一个软件人员也好,作为一个初学者也好。知道自己要往那个方向走是很重要的。不然很容易的就饿死在软件技术迷宫里的。最后只好不干这一行了。其实软件技术就象一个很大的蛋糕,一些高级研究人员,博士发明一种新技术,把蛋糕做大,而我们只要把一门技术学好,学精了,就可以分到蛋糕吃了。
一般来说,作为一个软件人员,掌握一到两个语言的开发能力就可以了。另外除非你是想做软件技术的研发(这些工作最前途,也最受欢迎),象软件构架师。如果不是做软件技术的研发,只是一般的应用程序编写的话,不用太关注今天出来什么新的技术,明天又出来什么新的技术。这些东西只要知道就行了。知道有这么回事就可以了。以后有用的到的地方再去认真的关注。
我一向坚持知识面最大化、专业深入化。对于一般的IT技术都应该知道,把知识面扩广,然后根据自己的兴趣找一个突破口,认真学好这个方面的技术,成为这方面的专家。象有的人精通系统开发,有的人精通数据库,有的人精通图象处理,有的人精通网络编程等等。我们可以找个切入点好好研究,精通计算机的某个领域。
给同行的一点建议:
(1) 明确目标。每天上班要做什么事情,目标要明确。把一天中最重要的事,最紧急的事排列组合,就有四种情况。我们首先要做的是最重要且最紧急的事,其次是做紧急不太重要的事,再次是做重要不紧急的事,最后是做不重要不紧急的事。(2) 精通一门编程工具,不要什么东西都想学,什么都没掌握。
(3)按照ISO9000认证的流程做软件开发,加强自我管理,每天作自我总结,分析自已的错误率及费码率。
(4) 良好的编程风格。注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。这里推荐一本书,林锐博士的《高质量C++/C编程指南》。
(5)强调团队合作精神,多与别人交流。三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。
(6)不要急于求成,这样往往欲速则不达。
(7)丰富的想象力。不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。
(8)不要做浮躁的程序员。不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。看帮助文档时,不要因为是英文的而且很难而自己是初学者所以就不看;帮助永远是最好的参考手册,象MSDN是很好的帮助文档。把时髦的技术挂在嘴边,还不如把过时的技术记在心里。对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先你要学会自己找答案,比如google、百度都是很好的搜索引擎,你只要输入关键字就能找到很多相关资料。