程序员,你的路好走吗?(九)

原载:http://blog.csdn.net/netcasper/article/details/326890

学开发,只看软件工程著作是不够的

近日看了两篇IEEE Software上的文章,讲述开发软件究竟需要哪些知识,以及怎样学习。

[1]中提到,如果你希望通过阅读软件工程著作了解和学习如何开发软件的话,恐怕难以如愿,因为这类著作更愿意关注一些轻量级的内容,如项目管理、软件开发过程改进、进度和成本估计等等,而软件开发本身由于是整个软件工程生命周期中最难以理解、也是理解得最少的一部分,所以只能抽象地讲讲,甚至被完全忽略。

然后,文中列出了一系列技术问题,并指出,只有在设计和编码的前前后后解决了这些技术问题,才能使开发和维护工作更轻松。我觉得其中最精彩的部分是”Considerations before design“一节,作者认为在设计前所有开发人员必须掌握两方面的知识——problem-domain expertise and solution-domain expertise。业务知识的重要性就不用多说了,现在网上不知多少文章劝告那些将近30岁的开发人员不要一味钻研技术,要想赚大钱必须对业务特别熟悉。对此我不敢苟同,能够理解和能够描述之间还是有很大差距的,何况任何技术都有它自己的局限性。比如“庖丁解牛”这个典故,它说明的是对牛的结构越清楚,肢解的速度越快,对刀的损耗也越小。然而,如果连刀背刀刃都分不清楚,又如何来解牛呢,即使对牛再了解。当然,刀作为一种解牛的工具其复杂度是很低的,很容易掌握,它与软件开发技术的复杂度是不能比的,可偏偏就有很多人在无视、否认软件开发技术的复杂性。

那么,为什么软件工程教科书都不教这些知识呢?[2]给出的解释是,首先,业务知识与软件无关,它超出了软件工程学的范畴;其次,能在程序设计语言手册、系统文档、以及库手册上找到的技术知识往往过于具体、涉及过多的细节,而更多的技术知识甚至只存在于一个个程序员的经验当中,还没有被总结出来作为一种可以教授的知识。文中还提到,除了这两类知识外,problem-solution integration expertise也是不应忽视的。否则,岂不成了“纸上谈兵”!根本不知如何运用的知识又怎么能算知识呢?

课本不教,大家是从哪里学来的呢?“人类是如何学习的”是心理学研究的问题之一,一般来讲,有两种学习的方式——模仿和摸索。既然没法教,我们也只好摸着石头过河了。

The practitioner is using his or her intelligence to find and then build linkages between the problem domain and the solution domain.  As observers have noted, programming is an endless struggle with How? Why? What? Whether? and When?  Typing takes place when enough questions are tentatively answered to permit the programmer to put a structure in place. [2]

那么,老师们又能做点什么呢?  作者提出了四点建议,其中最后一点是:

Fourth, teach by doing.  Software engineering is not book learning.  Teach with problems and projects where students (and teachers) labor to build and modify nontrivial, even real, systems in working groups.

知道了学什么,以及如何学,“大家有没有感到这个世界美好了许多啊?!”


[1]. James A. Wittaker and Steven Atkin, Software Engineering Is Not Enough, IEEE Software Vol. 19, No. 4
[2]. Nicholas Zvegintzov, Do We Know Enough to Each Software Engineering?, IEEE Software Vol. 20, No. 5

还是没有养成写blog的习惯

原载:http://blog.csdn.net/netcasper/article/details/324962

转眼三月快过去了,再不写点啥就两个月没写blog了。

二月回家过年,走得匆忙忘了带拨号线,结果累个半死扛回家的、IBM历史上最重的本本T30只能用来学学elisp和如何写makefile。幸好还带了PS2回家,趁老妹没回家“霸占”电视,爽了好几天的实况足球。

返回上海后一边忙着看新房,一边找租的房。上海的房子越来越贵,越来越让人负担不起了,渐渐地,买新房作为第一选择已经不太现实了。租房也像打仗一样。一直是在上海热线上搜索,合意的房子太少了,而且很多人写的十分简单,根本看不出个啥。眼看着前面住的房子就到期了,开始打电话联系,第一个是个桂林路的房子,第一天没联系上房东,打电话没人接,等第二天打过去已经晚了,房子被人租走了。第二次是现在住的这个,连打了三天的电话,追着房东要看房,终于抢在第一时间看了房,并且订了下来。两天后正式签合同的时候还有人打电话给房东要来看房,当时唏嘘不已,多亏当初盯得紧。屋里所有电器都是签合同后新买的,浴室里还有浴霸,而且房租也符合我们的预算。想想前两年住的房子,以及在那房子里的两年生活,真想不明白当初怎么能坚持那么久?!

今天去房展会转了一圈,路上花的时间可要比看的时间多多了,因为上海的楼盘实在是太少了,场面也比去年的冷清,不知是不是最后一天的原因,昨天应为要给两个房间装空调,没能抽出时间。