4. “写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。
Dijkstra曾经提到:“Software engineering, of course,presents itself as another worthy cause,but that is eyewash: if you carefully read its literature and analyse what its devotees actually do,you will discover that software engineering has accepted as its charter ‘How to program if you cannot.’”[i]
软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?
ACM 比赛的程序是软件么? “写程序” 和 “做软件” 有区别么?
只代表个人观念,并没有采访他人(周边没有太多坚持做 ACM 的同学)。ACM 比赛大都是给定问题,尽力将它做好然后优化在优化,对时间空间复杂度的要求都很高,甚至会包含一些编程 trick,但对算法的高度重视是非常可取的。
软件包括数据、文档和程序。因此相较于程序,一般意义上会“更大” -- 更多的代码,更丰富的功能,更具象的服务。软件更注重的是提供可持续的服务,对程序的优化相较于提供可用的服务可以向后放一放。花费过长的人月想要做到“完美的软件”和软件并不完美甚至有一些 BUG 但可以迭代地变得更好肯定是后者是软件开发人员需要追求的。特别是对于目前的环境,同质的产品更早地进入、更快地更新迭代、提供更人性化的服务才能更好的占领市场。
软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?
这个问题就像是在问“数学是不是教不会算数的人算数”,数学肯定是要教人算数的,不然也就失去了其存在的意义;但是若只是教人算数,数学大概早就变成了中学便可结业,而人类大概还是在用手指头来算今天打了一只羊,摘了 10 个苹果,要是想找个老婆还需要些什么 :)
数学更多的要教会人用更加抽象的东西来模拟世界,1 可以代表的是一个人,一棵树,一朵花 ...,要教会人“建模”的能力,要给人提供科学的视界,要 ...
更多的就不再举例。回到软件工程,教不会写程序的人开发软件是其必须要做到的(很遗憾并不是完全做到了)。但还要做到更多,我们不可能跟上所有领域的发展,所以需要涉猎计算机科学以及软件工程中更本质的东西(鉴于本人水平有限,不在此详说),相较于“学会”,更多地要学到“会学” -- 当然这不限于软件工程了,是教育的目标。