大学里如何学习 ?
引子
唉,本实在不想发水文的,可还是发了,看来是周末闷骚咯,没兴趣的请赶紧飘过 ~~~
本篇博文其实是用来给在读大学生一点借鉴的,并不会讨论什么技术类的点 ,所以,不喜欢这种类型文章的也可以飘过,
但是如果各位有兴趣的且保有不同意见者,也可以提出,欢迎讨论,毕竟出来混的应该也看过了很多学校里所谓的大学生,
估计心里头对现在从大学里头招进来的各位小学弟小学妹也不咋的满意,而我也算是比较了解一些学生的,
所以,何不趁着周末一起出来指点一下他们呢?
致学生 - 大学最重要的不是 Java 和 .Net 而是基础,基础才是最重要的 !!!
在这里,我也主要是因为见很多大学生现还在学校里迷茫,毫无方向感,
而刚好自己周末有点闷骚吧,因此也站出来说两句话,希望不会因此受到人身攻击,
当然,我只是扯淡,说出我的建议,至于觉得发言不妥者,自可以飘过,也欢迎提出新的见解,
而这里我对大伙扯的两句,尤其适用于现还在大学里的各位学弟学妹们,
首先,现在大学里过多追求就业率,拿我们学校来说吧,是个二流学校,为了有好的就业率,
学校一直和校外培训机构进行合作,一直主推 Java ,甚至推出学生如果在某个培训学校培训的话,
是可以不用去上课的,这一点,我实在想不通,最后我给自己一个答案,那就是学校已经自认为比不上外面的培训机构了,
这个不得不说是一个悲剧哦 ! ! !
而后就是,我们学校里,好不容易有个博导给我们上课,但是悲剧又来了,博导上的课居然是计算机导论,
最差劲的一门了,唉,现在才发现,大学里真正教书的一般都是助教和讲师,博导可都是有自己的项目要做,
有自己的公司要开,有自己的人际网要拓展,博导这么忙,当然也就只能请个助教了,
这个其实才是现今大学教学的一个大悲剧 ! ! !
还有就是我本科学的是软件工程,大学里,我很悲剧我没有学过组成原理,编译原理等等基础课,
我们听讲座听的最多的居然是培训学校来的老师的演讲(基本上是推销),
呵呵,够悲剧了吧,希望各位的学校不会和我们学校一样 . . .
上面呢,就是我在学校时候的学习背景了。
然后呢,我再根据我自己的经历来谈谈我的看法,我呢,也算是个计算机行业的狂热分子吧,
自大一接触 C++ ,我一直都对这行业很感兴趣,曾经也经常在网吧上通宵(当然那会是为了学习 C++ ),
大一到大二上学期,我一直都是在黑框框里面(也就是 DOS 环境下)写着 C++ 程序,
也潜心写过汉诺塔,迷宫,八皇后等等经典算法题,
那会儿写的呢也很带劲,但一直没有接触过具体界面的实现,所以总是感觉有些不爽,因为总觉得那不是软件,
甚至都怀疑起 C++ 到底能够做什么用,现在想来那时候的想法真是幼稚啊,
并且自己也总是幻想着能够什么时候做一个具体的软件出来(那个时候总是觉得只有有了现在所谓的图形界面才算得上软件),
后来一次偶然的机会,我接触了 . Net ,然后,我发现,做图形界面是如此的爽呼呼,
于是乎,一个人拼命地学,拼命地学 .Net,然后开始拼命地写我那个时候我所认为的所谓的软件,
写一些数学工具,一些小游戏,也将一些诸如迷宫,八皇后的算法题从 C++ 改成 C# 写的应用程序,
然后就是做 Web 开发,学了很多很多,也做了很多的诸如什么什么的管理系统等等,
但一直都感觉不再向大一学习 C++ 那么正派了,有点说不出的感觉,
但也一直总结不出什么内容,
不过现在算是总结出来了,因为我过早的涉及了高级语言,而忽略了真正的基础 ! ! !
因为总结出来了结果,所以我也越发的思考大学里面,作为一个大学生到底应该要学的是什么?
总结了个人所认为的在技术上的几点内容,注意是技术上的,至于做人处事上的,我自己都做的不好,没资格在这里扯淡,
英语很重要,我的英语一直不怎么的,因为英语差劲我也吃了很多亏的,甚至我现在看英文资料,我都得开着金山词霸的划词翻译,
看起来的那个速度自然是不用说了,
曾经我也总是想,现在国内资料那么多,要英语干吗?呵呵,听我一句劝,好好学习英语吧,
因为你会发现,你真正要找的资料是某个不常用 API 的英文解释,而不是要找 HelloWorld 怎么实现的中文资料,
然后就是难道你以为任何一门语言都有向 MSDN 中 C# 这么全面的中文文档?那你看看 MSDN 中 VC++ 的文档吧 ! ! !
或许有人会说:为什么 C/C++ 中文资料这么多?
天呐,难道你想一辈子跟在别人几十年后面,你知道 C/C++ 是一年出来的吗?难道,你愿意永远比别人了解到新知识晚几十年?
数学很重要,大学里,我数学一直都还不错,无论是高数,还是线数,离散,我都学得不错,也一直有些沾沾自喜,
但是到现在看来,我的数学,呵呵,悲剧,学得太烂了,数学的话,我觉得各位在校的,也听一句劝,学得越深越好,
曾经,我也总是觉得数学没一点用处,但是后来看了 OpenCV ,也和同学讨论了 OpenGL ,谈论了一些计算机图形学的内容,
也看了同事的一些不晓得是什么的东西,居然列那么多数学公式,关键是我一个都不懂,
此时我才发现,计算机的世界其实是一个数学世界,
你想深入了解计算机,那你得数学得学得非常牛逼,里头全是数学,所有的东西都是数学,
甚至让我觉得,计算机搞到很牛逼了的话,那么一定可以成为一个牛逼的数学家了,
或许各位会说,我只局限在我所了解的领域里面了,因为在 .Net 中,数学似乎一点都不重要呢,
但是我会反问,难道你又不是局限在 .Net 中了,
或许,你觉得微积分,常微分方程离我们很远,其实,你错了,它离我们很近,你总有一天会发现的,
呵呵,其实数学的重要不重要,关键在于你想不想真正的呆在这一行里面;
汇编很重要,弄到这里,应该会有很多人反对了,因为,向汇编这种东西,在搞 Java 和 .Net 的这些高级语言程序员眼里,
那早就应该是过时的内容了,呵呵,其实我以前也是这么觉得的,毕竟,有本事你拿汇编做个 Web 应用程序出来看看,
呵呵,以前多幼稚的想法啊,人家<<疯狂程序员>>里头的绝影就是弄的汇编,不晓得现在混得咋样咯,应该不会差那头去吧,
毕竟人家弄的是汇编,确实,那汇编做应用软件或者 Web 应用程序的话,确实太牵强了,但是为何我现在搞 .Net 这么多年了,
反而回过头来学习汇编了呢?因为我发现,我对内存的管理,对寄存器中的内容,对整个 .Net 的底层,对所有的一切都掌控不了,
曾经看一本书,好像是<<Sql Server 2005 高级程序设计>>吧(一本 Sql Server 方面的巨著,这里擅自推荐一下),
里面的作者就说了,计算机中最害怕的事情就是不可预料,无法掌控,
而且汇编语言中,对内存的寻址,以及寄存器的使用都有非常好的解释和频繁的使用,
通过学习汇编,你可以更好的理解地址总线,数据总线,控制总线和 CPU 以及内存之间真正的工作流程,
以及它们之间的一些最基层的协作关系,同时也能理会内存最真实的使用,
而不会向无头苍蝇一样,甚至连内存是什么都不知道,只会说,我只要分配内存即可,只要 new 就 OK 了,
当然如果你只想做到你所要的 new 的话,我也没有办法,我只能说你还不够狂热,不够专业,不是合格的程序员;
计算机组成原理和编译原理,计算机组成原理的重要性是不言而喻的,毕竟考研专业课中,这东西好像还占蛮大的比例的,
至于这编译原理吗,肯定又有人反对编译原理了,说,又不让你自己搞编译器,学什么编译原理,
呵呵,说的也不错,但是我想说的是,并不是你想搞什么你才去学什么,眼光放远点,
你会发现,你的世界里并不是只有 .Net 和 Java,
而且在编译原理这东西里面,你确实能够学到很多东西,就比如,如果当初设计 Java 的是你,
你会想到先将程序编译成字节码,然后再使用解释器来解释字节码吗?
我想,你肯定想不出的 ~~~
操作系统,
操作系统,这个名词听着都感觉很严重,毕竟,在操作系统被 Windows 垄断的环境下,
也确实很难有人愿意接受操作系统是很重要的东东了,
甚至觉得学习操作系统就是学习如何在 DOS 环境下,敲个命令出来一大堆东西,
或者觉得学习操作系统就像是学习 <<Windows 操作系统一千招>>一样,
能够打开个注册表,能够优化一下电脑,改变一下电脑启动画面,那就是学习操作系统了,
又觉得以后操作系统这东西就给微软去做吧,
如果你真这样想的话,那我只能说,真是个悲剧 ! ! !
我想说,如果你觉得操作系统不重要的话,那你真是错到家了,
大学里头,我一开始也是带着混的心态混过的操作系统课程的,
但是在考试前一个星期,我居然迷恋上了操作系统,那可真是作死的看操作系统啊,
整整在一个星期里,我拿着<<操作系统概念>>看了 2 遍,甚至在看完 2 遍中文版的之后,
我还准备去啃原版的,无奈英文水平太差,最后只能作罢,
经过了那次的操作系统的学习后,我自以为操作系统我掌握的还不错了,
但是后来,我发现,我一直都在追赶操作系统里面的知识,
从我写驱动程序开始,我就一直在追赶操作系统,为此,我重新学习操作系统,看 Windows 内核原理,
看 Windows 分析,看内存管理,看进线程调度,看 CPU 调度,看 I/O 管理,即插即用管理等等,
看了很多,至今我都觉得,我在操作系统这一块还很欠缺,很欠缺,我越往深处学习,我就觉得我越欠缺操作系统的知识,
现在也还正在打算到哪里再去找些什么资料来填补空缺呢,呵呵,说了这么多,
我只是想纠正现在大学里头很多人认为操作系统不重要这一观念,
操作系统真的很重要,很重要 ! ! !
C/C++,这两个东西我想不必多说了,只是在这里奉劝那些和我当年幼稚想法一样的说 C/C++ 做不了什么用的人,
如果这两个东西,你错过了,你补都补不回,
其实啊,我们被大学里头的老师害惨了啊,
曾经我的 C++ 老师就说,美国什么航空火箭发射上天后失败,直接掉了下来,照成 n 人死亡,损失惨重,
而这一切竟然是一个指针惹的祸,所以,我们 C++ 老师就跟我们说,指针这个东西很危险,少接触为妙,
哈哈哈,真被害惨了,后来才发现 C/C++ 如果没有了指针,那就真的一点用处都没有咯 ~~~
还有,当年老师教 Goto 语句的时候,老师只讲了一句话:这东西,影响程序逻辑性,造成程序可读性差,所以大家禁用 ~~~
呵呵,现在出来,这个 Goto 语句也还是经常看到的
(这里我并不是推广使用 Goto 语句哦,只是有些东西,并不是说老师不教我们就可以不学的,也不是我们不学,以后就不会碰到要使用的情况的)
劝诫各位,千万不要看不起黑框框,来句形象点的:一切图形界面都是过眼浮云 ~~~
我最庆幸的是,我当初对 C++ 还执着过那么一年半,所以,也还算有一点点,也就是一点点底子而已,
拿最简单的说,人家 Windows 还是 C 写的呢,人家 Oracle 也是 C 写的呢,你还敢说 C/C++ 没用 ?
然后,那你又会说,那些都是做的系统集成,系统软件,
呵呵,那我现在给公司里写的也都是 C 写的呢,而且写的环境还是在黑框框里头写的呢 (Dos 环境下编译调试),
那你现在还会很鄙视黑框框吗 ?
数据结构和算法,对数据结构还好,在大学里,还是有很多人意识到了数据结构的重要性的,
而且,基本上上课的老师也会稍微强调一下数据结构的重要性,呵呵,所以,在大学里头,这门课缺课的人还是比较少的,
确实,如果等到各位将来研究一些稍微底层的代码时,或者如果有机会写系统软件的时候,
你会发现,底层里头的链表那个多啊,循环链表,双向循环链表,平衡数,顺序表,最小生成树等等用的到处都是,
当然啦,现在 C# 里头,大家或许很少有机会接触到了,要队列有队列,要表有表,要字典有字典,要什么有什么,
一般来说一个字典,一个 Array , 一个泛型基本上全部搞定,
但是忘了告诉各位,用得这么方便可是需要付出代价的哦 ! ! !
而对于算法的话,现在感觉越来越不受重视了哦,
甚至很多学校都不开算法课了,只是一个简单的数据结构带过而已,
所以很多人也都不晓得贪心算法,动态规划等了(说实话,我也不太懂了,不过打算有时间去补补),
都是高级语言惹得祸(注意,这里不是抨击高级语言哦),把算法都封装的那么好,
说实在的,如果真不做大的系统的话,算法这东西真的很多都可以不需要掌握了的,
但是,如果,这世界上每一个人都这样想的话,就不会有 Windows ,Oralce 了,
殊不知,Windows 整个结构的复杂性,其中调度算法的使用,
也殊不知,Oracle 体系结构的复杂度,其中缓存处理算法的复杂度等等,
如果你只想在 .Net 上用用别人的东东,或者说是有空拿个循环玩玩的话,算法这东西确实跟你隔得很远了,
但是,难道你愿意这样???
你去看现在年薪高的程序员,哪一个不是算法高手?
呵呵,这就是差别哦 ~~~
数字电路和模拟电路,说到这里,更多意见应该会冒出来了,咱搞软件的,为什么要搞这些东西呢?
呵呵,如果真的不用搞这些东西,大学里就不会开这些课咯,博客园里头搞 .Net 的居多,搞 Web 开发和 .Net 应用软件开发的居多,
而现在市场上搞 Java 和 .Net 的又是居多,所以设计到数字电路和模拟电路的内容不多,
甚至是一片空白,所以也就觉得这两东西真是扯淡,说真的,我很能体会大伙的心情,因为我以前也是这样觉得的,
但是,大家眼光放开点,真的放开点,这个世界上真的就只有 Java 和 .Net 了吗?
而除了 Java 和 .Net 以外,很多其他地方,对于数字电路和模拟电路都是要求很高的,
尤其现在社会上很缺模拟电路方面的人才哦,而且,理解了这两个东西以后,对于自身理解程序的具体怎么跑的,
为什么能输出个字符,为什么能执行计算操作都是很有帮助的,而不会像一个码农,连自己在做什么都不知道,
这也就是所谓的不可预知 ! ! !
计算机网络,这个东西呢,说真的,也不好说,当今早就过了以前那个计算机只是用来做计算的时代了,
现在是网络的时代,如果你真不懂网络,说实在的,你连程序员都不适合,不要求你有多深的掌握,
但是 TCP,UDP 还是要分得清吧?TCP/IP 协议五层结构总的知道吧?
数据具体的流动过程也要有所了解吧,呵呵,都是很基础的东西啊,
可是,这些基础却是最重要的东西~~~
总结
上面总结出来的几门课程,都是我认为大学里头,在计算机中最最基础的课程了,
但是,这些课程却被很多大学给忽略了,从而也被很多大学生给忽略掉了,
而诸如软件工程,数据库,软件项目管理之类的课程我在这里没有提及,因为,那一块过多涉及软件方向了,
会限制到一些思维,所以我没有提及。
现在的大学里(像我所在的学校),侧重点已经变咯,培养学生事小,捞到收入才是最重要的了,
学校为什么拼就业率啊?就业率高了,自然学生来得多,学生来得多,自然,国家给的钱多,
自然,腰包里钱更多,然后又大肆拼就业率,拼就业率,那就得多让学生接触所谓的现在社会上所需要的(Java 和 .Net 程序员),
如何培养出这样的程序员呢?交给培训学校吧 . . .
甚至,似乎今年还推出了一个新的专业,是和牛耳培训学校合作的一个软件外包专业,
呵呵,专业外包人才,靠 . . . 名字真好听 . . . 要我说,学校太不负责了 . . .
说实在的,以前,有一些不同意老赵对培训学校的观点的,
但是,现在看来,也还是有一些同意了(但培训学校确实还是有一些作用的,或许会培养人,但是我觉得也会害死人),
通观全文,可能有读者会觉得我在反对高级语言,其实,我一直都在努力地避开这个话题,
因为,我本身的意愿并不是反对高级语言,只不过,我觉得大学里头的学生,
尤其是大一,大二,大三的学生,他们不应该过早的接触到高级语言,
如果他们基础真的好了,那他们到哪里都可以展翅,当然,等到基础好了,
学起高级语言来也是手到擒来的 . . .
还有就是需要解释一下,现在大学里头流传的:学基础课程是找不到工作的 !只有 Java 和 .Net 才是王道;
我的回答是放屁 !
好了,拍砖的拍砖,要骂的请先给出理由,然后再骂,最讨厌什么都不标明就进行人身攻击者 !