程序与软件、编程与软件开发的区别

今天突然想到两个有意思的问题:程序与软件有区别吗? 编程与软件开发有何区别?

这两个问题也是我在大学时期一直思考的两个问题。作者在学校期间阅读了许多的专业书籍,比如《Java语言程序设计》、《C语言程序设计》、《软件工程》、《设计模式:可复用面向对象软件的基础 》以及许多《21天精通XXX程序设计》系列书籍,也写了许多的小程序,但有一些问题作者始终没有完全弄清楚。比如:

1.真的可以在21天之内精通某一门程序设计语言吗?

2.什么是面向对象?

3.Java语言为什么要提供接口,为什么要将接口定义和实现强制分开?

4.什么是异常?为什么需要异常处理机制?

作者在学校期间曾向老师请教过这些问题,得到的答案要么照本宣科,要么含糊其辞不得要领。直到工作多年之后作者才明白,有许多问题是无法在学校得到答案的,必须要等你真正进入这个行业之后,才会慢慢明白其中的道理。 好的老师与差的老师区别在哪里:好的老师总是能用最简单的方式给大家解释清楚最复杂的问题。下面来谈谈上面的几个问题:

1.真的可以在21天之内精通某一门程序设计语言吗?

从开始学习计算机到现在已有8年时间,但是工作中遇到的难题仍然比比皆是。每当读到James Gosling、Rod Johnson这些大师的经典著作时,才发现大师的高度难以企及。想想当初找工作在简历上写精通XX语言时,难免汗颜耳赤。

2. 什么是面向对象?

在学校期间,计算机课程的老师会引用各种比喻来解释什么是对象。比如:你是对象我是对象世间万物皆是对象;类和对象的关系就像学生和王小明的关系、飞机和波音737的关系等等等等。大家听完还是云里雾里。其实在了解面向对象之前,我们应该了解两个概念:数据结构中的抽象数据类型(Abstract Data Type)和C语言中的结构体(struct)。在了解这两个概念之后,相信大家对面向对象应该有更清晰的了解。面向对象无非是抽象数据类型(Abstract Data Type)实例化,也是结构体(struct)的升级版。很多人容易被面向对象这个概念搞晕往往是因为面向对象这个概念被滥用或者过度解释所致。无论是结构体还是对象,都是用来组织和传递数据的。当软件规模越来越庞大时,模块化是必然的选择。面向对象可以帮我们更好的实现模块化。

3.Java语言为什么要提供接口,为什么要将接口定义和实现强制分开?

如果一个软件的全部功能都能在一个文件中来编写实现,那显然我们不需要接口,也不需要面向对象和类,更不需要package包这些玩意。但是软件规模的增长速度是惊人的,软件功能越来越强大,体积也越来越庞大,这是谁也无法阻挡的趋势。把软件划分成不同的模块,让不同的类去实现不同的功能,让一个类去调用另外一个类的方法来完成业务,这是通行的做法。但是这种强引用会带来一个严重的问题:耦合度太高。有一个成语可以形容这种情况“牵一发而动全身”,某一处的小改动会导致所有地方受到影响。但是软件需求的变更、功能的增加、数据的调整,这些是我们每天都会面对的事情。而接口实际上将调用方和实现方强制分离开,实现的变更对调用方不会产生影响,降低了模块之前的耦合度。

4.什么是异常?异常处理机制可以保证我们的程序永远不出错吗?

笔者记得上大学时,老师对着Java异常类层次结构图大讲特讲,但最后大家对异常的概念总是一知半解,写程序时try-catch总是用的不对。其实异常简单点说就是逻辑错误。我们编写计算机程序实际上是我们逻辑思维的具体符号化,但是逻辑难免会存在缺陷,程序也是如此。编写程序就像我们焊了一个电路,只有通上电某个地方冒烟了,你才知道这里存在bug,这种情况就是出现异常了。写代码时出现编译错误那不叫异常,编译器可以帮我们指出语法错误,但是编译器无法帮我们解决异常。比如我定义了一个对象,调用了对象的一个方法,但是在运行环境中这个对象却不存在,这个时候就出现了空指针异常。如果没有异常处理机制,程序会中断退出,或者进入非正常运行状态。运行时异常是非常常见的,我们当然不希望我们的程序出现任何一点异常就崩溃了。所以异常处理机制对于提高我们程序的健壮性有着重要的作用。

再回到开始的两个问题:

1.程序与软件有区别吗?

我们在大学实验室写的代码并不能称之为软件,而只能叫做程序。软件是为了解决用户的需求,而程序往往没有特定的用户。是否经过测试达到一定的质量标准,这也是程序和软件的差别之一。文档和代码对软件来说同等重要,而程序则对文档基本没有要求。

2.编程与软件开发有区别吗?

这个问题跟上面的问题本质是一样。我们在学校实验室写了一段程序和我们在公司为客户开发软件区别在哪里呢? 在实验室写程序不用面对客户多变的需求,也不用担心程序的版本升级问题,也不必过多考虑程序的容错性和健壮性等等。我想这就是编程和软件开发的差别吧。也正是这些源源不断的问题推动着技术向前发展,我们也在解决问题中不断提高。

时间: 2024-08-08 04:02:58

程序与软件、编程与软件开发的区别的相关文章

零基础如何自学软件编程

