很遗憾,自己学习计算机走入了很多误区。多想回到最初接触学习的时候,假如…没有假如。只能说遇到引路人真的很重要,如果没有,那学习的经历将是曲折的。我只想记录一些自己的经验,让读到这篇文章的人,找到一些方向。
沟通最好的方式就是告诉别人你想去的方向,而不是抱怨自己现在的位置。多给出自己的建议,而不是一味的黑别人的想法。所以,我给出一个概况图吧:
区别一个是否了解一个行业,就是是否阅读并理解几门书了。核心就是这几个了,但是至少需要5年的时间。
离散数学:学习一下布尔代数,图论这两部分就可以。
C语言:
学习到灵活运用变量,数组,结构体,一些条件控制语句,嗲用方法。也就OK。
面向对象的一门语言:
作者学的是JAVA,主要的目的是理解“对象”,一切皆为对象,封装,抽象这些伟大的哲学。很多时候,它们无往不利。切记,不要把过多的时间学习那些网页,Socket,复杂的输入输出NIO,泛型,图形界面那些东西,基本,各种术语云山雾绕,肯定会晕,以后随着各种关于计算机的常识不断积累,无师自通。
程序=数据机构+算法
前面的东西不应该浪费超过半年的时间,而后面的你需要至少半年甚至2年去好好读懂。关于基础的数据结构,队列,二叉树,后续的还有高级的,二叉树,B+树,数据结构中会有一些基础的算法,正是算法的基础。
1.数据结构(C语言版)[美] 霍罗威茨
2.算法导论
[美] Thomas H.Cormen,[美] Charles E.Leiserson,[美] Ronald L.Rivest,[美] Clifford Stein 著
3.《高级数据结构》目前美国一家大学的讲义,作者我也不清楚,只有一份电子版。
建议把上述书1,2读完,花大时间。
剩下的学科都是最核心的,直接推荐书籍吧:
《现代操作系统》
Andrew S. Tanenbaum,Herbert Bos
计算机组成:
《Computer Organization and Design:The Hardware/Software Interface》
计算机体系结构
《Computer Architecture:A Quantitative Approach》
这两本书太著名了,我就不上图了。都是下面作者。
[美] David A.Patterson,John L.Hennessy
《深入理解计算机系统》[美] 兰德尔 E.布莱恩特(Randal,E.,Bryant)
《计算机程序设计艺术》高德纳(Donald E. Knuth)
一个是压榨CPU性能的,一个是当你在软件性能优化时候的内功,内功,就是不是直接有用,但你所有的程序设计基础甚至可以独辟蹊径。
唯一没有提的是汇编,其实,汇编在学习计算机组成时,你会体会到,只是为了表示硬件逻辑的助记符。不过学习一门汇编还是很有必要的,但又不需要花费多余2个月的时间。当然,我认为应该在组成之后学习。
基本上,读完上述,你可以很快地学习并上手,数据库,企业应用,网站,等等等。磨刀不误砍柴功,深有体会。
一些对入门不太有用的学科
高等数学是在分析计算机内部一些电气特性时用到,线性代数和矩阵运算在计算机图形学中用到。数学是计算机的有用工具,计算机也是一种数学。不过入门…没必要,等用到的时候,大概你应该已经在业界浸淫多年了吧。
电路,电子线路,基础物理学这些关于计算机底层的东西了解一下就好,怎么说呢,关于这种在计算机晶体管硬件级别的,恕我直言,深入学习为时过早。电路主要介绍集成电路,非线性电路的一些规律,电子线路主要介绍晶体管以及用晶体管怎样组成寄存器,移位器和触发器等,触发器用于制造DRAM(Cache).。听起来很有用,不过,基本用不到。
我的观点认为,用到或快用到时候学习才是王道。人的精力有限,有所权衡,才是明智。
快速开发所造成的各种前端框架等,各种语言比如HTML,JS,JQUERY(JS框架),没必要学。
流行的JAVA来说吧,不要学JSP,Servelt,JAVA 图形API(swing,awt,JFX)等。
如果想要快速获得一份工作,那我无话可说,我只想的是,真正的学好计算机。并不是语言学地越多越好,这种想法是愚蠢的。
接下来,关于多种方向的发展可以有所偏重了。遇到瓶颈学数学就对了。遇到高级问题,学数学!入门时候基本用不到的高级数学,会发挥很大的作用。图形学中的线性代数,硬件底层实现的功耗测量中的高等数学,CT成像的微积分。很多很多,可以说,高级的计算机工作-数学。