现代软件工程 第三章 【软件工程师的成长】练习与讨论

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 

那么,软件工程师在企业中是劳动密集型的工人么,还是有独创性的专业人士? 他们对软件企业的成败负多大的责任?
 
7. 对职业梯子 (career ladder) 的思考:
从初学到精通(找到工作)的几个阶段,真遗憾,它不是匀速上升的:
 
 
8. 自知之明
我们经常看到一些IT 专业的同学,同事,或者专家对一些事情进行评论,并且表现得头头是道,他们真的懂多少,他们有自知之明么? 你在刚学习某个语言或技术的时候,是否也有这种现象?
   
 
类似的文章有:
     http://stock.jrj.com.cn/2018/11/29101425420269.shtml   或者搜索 “愚昧之巅 开悟之坡” 

邓宁·克鲁格心理效应,又称达克效应(Dunning-Kruger effect),简单说就是一种认知偏差,在某些领域能力欠缺的人总有一种虚幻的自我优越感,认为自己比真实情况更加了解并擅长这一领域的事情;但随着知识的完善,他们会意识到自己的不足,通过不断学习,逐步达到真正意义上的优秀。

9. 同学们在上这门课的时候,都是大二,大三, 你的困难和迷茫,别人一定有过。请看看别人怎么学习的,有些是科班,有些是野路子,有些成功,有些失败。 请读完下面所有博客 (读完这些博客你不吃亏,你也不上当!),谈谈自己的感想,你现在的条件比他们如何? 你对计算机的热爱仅仅是口头的么? IT 专业的技术道路, 职业道路,社会道路怎么计划呢?
 
    http://www.jianshu.com/p/67a0cf352986  (光口头上说 “热爱” 是远远不够的 )
    http://www.cnblogs.com/geniusalex/p/4928713.html (速成的培训班和打基础的大学教育有区别么)
    http://www.cnblogs.com/Tpf386/p/4798437.html 很多同学看不起大学老师按部就班地教课,他们心想,我看视频也能学会的,为何要来听课?请看这个学生学习的经历。

 

[i]      Professional Software Development, ISBN 0-321-19367-9 作者:Steve McConnell, 出版社:Addison-Wesley

posted @ 2014-07-17 21:16  SoftwareTeacher  阅读(3615)  评论(15编辑  收藏  举报