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

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) 的思考:
从初学到精通(找到工作)的几个阶段,真遗憾,它不是匀速上升的:
http://blog.jobbole.com/93320/
职业发展的梯子,有什么优缺点:https://blog.usejournal.com/the-software-engineering-job-ladder-4bf70b4c24f3
8. 自知之明
我们经常看到一些IT 专业的同学,同事,或者专家对一些事情进行评论,并且表现得头头是道,他们真的懂多少,他们有自知之明么? 你在刚学习某个语言或技术的时候,是否也有这种现象?
http://www.guokr.com/article/439517/
类似的文章有:
http://stock.jrj.com.cn/2018/11/29101425420269.shtml   或者搜索 “愚昧之巅 开悟之坡” 

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

9. 同学们在上这门课的时候,都是大二,大三, 你的困难和迷茫,别人一定有过。请看看别人怎么学习的,有些是科班,有些是野路子,有些成功,有些失败。 请读完下面所有博客 (读完这些博客你不吃亏,你也不上当!),谈谈自己的感想,你现在的条件比他们如何? 你对计算机的热爱仅仅是口头的么? IT 专业的技术道路, 职业道路,社会道路怎么计划呢?
http://www.cnblogs.com/xiaozhi_5638/p/4485805.html
http://www.cnblogs.com/blog470130547/p/4222870.html   
http://www.cnblogs.com/unruledboy/p/DevCareer.html 
http://coolshell.cn/articles/4561.htmlhttp://blog.csdn.net/haoel/article/details/1688104
http://book.douban.com/subject/4006425/discussion/22802960/       
http://www.cnblogs.com/freeflying/p/4796369.html
http://www.cnblogs.com/geniusvczh/archive/2011/12/16/2290808.html 
http://book.douban.com/subject/4006425/discussion/22803733/
http://lucida.me/blog/on-mobile-developing-3/   
http://www.jianshu.com/p/67a0cf352986  (光口头上说 “热爱” 是远远不够的 )
http://www.cnblogs.com/geniusalex/p/4928713.html (速成的培训班和打基础的大学教育有区别么)
http://www.cnblogs.com/AndersLiu/archive/2011/04/19/programming10years.html
http://www.cnblogs.com/Tpf386/p/4798437.html 很多同学看不起大学老师按部就班地教课,他们心想,我看视频也能学会的,为何要来听课?请看这个学生学习的经历。

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

[ii]      参见:http://en.wikipedia.org/wiki/Margaret_Mitchell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 课件 软件工程师能力自我评价表

这是《构建之法》和软件工程教学的一部分,用于学生/工程师自我评价。 软件工程师如何评价自己的能力? 有人写Java,有人用C,还有人用1980年代就出现的 Object-C, 有人写前端,有人写后端,有人偏于行业应用&a…

现代软件工程 第四章 【结对编程】练习与讨论

4.7.0 结对编程的练习题 地铁导航和遍历 4.7.1 结对项目的案例和论文 在现代软件工程教学的过程中,同学们已经总结了不少切身体会。例如: 总结1[i]:那是project到了比较关键的创造阶段,整整一天,我们俩椅子靠椅子的坐在电脑前&am…

现代软件工程 第五章 【团队和流程】练习与讨论

团队模式和团队的开发模式有什么关系?如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式?不同的团队模式如何影响团队绩效的评估?团队精神和集体主义的区别? 大家回想在小学和中学的学习过程&#xff…

现代软件工程 第六章 【敏捷流程】练习与讨论

6.3.1 什么时候适合选择敏捷 我们看了这么多方法论之后,一些同学一定比较困惑,到底选择哪一种开发方法比较好呢? 这在实践中不是难题,有学者还列出了一些简单的问题来帮助人们做决定[i]: 表6-3 问题引出方法 问题 Yes – 偏向传…

现代软件工程 第七章 【MSF】练习与讨论

7.7 移山开发方法——比TFS敏捷更精简 几个软件学院的学生来请教阿超,同学们自豪地说,我们要用全套TFS敏捷开发模式开发项目! 真的?阿超不敢相信。 同学: 对!我们要用全5个工作项类型 – 任务、缺陷、场景…

现代软件工程 第八章 【需求分析】练习与讨论

1 扩展阅读下面两篇文章也说明了软件估计的难度: Steve McConnell 软件估计的 10 种罪:http://www.ewh.ieee.org/r5/central_texas/austin_cs/presentations/2004.08.26.pdf Quora精选: 为什么软件开发周期总是预估的2~3倍http://jandan.net/201…

