计算机中最基本的要素是数据和逻辑,这对应于早期的机器语言和汇编语言时代。然而,这样不利于大型软件的开发和管理,程序中容易充斥大量混乱的goto跳转逻辑,因此,出现了结构化程序设计方法,主要思想是:程序=数据结构+算法+模块组织。首先,用规范的控制语句(顺序,条件,循环)消除容易混乱的goto跳转逻辑;其次,用模块化的思想来管理软件的构造。这种方法的基础是:管道与重定向。管道是指一个程序的输入可以充当另一个程序的输出。重定向是将数据源或数据目的地指定为所期望的流(标准I/0,文件等)。通过对程序的静态分析,通常就能准确推理出程序的行为。
随后,出现了面向对象的程序设计方法,将应用程序分解为对象及对象之间的交互和通信。对象是数据与紧密相关的逻辑的良好封装。面向对象的程序设计的一个复杂性表现在,无法通过静态的程序分析来推理程序的行为;其原因之一是使用了多态机制。
为了各种系统之间的互操作,出现了面向服务的理念。使用面向过程或对象的方法,将某些功能打包成服务提供给外界。这需要有相应的应用协议来辅助,比如数据交换格式XML。面向服务: 面向对象(过程) +服务模块+应用协议。
三、语言、框架和可用库:
选择现有技术和框架构建应用和服务
为了能够快速建立应用,通常不会重新发明轮子,而是直接选择合适的现有框架和库、语言。比如,javaweb开发可能选择Struts+ hibernate + spring 来完成,C++有STL,MFC等,C有大量的标准库函数可用,PHP和Perl都有海量的模块可供选用。有时可能需要开发自己专有的库,以避免依赖于其它商业公司的决策行为。
令人欣慰的是,通常能够找到好的开源工具和软件作为开发的基础。当然,来而不往非礼也,利用开源的优势和服务,也应当尽力用某种方式回馈开源社区。
磨刀不误砍柴功。构建自己喜爱的工具箱是高效开发应用的要素之一。Windows下的程序编辑工具有ultraedit等,Linux下的程序编辑工具有emacs和vim ;编译工具有gcc, g++,javac;运行调试工具gdb,测试框架有XUnit等,部署工具有ant,make, maven等;建模工具有草图,UML,还有代码分析工具lint,profile,代码控制CVS, SVN. 选择一款好的IDE也是非常重要的。比如Eclipse,就是一款非常不错JavaIDE。
五、内功: 快速领悟新技术
无论从事计算机的哪个行业,深厚的内功是非常重要的。扎实的专业基础、敏捷缜密的思维有助于快速领悟新技术。专业基础包括:1. 对计算机系统深入而整体的理解;2. 操作系统、数据结构、算法设计、数据库、程序网络通信等。
要做好实际开发工作,从两个方面入手:1. 熟悉掌握开发领域的动态和技术;2. 博览群书,广泛涉猎,从任何可能的地方去汲取有益的启示。
编程,如果没有了编程思想就没有了指导前进的动力,就没有了创造的灵感的土壤。软件知识发展到现在比较常用的编程思想就是结构化(模块化)和面向对象化(设计模式),有些语言是在模块化大行其道的历史背景下被发明出来的。