随着科技的发展,越来越多的人学习软件编程.有人甚至辞职到培训机构去学习软件编程,也有人害怕是浪费时间,最后工作也没了,也没有学好软件编程.所以在看到网上说软件编程是可以自学的,就想一边工作一边自学软件编程.那么小编就来说说,自学软件编程有什么好的方法.2017零基础如何自学软件编程 1. 零基础能学软件编程吗? 很多人在看到it行业的发展前景一片大好,就想也转行去it行业,但是有很多都在担心同一个问题,就是零基础可以学软件编程吗?其实零基础是可以学软件编程的,也没有谁是天生就会的,不会就学,是可

.NET Compact Framework的软件编程开发工具包

LEADTOOLS Mobile Imaging控件是一款针对微软.NET Compact Framework的软件编程开发工具包:采用它,开发者能在个人数字助理(PDA)及移动电话等设备应用设计中使用LEADTOOLS的图象处理功能. 产品特征: 文件格式支持- 支持常见的各种标准图像格式读.写和转换,包括JPEG.JPEG2000.LEAD CMP,.LEAD CMW.TIFF(可以是未压缩的.采用RLE压缩.采用LZW压缩.采用传真(CCITT/G3/G4)压缩).及GIF.PNG.BMP

谈谈编程器软件开发与设计

*************************************************************************************************************************** 作者:EasyWave                                                   时间:2014.05.24 类别:协议标准-编程器简介                                  声明:

程序员在编程开发中的10个实用技巧

程序员在编程开发中的10个实用技巧,下面是我自己在工作中学到的一些简单的技巧和策略,希望能对各位有用.1.     橡皮鸭调试法不知道各位有没有这样的经历,当你正在给别人描述问题的时候,突然灵机一动想到了解决方案?这种情况的产生是有科学依据的.高谈阔论能让我们的大脑重新有条理地组织问题.在这种情况下,你的聊天对象就是“橡皮鸭”.团队中的每个人都应该积极主动乐意地成为彼此的“橡皮鸭”.有时候,如果你幸运的话,你的“橡皮鸭”搞不好还能给出有效的建议呢.2.     快速信息反馈一旦写好代码就要尽快得

《大道至简—软件编程者的思想》观后感

在读这本书之前我就上网查了一下"大道至简"是什么意思,为什么这本书用它来作为书名前伸.所谓"大道至简"在中华道家哲学,是指大道理(指基本原理.方法和规律)是极其简单的,简单到一两句话就能说明白,所谓"真传一句话,假传万卷书".所以秉着这个观点在读这本书之前就有种想法,这本书应该就是把一些复杂问题简单化.真正具有软件编程者就是应该把复杂的东西简单化. 说实话看这类辩证论的文章确实比较累,但是作者写的语言很轻快,比较易懂,很多观点都会用一些生动的例子

华为软件编程规范和范例

目  录 1 排版 6 2 注释 11 3 标识符命名 18 4 可读性 20 5 变量.结构 22 6 函数.过程 28 7 可测性 36 8 程序效率 40 9 质量保证 44 10 代码编辑.编译.审查 50 11 代码测试.维护 52 12 宏 53 1 排版 ¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个. 说明:对于由开发工具自动生成的代码可以有不一致. ¹1-2:相对独立的程序块之间.变量说明之后必须加空行. 示例:如下例子不符合规范. if (!valid_ni(ni))

软件project—思考项目开发那些事(一)

阅读文件夹: 1.背景 2.项目管理,质量.度量.进度 3.软件开发是一种设计活动而不是建筑活动 4.高速开发(简单的系统结构与复杂的业务模型) 5.技术人员的业务理解与产品经理的业务理解的终于业务模型 5.1.产品的业务理解(业务流程.数据流程及场景) 5.2.技术人员的业务理解(领域模型.设计模型.抽象建模) 6.技术债务(腐烂的遗留代码) 7.软件项目管理与软件project的鸿沟(项目管理得有语境上下文) 7.1.软件项目管理事实上应该多去重视一些技术层面的管理 7.2.软件projec

软件调试和应用软件开发模式

根据软件代码规模,应用软件的开发大致分为三 种模式. 程序员个人开发的小软件 用例图 这种模式和早期的软件开发模式类似. 小软件开发用例图如图所示. 软件调试的特点 发现问题(测试).定位问题和提出解决问题方 案.修改程序代码.验证全部由程序员负责. 软件调试 可以分为静态调试与动态调试. 1.静态调试. 源程序代码编译时同时对源代码进行静态检查, 编译器提供了源代码各种编程错误和错误所在的位 置. 静态调试就是程序员逐条修改编译器提示的错 误,通过代码编译这一关. 2.动态调试. 动态调试分为

KgE金刚企业网站管理系统是广州聚龙软件为国内中小企业开发的一款企业网站管理系统,KgE采用可

KgE金刚企业网站管理系统是广州聚龙软件为国内中小企业开发的一款企业网站管理系统,KgE采用可视化的标签模型,可在Dreamvear等网页编辑下可视化编辑,KgE使用javaeemsyqlyuijquery等主流WEB技术,系统成熟稳定. kgE的布署成本相当小,只需要200M网站空间,256M内存的java主机即可. 最新版V3.0.1下载 KgE3.0.1开发包: http://pan.baidu.com/s/1jGLwhVK KgE3.0.1运行包 :http://pan.baidu.co