《编程导论(Java)·0.1.5 问题求解》

程序员采用编程语言编写源代码的活动——编程常常概括成问题求解(problem solving)

待解决的问题可大可小,而问题的解决方案正好需要计算机的参与。因此将编程活动称为问题求解,将计算机科学视为问题求解的科学。

问题的大小主要反映在代码量和软件开发参与者的数量上。

实际问题可以是:

²       打印乘法99表;

²       求50000的阶乘;

²       建立一种新的大型网络游戏平台;

²       开发一个具有学生注册、班级课程录入、学生成绩查询……功能的学生成绩管理系统;

²       管理企业各种资源,如人力资源、仓库、资金等等

²      建设数字化医院,构建面向区域的医疗信息共享与协同平台、以电子病历为核心的临床信息系统……

对于小项目的软件开发或小规模编程(programming-in-the-small ),通常具有以下特点:(1) 代码由一个或几个程序员编写,每个程序员都能够了解项目的全部细节。(2)项目可能是独立的项目,也可能是大项目的一部分,但任务明确,开发的主要目的是编写清晰而有效的代码。

对于大项目或大规模编程(programming-in-the-large),具有以下特点:(1)需要一个大型开发团队,组成人员包括项目经理、软件体系架构师、需求分析员、软件设计师、界面设计人员、测试人员、程序员等等,没有一个人能够了解整个系统的所有细节。(2)开发的对象是一个复杂的系统,开发工作的首要问题是开发团队的有效交流与沟通、关注软件的可复用性和可维护性。

问题的大小使得软件开发的方法学上存在巨大的差别。通常将大规模编程称为 系统开发,如开发大型管理信息系统、各种系统软件;将小规模编程称为 (狭义的)问题求解,此时关注求解问题所需的所有详尽的步骤/操作,而对详尽步骤的描述,称为算法。

因此计算机软件开发的核心技术有二:

★程序的组织(面向对象技术)、问题求解(算法)。

许多C程序员,拥有较扎实的底层技术,但是在强调算法和数据结构、系统编程(阅读《Windows核心编程》、《Unix编程艺术》等)的同时,倾向于贬低程序组织的重要性;

一些Java/C#程序员,研究设计模式、框架,可能忽视了对操作系统原理,编译原理、算法等底层知识的时间投入。还有一些搞Java web开发的,可能对底层更加不感冒。

我在这里将程序组织和问题求解,作为软件开发的核心技术的简略概括,希望读者不要受某些偏执狂的影响,至少在大学阶段,你要能上能下——从宏观上认识程序组织,从细节上认识(侠义的)问题求解。工作后,按照自己的情况,再去加强某些方面——毕竟时间有限。

在讲授C语言的时候,我也会按照“程序组织”这个主题,展开#include、函数(结构化编程、接口与实现分离)的内容;

另外,请大家注意,“现在,假设该程序非常庞大,需要多个人合作,分别编写is3X(int)、isInclude5(int)和foo(int)....”,在类似的文字中,提醒读者,虽然我们书上的例子,只有一个输出语句,但是它代表的是,比如说一千多行的代码!

我曾经看见过某个大牛讽刺OO的狂热份子,用多层的类+模式来完成一个简单的工作。baby,例子能不简化吗?说大炮打蚊子,倒是可以。所以,在11.1 说明中,我也再次强调了程序组织的重要性,提醒这是一个好的实践的机会。



更多推荐

软件开发的核心技术