By Zhang Hui
差距在根上,现在看新的语言,看新的系统不断涌现,容易陷入焦虑。其实这些新概念的技术根源,都可以追究到操作系统,编译原理。
所以说,如果说最近一段时间可以用来学习,那么我宁愿重新学一遍基础。当然,不是重复原路,而是做实际的project。
无论是耳闻还是目睹,我都知道,国外讲授os之类的课程,从来不会只念课本。都是有一定的项目实践,而亲身体会,总会让你脱去浮华,深入下去,从而受益良多。
2001年的时候,我关注过一段时间国外在这方面的project,看到几个有意思的用C,C++,Java开发的小型教学用os。minix的初衷也是教学,但是实践起来还是太庞大了。所以当时就有冲动想给以前的老师,系主任写信说出这方面的想法,希望在校的学生也能参与进来,而不是仅仅背一下概念就能考个高分。后来因为种种原因,这个想法没有实现。
现在,因为是一个再学习的机会,看到选课单上那些新名词,那些时髦的东西,不禁暗想,为什么我们不重拾一下基础呢?
对于软件行业的学生,如果能做一个virtual machine的项目,在上面再加上os层,然后是语言和编译原理,哪怕是一个简单的p-code也好。那么他对整个系统把握的程度就足够好了。基础好了,做一切都就游刃有余。
大学里如果有这一个系列的实践,那么你的起点就远远高出同侪!
virtual machine——《程序员》杂志就用两期实现了一个简单的虚拟机,有了这个功底,将来你分析jvm就有了很好的起点,想想看,别人还在争论语言语法的特点,你却已然从实现的角度理解了这个语言本身,你们的层次有多么大的区别!
operating system —— minix用于教学好像还是太大了,实践点不多。国外大学的几个项目是RCOS,该项目有C++版和Java版(Java版我下过,挺好玩,把进程调度,资源使用用动态的图示演示出来,而且有一个简单的语言,可以协议些进程间通信的小程序)。更流行的是NACHOS,任务管理,内存管理等从理论的全局,从框架上都要理解,实践上,自己时间有限的话写一个任务调度或者内存分配就可以了。
程序语言和编译原理——其实上面的两个项目都涵盖了,基本的要求就是要懂得lex和yacc,能够构筑实现基本要求的解释型小语言就行。
无论是borland还是microsoft,商家的东西总是显得很复杂,不是你学习写入的地方。在试图理解复杂问题之前,好习惯是先去真正理解一个简单的系统,学习真正实质性的东西。
《程序员》杂志有一期试图讨论程序员为什么焦虑?依我看焦虑是因为程序员被众商家的纷繁概念迷住了眼睛,而且国内的大学教育的确没有真正把那些核心的东西教给学生。一个人,没有根,风吹草动,怎么能安心呢?
Jvm,Web Service,EJB都是有根的,你不从根上去找问题,去理解,怎么能不难受呢?
所以,我宁愿重拾基础!以实践来真正引导自己的学习
一些相关的链接
Technical Resources and Course Web Site for Operating Systems, Fourth Edition
=======================================
版权所有 \copyright张辉 2003
本文可原封不动的拷贝和自由地再发行,但在拷贝和再发行的拷贝中必须
原封不动地含有这段版权声明。