现代软件工程 第九章 【项目经理】练习与讨论

9.5.1 PM们的故事 讲了这么多条条框框,我们还是来讲几个故事吧。 A)是不是所有的好功能都是由PM主导,一步一步根据用户需求,按照用户场景设计,然后进行可用性测试等等步骤之后得来的呢? 功能本天成,妙手偶…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论:下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说,我们敏捷的团队,就喜欢直接的面对面的交流&#xff0…

现代软件工程 第十一章 【软件设计与实现】 练习与讨论

1 如何避免在产品开发后期不断有重大修改,导致其它模块的连锁反应? DCR Tell mode vs. Ask mode设计变更 在项目早期,如果大家觉得要做一个设计变更,便可以采用告知模式(Tell-mode)的形式,也就是说,修改方必须通告所…

现代软件工程 第十二章 【用户体验】练习与讨论

1 什么是用户体验, 什么时候开始考虑用户体验? 究竟什么是用户体验呢? 请看: http://www.infoq.com/articles/aaron-sanders-user-experience (中文版)http://kb.cnblogs.com/page/508097/ 既然用户体验和用户界面对一个项目这么重要&…

现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论

0. 为啥要讲人、绩效、和职业道德? 学好专业不就行了么,为啥要扯这么多? 用专业知识教育人是不够的。通过专业教育,他可以成为一种有用的机器,但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情…

现代软件工程 第十三章 【软件测试】 练习与讨论

13.5.2 有错不改 果冻: 微软的产品经过这么多版本的不断完善,应该是把所有问题都搞定,“止于至善”了吧? 阿超: 那也不一定,在非常有名的电子表格软件Excel中,就有这样一个Bug:Exce…

现代软件工程 第十四章 【质量保障】 练习与讨论

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 我猜想和踢足球类似,还是那几个原因: 人太牛: 不世出的天才,例如高德纳写书时发现排版软件不好用,就自己写了一个。也没听…

现代软件工程 第十五章 【稳定和发布阶段】练习与讨论

15.3.0 案例分析 可以看看这两个学生项目的例子,推断出这些团队的血型: STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……) [i] 英语学习软件(说了“明早发布”,但是明早一直没到)[ii] 15.3.1 反动分子阿…

现代软件工程 第十六章 【IT 行业的创新】练习与讨论

16.6.0 Xerox Parc 的成功创新和推向市场的失败 http://research.microsoft.com/en-us/um/people/blampson/Slides/AltoAtPARCIn1970s_files/frame.htm http://research.microsoft.com/en-us/um/people/blampson/38-AltoSoftware/WebPage.html http://research.microsoft.com/…

感恩回馈——你评博客,我送好书

各位博客园的用户: 最近我的书《构建之法—现代软件工程》上市了,得到了不少读者和老师的好评,出版2个月即告重印。该书的相关信息参见豆瓣页面:http://book.douban.com/subject/25965995/ 《构建之法—现代软件工程》得以出版和畅…

《梦断代码》读后感 - 驱动,责任,交流,远虑

这三篇读后感原来发布在我自己申请的域名 yishan.cc 上面,后来这个域名被墙了。 (原文写于2008年12月) 几个星期前,我给《现代软件工程》课的每一个团队都发了一本 《Dreaming In Code》的中文版 《梦断代码》,要求写读后感。这本书讲了这样的…

软件工程练习:模块化,单元测试,回归测试,TDD

这是《构建之法》实战教学的一部分。适合作为同学们的第二个程序作业。 第一个程序作业: 请看 “概论” 一章的练习,或者老师的题目,例如这个。 作业要求: 软件工程的作业越来越有意思了, 我们在第一个作业中&#xff…

《构建之法》参考书和链接汇总

《构建之法》 参考书和链接汇总 参考书汇总 一些读者对《构建之法》引用过的参考书也感兴趣,因此我把所有参考书单独列出来。其实人大部分的思想都是受某些外部信息的启发影响而来,很多道理看似新颖,其实别人早就讲过了😀。这个参…

现代软件工程讲义 7 分析和设计方法

(这一节在第一版的 《构建之法》中没有, 是《构建之法》电子书(多看版), 和纸版书第二版中新增加的内容,纸版书第二版预计2015年6月出版) 11.1 分析和设计方法 我们写软件就是要解决用户的需求,我们需要表达和传递下面这些…