首页 > 代码库 > 写给刚入行学计算机孩子的一封信
写给刚入行学计算机孩子的一封信
其实我今年大三,充其量也刚刚大三一个月,并没有什么资格在这里班门弄斧,与其是说写给大一孩子的一封信,倒不如说是对我这两年来的学习做一个概述和总结,谈一谈经验和教训,能给新人们一些借鉴 便足矣.
我呢,就读在一个不知名的重本大学,学计科的,众人口中的二流学校的三流专业. 上大学前,我也没有接触过编程,小时候家里有一台windows98不能上网也玩的不亦乐乎,再后来就跑到朋友家上网打游戏,凭着这一腔热血和父母的任我选择迁就我的态度,我就走上了计算机的道路,立志学好计算机,因为它实在太神奇,对我太有魅力.(^-^)
上大学之前,我对自己的概括就是喜欢思考,喜欢数学.高考后那两个月里,我有幸认识了一个学长,我呆在家里没什么意思,就向他请教计算机要学什么(其实他也就比我大一届),他告诉我要学c语言,这几乎是所有学校选择的入门语言,于是我就这样开始接触了编程------->谭浩强,c程序设计语言.. 我还顺便找他要了一个编译器,vc++6.0 . 就是这样 无聊的我天天在家看c, 我的很认真,也没有觉得太难, 遇到问题就把书上的代码写到vc里面编译运行一下,也常常因为少了个分号而头疼了几个小时..(毕竟那个时候还不知道有调试这种东西).于是就这样 一点点的把这本书看完了. 其实总结下自己能看完这本书的原因有一下几点:1.这书写的很基础,易于理解,基本没错误.2.自己有兴趣能认真看下去. 唯一不懂的地方当然是指针了.对于那时的我的理解就是 指针就是一个 地址的东西,地址是什么 我也不知道.. 反正就是这么回事(A是B,B是C ,可是我不知道B是C是什么意思,但老师也不会问,只要你能说出来A是B就行....Σ( ° △ °|||)︴)
于是就这样,我来到了我的大学,大一上的专业课就是离散数学和c语言了,c语言我听起来当然很轻松,但是几门数学就让人很难受了,有高等数学,离散数学,线性代数, 每次上这些课 我的头都晕晕的, (这里先不吐槽,放到后面一起谈).. 对于一个刚上大学来学离散的人,没有点基础说能听懂都是骗人的. 刚上大一的孩子, 眼里只有从高中数学继承而来的数学观念,似乎从来没有想过为什么会有这么多数学,离散数学作为一个计算机的核心课程,不是能够轻松讲明白和轻松理解透的.事实证明 既没讲明白也没理解透.
大学的时间 对于大一的孩子来说总是忙碌的,常常要早早的赶着去上课,下课后又赶着去开社团的例会,隔三差五还要举办些凭空而来的活动,或者常常收到一个 下午**点在**办公室开会 的触目惊心的短信.
不过在我大一上的时间里,也有幸加入了ACM社团,学长们说,搞好算法,以后就会变得了不起,就会....就会XXX.. 算法在我心目中的位置顿时高大上了多少倍,于是每周都会有培训,大家在一起做题,刷题,感觉还是不错的. 不过好景不长,渐渐地我发现了,貌似搞算法的学长没有那么多,学姐更是一个都没有,也没有那么多热爱算法的人,而且貌似带我们的人 也不是很会算法, 我也有些小失望,渐渐的 似乎刷题的人越来越少 最后就没人了.. 偶尔回来看看我在hdu上刷的题, 也就200+道. 但是搞ACM确实是有收获的,就好像 c语言是一把工具,而算法就是让你通过这把工具 做你想做的事情!
大一下的专业课是 数据结构和c++ , 数据结构是什么, 其实就是数据的结构而已, 只不过大家没写过应用没做过软件,始终不能理解到这个简单的本质, 当然当时我也没理解到. c++更不用说了, 面向对象也就是OOP. 我敢肯定教这么课的老师我不知道什么是OOP, 在她眼里以及 其实在众多的同学眼里, c++只不过是有了对象的c,或者说 只不过是一门基于对象的语言吧(真的谈不上面向对象设计开发)
大一就学了这么点东西,可是我真的好难受, 学了一年的计算机也就只能在黑框框里面写个计算机而已,写个老师规定的input(a+b) , 我时常笑笑我自己, 虽然我很努力,但是收获的可能有一些,但并不总是快乐的.比如我看了c语言的四书五经(c和指针 c缺陷和陷阱 c专家编程 c程序设计语言(机械工业出版社的那本)) ,很多地方都是看了不懂,理解不进去, 自己常常很懊恼,很郁闷,也没有人能问,老师上完课就走,也不会关心你.似乎专业的学长们大部分也都是很水.(我不提学校,看看就好)
显而易见,学习知识的快乐当然没有打英雄联盟来的简单和方便,就像喝酒一样, 你总是可以麻痹自己,不去想那么多是是非非,怎么学好计算机. 放下自己那颗上进心,投身到夜色下的欢乐和日光下的瞌睡中. 大一越往后 变得越不积极,不主动,偶尔也会像良心惊醒一样想想该做什么,但是看看游戏,又想想学计算机是多么痛苦,还是转身投入到自己那14.4英寸的笔记本里面的游戏中, 寝室这么多人, 开黑从来不缺人. 我比较喜欢玩打野, 我不喜欢太复杂的东西,简单点,快乐点,我就知足.就这样大一过去了
大二来了,大一就这么快的翻过去了.更过分的是,学校第一学期的课程竟然没有安排专业课,唯一一个相关的勉强算得上的也就是 模拟电路,天啊 这是硬件啊, 我一个计科的学这个 确实好痛苦啊, (其实这个东西学组成原理的时候可能会用到) 不过挂科倒是不会的,反正 大学的期末考试 你懂得.^_^
我问过很多人,该学什么,怎样能学好计算机,问过老师,问过学长,问过毕业的学长,百度搜过,csdn上也找过,各种论坛也转过.似乎答案有很多 ,千奇百怪. 大二上我还试着看 Qt呢, 我还看了Windows程序设计呢..看的简直是云里雾里 要生要死的..虽然我没有什么进步,但是我知道不能像大一那样颓废下去,南方的冬天真是寒冷,我一个来自东北的孩子,穿着羽绒服,坐在没有空调的实验室里,简直了,,冻的要死..就这样,在一个小太阳的陪伴下,勉强度过了这个寒冷的南方的冬天.,(每次一用小太阳,烤的就想睡觉..有的时候就只能冻着自己,实在不行了用一下. 本科生不给空调, 但是 老师的办公室里都有空调, 教室里, 这个学校里有天花板的地方都有空调,我真是无语,自己出钱 自己付电费装空调都不行,学校到底是要干嘛!)
似乎我上面乱七八糟的说的太多了吧,不过我只是一一的把我的经历都记下来,如果只挑一些重点写写就会让别人觉得我像在写传奇一样,反正能认真看下来的也会看下去,不能认真看下去的估计也看不到这句话.
其实我就是这样,一直在尝试,学了很多东西,碰壁了很多次,也不知道自己有了多少想不明白的问题,也不知道自己在百度里面搜索的了多少问题. 不过功夫不负有心人, 在一个学长告诉我要看 深入理解计算机系统 后,我似乎找到了方向,(也挺痛苦)..不管怎么说也要感谢这个学长吧,毕竟保研去了中科院,果然是有实力的..
深入理解计算机系统这书,真是不薄,我就这样又开始啃了一本新的书,反正我已经习惯了, 第一章是概述,计算机系统漫游,一开始看 看的我是云里雾里的,,直接过了.第二章是计算机中的二进制, 各种二进制的表示, 看起来还是可以理解的,到了后面讲浮点数的二进制表示,我勒个去..跪了,第二章就看这么多吧 ,,于是我就来到了第三章,第三章是讲汇编的, 汇编这种东西,看着头不头疼? 头疼! 难不难? 其实不难. 汇编就是一种简单而十分基本的语言,1就是1 ,0就是0. 但是我还会好奇 怎么书上的汇编和别的地方的汇编不一样 怎么这里写的是movsbl 到了别的地方 还有MOV DWORD ... 乱七八糟的... 晕了,不管怎么说 在这本书上 汇编的格式还都是一样的,,让我蛮欣慰的,能让我有了继续看下去的勇气,(其实后来才知道 汇编是与硬件相关的,所以汇编有多种多样,书上采用的是ATT格式的汇编, 我看的另外的那种事IBM的汇编,不同的汇编用的不同种类的汇编器,汇编还分16位的32的64的 说不定以后还会有128的 不过从个人观点来看,短时间内暂时不会到128,毕竟64位支持的内存已经不小了 是4G*4G这么大,这里的G是计数单位,不是容量).
我就这样一点一点看下去,第四章是处理器的指令流水,写这篇日记的时候这本书放宿舍了 所以我只能凭记忆去想了..(我觉得根据记忆写更好一点,记住什么是什么). 这一章讲了程序是怎么在处理上运行的, 其实仔细一想,处理器就是一个能够执行指令的东西,只不过为了提高效率,做了各种处理,比如每一条指令都分为 取指,译码,.........应该是7个步骤吧,我记得不大清楚了, 然后还涉及到了多级流水, 我记得我当时还去看了大话处理器,之类的电子书, 反正是看了,但是反正也没看懂!. 其实这一章我看到后面也不大懂,就过了..
接下里是第五章: 讲程序优化的,从代码层次上,到深入点的汇编层次上的.反正就是优化.我就是这么理解的. 第六章讲的是 存储器结构, 不得不说 ,人类真是个伟大的发明家, 针对于冯诺依曼体系而言, 处理器+存储器 这样的一个体系,对于提高性能力来说可真的是费尽心机, 众所周的存储器山 ,从上到下分别是 寄存器,cache(1,2,3),主存,本地文件系统(硬盘),远程文件系统. 就是这样的一个顺序,存储速度越来越慢,造价越来越低, 但是处理器的速度很快,而主存的读取速度根本跟不上,正是由于局部性原理, 才有了cache这种东西,而且从1级缓存开始,又有了2级,3级 分别是8位,16位和64位吧.
书中还讲解了 缓存命中和不命中, 后来又提到了多线程,其实这种一种对高速缓存的污染,是一种内存冻伤吧, 我觉得其实人类一直在 需求与效率直接进行权衡.思想真的很伟大.
第七章讲的是链接,当时我是没怎么看懂,当时还草草的翻了翻编译原理,看了一下词法分析和文法分析,我勒个去,头大了,不看了. 但是目的还是达到了 链接是什么,把编译好的东西 链接到一个 成为一个可执行程序(也就是exe) (这是最简单的形式,其实还有动态链接,千万不要像我理解的这么狭隘).
第八章讲的是异常控制流,控制异常嘛,唯一的感觉就是异常并不代表错误,这里面还讲到了操作系统通过信号量控制异常,看的不是很好懂,但是主题思想我还是领会了的,至少没算白看...(不要瞧不起我这种阿Q精神,至少能支持我继续看下去..)
第九章是虚拟存储器了, 这一章真的是把我之前学的东西慢慢的都联系在一下了,编程其实就是写一些人类能懂的语言,然后把这些东西翻译成计算机的能懂的语言,也就是机器指令存储在硬盘上,然后在执行,也就是把这写机器指令载入到内存中,但是操作系统做了一个很聪明的调用,就是虚拟存储器,它给所有进程提供了一种假象,每个进程都可以从0开始使用所有的内存,而实际上只不过是当进程需要用到内存时,再把它分配到实际的内存中去, 我想再夸一下,人类是多伟大, 学计算机的过程中,渐渐的不再觉得计算机是个多么神奇的东西,它简直笨死了!
剩下几章是讲 IO.网络编程.服务器编写.差不多是这么些吧. 其实因为前面的基础打的不牢,而且第一次也打不牢,后面越看越吃力是显而易见的,所以后几张就没有看的太细. 不过最近我又把后面几章补了补.这本书的真的是功不可没.
其实看完这本书,也就可以说是真的对计算机有个整体的认识了,不过这本书真的很难,不是一遍两遍能看懂的.有的章节我都看过三遍了, 计算机系统这个东西,没有几个人敢写这样的书,因为它太复杂了,我还想去看看linux内核源码.看了一眼还是算了..我应该好好思考自己该做什么了,学会学知识,更要学会吸收和思考,这本书真的很好,我在看这么书的时候也看了很多其他的资料,看到汇编的时候去看了别的汇编,看处理器的时候看了看大化处理,后来还看了计算机网络,tcpip编程,还翻过编译原理,组成原理,操作系统. 这本书就想一根线一样,把我的知识脉络理清了,虽然这些书我能看懂的不多,但是我认识了计算机,知道了各种东西在计算机的体系中占据了一个什么样的地位.在学习的过程中,我也知道,我并不是一个喜欢数学的人,我很懒,懒到希望写一段code完成我想做的事情,在这个IoE的时代,我还是对计算机充满信心的. 我也整理过大一的时候买过的书,加起来1000多元啊... 心疼..
这里写给新生们的几点建议吧,作为一个比你们大两年,(也就是刚入行两年);
1.学会百度, internet上的信息什么都有,只要你学会搜索,关键字知道吧? 要是你想搜点更高深的去找找google hacking . 在谷歌的搜索框里输入一个 inurl:php?id= ,看看会发现什么?
2.学会思考.
3.要有兴趣,并学会坚持.
4.客观的看别人的见解,别人说的,别人认为的,别人说怎么样怎么样,一定要有独立的观点,
做一个独立思考者.
5.不要太着眼于新技术, 那些赶时髦的东西也都是从 下面向上发展而来的,而他们的出现,只不过为了解决低一层解决起来不方便问题是衍生的.
6.计算机科学和计算机技术是两个不同的领域,对于我的理解,就是一个需要很nb的数学,一个不需要数学, ( 不过 貌似 底层的东西应该也需要数学吧 )
7.拓宽自己的知识面.最好也能看看这本书--深入理解计算机系统
我想到什么就说什么啊 ,怎么思考是你们的事情.我不想误导你们.
想起自己大二下的时候每天抱着这么一本圣经游走于实验室和图书馆之间,在实验呆不下去了就去图书馆看,图书馆不想看了,就抱回实验室看,骗骗自己,换个环境.翘课也翘的不少,不过时间都是用来看书的,常常上午空了两个小时去图书干看书,或者下午2点去图书管看到6点再走,或者7点看到9点 回到实验室再看, 不要以为时间很多,有的时候两个小时也就看了几页,我也会拿着纸和笔在我的书上写来写去,能不看晕,也是个能力..嘿嘿..
多看书,才能保证自己不愚昧,想写软件,可以去看看设计模式,搞搞数学建模,看看运筹学(这个我没看过,不过这书我有) 搞搞算法 看看算法导论(这个太难),看看那个楼教主写的那本,还有一本白色书皮的那个作者姓巫的书也挺好的.反正我是没坚持下来,或者搞搞图像处理,(我没搞) 我的兴趣还是在偏向底层一点,最近爆出的bash执行漏洞.,,前一阵子的openssl ,看了很多,但是我真的看不懂..
对了,对Web感兴趣的话,看看asp,php,jsp等脚本语言,还有python,觉得也不错,浏览器语言js学学也挺好的..脚本语言见效快..学起来有信心,了解一下 web页面就是dom的这样的一个结构,**p也只不过是一种脚本解析方式, 看看计算机网络,了解一下计算机网络体系结构也是挺好的,看过之后觉得自己懂了,心里就很舒服,你可以拿着burpsuite截获个http包看看.
底层的话看看反汇编逆向分析,0day安全那书,当时查了有好多,没记住,都存在我的电脑里了..
附一张我当时各种搜集资料的图,乱七八糟的,感兴趣的也可以按照自己的认知方向分类.
.最后提一下比较经典的书(经典的书不一定那么容易懂):
c语言的四书五经:c程序设计语言(机械工业出版社的),c和指针,c缺陷和陷阱,c专家编程
数据结构: 国内的那个考研专用书严蔚敏的,还有一本是机械工业出版社的数据结构 写的不错,还有一本是大话数据结构,写的简单易懂,(易懂的东西一般写的稍微浅一点,但是他易懂的,都是我看过的 ,没看过的我尽量不乱推荐)
c++: c++ primer(我没看过,外人说的经典), c++ primer plus(不推荐看..太长了太厚了)
还是随便找一本的吧..
仔细想想我还是不推荐了, 毕竟我就是一个小菜, 我一般看书的话都会去找各种资料,因为每一份资料都是一种观点,当有好多人在向你讲述一个东西时候你看的才会全面.
其实我大二结束的时候就想写了,但有的时候想想还是算了,不想被说成卖弄,面对学校这种教育,以及可能会有很多像我这样的 把自己现身于水深火热的迷茫中的大一孩子,希望你们看到后,多少能有点方向,并且做好心里准备,往后的路 ,走起来不会那么容易.大家都在慢慢长大.
(我不想吐槽学校了. 它真的不重要,(不要问我是哪个学校的))
多说一句,知道为什么往往比知道怎么做要重要的多.
不知不觉写了两个多小时,希望赞同的人能支持一下,也希望能有想学计算机的人能看到这个帖子,并真心希望多少能对你们有些帮助,能简单解决的问题不叫问题,能轻松做好的事不叫大事.就这样吧
.
by 晴天小猪
2014.10.2
(转载请注明出处 :http://blog.csdn.net/airuozhaoyang/article/details/39736111)
写给刚入行学计算机孩子的一封信