Linux 相关的开源技术对于学生来说,特别是计算机专业的学生来说,非常重要,下面就几个方面进行讨论:
1.研究平台
因为开源的优势,有很多开放文案可以参考,有很多有趣的点子可以拿来做深入的研究。任何一个点挖进去都是一片天地。
2.专业视野
藉由那些开源项目,可以通过邮件列表、Patchwork、Github、Linkedin、Google Group 接触到来自全球各地的天才,不仅可以提升英文读写能力,认识国际友人,还可以把握领域前沿,甚至还有机会得到大佬们的指点迷津。
3.工作机会
就像 2004 年左右,笔者在学校毅然而然地选择转到 Linux 平台一样,现在有同样的预感,Linux 以及相关的开源技术因为它包含了人类的共赢理念(Open, Free, Share),融合了全球众多企业和天才的智慧,以及它不断更新换代地自我革新,她将持续繁荣下去。
目前的 Linux 人才看似很多,刚从学校毕业没什么编码经验的学生也可以很快写个小驱动,看似门槛很低,但是真正能够从系统层面解决问题,做了工作不用别人搽屁股的高端人 才很少。如果从大学开始抓取,毕业时就多了四年的使用经验和思维培养。对于后续的研究和工作来说,都会是非常重要的竞争力。
4.课程实践
几乎从硬件到软件,Linux 平台能够自下而上提供各类触及“灵魂”的学习案例,让所有课程从纸上谈兵转变成沙场实战,会极大地提升工程实践的效率和技能。
4.1硬件方面
硬件模拟已经是趋势,不可阻挡。包括处理器模拟、系统模拟,大名鼎鼎的 Qemu,以及它的派生者 Android Emulator 提供了易用的案例,支持四大,不是律师事务所,是 ARM、X86、PPC 以及 MIPS。
这 东西不仅能够模拟处理器指令,支持系统级(各种外设)的模拟,还支持直接在一个架构上执行另一个架构的可执行文件(通过 qemu-user 翻译)。有了它,不必花钱买开发板,有了它,可以研究如何模拟设计和实现一个硬件系统,一套处理器指令,还可以研究虚拟化技术,虚拟化集群。 跟 GNU 序列工具的开创者 Stallman 以及 Linux 的开创者 Linus 一样,Qemu 的开创者也是一个伟大的先驱,他的个人主页在:http://bellard.org/ 。
法布里斯·贝拉 是一位法国著名的计算机程序员,因 FFmpeg 、Qemu 等项目而闻名业内。
他也是最快圆周率算法贝拉公式、TCCBOOT 和 TCC 等项目的作者。1972 年生于法国
Grenoble。在高中就读期间开发了著名的可执行压缩程序 LZEXE ,这是当年 DOS 上
第一个广泛使用的文件压缩程序。
4.2引导程序
大学时学习了 BIOS,基本输入输出系统,是个啥玩意,感觉得到,看得到面纱,看不到她真实的样子。但是有了 Uboot ,可以。
可以直接通过 Qemu 做 Uboot 实验:
- Using QEMU for Embedded Systems Development, Part 3 - 利用 Qemu 模拟嵌入式系统制作全过程
4.3 操作系统
Linux 本身绝大部分都是 Open 的,在学习操作系统课程的同时如果能够读一读 Linux 0.11 的源代码,会发现操作系统不是干巴巴的电梯调度算法之类算法描述。可以看到实实在在的活生生的场景,可以说话的场景。
什么调度算法,什么同步机制,什么中断管理,什么文件系统,什么各类外设的驱动等等,通通可以看到源代码实现并允许亲自去修改、调试和完善,甚至可以通过 邮件列表 提交 Patch 到官方 Linux 社区,然后有机会接触 Linux 社区的那些印象中“神一般”现实里“平易近人”的大佬们。而且开源社区很喜欢初生牛犊不怕虎、善于思考、勇于探索的同学们。
还可以自己制作一个完整的操作系统。看看 Building Embedded Linux System 这本书,从 Linux 官方社区 下载一份源代码,编译一下,然后用 Busybox、Buildroot、LFS、Openembedded 甚至 Yocto 制作文件系统,然后就是一个完整的操作系统。
然 后会知道什么是一个完整的操作系统,什么仅仅是一个操作系统 Kernel。
然后会了解,用户交互的界面,除了 GUI ,其实它最最本质的东西还是 Shell Terminator,GUI 只是换上了一袭花衣裳。会真正地理解,当按下键盘上的一个按键时,这背后发生了什么样的故事和演变。作为计算机的学生,不应该被这些蒙在鼓里,应该掀开那 袭花衣裳,打探背后的细枝末节,然后,等到哪一天,闭上眼睛,当整个故事情节在脑海里像放电影一样清晰不再模糊时,就如偿所愿了,那种美妙的滋味在出现 Bug 需要解决时会得到印证。
4.4汇编语言
估计学校还在用王老师的书吧,这个是笔者大二时写的《汇编语言 王爽著》课后实验参考答案。
分享在这里是非常想强调实践的重要性,不知道有几个同学认真地做完了所有或者绝大部分大学计算机课程课后的实验,实验真地非常重要。
另 外,真地希望大家能够在 Linux 平台下学汇编语言,用 gas 汇编器,用 AT&T 的语法,用 gcc 看 C 语言写的东西是怎么用汇编语言实现的。非常美妙的事情。当然,还可以用 qemu-user 学习 ARM、MIPS 和 PPC 汇编。特别推荐学习 MIPS 汇编,精简指令集,最优美的汇编语言。
4.5C 语言
就语言本身来说,她太有生命力了,而且现在以及可预知的将来,她还会保持独有的生命力。
4.6脚本语言
学一两样脚本语言,对于平时的学习和工作会起到事半功倍的效果。
比如说要处理一些数据,可以用 Sed, Awk 加 Gnuplot ,这时 Shell 程序设计就非常重要。
关于 Shell,笔者有写过一本开源书籍 《 Shell 编程范例》,这本书以“面向对象”的方式系统地介绍了日常工作中需要操作的各类数值、逻辑值、字符串、文件、进程、文件系统等,很适合随时检索。
又比如,要做一些比较复杂的甚至带有图形的交互,这时可以用 Python,可以用一门非常漂亮的语言高效地实现一些案子,而且可以学习面向对象的思路。
4.7编译原理
编译原理太重要了,了解 Turob c, Virtual studio C++ 背后的故事吗?很难吧,但是 Gnu Toolchains 可以。
从源代码编辑 (vim) 、预处理 (gcc -E, cpp) 、编译 (gcc -S)、汇编(gcc -c, as)、链接(gcc, ld)的整个过程可以看得一清二楚。
可以用 binutils 提供的一序列工具 readelf, objdump, objcopy, nm, ld, as 理解什么是可执行文件,可执行文件的结构是什么样的,它包含了哪些东西,那些所谓的代码段、数据段是如何组织的。
通过 objdump ,可以反汇编一个有趣的可执行文件,看看它背后的实现思路。还可以看看为了支持动态链接,可执行文件该怎么组织。
还可以进一步研究,一个程序执行时的细节,它怎么能够在屏幕上打印出来一个 “Hello, World!”,这需要什么样的支持,这个背后的硬件、操作系统以及应用程序做了什么样的工作?
另外,还可以去看这些 Gnu Toolchains 的源代码。如果觉得这个东西太庞大。也可以去阅读刚才提到的那个天才:法布里斯·贝拉,他写的 TCC:Tiny C Compiler,可以看到一个完整又小巧的 C 编译器是如何实现的。
对了,笔者同样有写一个相关的博客系列,即 Linux 下 C 语言程序开发过程的视图,后面有整理成开源书籍,即上面提到的《C 语言编程透视》 。
4.8数据库
Mysql, PostgreSQL, SQLite? 在上学时,这些东西就很火,这么多年了,还是那么火。特别是那个小巧的 SQLite,Android 都在用了。而且她小巧,可以学习那些 SQL 语言背后具体是怎么实现的。
也许说企业级的 Oracle, SQLServer 很好用啊,是的,她们是浓妆艳抹的贵妇,高高在上,在有钱人的圈子里打转,不会投怀送抱的,永远没有机会摸透她们的心思。
4.9计算机网络
回到虚拟化,用 Qemu (当然,还有 VirtualBox 之类),理论上可以创建任意多台虚拟的计算机,搭建任意多种不同的网络服务,创建一个复杂的集群,想做网桥,还是想做 NAT,可以根据需要选……
4.10文档撰写
各种学习总结过程中,离不开文档撰写,包括幻灯片、文章甚至图书出版,毕业后还可能涉及到简历制作。
这些统统可以用目前最流程也是最简约的 Markdown 来完成,它允许彻底摒弃繁杂的格式限制,更多地沉浸到内容的创作中。学会 Markdown 对于学习效率和专注力培养来说都会有好处。
推荐大家使用 Markdown Lab 来快速搭建文档撰写环境,已经内置精美的幻灯、文章、图书和简历模板,都可转为 pdf。
4.11
几乎所有的课程,都可以找到开放的实践项目,下面有存放各类开放源代码的站点:
- Comparison of source code hosting facilities
5.在线实验
实验环节往往是继续深入计算机课程的拦路虎。为了更快更高效地做实验,泰晓科技开发了一套开源的在线实验云台。
这套平台已逐步添加了包括汇编、C、Linux 0.11、Linux 等在内的实验环境,更多环境正在陆续开发中。欢迎提出更多想法、需求和建议。
- 实验云台:http://tinylab.cloud:6080
- 项目首页:http://tinylab.org/cloud-lab
- 代码仓库:https://github.com/tinyclub/cloud-lab - 获取帐号
6.小结
以上从多个方面分析了学习 Linux 相关开源技术的诸多益处。
潮流一点叫“社区化学习”,国际一点叫“Open, Free, Share”,国内一点叫“共赢”,传统一点叫“三人行,必有我师”。
转自:http://tinylab.org/why-computer-students-learn-linux-open-source-technologies/