不要成为语言的奴隶!
-------献给热爱软件开发的朋友
呵呵,当然这句话是献给那些想成为高手的朋友的.
如果是初学者,当然必须先通过一门语言的学习磨练的.代码是软件的本质,再好的软件没有代码那肯定不是软件(废话!:)),当然我这里并没有说文档就不重要了.
对于软件的学习,我有几点建议与大家共享:
起步:最好能有些计算原理, 操作系统, 数据结构, 软件工程等方面的理解能力.
1.透过语言看本质.
任何语言的学习是不能脱离环境来单独用的!,所以学C#肯定是要结合.NET Framework.
我经历了.NET Framework1.0,1.1,2.0,包括现在也正在研究3.0的框架.框架都不外乎要做到:内存管理,安全管理,异常管理,编译环境管理,类库管理等.
a.内存管理:这是任何一个优秀语言和框架的招牌功夫,不要想像现在的内存条容量很大又如何的便宜,
那些垃圾软件可以在半个小时内照样把你的内存空间吃得通光!
一个软件加载到内存中,占用的内存区可分二大部分.
u第一部分:代码区(存放程序代码的空间,空间大小也是差不多固定下来的).
u第二部分:数据区(存放程序代码加载的各种数据).
l数据区可分为:全局/静态数据区,常量数据区,栈,堆,对于全局/静态数据区,常量数据区会在程序编译阶段就已分配好了固定的空间,这样,消耗内存容
量的情况就关健看栈和堆了.
l栈的空间大小在程序中是按固定大小分配的,这个固定大小哪倒底是多大?
这是要由编译器决定的事啦,在VS.NET2003中栈的大小默认是1MB,当
然我们可以通过编译选项来指定栈的大小,但通常栈也不会太大.由于栈上
的内存是系统自动分配,压栈和出栈都有相应的指令来进行操作,因此效率
较高,并且栈的内存空间是连续的,不会产生内存碎片,所以内存的分配管
理最后重任落在了堆上,
l堆的大小只受限于系统的有效虚拟内存大小,一般是用来分配一些占用内存较大的对象或数据,由于堆所占用的内存是由开发人员来动态分配和回
收的,当NEW(C#用new,C++用new,malloc)申请内存时,系统需要按一
定的算法在堆空间(虚拟内存)中寻合适的大小的空闲堆,并修改相应的
维护堆空闲空间的链表,然后返回地址给程序,所以效率比栈要低,还易产
生内存碎片,针对这个重任,微软在.NET 框架中作了垃圾回收的管理(GC),
在.NET中引用类型的都是用堆来分布内存的,当然CG是一种被动的回收
机制,要想取得更好更高的性能,快速高效的利用内存,还得要利用成对编
码的原则:较晚的分配内存,最早的释放内存,在C++或C#中都提供了构造
与析构的方式,但我们也可以提前执行GC,但效率始终没有C++高,呵呵,
先天性的.
b.异常管理:很多人写代码时都是把代码一写上,编译一通过,跑一下,OK,就完成了,写代码最好是在写完一句或一个功能时,要看一下,如果有错误时程序是怎么处理的,把正确时的处理与异常时的处理都作好了,你的代码肯定是OK,这样的代码才有容错机制.
c.其他的有时间再谈
2.读代码.
中文写代码软件
不管你以后要作一个普通的软件工程师或高级软件研发人员,要想写出好的代码,不多读好代码,那肯定是闭门造车,所以成就软件人生,第一关是多读好的代码,现在书市上那有这样的书呀,很少,奇少!petshop,duwamish以及MSDN上的代码都是可以多读的,多读最好能练练手,自己写一写,看代码也有技巧,首先要把代码的类结构搞清楚,再去看具体实现!
3.调试.
写代码的第一关就是调试了,要想成为一个高手,除了多读好代码,多写,伴随着这个过程更多的是调试,所以调试技术最能衡量一个开发人员的重要指标,调试会让你更多的去理解软件是怎么运行的,以后会如何处理这类型的问题,常用的调试估计大学都学过,在.NET中作项
目,必须得学会应用程序的调试,脚本调试,window服务及Web服务的调试,数据库程序的调试.调试技
术的书籍有一本书推荐:<< 和windows应用程序调试>>,清华出版社的,也是Visual Studio产品组审校的
4.理解接口和抽像类.
这是.NET的核心之一了,大型的应用软件中,要设计成高可扩展性的应用程序,得依赖松散耦合的原则,高内聚低耦合,接口负责只作业务的定义,把定义和现实很好的剥离了,能够更好的满足这种原则,所以在.NET的设计中不用接口是不敢想像的,在C#中是采用单类多接口的继承方式来进行实现,C++中是多类继承的方式,在petshop4.0中整个的技术架构就是用的接口,在 Framework(1.0,1.1,2.0,3.0)中也全部是采用接口的设计思想!
其实这一关也是学习JAVA和C++所共同的核心,当然C++是没有接口,只提供抽像类.
5.代码设计.
写出好的代码,得首先要有一个好的代码结构,学会用设计模式会有助于你取得一个更好的代码结构或一个好的框架,其实常用的设计模式不多,在.NET框架中接口和抽像类是你应用设计模式的基础,也可以这么讲吧,其他的如:MVC基于BS的,抽像工厂,工厂方法,外观模式,适配器模式,命令模式,单件模式等
6.文档.
一个好的产品或软件都是伴随着各种文档产生的,文档的好处不用多说,如要作好一个软件开发人员,熟练办公软件也是基本功!熟悉基本的软件文档内容写法是最好的.
7.项目.
直接实践,能直接参与到项目中当然是最好的,上面的写的这些东西不仅是只适用于C#,如果你有机会作C++或JAVA,都一样可参考
8.业务分析设计.
现在软件行业的门槛很高了,对于国外的软件大厂如SAP,ORACLE,等都已经提供了二次开发的平台,东软,金碟,用友,浪潮,普元等国内大厂商无一不是这样了.他们对软件代码的编写已上升到业务的建模和设计上了.代码是自动生成并编译的.
他们关注你的并不仅仅是写代码的一些能力,还要求你更多的掌握一些业务分析及设计的能力了.纯粹只知道写一些代码和SQL的人才需求越来越少,懂开发,熟悉业务,懂设计的人才更会受到公司的青睐.
永远要记住:
没有业务表现的代码只是一段垃圾代码.在学习技术的同时要不断的加强业务的学习!
后记:
我发现某些论坛上有一部分的朋友发言说,现在进入软件行业的门槛很低了-----他们觉得在外面花4块钱就可以买一张DVD安装碟把开发工具,数据库一装,网上点资料就进入软件