鉴于经常看到很多傻傻的问题,比如xx语言干什么用的,xxx语言是不是落伍了?(不过说实在的,这些问题初学者都会有.)
我在这里说说开发人员应该知道的一些东西。但是这些只是我在平日里看到和想到的。难免有所偏差,请见谅.
软件开发,是一个综合性的活计。软件开发,并不仅仅是编写代码.学会了用c这些编程语言进行编程只是第一步,一个最最基本要求。
其他要的东西还多着呢。在我看来,程序员大致可以分为两类.当一个工作任务分配到程序员身上时,一种程序员知道为什么要这样去做.另外一种则知道怎么去做完这个工作.
而这个区别就大了.如果你知道为什么要这样去实现,这个至少说明你能把握住你的任务在软件工程里面的位置.如果你只是仅仅知道怎么去完成他.那只是说明你能做完这个工作而已.想做好就不一定能行了.而第一种程序员一定能做好.做的最优.看看下面的条条,希望对大家都有所帮助.
第一要说的,编程的关键是什么?
编程不是实现了代码就可以了.引用我的友人的一句话,“编程讲究是一个整体的平衡性。”
对于这个他是这样解释的。“平衡性,是软件的很重要的部分,从平衡性的角度去考虑编程,就会抑制你想要用最新技术,最新系统等等一些想法。因为从平衡性的角度考虑,只要你的软件有一个瓶颈出现,你的程序就是失败。你首先要考虑的是怎么消除程序中可能存在的一些瓶颈。在这个基础上你才有权利去考虑提高你程序的性能”.就算你拥有最新的技术,最好系统,如果你的代码不行。只要你的程序有性能瓶颈存在,等于什么都没有做。
在这里我想说的就是程序是人写的。如果你的水平不行,再好的现成的技术也是用不起来的。就算用起来了,你可能没有办法说清楚,为什么这样用?
第二要说的,怎么编程?
我想很多人看到这个问题,一定会在心里把我骂的体无完肤的。心想这小子活腻了。骂也无妨。暂且听我说。我说的怎么编程不是要说怎么写详细的代码,而是你的程序最终是怎么形成的。我想写到这里又有人把我给陵迟了一次了。但实际上编写代码是在软件的生产过程中占有时间比较少的一块。
我个人觉得要包含以下的几个部分:
1。市场潜力分析
分析你要写的软件能不能卖出去,或者说我要编写什么样的软件?
2。同类产品竞争分析
看看你的同类产品的优缺点,设计你的软件的卖点.(如果没有卖点,就没有必要继续了)
3。软件设计
写出详细的软件流程,数据流程。主要算法。软件架构等
4。编写代码
不用说了吧
5。bug测试和试运行
6。卖
这些事,有的是市场的事,有的是系统分析员的事,还有的是编程的事。但是在很多小公司,本着小公司事必亲恭的办事原则。大家多了解一点是不会有错的。
举个具体的例子来说。假如我要编写一个共享软件。我要怎么做呢?
1。要好好想想我要写的软件有没有“钱”途。时间在15天-30天左右。在这段时间里面一定要好好的做一下市场考察.这个可是最关键的一步.
2。好,我已经决定要写xxx软件了。
3。在网上找几个对xxx最有威胁的同类软件,分析它们优缺点。要它们的优点,不要他们的缺点。设计出自己软件的卖点.
4。根据前面分析的结果,大概的列出xxx软件应该具有的功能表
5。写出1.0版的基本功能表,写出1.x的功能表。不要一次就做完全部的功能,这样的话,你的软件永远都没有出世的机会 :)
6。选择编程语言 (看看,编程语言到这里才出来)
7。上网找类似的源代码,算法。RFC标准文档。吃透.软件代码和算法的良好重用,会让你事半功倍的.
8。根据你选定语言,算法,标准文档,写出xxx的详细设计文档。文档一定要用,不然你的计划性就不强.计划性不强,随意性就大.随意性大了,软件很容易失败的.
9。按照设计文档编写代码
10。测试和卖
第三,哪里有资料,标准文档
代码的世界是千变万化的, 在开始一个新的项目之前,完全可以找一个类似功能的代码来看看。这样可以更好的改进你的程序。有时还可以加快进度。还有当新的技术出来时,你要看看相关的文档。虽然不要完全了解它的功能,好处。但是你至少要知道新的技术能用在什么地方。怎么用。配合什么其他的技术用能更好的发挥它的作用。编写软件不是全部的东西都是自己写的。有很多的功能是一种标准,也许是标准算法。像图形的,多媒体的,加密解密的算法。有的是一个标准的文件格式,像各种图像文件,多媒体文件。还有的是一种标准的约定。像email,telnet等常见的网络工具。
所以你要知道你可以从哪里找你要的资料。我把我知道的都写在这里
源代码和技术资料站点
www.vchelp.net gb
www.csdn.net gb
www.codeguru.com en
www.codetools.com en
www.dexv.com en
msdn.microsoft.com en
www.programmerheaven.com en
www.freshmeat.net en
www.sourceforge.net en
www-900.ibm.com/developerWorks/ gb
论坛和标准,组织
www.linuxaid.com.cn gb
www.linuxbyte.com gb
www.aka.org.cn gb
www.rfc.org en gb
各种maillist,irc
第四,要掌握的工具和知识
工具,可以让你的工作更加的有效率和不易出错。
下面的工具也许你用过,也许你没有用过。不过没有关系的。同行的老鸟会教我们怎么用的。(我想到哪个就写哪个。没有顺序问题)
1。数据库工具
建数据库工具,代表 powerdesigner
数据库分析工具。很多大型的数据库都会带的。
2。流程图设计 代表 visio 2000 , smartdraw
3。case工具 代表 rose
4。代码分析工具
代表 bounderchecker(for vc delphi),smartcheck(for vb) ....
5。编辑器
代表 vi,vic,Ultra Edit
6。源代码管理
代表 vss ,cvs
7。编程工具,不要我多说了吧
8。其他的,我没有用过的,但是也许在某个行业用的很多的工具。(废话 :))
知识的话,因为每一个人的发展方向不一样,所以大部分人的知识结构都不一样。但是有几点应该是一样的。
1。英语能力
主要的新的技术,文档资料都是用英语来作为首发的。如果要学到更好更新的知识,技巧。不懂点英语也是不行的。也不要指望有人给你翻译出来。一般来说,这些资料,看的懂的人不需要翻译,看不懂的人没有办法翻译。半懂不懂的人翻译出来的文章我想你也不敢看。所以大部分的资料还是英语原文的。当然也有很多的人在翻译这些文章,但是对于这么多的资料来说,翻译过来的只是很小很小的一部分。求人不如求己。多学点英语没有错的。
2。设计能力
虽然一般来说,正规的公司有系统分析员做设计(我猜的)。但是70%-80%的小公司,可就不一定了。知道一点软件工程的知识,知道一些文档设计工具怎么用。或者知道应该有哪些设计文档。也是很有好处的。比较这些东西如果你学到了,就是你自己的了。而且这些可是加工资的好东西。很有钱途的。:)
3。语文写作能力
作为一个程序员,大部分时间是都是在写代码。但是代码的注释,各种文档,测试报告,说明文档,使用手册编写,这些都需要文字功底的。 还有用email,bbs,qq这些工具与人交流的时候,如果话都说不清楚,那交流就更谈不上了。水平提高进步也就有点问题了。
4。学习能力
没有几个人是全部学会了再去工作的。这个不是很现实。目前社会也不太允许这样做。一边工作一边学习是很常见的。也许很多人是在工作之中才学会做某些事情的。很多技能也是这样会的。此外,很多新的项目的到来。很新的技术的到来都要求我们能适应新的工作环境,新的工作要求。如果没有好好的学习是很容易被一个项目踢掉的。呵呵。
另外有一点,当上司让你做你不会的东西时,你要告诉他,你不会,但是会在XX天内把他搞定。不会没有关系,会学习也是会上进的一种好表现。
5。知道自己要做什么,要学什么,要发展什么。
世界上软件技术是多的像9个牛上的毛一样多,也许还要多很多。如果我们什么都要知道。哦,天哪,我不想活了。
作为一个软件人员也好,作为一个初学者也好。知道自己要往那个方向走是很重要的。不然很容易的就饿死在软件技术迷宫里的。最后只好不干这一行了。这个可不太好。
一般来说,作为一个软件人员,掌握一到两个语言的开发能力就可以了。另外除非你是想做软件技术的研发(这些工作最有钱,在大型的公司是最受欢迎)。如果不是做软件技术的研发,只是一般的应用程序编写的话,不用太关注今天出来什么新的技术,明天又出来什么新的技术。这些东西只要知道就行了。知道有这么回事就可以了。以后有用的到的地方再去认真的关注也是不迟的。自己选择一个发展的方向,努力的向前走。不要被各种各样的新技术诱惑过去。说句实话,很多的所谓新技术的怎么怎么好,怎么怎么优异,很多时候都是有商业行为在里面的。要自己会判断才行。如果不能判断怎么办,看下面的一条。
第六:知道的更多
很多初学者最麻烦的事是怎么在这么多的软件技术里面选择一种又好学,又有前途(钱途),又能做点什么伟大的事情的技术来开拓软件开发这个他们未知的领域。对于这个麻烦的问题,很少有解。如果你能遇到一个很好的老师,那就是你的福气,千万要抓住这个机会。如果你不得不一人做出这个决定,那只能是小心翼翼地来了。不过一般来说学c和c++都是一个不错的选择。
初学者的另外一个麻烦的问题是,当我选择之后,在学习过程中出现的很多这个和那个的新技术,新的变化。我该怎么办。这个也基本无解。只能是你自己慢慢慢慢积累。积累到你能理解这些新技术的出现是为了什么,这些新变化的发生是为了什么之后。你就会不怕这些的新的东西。
我一向坚持,如果我知道的更多,我的力量就会更大。我就更不会怕出现变化。如果因为你的信息不足,而无法对某件事情进行判断时,千万不要强行进行判断。对你没有好处的。