序:这篇文章是在项目开始之初为了扫除项目组中其他同学的疑惑和畏难心理而写的,仅仅面对初学者
-------------------------------------------------------------
前言
加入项目组的各位,一定都已经开始着手学习相关技术知识。我自己学习这些知识的时候走了不少弯路,归根到底我觉得是因为一开始学的时候很难对相关技术有一个整体概念,容易摸不着头脑。
自己学习中的一点体会,不涉及具体的技术细节,只是从大体上对涉及到的内容的一个概览,不敢独享,写成此文,希望能对大家有所帮助。(一家之言,仅供参考)
一、关于windows平台下的程序设计
也许很多同学脑海里的程序设计还是tc2.0的模样:我们要记住几个头文件各包含了哪些常用库函数,以及一些常用函数(函数名,调用方式等)……然后我们才可以开始编程。这就容易形成一种思维定势,认为只要用到的东西我们都应该去记住。
可是到了windows平台下,一切都变得复杂了起来。按windows平台下最“朴素”的编程方式(用c语言调用系统提供的API函数)来说,各种各样的API函数成百上千,非但多而且有些函数名也比较奇怪,如果要一一记忆不啻于一大噩梦!
不过大家请放心,“兵来将挡,水来土掩”嘛,MSDN想必大家都听说过,微软为开发人员提供了多达数G的文档,几乎包括了windows平台下编程能用到的一切知识!当然这么多文档不是留着大家一页一页看的,而是用来查阅的。
这种情况下,我们就把繁重的记忆任务甩给了你的电脑(正是发挥了它的长处:))。我们要做的,就是集中精力充分理解windows下的程序的构造(消息驱动的程序结构),以及你所用到的开发环境提供的框架的构造(MFC,OWL,.NET框架等),在这个基础上,结合各位已有的编程知识和技巧,我想就能够游刃有余了(不清楚各种函数的用法?没问题!电脑知道,MSDN会告诉你)。
所以,一定要牢记:对平台的理解才是最重要的!
理解了平台,才能掌握平台下的编程。反过来,如果对平台的理解停留在很低的层次,却记住了大量的函数,一点用处都没有。
须知,电脑的长处正是做一些简单重复的“体力活”和记忆大量庞杂的数据(真是个白痴);而这恰巧是人类的短处,人类的长处在于理解力和逻辑思维能力。我们要做的就是扬长避短。“以己之短,与彼之长,安能得胜乎?”
二、关于面向对象的编程语言
面向对象思想的出现,绝对是计算机史上一个光辉的变革。随着面向对象编程语言的出现,我们使用的语言终于开始符合我们的思维习惯了。面向对象的思想也在很大程度上缓解了所谓的“软件危机”(OOA,OOD,OOP和OOL)。
大家学到现在,肯定早就是身经百战,我想重学任何一门编程语言都不会难倒大家。语言再复杂,它的基本语法也就那么些,只要花一些工夫,掌握一门语言的语法也不是什么特别难的事。但是要能够用好,就不是一朝一夕的事了。尤其是对像C++,C#,JAVA这些面向对象的大“语种”来说,要想真正用好有很长一段路要走。
在开始具体学习某门面向语言之前,最好先对面向对象的概念有所了解。这在一般的软件工程书里都有所涉及(暂时可先瞥下面向对象分析与设计的内容,只涉猎与语言相关部分的思想)。
结合自身体会,面向对象思想中的继承性可以说是面向对象的精髓。想当然,要用好它也不是一朝一夕能够办到的。大家在接触这部分内容的时候,要格外的注意,细细体会其中的思想,以后在具体工作中慢慢体会、提高。
三、关于.NET框架
.NET框架和JAVA的出现,绝对可以算是一种革命。
大家知道,要执行一段源代码,有两种方式:编译和解释。其中编译相对解释的效率要高得多,而解释的优点则是可以在运行的过程中对执行的代码实现一种干预,以达到特定的目的(解释一句,执行一句)。
在.NET和JAVA出现之前,几乎任何实用的编程工具都把源代码编译连接成二进制的机器代码以获得高执行效率(也有一些解释执行的,比如QBASIC,那效率可不是一般的低)。这种方式的缺点是:生成的二进制代码是针对特定CPU的(确切地说是指令集),有的也和操作系统密切相关(调用了特定操作系统提供的API函数)。如此一来,程序的移植性就有了很大的问题。
而.NET和JAVA使用的都是所谓的“编译+解释”的方式(.NET采用“二次编译”,但是基本思想是一样的):源代码被编译连接成一种中间代码(生成的可执行文件也是.exe),执行时在虚拟机的支持下将中间代码实时翻译成特定的机器代码执行。
这样做的好处有二:
首先,在程序执行时虚拟机可以实施干预(比如垃圾回收),为什么要干预呢?须知程序设计过程中常常会存在一些隐患,难以发现(一定程度上是由于程序员的不良编程习惯造成的)。时常造成诸如内存泄露、程序存在未知漏洞这样的问题,对维护、更新带来很多困扰。如果在程序执行期间,能够实时地纠正这些错误,可以在很大程度上缓解这个问题。.NET和JAVA正是通过虚拟机实现了这一点。
第二个好处就是使编写的程序的跨平台运作成为了可能:任何源代码都被编译成中间代码。这样,只要一台电脑上装了虚拟机,它就能运行。不管这台电脑用的CPU是什么,操作系统是什么。JAVA的跨平台正是基于此,.NET目前还未实现跨平台,很大程度上是由于微软出于自身经济利益的考虑。(只支持自家的windows)
鱼与熊掌不可兼得,如此诱人的好处是以牺牲一定性能为代价的(JAVA要更严重一点)。好在计算机硬件的飞速发展,已经能够弥补性能上的一点损失。如果早个10年,恐怕.NET和JAVA都不会大行其道,那时侯的电脑损失不起这点性能,也许会慢到无法忍受的程度。
稍微具体一点,请看下图:
这张图很好得勾勒出了.NET的架构:最底层是windows操作系统,上面是.NET框架,最上面就是基于.NET框架开发的各种应用:诸如基于浏览器的应用程序(Browser Apps),基于Web Services的应用程序(Web Services Apps),本地应用程序(Local Apps)和其他类型的应用程序(不知道还有什么,呵呵)。其中.NET框架也分两层:底层是所谓的“通用语言运行层”CLR(也就是上面所说的“虚拟机”,只不过不叫这个名字而已),建立在它的基础上的就是.NET的类库,这个庞大的类库提供了非常丰富的功能,包括传说中的ASP.NET和ADO.NET。
说了这么多,大家也许已经对.NET的概观有个非常粗略的了解。更多的内容大家可以看《Understanding .NET》一书。(已在群里共享)
四、关于C#
尽管.NET有诸多优点,也必须通过一种具体的开发语言来运用它。C#就是一个很好的切入点。
C#是一种典型的面向对象语言,比C++引入了更多面向对象的特性,与JAVA比较类似。和所有它的同类一样,单纯掌握语法不是很难,要用好就不容易了,等着大家在使用中慢慢体味。
其实在开发.NET的时候,目标之一就是梦想能够使微软平台下使用着不同编程语言的开发人员能够协同工作。考虑到大多数编程语言之间都有许多相似的元素(语义),不同的主要是语法。于是微软制定了一套标准,定义了核心的语义(CLR)并提供了两种语法实现:C#和VB.NET(知道他们为什么惊人得相似了吧?)
其中C#这种.NET原生语言,支持运算符重载,语法与C/C++又有一定程度的相似性。更易被广大开发人员所接受。等等!为什么不是VB.NET?呵呵,怎么说呢……我觉得有两方面的原因:首先,原先使用C/C++作为开发语言的程序员的基础知识显然更扎实,(如果你用过visual c++就会自然而然地同意我的看法)对他们来说C#更简洁,更易用,可以为他们减少很多烦恼。(因为C#建立在.NET框架上,能够充分发挥.NET平台的先进特性)从另一个方面来说,为数众多的VB程序员,基础就稍显薄弱,大部分基础知识比较缺乏,而VB.NET除了基本语法和VB有点类似外,本质完全不同。对于大多数VB程序员来说,要掌握并运用.NET可能还有一大段路要走。
纯粹争论语言的优劣没有任何意义,C#也罢,VB.NET也罢,他们的实质是完全一样的,差别只在形式上。(当然,一个开发团队内部还是应该统一开发语言)
另:关于Visual C++
这一部分内容其实和我们正在进行的项目没多大关联,但是如果你想在软件领域知道得更多,走得更远,也许这部分内容会有所帮助。
软件领域中至关重要的基础课程一是数据结构,二是操作系统。(我们专业居然没开!!)这两门课的基础打好了,我敢说,以后你一定会跑得比别人快,耐力也比别人好。
从DOS下的开发转到windows平台下的开发的初期,艰巨性,复杂性呈爆炸式增长。随着VB,Dephi等快速开发工具的出现,却又变得非常简单,编程的门槛降到了很低的程度(甚至比以前更低),Windows程序的机理在一定程度上被掩盖了。但在很多对程序效率敏感的领域,VB这样的快速开发工具就失去了用武之地,必须借助visual c++这样的和操作系统结合比较紧密的工具来完成。
我认为,任何一个想在windows平台下做开发的技术人员都有必要了解windows操作系统的基本原理和工作在windows下的程序的工作机理,不管你是不是用着VB,是否对它感到满意。前面已经说过,现代的软件开发必须建立在充分理解平台的基础上。
学习visual c++的过程是一个漫长而痛苦的过程(基本入门一般都要花一年左右),要学精更是痛苦万分。(要学习太多的东西做铺垫)但这同时也是从程序设计的观点学习和理解windows的一个过程。学了它,你也许不一定会用到它,但是通过对它的学习,绝对可以把你的思维能力和知识水平提高到一个新的层次!益处会从今后的工作学习中慢慢体现出来。这是无数前辈们的经验。从另一个角度来看,能“挺”过来的人,毅力、心理承受能力都经过了严峻的考验。大家也都知道,IT行业日新月异,想要生存下来,需要不断地学习新知识、新技术。本身必须具有扎实的基础和良好的素质,才不至于疲于奔命。学习visual c++的过程正是理论联系实际,不断夯实基础,锻炼不屈不挠的精神的过程。
似乎说得悬乎了,呵呵~
那么该怎么学习它呢?有人说“用visual c++搞开发好比手无刀叉吃全羊”那可怎么办?(总不能直接用牙啃吧?)先找到刀叉再说啊!先了解windows程序的工作机理(消息驱动),这是刀;然后了解基本的C++语法,多看源代码,这是叉。这时就可以开始烤羊了。(吃生的?小心消化不良!)怎么烤呢?侯捷的《深入浅出MFC》会告诉你。烤熟之后,你就借助刀叉大饱口服吧!
罗罗嗦嗦就说到这里吧,再推荐绝对经典的几本好书给大家,一定能有所裨益。(除了深入浅出都有电子版,哪位同学要可以找我)
《Programming Windows, Fifth Edition》 by Charles Petzold Microsoft Press
北京大学出版社译《windows程序设计》
《Programming with Microsoft Visual C++ .NET 6th Ed》 by George Shepherd & David Kruglinski Microsoft Press 潘爱民译 清华大学出版社《Visual C++ .NET技术内幕(第6版)》
《深入浅出MFC》第2版 侯捷著 华中科技大学出版社
《Programming Applications for Microsoft Windows》 by Jeffrey Richter Microsoft Press中译本《windows核心编程》(翻译得不咋地)
来源:https://www.cnblogs.com/zzq540/archive/2005/04/18/139999.html