现代软件工程 第三章 【软件工程师的成长】练习与讨论
1. 选哪一种医生?
作为一个软件工程师, 你觉得自己表现如何? 有没有这样的体会:
看书的时候觉得“技止此耳”,开发项目的时候才觉得实际情况和书上讲的都有一些出入,一些重要的细节书上没有提。我们很多人是边看Asp.net的书, 边开发Asp.net 的项目,这相当于一边看医学书一边动手术……
如果你是病人,你希望你的医生是下面的哪一种呢?
a) 刚刚在书上看到你的病例, 开刀的过程中非常认真严谨, 时不时还要停下来翻书看看……
b) 富有创新意识, 开刀时突然想到一个新技术、 新的刀法, 然后马上在你身上试验……
c) 已经处理过很多类似的病例, 可以一边给你开刀, 一边和护士聊天说昨天晚上的 《非诚勿扰》花絮……
d) 此医生无正式文凭或正式医院的认证, 但是号称有秘方, 可治百病。
事实上,很多软件项目就是用 a)或者 b) 这样的方法搞出来的。当然也有一些人走 d) 这条路。
讨论: ① 你要选哪种类型的医生?② 医生、药剂师、律师和很多行业都有职业考试和职业证书,软件工程师需要有正式的职业证书才能上岗么? 请参考Steve McConnell 的观点[i]。
2. 工程还是艺术
软件开发是一门工程(Engineering), 是一门艺术(Art),还是一门手艺(Craftmanship)? 你如何衡量艺术家? 如何衡量创造能力?
如果是一门工程, 那工程师要守规矩; 如果是一门艺术, 那艺术家要创新。
- 写诗歌最多的人是谁?
- 最有创造力的诗人是谁?
一些最有影响力的作家,他们的作品都非常少,甚至只有一本,例如:
- 《飘》 (Gone with the Wind) 作者 Margaret Mitchell[ii]
- 《红楼梦》,作者曹雪芹(这一本据说都没写完!)
另外,优秀的作品往往并不符合所有“好”的标准。例如,找出下面这首词中重复的字:
念奴娇 · 赤壁怀古 - 苏轼
大江东去,浪淘尽,
千古风流人物。
故垒西边,人道是,三国周郎赤壁。
乱石崩云,惊涛裂岸,卷起千堆雪。
江山如画,一时多少豪杰。
遥想公谨当年,小乔初嫁了。
羽扇纶巾,谈笑间,樯橹灰飞烟灭。
故国神游,多情应笑我,早生华发。
人生如梦,一樽还酹江月。
出现了三遍的字有: 江,人; 出现了两遍的字有: 国,生,千,故,如。这符合“好词”的标准么?
南宋人俞文豹评价道:
今人看人文字,未论其大体如何,先且指点重字。
软件设计工程师们在做代码复审的时候,是看“重复字”的多少, 还是程序的艺术性?
这个问题的另一个侧面是,在中国,一个成名的歌唱家往往出现在各种场合,演唱她当年成名的作品,观众们往往显得百听不厌。一个软件工程师就不能这样,在舞台上展现他当年写的“hello world” 程序,或者是1.0 的产品。为啥有这样的区别呢?
3. 绞刑架和职业发展
移山公司的人力资源总监给同学们做了职业发展的演讲,大意是随着软件工具和软件工程理论的发展,开发软件将会越来越容易,软件企业的水平都是CMMi4级以上。软件白领的生活指日可待,金领也不是梦,大家前途无可限量,学软件工程的同学越来越多,就是明证。大家纷纷鼓掌。最后他分享了一个故事:
两个劫匪在亡命的路上看到一副绞刑架,劫匪小弟说,大哥,如果这世界上没有绞刑架,咱们的职业就好干多了。大哥说:你真笨!如果没有了它,这世上做劫匪的人怕是太多,我俩恐怕竞争不过同行,早就饿死了!
请同学们思考这个故事对个人及软件业发展的启示。
4. 案例
程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中, 他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板,同事也许会因此看不起他。如果他按部就班地按既定设计完成,最后整个团队还要花更多时间在后续集成上,但那就不是他个人的问题了。怎么办?
5. 成长和代码量的关系
软件工程师的工作就是写代码,相关专业的练习也是以阅读代码,写代码为主,那么代码量和工程师的水平是线性的关系么?
这个问题有人还研究过:
http://www.techug.com/norris-numbers (翻译)
http://www.teamten.com/lawrence/writings/norris-numbers.html (原文)
当代码是在2,000行以下,程序员可以用 “写了再改” 的蛮干方法,并且靠记忆力搞定一个程序,但是, 如果你的代码规模达到20,000行,你要用结构化编程(类,模块,API,细节隐藏,面向对象的其它方法,等)来保证程序不变成一团乱麻。 如果代码规模再大一个数量级, 20万,200万呢?
6. 成长和公司的关系
绝大部分的工程师都在某一个企业工作,工程师的成长也和企业的兴衰有很大关系。企业兴旺,工程师也是与有荣焉,很多人觉得是自己的功劳,理所应当提薪升职;企业衰落,很多工程师未必觉得是自己的问题(我的代码很好的,都是经理,市场,老大的问题!); 企业最后要裁员,很多人为了一些补偿和企业产生纠纷。
几个例子:
http://weibo.com/1620213837/BgSGLhdAe
http://www.csdn.net/article/2014-09-29/2821931
http://www.csdn.net/article/2014-10-01/2821945
http://blog.jobbole.com/93320/
职业发展的梯子,有什么优缺点:
https://blog.usejournal.com/the-software-engineering-job-ladder-4bf70b4c24f3
邓宁·克鲁格心理效应,又称达克效应(Dunning-Kruger effect),简单说就是一种认知偏差,在某些领域能力欠缺的人总有一种虚幻的自我优越感,认为自己比真实情况更加了解并擅长这一领域的事情;但随着知识的完善,他们会意识到自己的不足,通过不断学习,逐步达到真正意义上的优秀。
[i] Professional Software Development, ISBN 0-321-19367-9 作者:Steve McConnell, 出版社:Addison-Wesley
http://blog.csdn.net/haoel/article/details/1688104