我的专业计算机

我的专业计算机
  为学计算机而自豪吧,因为它是这个伟大的时代最伟大的产物。
  有人会说,谁都能学计算机。有人会说,计算机干得好的都不是计算机科班出生的......
  不管别人怎么说,在这些争议中,我们能自我陶醉的东西就已经在其中了。
  当然了,今天的日志不是要评论或者夸赞计算机行业的瑰丽。只想在今天——将其作为专业四年之后的今天,谈谈在我的身边、我们的环境中,计算机专业学习的状况。
  先从大环境说起吧,计算机之于军队,当然是重中之重,军队的现代化不可能离开计算机的发展;反过来呢,军队之于计算机,或者说军校之于计算机专业,值得探讨的问题就很多了——体制上、模式上等等等等,记得当当上转过一篇帖,就是讨论军校生做软件,整个帖子充满着一种暗淡的色彩。真的没出路吗?什么事情都不是绝对的,暗淡的大家都抱怨过了,我想到一些明亮一点的地方。首先,军队的特点造就了军校学生的吃苦耐劳精神。这句话听起来是不是太政治机关化了:)但事实就是这样的,而且这是一个很大的优势。干工程做项目,有人开玩笑说都是加班加出来的。抛开智力和技术因素,在“苦干”上,军校出来的人都是很厉害的哦:)再有,军校教育体制滞后,也有起好作用的一方面。地方许多学校为了培养学生的“就业上岗”能力,专攻专得太极端。比如我的一个高中同学,学纯软件,两年下来什么VC、VB、JAVA、.NET都不在话下,但他从来没学过操作系统、网络协议、体系结构之类的课程。优劣下面会有分析,大情况就是这样,基础面广就是我们的一个优势。

  着眼到工院计算机专业学习的情况,(说自己比较了解的啦,当然也只是自己的看法,个人因素很大:)说实话,要跟国防科大,或者其他一些重点地方院校相比,我们的专业不占优势。但环境不能决定一切(我很坚信:),那我就谈谈我们学习的问题咯~,几个方面,我都说说我发觉的问题和解决的看法吧~

  基础学习,我们存在什么问题呢。首先是理学院的问题,理学院最大的弊端是把基础学习和专业学习完全脱产,名曰“基础大合训”,其实可以说是悲惨的“一刀切”。在理学院,我们能学到什么专业知识呢,C、数据结构。虽然说这两门是重中之重,但没有一个专业的氛围,就没有教员、师兄给解释为何是“重中之重”。学生在这种环境里边就不知道该怎么学、该怎么自学。问题摆在这里几年了,就我观察我的上一届是这样,我们这一届也是这样,我的后边一届似乎更是这样。怎么解决呢?其实我们有很多东西可以学,只要知道该学什么。学C,编程就已经可以练了。重点是许多人大一大二时都认为编个界面编个Windows才算编程(其实很多人到大四估计还这么认为)。这当然是一个最大的入门误区了。用C可以编什么呢?结和数据结构,各种算法就是你最好的编程教练。看看ACM程序设计大赛的题,你的编程练手素材其实非常多。一个告戒就是:不要眼高手低,不要嫌枯燥。坚持下去,再往后走你会如鱼得水的。

  好了,到了大三,专业氛围来了,专业环境有了。但新的问题也来了。其实问题还是“如何学专业”,只是同一个问题表现在了不同的环境中。许多人,由于前两年在专业上的压抑,到了专业学院后非常、相当期望“一展身手”。但如何做起?似乎没有多少人看透。许多人一到大三,就为自己定了许多目标:VC、VB、JAVA、ASP、JSP。五花八门。但往往都是几个月后兴趣就淡了,甚至在兴趣高涨那几个月,绝大多数人也就是把精力花费在了“选择学什么”上边、体力则花费在了“从图书馆搬书和往图书馆还书”之间。我曾经也是,找了几本VC、VB,立誓要在编程上有所突破,结果呢,苦不堪言。问题就是这样了,问题出现的原因是什么呢?是大家的盲目和对专业知识的不了解。什么是C++?它和C的区别在哪儿?它和VC++是什么关系?许多人不甚了解,了解的也只是在概念上听说过,实际并不了解。不了解就造成了大家抱着一本VC++6.0还自以为在学C++。挣扎痛苦也是“到底学VB还是学VC?JAVA是不是更新潮一点?”年复一年,似乎每届学生都是在这中盲目的痛苦之中度过了高年级,那么如何解决广大群众的这种困境呢?最根本的途径是“能者授之”,能者是谁,教员呗,这也是我希望教员们能了解一下的“基层痛苦”。当然了,自己才是自己的救世主。上网是一个最好的解决途径,当然不是用QQ了:)我也提一点学习的方法途径吧,对于工院的学生,课程大概是这么分布的:汇编、计算机原理、网络、操作系统、微机原理、算法、体系结构、编译原理。结合这个过程,我们可以怎么学习呢?首先,我们学的汇编是8086,通常386的部分不会讲太多,学生听的就更少。首先,汇编是一定要学好,有人说X86的汇编不用讲了,过时了,我不这么认为,具体原因就很主观了,总之,如果你不想失去选择硬件方向的机会、如果希望对操作系统有涉足、如果对溢出之类的HACKER技术感兴趣......就不要忽视汇编:)先说我们学的8086吧,基本上,我们学习的是语法和汇编的概念以及一些中断等基础概念,那就在你学8086的时期里把汇编的编程技巧练熟,纵然会感觉枯燥,但学习都是这样,当你投入进去时,哪怕是一个语法技巧,也会让你无比舒畅。然后呢,当教员给你们说:“386部分我讲一讲,不考,想听的可以听,以后可能会用”。请注意了,听!认真的听!因为自己看是没有听课来得直接的。也请教员们尽量不要让学生自我放松,虽然不考,但真的很有用。386怎么学呢,有两条线。第一,开始的什么保护模式之类的概念会比较奇怪,第一次学起来也会比较困难。但如果你现在学好了,到你学微机原理时,会发现很多重叠部分,而且我们的汇编黑皮课本上有些部分讲得更加清楚。还有一条线,就是用汇编来编写Windows程序,其实它和什么保护机制啊并没有太多联系,但你可以通过用汇编来进行类似“用C进行纯SDK编程”,这样,其实你已经可以领略窗口程序的编写快感了。可能一些人不太明白什么是纯SDK编程。我下边会再说他和VC或者说和MFC的关系。汇编差不多就是这样了。网络怎么学呢,很多人(包括我在学的时候)都是把网络啊、计算机原理之类的课程当成了文科来学,协议规范背得相当熟,计算机概念也背得相当熟,但这不叫学,也就仅仅是锻炼了记忆能力而已。怎么学网络,协议是网络课程的核心。那怎么学协议呢?在你用汇编进行了类SDK编程之后,相信再用VC也就不难上手了,也就是说,无论是用汇编还是用C,你都可以将协议进行实践。用MFC封装的CSOCKET写一个聊天程序其实不难,你可以初步感受网络编程的快感;往下降一点,用C或者32位汇编调用API写一个聊天程序,你可能就更有成就感,而且对协议会有一些实践的感触;再下降一点,了解一下原始套接字,自己构造一个报,自己来实现一下TCP三次握手,或许比你背一百遍更深刻;改一下,写一个分片攻击,或许你还真找到一点黑客的感觉;灵活之后,把聊天程序改一下,隐藏自启一端,解析命令进行CMD操作,你的一匹“小马”就出生了,没事喂喂马,或许有一天你的木马能满天飞哦:)操作系统呢?工院的操作系统是用LINUX作为思路。这就成了你理所应当地去学习LINUX的一个原因了,注意了,是深入学习,而不只是装一个红帽子来代替Windows做使用。怎么学LINUX呢,内核似乎是你首先想到的,但别急,怎么编译内核?或者怎么在LINUX下调试程序?怎么进行最常规基本的LINUX操作,脱离系统熟悉来学习内核也不是一个好方法。学到操作体统,你就发现,计算机原理课上讲的一些理论似乎和它联系上了。就这样,多思考一下课程之间的联系,你才会知道如何学以至用。我也不想每门课都说了,毕竟学习是很个人的事情,自己理解是最重要的习惯。

  再说点什么呢?上边说到了SDK,就顺便说说怎么看待和学习VC(VB之类一样啦),首先VC和C++有什么关系呢?哦,还是先说C++和C有什么区别吧,C是面向过程,C++是面向对象,我理解,C++思想是一种工程思想,那么你就不妨尝试用C++中对象的思想来描述一个具体的工程,或许就会有更深的了解,否则只是记住了什么是派生什么是继承,但他们用在什么地方,或者说重载、虚函数都有什么必要,你可能就不明白了。在这种不明白的情况下,你是无法深入学习VC的。在工院把C++作为选修,许多人都没有听过。课上不听,课下抱本VC++作苦啃状,杯水车薪啊。当然了,有人说,不学C++照样用VC编程,是的,照样可以编,在MFC给定的筐架下你可以胜任调用API的工作,但仅此而已,熟练工种,当你真遇到一个工程,需要自己用对象的思想解决时,你还是得回头来学C++,何必呢?所以C++务必好好听,课下还得务必好好再学。好象跑远了一点:)回头说回来,C++是一种语言,VC++是一个平台、环境。相当于作料和锅,你可以在锅里放作料抄菜,但千万别说锅和作料是一回事。那么MFC又是什么呢?我们可以说他是一把锅铲,有了它你可以更方便地抄菜。我们在Windows下编Win32程序都是通过调用Windows提供的API来完成的,API又是什么呢,就是系统为了屏蔽用户和硬件而留下的一些编程接口——也就是一堆函数,MFC就是在API的基础上,把一些需要经常实现的功能所需要调用的API封装起来,提供一个更高层的编程接口,同时提供一个Windows程序框架,你几乎其他什么都不用做,就可以拉出一个MFC实现的对话框程序出来。而加上一些API调用或者MFC调用,你就可以做出一些通常的应用程序出来。问题是什么呢,就是MFC已经搭好的框架让你看不到真正的Win32程序的机制。而所谓的纯SDK编程则是纯粹调用API实现Win32程序,因此通过SDK编程,你就可以详细地了解Windows程序的结构、以及它的消息机制等等你在MFC下完全看不到的东西。上面说了,你可以用C进行SDK编程,也可以用汇编进行SDK编程,当然了,你更需要的可能是一本好的入门书。VC的应用类书籍是肯定不能满足你这个需要的,系统地讲解纯API编程的书不多,有一本书可以推荐——罗云彬编写的《Windows环境下的32位汇编程序设计》。它有价值的,就是前几章对Windows程序机制的讲解。另外,要从本质上学MFC的话,候捷的《深入浅出MFC》相信是家喻户晓的,但你别抱着学习“如何用MFC”的目的去看它,因为它给你剖析的是MFC的框架实现结构,在其中同样很有价值的也有对Win32程序机制以及经典C++对象思想的讲解,相信你就可以从其中体会到重载和虚函数究竟有何用处了。

  话说回来,我从不认为学VC有什么很大的价值。通常来说,你可以问自己,现在你在干的事情是不是急需要干的,现在你干的事情属不属于熟练工种的范畴,那你就能学会判别许多学习上的盲区。对一个人来说,能学越多的东西越好,但是什么时候学什么,是个值得思考的问题。在我们现在的学习环境中,更应该学什么呢?还是申明这是一个非常个人的观点,我认为VC不是最该学的。那该学什么呢?首先,是基础。什么是基础?刚才说的,C、汇编、操作系统、微机原理......说白了,学校为我们开的专业课都是很重要很有用的基础。联系到文章一开始提到的,我那个学所谓“纯软件”的同学,他学了那么多东西,我们是不是落后于他呢?或者说我们的优势在哪儿呢?答案就是基础!通常来说,我知道许多同志都觉得“所学”与“所用”连不上,我要说,我们学的基础都用得上,关键看你有没有去思考在哪儿用,如果思考到位了,那么能用到的地方,就是我们现阶段该去学的地方。说得有点抽象啊:)例举一下好了。刚才说了汇编、C、操作系统的课程如何在实践上体验,但仅仅还是体验而已,没有把各个课程串起来。怎么串呢,建议大家翻一本书《自己动手写操作系统》,一个年轻人写的,他写了一个简单的内核雏形,这本书就是他的编写过程。看完你就会发现,我们的专业课似乎在这儿都串起来了。首先,整本书都是关于操作系统,当然就会联系我们的操作系统知识。如何写一个引导程序?首先你的汇编知识用上了,同时,从实模式转保护模式怎么转,你的386上学的知识(微机原理也有)就用上了,再涉及到中断时,你居然还涉及到了微机原理上讲的8259,当然了,再到后边,你还需要用C去设计自己的各种进程管理、内存管理算法...... 是不是联系了许多呢?如果你进行一段这样的学习,是不是要比你在VC下可怜巴巴地重复调用那些API更爽快呢?再举一个例子,说到“溢出”,大家是不是会觉得神秘而高不可及呢?我来简单描述一下,首先,你要理解溢出是怎么发生的,那么需要你的汇编知识,用到栈啊堆啊,这些东西也是操作系统上讲过哦,然后呢,你需要对溢出点定位,那么巧妙的定位算法需要你自己用C的思维去思考,然后呢,Windows操作系统的相关结构你还得了解,比如他的错误处理啊,然后,你还得用你的算法思维去设计一个SHELLCODE的变形算法......是不是也让你觉得所学有用呢?所以说,同志们,好好考虑一下现阶段什么是最有价值去学习的,抱一本砖一样的VC厚书的确很深沉很帅,但切勿盲从哦:)

  最后再说一说方向问题。最大的问题是,我们身边的许多人还是把自己定义为了软件,认为只适合软件,为什么呢?因为只适合编程。这个理由本来就是不确切的,什么叫软件?变成就是软件吗?硬件就不编程吗?千万不要在自己不了解的情况下就下一些可以改变自己人生道路的定义。我要说的就是,大家多去问一问,多去了解一下,然后再给自己定位,不要一说到软件就是代码,一说到硬件就是电路。其实现在而言,很难将软硬一到切。比如嵌入式系统,硬件吗?是的,你需要搭板子甚至设计芯片。软件吗?他含盖操作系统、驱动编程,当然也有软件的一层,我对它的兴趣就非常强烈,在底层编程会有上层调用API无法想象的成就感。计算机领域如果分层的话,逻辑上有许多层,不要停留在最高层,其实它会遮避下面更绚丽的眯人风景,最后推荐一本与次观点相关的书——《深入理解计算机系统》,他从一个程序员的角度去讲述整个计算机系统从下到上的知识,从二进制代码到网络协议,你可以更全面地了解自己的专业。

  我们在军校这个特殊的环境里学计算机,不要一味地看不起自己。看到我们的劣势,同时也要看到我们的优势,作为一个临近毕业离开的人,把自己的感触和思考告诉给后边的人,最重要的是希望我们前面这些人的一些遗憾不要再像这样一年一年地重复下去痛苦一年一年的人。

  立足深挖下去!
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值