这是一位在加拿大学computer science的朋友的本学期的一个小组作业,以下是题目与要求原文,这位朋友正在读大二。请问中国的大二学生作过这些吗?这就是中国和国外的教育差别。国外讲究合作与team work,从一个项目到手一开始就要通盘考虑,并分配任务,而且在整个大学学习期间,不求每个人做得最好,但都要有概念,都要养成良好的习惯。请问中国的大学生毕业之后有几个有这些能力的?也没有几个大学应届毕业生能够从整体上和全局方面考虑一个问题的,而往往通过自己的想象与所谓的经验来解决问题。由于在上学的时候没有训练思维与合作,结果就是一个个水平参差不齐。国外程序员的个人水平不一定高,但是他只要一个人水平高,并有驾驭全局的能力,基本上就能将一个项目带上正途。而中国的程序员总是想一个人全搞定,结果是你的能力限制了你的成果。中国的程序员还经常是从一开始写程序的时候就没有一点规划与设计,一上来就写;还有就是写程序的时候完全不考虑扩展和接口友好等问题,其实就是无合作精神的一种典型表现;另外,就是中国的程序员写作凭经验,而很少有人用理论指导实践的,结果就是最后得到同样的结果,凭经验的人要花更长的时间才能找到最合理的方法,而即使用了相同的方法,凭经验的人也对为什么只是似懂非懂或是事后诸葛亮。这些都是中国程序员存在的极大问题,总之就是从一开始学习的时候就只会啃书本,而不是成体系地并结合实践来学习,在国内也不会形成一个竞争气氛与紧迫感,因为国内除了几次考试外,别的都不重要,而在北美,平时的作业占的比重可到一半以上,因此平时的作业做好了,不但学到了东西,也保证了成绩。中国的教育方式有他自己的一些特点与优点,但是在培养学生的自主性、创造性与合作性方面实在是做得太差了,而且很多地方也不公平,导致了是为上学而上学,而不是为学习去学习。

就从以下的作业,基本可以看出,中国的大学与北美的大学在培养学生能力方面的不同。不错,北美的一些学生是笨,而且有的笨得可以,但笨不是全部,他们最后成绩可能不好,但很多思维方法与习惯都在不自觉中掌握了。而北美社会是个自由的社会,每个人都可以做他愿意做的事,只要你能做,你不会的事可以不做。而中国的大学生呢?往往是越是成绩好越是只会考试,别的反而什么都不会,这不是畸形吗?结果走上社会时除了成绩好没有什么优点,在工作中往往不能胜任,当然中国好一点是有些时间给你慢慢学,北美就没这么幸运了,你不行就被淘汰了。

在写程序方面,我觉得大多数中国的程序员写的很多程序都没有什么水平,象小孩写的东西,一点不象是专业人士写的。比如我前几天看到一个程序被作者冠为“最好的PHP的EMAIL的类”这么一个程序,一看,无非就是实现了规范要求的格式,最后通过SOCK发送出去。本来也没什么,但一看,居然一个缩进都没有,而且逻辑混乱,功能不紧凑单一,还被称为最好的,当时狂吐,中国的高手程序员都死绝了?!总之就是从一开始就没有培养好规范的作风与思考与分析问题解决问题的能力,结果就是大多数中国的程序员从来就是不入流的(指正规的专业人士),一个明显的表现就是中国根本缺乏世界著名的品牌,也很少有什么著名的大公司,一些著名的软件也大都只是小软件,没有大系统大制作,这与国外差得太远了,主要原因是没有人有能力搞这些,也没有人有长远的眼光进行投资。还有就是搞得太杂,结果是什么都做不好。而且中国的软件做得是实在是太小儿科不说,用户也不友好,运行也不稳定,好象压根没做什么严格测试的,试想一些所谓的中型程序一个人搞一个月就出台,还美其名曰高效,怎么可能?想FLASHGET这样的程序也不是只一个月能搞定的吧?光过硬的调试可能就花掉一个月,更别谈从设计到写码到成型到调试到测试到发布了。文档更是做得极差,有的连说明都没有,搞得人无所适从。国外的软件,无论是多大多小的程序,一般都有说明,至少是安装使用的简单说明――就是一般的文本,至少能让你入手。国人的程序唯一一个优点就是程序是中文的――但这往往比用英文软件还要不方便。比如说,我前几天装一个邮件服务器,一开始用国人写的某“著名”软件,一装,首先就感觉运行不流畅,打开界面一看,连最重要的STMP发送认证都找不到在哪儿,界面极其简陋,功能严重欠缺,安全性方面更不知道可不可靠了,看帮助也看不清,后来在一个与安全无关的地方找到了选项,再一看,很多基本策略都没有,无法保证安全性。直摇头,马上uninstall,后来装了MD,虽然是英文,但结构清楚,功能齐全,工作明显稳定很多,而且帮助文档、使用手册极其详细,有的还有概念解释,以方便非专业用户。虽然支持国产,但是国产不争气,没有办法。


其实下面的问题很简单,一个人做根本不用那么复杂,但是让一组人来协调地做,还真不是那么简单的事,要有一个有分析头脑的人做leader,要有人专门负责写文档,有人测试什么的。对了,这门课好象就是software
engineering,软件工程,好象中国是不学的吧,至少我那时没学。


------------------ 这是这位朋友本周要做的任务 ----------------
- 2.5 Assumptions and Dependencies.
What do you assume the client to do/act/want, and what you depend on
to produce a final result. Its design phases for everyone.


---------------------- 以下是原题目 ---------------------------
Dominion Pizza Store
  Objectives:
o Dominion Pizza Store (DPS) is planning an information system for
their services. A customer may make an order through the Internet /
Phone / in-person. The order may include several products. There are a
few basic sorts of pizzas, which can be complemented with different
toppings. The assortment and the toppings change from time to time, as
do their prices. In addition to pizzas, other products are on offer.
They are divided into product groups. There is a textual description
of every product, and a picture of some of them, which the client may
see when ordering through the WWW.
o A bill will accompany each delivery. The price will be discounted
according to time, if the delivery is late; for example, 45-minute
delivery or FREE. The price of a product may, also, differ according
to the time of day, for example. The time and place of delivery is set
when the customer makes the order.
o For an online / phone order, the customer is identified by his/her
telephone number, or other contact information. A delivery status time
stamp (i.e. to kitchen, to delivery, and to customer) is registered
for each delivery. The client may cancel or change the order only if
the order has not gone to the kitchen. For an online/phone order,
customer's information is checked in the database for an existing, or
new client. If the client is new then take and store contact details.
For an existing client (or address), past history will be checked for
any problems.

  Main Modules:
1. Client Interface
  Browsing the Products, and their Prices
  Making an order
  Delivery time stamping
2. Agent Interface (Phone / in-person orders)
  Entering Agent Info (e.g. ID)
  Browsing the Products, and their Prices
  Delivery time stamping
  Checking past history (for any problems, and/or past frequent
orders for either quick order taking or special offers)
3. Inventory Management
  Food supplies
  Misc. supplies (e.g. Cleaning)
  Entering and maintaining product information (inc. pricing)
in the database
4. Finances Management
  Account Receivables
  Account Payables
5. Delivery Management
  Order Status (i.e. to kitchen - when, to delivery - when)
  Special offers (e.g. late order, new product introduction)
  Printing an order list - for kitchen (?)
  Printing a receipt
6. Payroll
  Employee Information (e.g. Contact Info, Salary Info,
Bonuses, Taxes, GST/PST)
  Hiring / Firing / Training etc.
7. Anything you may suggest (will be considered towards the Bonus
Marks for the best project, if above modules done reasonably well