大三学生的纳闷,请各位大大指点
大三学生的困惑,请各位大大指点!
大家好,本人现在大三,专业是计算机科学与技术,我这个学校开设的这个专业一直有点偏向应用程序设计,但是我本人是比较喜欢底层和原理性的东西,大一和大二上基本上没什么目标,跟着学校学,教什么学什么,但是学校进度太慢,感觉自己懂得太少了,大二下才开始恶补狠学,花了一年的时间学习了很多东西首先是了解了Linux,学习的是《鸟哥的私房菜基础篇》,服务器架设篇我也基本上快速看了遍,在学校机房也基本上把能搭建的服务器都搭建过了,但是那不是我最想学习的底层方向,所以没有去熟练掌握,然后学习了《Linux程序设计》,《Unix环境高级编译》,《Unix网络编程》2卷,Richard Stevens大师的著作不是那么好消化,看完了之后我也经常反复翻阅来巩固基础,我想在学习了汇编语言和加深了C语言基础之后开始阅读内核,虽然这一路上我感觉懂了很多东西,但是我就觉得一直都是看书,完全不知道到底自己真正动手起来的编程能力怎么样,在学校里我也在做LAMP项目,最近课程设计跟外面企业的老师在做数据库开发的项目,这么一来JAVA,PHP,JSP还有Oracle数据库我至少知道了怎么去动手实践和设计,流程是什么样的,但是我一直不知道我一直想走的底层方向应该怎么去锻炼自己的能力,光看书仅仅只是明白原理,我也知道底层方面的东西不像是应用软件,不是那么容易可以写出来个什么东西,所以我很困惑,到底要怎么加强这方面的编程能力和实践动手能力,还请各位大大指点迷津,感激不尽!
------解决思路----------------------
去找个开源的库,然后直接看它的源代码。我不明白你说的底层到底有多“底层”,如果是C++方面的,可以看看STL源码,如果是C方面的,可以看看glib源码。再底层一点,操作系统吧,你可以看看MINIX3的源码。我以前在学校的时候是看过STL所有容器的代码,现在工作需要用到glib,稍微了解一下,感觉glib这个库设计的很精妙,C语言的一个框架完全不输给C++的STL。操作系统这块MINIX3绝对是不二之选,有一本书Operating Systems Design and Implementation,就是讲MINIX原理的。当初在学校的时候从图书馆借了这本书寒假拿回家看,无奈自己太懒了,翻了没几页就还了。
最后,这三样东西足够你充实大三大四学年了,只不过,找工作的话,还需要在学校里面写点代码,做个小东西。最好还是先找个方向,明确自己想做什么,再确立目标,比如工作还是读研这类问题。除此之外,看源码还可以写点博客,提升自己的技术写作水平。
------解决思路----------------------
找好自己的方向,参考一下这里http://coolshell.cn/articles/4990.html
1. 了解操作系统基本概念。如果不会,可以学习《操作系统:设计与实现》Andrew S.Tanenbaum 写的那本。以MINIX为例子讲解操作系统的概念。非常推荐。
2. 有了操作系统的基本概念以后,可以了解Linux的机制了。推荐《Linux内核设计与实现》Robert Love 写的。这本书从概念上讲解了Linux有什么,他们是怎么运行的。这本书要反复认真看透。
3. 有了Linux内核的了解,还需要具体研究Linux内核源码。最经典的就是《深入理解Linux内核》Daniel P. Bovet 写的。学习这本书的时候,要对着内核代码看着学。这本书学起来相当费力了,那么多多代码要研究。不过这本书如果学明白了,恭喜你,Linux内核你已经很熟悉了。
4. 如果要开发设备驱动,可以学习《linux设备驱动程序》O'Reilly出版社的。这本作为驱动的入门是很好的资料。另外还有一本《精通Linux 驱动程序开发》也是不错的教材,可以参考着看。学习驱动,免不了要学习一些硬件的协议和资料,研究哪个就找到相应的硬件文档,把硬件的工作原理搞明白。这些就不细说了。
5. 网络部分,学些Linux网络部分就学习《深入理解LINUX网络技术内幕》。这本书把Linux的网络部分讲的非常清晰透彻。但是通常不做这方面的工作研究,也不用研究这么深,毕竟现在国内相关职位较少。
6. 现在Linux相关的工作,多集中在一些嵌入式开发领域,arm,mips等,要学习以下这些体系架构的的资料,了解CPU的设计和工作方式。ARM就看对应的芯片手册,讲的很细致。MIPS就看 《see mips run》,有一二两版,两版内容有些差异,推荐都看。
7. 补充一点经验。不要认为Linux很庞大,很复杂,就觉的很难学。任何东西认真学下来都是能学会的,看你都恒心和毅力了。另外,不要走弯路,不要看市面上讲什么Linux0.11的那些书,直接学你要学的东西。就像学C语言看什么谭浩强一样,弯路走了,力气没少花,还严重影响学习效果。
你问的内核,多给你说几句应用编程,有时候经常会需要的:
1. 学习Linux应用编程,建议看《unix环境高级编程》,把里面的例子都做一遍,会对整个Linux编程有系统都认识。
2. 针对Linux,有本 《Linux系统编程》,学完上一本,这本很快看一遍就懂了。主要是针对Linux具体懂一些内容,讲的挺全了,很实用。
3. Linux网络编程,系统的学习一下《unix网络编程.卷1,套接字联网api》,基本上网络应用相关的程序就都没问题了。
大家好,本人现在大三,专业是计算机科学与技术,我这个学校开设的这个专业一直有点偏向应用程序设计,但是我本人是比较喜欢底层和原理性的东西,大一和大二上基本上没什么目标,跟着学校学,教什么学什么,但是学校进度太慢,感觉自己懂得太少了,大二下才开始恶补狠学,花了一年的时间学习了很多东西首先是了解了Linux,学习的是《鸟哥的私房菜基础篇》,服务器架设篇我也基本上快速看了遍,在学校机房也基本上把能搭建的服务器都搭建过了,但是那不是我最想学习的底层方向,所以没有去熟练掌握,然后学习了《Linux程序设计》,《Unix环境高级编译》,《Unix网络编程》2卷,Richard Stevens大师的著作不是那么好消化,看完了之后我也经常反复翻阅来巩固基础,我想在学习了汇编语言和加深了C语言基础之后开始阅读内核,虽然这一路上我感觉懂了很多东西,但是我就觉得一直都是看书,完全不知道到底自己真正动手起来的编程能力怎么样,在学校里我也在做LAMP项目,最近课程设计跟外面企业的老师在做数据库开发的项目,这么一来JAVA,PHP,JSP还有Oracle数据库我至少知道了怎么去动手实践和设计,流程是什么样的,但是我一直不知道我一直想走的底层方向应该怎么去锻炼自己的能力,光看书仅仅只是明白原理,我也知道底层方面的东西不像是应用软件,不是那么容易可以写出来个什么东西,所以我很困惑,到底要怎么加强这方面的编程能力和实践动手能力,还请各位大大指点迷津,感激不尽!
------解决思路----------------------
去找个开源的库,然后直接看它的源代码。我不明白你说的底层到底有多“底层”,如果是C++方面的,可以看看STL源码,如果是C方面的,可以看看glib源码。再底层一点,操作系统吧,你可以看看MINIX3的源码。我以前在学校的时候是看过STL所有容器的代码,现在工作需要用到glib,稍微了解一下,感觉glib这个库设计的很精妙,C语言的一个框架完全不输给C++的STL。操作系统这块MINIX3绝对是不二之选,有一本书Operating Systems Design and Implementation,就是讲MINIX原理的。当初在学校的时候从图书馆借了这本书寒假拿回家看,无奈自己太懒了,翻了没几页就还了。
最后,这三样东西足够你充实大三大四学年了,只不过,找工作的话,还需要在学校里面写点代码,做个小东西。最好还是先找个方向,明确自己想做什么,再确立目标,比如工作还是读研这类问题。除此之外,看源码还可以写点博客,提升自己的技术写作水平。
------解决思路----------------------
找好自己的方向,参考一下这里http://coolshell.cn/articles/4990.html
1. 了解操作系统基本概念。如果不会,可以学习《操作系统:设计与实现》Andrew S.Tanenbaum 写的那本。以MINIX为例子讲解操作系统的概念。非常推荐。
2. 有了操作系统的基本概念以后,可以了解Linux的机制了。推荐《Linux内核设计与实现》Robert Love 写的。这本书从概念上讲解了Linux有什么,他们是怎么运行的。这本书要反复认真看透。
3. 有了Linux内核的了解,还需要具体研究Linux内核源码。最经典的就是《深入理解Linux内核》Daniel P. Bovet 写的。学习这本书的时候,要对着内核代码看着学。这本书学起来相当费力了,那么多多代码要研究。不过这本书如果学明白了,恭喜你,Linux内核你已经很熟悉了。
4. 如果要开发设备驱动,可以学习《linux设备驱动程序》O'Reilly出版社的。这本作为驱动的入门是很好的资料。另外还有一本《精通Linux 驱动程序开发》也是不错的教材,可以参考着看。学习驱动,免不了要学习一些硬件的协议和资料,研究哪个就找到相应的硬件文档,把硬件的工作原理搞明白。这些就不细说了。
5. 网络部分,学些Linux网络部分就学习《深入理解LINUX网络技术内幕》。这本书把Linux的网络部分讲的非常清晰透彻。但是通常不做这方面的工作研究,也不用研究这么深,毕竟现在国内相关职位较少。
6. 现在Linux相关的工作,多集中在一些嵌入式开发领域,arm,mips等,要学习以下这些体系架构的的资料,了解CPU的设计和工作方式。ARM就看对应的芯片手册,讲的很细致。MIPS就看 《see mips run》,有一二两版,两版内容有些差异,推荐都看。
7. 补充一点经验。不要认为Linux很庞大,很复杂,就觉的很难学。任何东西认真学下来都是能学会的,看你都恒心和毅力了。另外,不要走弯路,不要看市面上讲什么Linux0.11的那些书,直接学你要学的东西。就像学C语言看什么谭浩强一样,弯路走了,力气没少花,还严重影响学习效果。
你问的内核,多给你说几句应用编程,有时候经常会需要的:
1. 学习Linux应用编程,建议看《unix环境高级编程》,把里面的例子都做一遍,会对整个Linux编程有系统都认识。
2. 针对Linux,有本 《Linux系统编程》,学完上一本,这本很快看一遍就懂了。主要是针对Linux具体懂一些内容,讲的挺全了,很实用。
3. Linux网络编程,系统的学习一下《unix网络编程.卷1,套接字联网api》,基本上网络应用相关的程序就都没问题了。