工程师在实际中遇到的很多困惑都是因为基础知识和底层知识的薄弱。而这些内容往往没有系统的教学资料,只能靠工程师在实际中摸索得到的一些感性的、模糊的认识。系统性的课程应当通过单独设置的环节来讲授这些知识,并且通过其它环节的配合来实践这些知识。
这个系列的课程应当在基础程序设计训练课程之后展开。这个环节仍以C语言为主要的编程语言,但是所讲授的知识却应超越具体的编程语言。首先通过这个环节继续巩固学生在前一阶段学到的C语言和脚本语言。如果学员在前阶段的精力主要放在C基础上,那么他在这一阶段也可以通过一些具体脚本的运用获得脚本编程的初步能力。
这个阶段的每个主题对于程序员来说都是很重要的,但课程意图不应当局限于此。通过系列主题在学员的脑海中打造出优秀程序员的思维方式才是终目的。这个环节在C基础阶段之后,后续课程展开之前,占据一段集中的课时。在后续课程展开之后,这三大主题仍然会贯穿课程始终。以下简单介绍了这个环节所涵盖的主题:
底层机制视图
这个环节讲授程序运行的底层机制。学习底层机制的好处就在于不再需要去“记住”,事情变得“本该如此”。也只有在理解底层机制之后,学生才能够深入地分析程序的性能,调试程序的错误甚至去突破语法规则的限制。
汇编模型:在这个环节学生会学到简单的汇编语言。这是承上启下的课程,既是C语言基础(前一阶段)的提高,又是体系结构(后一阶段)的铺垫。把复杂的课程环节在其它课程环节中做出铺垫,我们凭借这种方式解决了许多教学上的难题。我们努力地用各个环节的课程去辅助原本艰难的教学环节。这种方式成功地让几乎全部的学员敢于阅读汇编语言代码,半数的学员能够积极地运用汇编语言去分析和处理程序设计中的一些关键环节。
栈帧模型:多线程调度和中断处理这些高级的程序模型都需要建立在对栈的深入理解上。程序员希望回溯动态绑定的函数调用时,就更需要使用对运行时栈的hacking技巧。这个环节的课程能够在学员头脑里初步建立起\虚拟的计算机",从而带给他想象程序执行过程的能力。
链接原理:理解链接的过程,才能够从更深层次理解软件的构建过程。Linux内核模块如何加载,共享库如何构建,不同语言的程序是如何互相调用的。这个环节将讨论这些关键性的问题。课程还将展示在不同的体系结构上的链接过程的差异,以及这些差异背后隐藏的体系结构设计思想。
设计模型
模型能够让程序员从更高的层次去分析问题,从而解决更大规模的问题。我们在课程的各个环节都重视对于关键模型的提炼(尤其是那些带有广泛适用性的模型)。在这个阶段的课程,我们将通过一些具体的模型初步建立学员的这种思维方式。
有限状态机模型:有限状态机是大多数主流编程语言的根本模型。你将在本阶段学到使用这种模型解决事件驱动问题的一般手段。我们还会讲授将具体问题转化为已有的抽象模型以及把这种抽象模型转化为代码的设计流程。
面向对象方法(C风格):面向对象方法是构建复杂软件体系的根本,即便是C语言也是如此。在后面你会学到面向对象语言,以及完整的面向对象思想。在中间层阶段你会运用面向对象手段解决问题,在内核中你会用面向对象思想去分析问题。这个环节是贯穿课程始终的面向对象思想的起始点。
函数指针和多态:这个环节是前述面向对象(C风格)阶段的自然延续。本环节主要集中在函数指针的讲解上。C程序员可以通过这种技巧降低模块间的耦合度,从而构建大规模程序。这个阶段的环节将初步探讨软件设计中的多态模型的应用价值以及实现机制。而这恰恰是软件技术发展要面对的核心问题之一。本阶段连同前述阶段的模型,会和后面的诸多面向对象主题在学员的头脑中形成完整的、超越具体语言的面向对象设计思想。
Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5,京公海网安备11010802025203号