如何为程序员提供适当的语言教育,这个问题似乎在TechRepublic论坛上引起了激烈的争论。我逐渐意识到(从这些讨论中受到的最大影响),应该为软件程序员提供两种语言教育途径:一个真正的计算机科学程序,它主要关注于算法、程序设计的理论方法和通过什么方法将这些算法传递给真正的程序员。
今天,我将通过下面的步骤向大家介绍一个完美的课程。我认为这种课程没必要在大学里面开设,因为它是一种职业训练,而不是理论学习(我一直认为大学里面没有商业活动,所有不应该开设MBA课程)。然而,程序设计课程将分成传统的八个学期,这些课程中不包括普通教育的必修课和只能在最后一个学年才能获得的选修课。
第一学期
程序设计导论
这个课程关注于程序的基本结构:控制语句、循环条件、等等。理想的教育方式是用一个非常简单,免于欺骗的程序语言,这个语言支持(但是不是必须使用)面向对象程序语言OOP。它也需要加强好的编程习惯。我怀疑(不幸的)VB.NET用Explicit和Strict开始将很好的适合于此种情况,或者可能是Ruby(我对它不太了解,所以不能说太多)。Pascal语言对于这个课程来说,也是一个非常好的备选方案。
数理逻辑1
在这个课程中将学到正规的逻辑证明法和反证法的基本结构。
需求收集
这个课程的焦点是收集工程中的商业需求,了解谁是重要的投资人,并从他们那得到信息,多与真正的用户接触,以便了解用户的需求,等等。即使是在客户正集中关注“怎么样实现”的时候,了解工程“为什么要实现”也是非常重要的。这个课程还将告诉你如何在工程中引进最好的方法,即使客户可能会认为他们不需要这些方法。
网络和系统管理基础
这个课程将帮助程序员了解软件运行的环境,特别是在现代化的世界中,了解软件环境是非常必要的。在这个课程中,学生将学到非常多的基本网络知识和系统管理知识,这可以使学生了解产品环境的普遍问题,并掌握如何在代码中预防这些问题。在这个课程中,还应该特别关注许可问题和TCP/IP协议在解决纷争方面的应用。
第二学期
可用性和可及性
优秀的程序员需要了解所有用户的普遍需求(可用性)和一些用户的特殊需求(可及性)。这是一个免费代码课程,它将向学生介绍如何根据用户需求来设计优秀界面的基本原理。
数理逻辑2
这是数理逻辑的高级课程。
数据库理论
这个课程通过一个良好的数据库设计探索向学生介绍数据库的知识。这里将介绍关系数据库和标准数据库,也将学习关于应用程序和报表的不同需求。还将特别介绍如何适当的使用索引、主键、视图、存储过程等等。
程序设计基本原理
使用极端的拆开式语言(类似与EdScheme),学生将花一个学期的时间创建一些基本的库来扩充语言,这些库都是用简单类型和控制结构开发的,通过这种方法可以使这个语言成为一个发育完全的语言。
面向对象(OO)设计
学生将学习OO设计和程序设计技巧。将有重要的时间讨论OO工程的合适结构,并讨论如何在一个团队环境中合理利用OO技术来工作。
第三学期
数据结构
使用C语言版本,这个课程将使学生了解普通的数据结构,例如链表、堆栈、队列、图、树,等等。
技术规范
这个课程建立于需求收集课程,它将教学生如何将商业需求转换成技术规范。特别应该注意商业用户表达的思想和技术人员了解的思想之间的不同。
数据驱动应用
在这个课程中,学生将创建数据驱动应用软件,结合他们面向对象的程序设计(OOP)知识、数据库知识、数据结构知识和界面设计知识来构造简单的客户端/服务器应用软件。
WEB设计基础
在这个课程中将学习HTML、CSS和JavaScript,同时还要学习程序员必须掌握的基本图形编辑软件。这里主要强调根据标准,创建有用的、可访问的网站。
第四学期
数据有效性
在这个课程中,学生将学习一些关于执行数据有效性的必要性,和执行数据有效性的技术。在这里还要学习基本的正则表达式指令。
C++ 1
对于C++语言的初学者来说,主要学习如何面向对象编程,并编写出无懈可击的代码。
动态/解释性语言
这个课程主要是学习不同动态和解释性语言的通用用法,其中包括Per、Ruby、Python和JavaScript。学生将学习动态/解释性语言的特性,也将学习如何在适当的文本中合理的利用它们。
报表
在这个课程中,学生将学习如何为报表创建数据模型,并创建报表。需要特别注意的是,向用户显示的数据应该用简单易懂,且符合习惯的。
第五学期
C++2
作为上学期C++课程的后续部分,学生们应该在指导老师和助教的帮助下编写两个小型C++程序和一个较大的C++应用程序。
数据库体系结构
学生们将会深入学习数据库设计与体系结构,重点在于数据库体系结构对于编程的影响。标准化与如何编写快速执行的SQL代码之间的关系也将会有所探讨。SQL代码的执行速度依赖于标准化的水平。
CPU基础
在这门课程中,学生们将会详细学习CUP体系结构的本质,包括CISC(复杂指令集小型计算机系统)和RISC(精简指令集小型计算机系统)平台之间的区别,二进制执行,内存管理等等,同时还将会提供利用汇编语言进行手工编码的练习。
开发方法学
本课程将会讲授诸如瀑布方法,快速原型化方法,RAD等各种开发方法之间的区别。学生们将会参加一系列正在举行的研讨会,研讨会搭建了一个模仿的开发环境,学生么可以交换扮演客户和开发人员的角色。
第六学期
Java
这门关于Java的基础课程将会使的学生达到熟练的水平。他们将会学习Java语言,JVM(Java虚拟机)原理和Java与J2EE应用服务器之间的关系。
VB.NET
学生将会学习VB.NET以及.NET框架和ASP.NET系统。重点讲授事件驱动应用开发。
C#
学生将会学习C#语言,以及它的大量高级特性如匿名函数,λ演算等等。
安全
这是一门精深的课程覆盖编写安全代码的细节问题。学生将会学习到缓冲区溢出,数据确认,SQL注入攻击,跨站点脚本攻击和其它典型安全问题。同时,还会要求学生找出他/她们以前参与开发的项目的安全漏洞并修改这些漏洞,因此作为练习并强化已存在的代码。
第七学期
UNIX程序设计
学生们将会学习专门针对UNIX平台的程序设计。重点学习的是进程(包括forking),管道,套接字和重定向的重要角色。同时,还会给学生一些指导并练习编写部属在UNIX系统上的应用程序。
Windows程序设计
学生们将会学习针对Windows平台的程序设计。学习重点方面包括UI用户接口设计和Windows API。另外的重点将是关于安全方面的介绍。
独立程序设计
本课程将会要求学生利用他们选择的方法开发一个大型的项目。他们必须完成的工作包括需求分析,规范说明编写,计划,开发和测试他们的应用。
QA质量分析
在这门课程中将会教授学生质量分析(QA)的技巧。学生们将会学习质量分析、执行负载测试,单元测试,代码走读并希望他们能够改正发现的任何问题。代码将会为他们预先编译,从而可使他们将重心放在质量分析过程而不是代码编写过程。
文档
学生们将会学习到如何正确的为代码编写文档、各种可用的文档编辑技巧以及使用不同技巧的最佳时间、地点。内嵌代码,引用生成,帮助文件创建,手工编码等都将包括其中。这是一门半学期的课程。
第八学期
团队程序设计
这门课程将要求学生参与四个独立的小组项目。在其中的三个项目中,学生们的角色是开发人员,在第四个项目中,学生们作为业务分析人员/项目经理/技术负责人。每个项目为期半学期。每个学生将会同时参加两个并行项目。
多线程开发
在这门高级课程中,学生将会学习并行程序设计,其中将会讲授信号,并发和数据继承等。学生们还将会学习到Java线程模型pthreads和.Net线程模型。
第八学期选修课程
每位学生必须选择下列课程之一作为他们第八学期的最后课程:
图形学
学生们将会学习到在Windows平台上利用C++和DirectX编程进行窗口操作和图形处理。
设备驱动程序
学生们将会学习编写设备驱动程序并练习利用汇编语言在功能有限的UNIX平台上编写一个简单的驱动程序。
优化与重构
学生们将会学习检查代码以发现无用代码并进行代码重构来提高性能,方便维护并减少潜在的失败点。本课程将会提供给学生预先编写好的代码以使他们集中经历学习重点知识。
科学程序设计
学生们将在UNIX系统上利用他们选择的语言练习将科学理论和数学算法转换成代码。
网络程序设计
本课程将教授学生如何编写利用套接字进行计算机之间通讯的程序。学生们将会学习到实践建议和动手能力训练以决定是利用一个已经存在的协议更有意义还是开发一个新的更有意义、UDP 和TCP的选择等,此外还将会重点介绍HTTP协议和运行在LANs局域网和WANs广域网上的应用程序之间的区别。
希望你能希望这个系列。同时,欢迎你的反馈信息!