2010届 嵌入式方向 研究生,求发展思路
各位嵌入式行业的前辈好!后生小辈恳请各位帮忙指条明路。
我本科就读于一所财政类院校,专业是“计算机科学与技术”,在学校没学到多少东西,就是基础理论课。考研就是想获得两年时间来好好学点东西。现在激情四溢,斗志昂扬,就差路线,正在学着Ing.
现在我在青岛大学跟随一位硬件水平相当牛的老师学习嵌入式。老师的意思是让我走软件方向。也就是说 ”嵌入式系统软件工程师“ 。开始因为不了解不太情愿,后来了解了一下开始转变观点。现根据网上查阅的大量资料,制定计划如下(肯请各位前辈,和已经经历过我这个阶段的各位师兄师姐们帮忙指正,时间不多,想把时间用到刀刃上):
第一:软件方面的学习
软件方面我肯定要走linux这条线,我根据网上资料决定走这条路(使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。)
1、熟悉Linux操作 学习 vim gcc gdb makefile (请问有什么好的学习经验可介绍,起码学习到什么程度,因为我也要学习其他的,不能卡在这里,我看makefile教程好厚哦,我已经学过基本的GCC。GDB,makefile打算等写完自己那个程序,一块把这三个软件好好练练)
2、C语言必须过关,我看了<C语言深度解剖>、<高质量C++编程指南> 并开始自己写一个简单的个人信息管理系统(没有界面,纯C语言,包括自己实现链表什么的),主要想理解下指针,内存。因为那两本书,看也不是看不懂,但不是真的懂。
(请问C语言要达到什么样的程度,有什么经验可推荐,有什么书可推荐)
3、我在看APUE,感觉还不是很难理解。然后看UNP,
4、然后看 《用TCP/IP进行网际互连》学习网络编程
5、然后看《Linux Device Driver》2e 学习些驱动程序。这里我最迷糊,我现在还没开始了解驱动程序这个东西,这个东西,要怎么学,拿什么练呢。
“如果想写设备驱动程序,首先您的系统编程的接口比如文件、IPC等必须要熟知了,再学习《Linux Device Driver》2e ,为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱,如果您没有一些写驱动的经验,初次看会有些摸不着南北。”
这句话前半部分,指的是不是就是APUE中介绍的部分,我APUE才看了4,5章,还没看到。
然后然后,就得重点看linux内核了
我从网上找的方法和推荐的方法:“怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。 ”、“毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。”
这个,真的非常需要各位“过来人”给指定一条路,到底怎么个看法。不知道这几本书过时了没,有什么更好的推荐么。
还有两点,非常想知道
1),我知道其他方向有学习嵌入式应用软件的。我花大量的时间去了解Linux系统调用对么,这是我该看的还是学 嵌入式应用方向 的该看的。
2),关于语言,我只是学习C语言就够了么,C++呢。
再者我非常想学习下汇编,老师说以后等“上层次”的时候再学,朋友告诉我说要学ARM汇编,我想知道,我如果想现在开始着手学习,该如何做。我自己学习过王爽的《汇编语言》可是根本没有什么实践经验,心虚。
第二,硬件方向。
关于"放弃"这个硬件方向,心里委实很疼很疼,因为一直希望自己能独立设计硬件,开发软件,自己出个东西什么的。不过正如老师所说,我模电数电都不咋地,接口不会,单片机没碰过。ARM更甭说。咋学。
我自己私下理解的硬件工程师,就是设计电路板。于是乎就想,我放弃自己擅长的计算机方面的知识不利用,干嘛去抢电子专业的人的饭碗,无论如何也不如人家基础来的好。况且,我看网上招聘的,嵌入式系统工程师,工资貌似比硬件工程师高。嘿嘿。就学这个吧。
可是我知道我还是需要了解硬件方面的东西,这个还没跟老师深谈(刚开学他很忙,愣没逮着他)。我非常想知道的是,我对硬件的了解,需要达到一个什么样的深度。我自己看了点郭天祥的51视频教程,感觉他讲课重点,怎么就是在讲编程。而且那编程也挺简单的。
我在网上看到那些必读书籍,我该如何选择去读呢,毕竟不少。
22、单片机
单片机轻松入门----------------------------------周坚(平凡老师)
单片机典型模块设计实例导航-----------------------求是科技
例说8051----------------------------------------张义和 陈敌北 (这本我已经打算看了)
KEIL CX51 V7.0单片机高级语言编程与ΜVISION2应用实践-----徐爱钧
单片机应用程序设计技术(修订版)--------------------周航慈
8051单片机实践与应用-------------------------------吴金戎
MCS-51系列单片机实用接口技术---------------------李华
24、电子
无线电识图与电路故障分析轻松入门(第二版) -------------------胡斌
无线电元器件检测与修理技术轻松入门(第二版) -------------------胡斌
图表细说电子技术识图-------------------胡斌
图表细说电子元器件-------------------胡斌
图表细说元器件及实用电路-------------------胡斌
第三,理论方面我一直认为,一个人的理论知识能限定最终上升的高度,我很久以前就看过一篇文章:摘要如下
1)你已经认为C++和汇编语言都是很简单的语言,并能够自如地运用;
2)你能够在30分钟之内想到正确的五子棋AI算法设计思路和方向;
3)你完全理解STL为什么这么重要;
4)你能够独立地解决所有的编译与链接问题,哪怕你从来没有遇到的问题,你也不需要询问任何人;
5)英文网站是你的首要信息来源;
6)能够读懂英语写成的国际标准,比如NTFS磁盘格式标准。
7)你经常站在集合论的角度思考算法问题;
8)能够理解一个简单的驱动程序,能够理解一个简单3D交互程序;
9)你能够认识到线性代数和概率论在实际编程工作中的极端重要性;
10)你完全理解COM的设计思想,尤其能够理解COM为什么要设计成这样;
11)当我说到虚函数的重要作用时,你不会急着去找书来翻;
12)你能够说出C++为什么比其他语言优秀的理由,记住这种理由应该来自于你的开发体会,而不是因为其他人都这么说。
此外还有很多判断标准,但如果你同时具备5条以上,可以认为你已经具备相应的开发经验了。在这种状态下读研,你将取得读研效益的最大值。
******************************摘要开始**************************************
读研只适合那些痛感数学在编程中的极端重要性的人。如果对理论工具和理论思维的极端重要性没有切肤的认识,那么读研的价值几乎为0;
读研的好处在于:
A,把你自己放在一个学术和工程的交叉点上;
B,让你具备了进入微软等世界顶级软件研发机构的可能性;记住只是可能性。但是不读研这种可能性为0;
C,如前所述,如果没有读研的机会,你也就没有静下心来好好钻研几年理论的机会;一边工作拿高薪,一边深入地学习各种理论,诸位认为这可能吗?我反正认为不可能,我觉得学习钻研理论最需要的就是一个长期安静独处的环境,一边工作一边读书是不可能有这样的环境的,你会觉得每天都在疲于奔命。而读研正好可以提供这样一个环境。我同时还反对整天跟着导师的屁股后面跑,这样会浪费很多时间。读计算机的研究生,主要依靠自己去查阅最新文献,自己去研读文献,和导师的口头交流一个月一次就足够了,前提还需要导师的水平足够牛。如果导师的水平不牛,这也没关系,不理他就是了,自己做好自己的事情即可。
关于实战经验与理论学习的优劣问题。这没有定论,如前所述,管理信息系统,设备驱动开发,工具软件开发,软件病毒剖析等等这些工作不太需要创造性,需要的是耐心和经验,需要的是对既有规范的准确理解,这类开发工作最适合在实战中提高,理论学习没什么作用。但是在人工智能,模式识别,图像压缩,虚拟现实,巨量数据检索,自然语言理解,计算机图形学等等领域,理论学习就占据着绝对的统治地位!这些领域的突破对人类的生活的影响是极其巨大而深刻的。某些领域处于一个极其快速发展的态势之中,比如计算机图形学,相信诸君能够从众多3D游戏的灿烂辉煌中体认到我的这种说法。在这些领域,如果没有扎实的理论功底,一切都是那么遥远,不管你花了多少时间在编程上面。
关于高级研发人员的知识结构问题。首先声明,我不是一个纯粹理论激进分子,即认为除了理论之外,一切都不重要。我认为,纯熟的编程技能是最基本但也是最必不可少的技能。没有这个基础,一切计算机理论就是空谈(研究图灵可计算性理论的研究者除外)。有了这个基础之后,下列理论学习方向必须重点突破:
1,科学哲学。这是核心中的核心!可惜国内不开这门课。不但不开课,而且还作为批判对象来引用,实在是遗憾至极!这是一门教你如何“钓鱼”的学科,在一切科学研究中居于最核心的地位。它是古今科研方法和思维方法的集大成者,很难想象一个成熟的研究者没有一套自己的方法论体系。科学哲学最需要的是领会与总结,它的思想与启示会伴随我们的一生。
2,康托集合论,矩阵方法,离散结构,图论方法,群论方法之间的紧密关系。最重要的认识这些理论对实践的重要启示和方法引导。我始终认为,如果你学了一门理论之后,却不知道这门理论有什么作用,那么你的理论就白学了,你什么东西都没有捞着。所以,学习任何理论之前,先问自己:它有什么用?在哪里用?如何用?带着这些问题去学习理论,你才会真正地学到东西。用这三个问题去问你的理论课老师,他的回答就是判断其实际水平的最佳标准。
3,思维要有极强的穿透力,学会看透文献作者没有写出来的动机。绝大部分大师都有隐瞒自己最具有方法论启示意义的思考环节的习惯。牛顿和华罗庚先生都有这个坏习惯。这让大家认为他们是天才,因为很多问题他想到了,我们想不到。但是为什么他们能想到,我们想不到?他们是怎样想到的?没有人告诉我们牛顿发现万有引力定律时的思考过程,当然,牛顿可以慷慨地把他的思考结果告诉我们,但是,他那可以点石成金的“金手指”却没有教给我们。我们的任务就是要培养透过文章看穿作者背后意图和动机的能力,在这方面,台湾的侯捷和美国的Donbox是绝佳典范。这两只老狐狸(呵呵,是爱称)凭着其猎犬一般的嗅觉,抽丝剥茧,一个把COM背后的幕后设计动机揭开并暴露到了光天化日之下,另一个把MFC的宏观架构做了一次完美的外科手术。其非凡的思维穿透力令人惊叹。
4,英语。英语本身不重要,但是用英语写成的文献就极其重要了。所以,专门把英语作为一个重头戏列出来。大家不要相信英语无用论的鬼话。对于搞计算机的而言,英语就是你的母语!
5,其它的具体理论还有很多,但是都不如这三个方面重要,因为我觉得这三个方面是最具有根本性,全局性的能力培养环节。需要指出的是,很多高深理论对你的工作是无意义的,当心时间陷进去。一定要把效率最高的时间段用在最具有决定性意义的理论学习上。
******************************摘要结束**************************************
我知道这些数学课程的重要,绝对不怀疑,但是我真的不知道他们用在哪里。理论方面,我到底该如何着手学习呢。尤其是我们嵌入式方向来说。因为他上面说的好多貌似干呢我们没关系。
我们有矩阵分析这门课,我也在着手回头复习我学过的离散数学,可是我真的不知道,这,嘛用。
说的比较多,能看到这的我先说声谢谢了,请留下你宝贵的意见,我QQ954423389,来青岛我请你吃饭哈。真的。
[解决办法]
多做项目才是王道
[解决办法]
目标要明确,心却需要放平。不要急,水到则渠成。
[解决办法]
如果你打算走LINUX路线 看以下几本书就行了 《Linux Device Driver》2e 3E 2E是讲2.4内核的比较好理解,3E是讲2.6的 2.16是潮流 linux内核设计与实现 这本是陈教授翻译的不错好好看,多动手 找块板子先做2.4的移植,然后做2.6的移植,最后移植到最新版本的。最好做些基于LNIUX的应用的东西。其他的书呢
unix环境高级编程 不错。多练 我的研究生同学和你差不多 ,理论的书看了一大堆,就是懒的写东西。
http://blog.xdnice.com/space-240611.html
[解决办法]
看你写这么多感觉你好刻苦啊。。。我也准备考研看到又是这么多书要看觉的学计算机真是个错误啊。。。
[解决办法]
很好的,但是不要看太多了,一定要记得实践,呵呵,有时候,一个项目上的小问题就会发很长时间的,多积累实践的经验很重要,自己多动手,效果会比较明显。。。。
[解决办法]
楼主很用心啊,学习一下
[解决办法]