【嵌入式】【Linux】菜鸟学习日志(〇) 从上学期的总结开始
身为一名大三本科在校生,也许和很多人一样,大学毕业后自己何去何从成了我最近经常想的事情。
我是一个比较优柔寡断的人,很多事情不能痛快地做决定。大学里学了很多东西,像网络啊、组成啊、编译啊、汇编啊、软件工程啊、操作系统啊等等等等。但是贪多嚼不烂,毕竟还是要专攻一方面的东西,或者说要找一个切入点来学习计算机的。
这就让我很为难。这么多课程,说对哪个特别感兴趣或者特别反感,其实都没有。看着离毕业的时间也不多了,终于逼着自己选择了一个方向——嵌入式。
为什么是嵌入式呢?个人觉得这可能是计算机中,软件和硬件结合的比较微妙的一个点。在嵌入式平台上做开发,对软件和硬件都要求有较好的理解,有时还需要一些创新的想法。我觉得这门课程可以让我尽可能地用到自己所学的知识,并且深入其中。即使日后转做别的方向了,相信在嵌入式开发中学到的经验也可以给我很多帮助。换个角度想,嵌入式开发在我们现在的世界中应用还是非常广的,掌握这门技术本身就是一件很有用的事情。
可能嵌入式需要底层的东西比较多,会比较难,但是我相信自己,通过努力一定可以学好这些东西。而且,男人就应该严格要求自己。
先总结一下上学期的情况吧!
其实上个学期学校有开嵌入式的课的。这门课的实验我没有好好做,因为上学期主要把精力放到网络、计算机组成和面向对象编程的相关实验上了。
这里不免想吐槽一下学校,这么多课程设计放到一个学期里该有多坑爹呀,开学的时候我就和伙伴们说:这么多课程设计,能把其中的一个做到很好就真的很牛啦!没办法只好选择了上述3门课的实验来主要做,其他的就基本水过去了……
做“面向对象编程”是因为我本身有一定的java基础,借这个机会巩固一下编程能力,纠正一下编程上的非面向对象思想和方法。
话说自从大一学习了java语言之后,学校就默认我们已经同时掌握了java和c两种语言,教材和实验有的是c,有的是java。诚然,高级语言之间有很多相通的地方,但是面向对象和面向过程的思想还是有很大差别的呀!这样的学习过程让我们对这种差别很不敏感。
老师在用词上也乱来,像“函数、方法”,“调用、发消息”这样的近义词一般都是逮哪个用哪个,要知道甚至有些词,比如“重载”这样的,在不同的语言环境下意义都是有差别的,更何况近义词……这些都需要我们卡壳的时候脑补……
总的下来,用java语言却用面向过程的方式思考、用c却老想着封装对象都是常有的现象,我也这样。然后在上学期的“面向对象编程”课程中,我才重新梳理了一遍面向对象的思想,试图改正了一些以前常见的非面向对象方法。我发现其实面向对象还有很多新的像UML这样的工具是我完全不知道的!
我知道,面向对象虽然对程序员友好,但想真正掌握这门语言,尤其是它的思想,还是需要系统的学习和实践的!我在这方面还远远不够呀!
而做“计算机组成原理”的实验主要是因为觉得这是一个很硬件的课,作为计算机专业的本科生,应该对计算机的硬件有更加深入的理解才行。
还有一个其他原因,是我们分组的时候,我和一个外国留学生特卡分在了一组,特卡基础不太好,我不能把这个课程设计交给他做,所以只能一个人挑起重担啦!
这个课设的目标是做出一个简单计算机的原型,实现一些诸如加法的简单功能,并在实验板上完成调试。
开始我觉得几乎是不可能的!大一学了一年基础的数学、物理、英语课,大二学了一些软件和理论课,大三就马上让做一个计算机原型!后来发现其实实验书上关于这个计算机原型的指令系统、逻辑部件和电路图都有参考样板,照着做就可以了,但是真正搞懂这些背后的东西还是相当不容易的。剥去计算机上的层层虚拟机的封装,直接考察计算机最底层的工作机制,真的是件挺有挑战的事情。
整个实验结束后给我的感觉就是重新认识了计算机。计算机内部数据时怎么存储的、怎么转移的、怎么计算的,逻辑部件间的时序是怎样控制的,特别是指令、微指令为什么可以控制计算机的运作(我以前都不理解指令下面的微指令是干嘛的,对于0、1组成的指令如何控制计算机认识也很模糊)……我对这些东西都在实验过程有了更深入的认识和理解。以前觉得电路板+功能部件+通电就可以做这么复杂的事情的计算机真是个不可思议的存在,现在觉得也没有那么神奇啦!
不过和面向对象实验后的感受类似,自己在机组方面的理解还是太少啦,照着书上的样板做都这么费劲,真的自己重新设计一个模型,可以吗?
至于“网络课程设计”的题目是“中心校区校园网建设”。
喔,又一个神题目!如果我们都能建设校园网了,那找工作也就完全不愁啦!当然了,老师不会真的让我们去设计一个可用的校园网,即使设计出来也不会使用。
这个题目给我最大的收获就是类似做项目的经历!网络课程设计我们的4人小组我来带队,不过我们小组里有一个大牛,所以技术上面的东西主要是他做的,我负责的主要是协调工作,给大家分配任务,制定计划,让我们的小团队能较好地运转。另外我也负责了校园网中VPN方面的配置工作,以及一部分文档的编辑工作。
这个课程设计和别的课程设计比起来真的有很不一样的感觉,真的好像是在完成一个项目(这也是老师的目的之一)。我们约好时间去实地考察、回来整理信息、总结工作进度、安排接下来的任务。值得庆幸的是,组员们都比较积极,努力配合我工作。
不过也不知道是我们设计的系统太复杂,还是我这个队长工作做得不到位,总之我们的整个工作过程真的是史诗级别的,一段可歌可泣的惨痛经历!什么配置流程错误导致配置无效、什么实验平台奔溃导致配置数据丢失、什么设计不合理导致整个设计要推倒重来、什么文档编辑器闪退导致编辑了N多页的开发文档报销……反正一切想得到的和想不到的失败几乎都在我们小组身上发生了一遍!那是多少个日日夜夜的辛苦工作呀!好几次想放弃但还是坚持了下来。直到最后一天我们才把刚刚配置好的系统给老师进行了演示。
结果是,我们小组获得了年纪唯一的A+!开心的笑容在我们脸上荡漾,再多的辛苦都值了!
回头看看,在做项目上零经验的我们,遇到这么多的挫折也是很正常的。工作中的经验积累,对于一个程序员来说真的很重要,这些经验可以让我们少走很多弯路。
上学期中间还有一个小插曲,就是组队参加了一个比赛,我们选择的题目是“两台电脑间小文件的快速传输”。
第一次参加比赛的我们,初赛都没有通过。这个结果我是预料到的,因为我对自己的水平究竟如何还是有认识的。虽然学了很多门课程,但是真的能学以致用,我还是很长的路要走!
不过这次比赛也不是完全没有收获。至少我认识到了老师课堂上一再强调的需求分析和系统设计是多么重要了。以前写小程序的时候,信马由缰,想到哪里写到哪里。但在这次比赛中,等发现由于需求分析和系统设计不到位导致整个系统效率低下时,想回头重做已经晚了!
越是大型的软件想来越是这样。初阶的软件写手体验过这种失败后,才更能重视这些前期的准备工作吧!
基本上,上学期值得总结的学习工作就这些了。像编译、操作系统的这些课程设计我都没有好好做,一方面自己没有那么多精力,另一方面我也比较懒。
如前所述,这个学期我想重点搞搞嵌入式。为了弥补上学期在嵌入式上的损失,这个学期我同时选修了嵌入式开发和C语言两门课程,后者是当今嵌入式开发的主流语言。希望这学期可以做一个比较像样的嵌入式成果。由于还要准备考研,更多的实践就不想啦!
为什么标题上还要加一个Linux呢?这是因为现在的嵌入式开发主要都是在Linux环境下进行的。我以前也在其他课程的实验上接触过Linux,但是并没有深入了解过,和它打交道还是用图形界面比较多。为了能顺利进行嵌入式的开发活动,我决定从Linux的学习开始!
从舍友那里借到一本叫做《鸟哥的Linux私房菜》的书,大爱呀!这本书好像是作者把自己多年发的博文整理下来写得,总体感觉一扫教课书的生硬风格!这里不免再吐槽一番——从小到大的教科书,尤其是数学类教科书,你们到底是写过学生看的还是写给专家看的呀?什么前因后果都没有,上来就一个式子+一个奇怪的名字,然后是推倒过程,然后是例题,然后是习题……难以理解就不说了,光是那教科书式的生硬语言就让人打瞌睡呀……语言生硬的现象在各类教科书上都是,好端端精精神神一个人,翻开一本教科书读书两行,哈欠和热泪就出来了有木有啊!虽说专家撰写教科书写得严肃一点也是情理之中,但是稍稍能尊重一下用户体验会死啊……
《鸟菜》这本书水平怎么样我还没有看很多不敢说,最起码口语化的表达很亲和、很容易跟上作者的思路啊,看起来自然也就不瞌睡……这本书也更加坚定了我学习Linux的信念!新学期的课程不是很多,抽时间好好学习Linux以及嵌入式,并且随时把所得记录下来就是我这学期的目标!
呼,说起来有阵子没写这么多文字了,老腰都有点难受了。开篇就这样吧,新学期继续努力!