项目 | |
---|---|
这个作业属于哪个课程 | 2023北航敏捷软件工程 |
这个作业的要求在哪里 | 个人作业-阅读和提问 |
我在这个课程的目标是 | 学习并实践软件工程开发的方法论。在把握整体流程和内容要素的基础上实践细节,培养开发技术、开发思维、团队协作等能力。 |
这个作业在哪个具体方面帮助我实现目标 | 大致了解工业界当中软件工程开发的内容以及学生在课程中努力的方向 |
读《构建方法》思考与提问
1.有竞争力的软件发展方向?
软件有很多种: ShrinkWrap(在包装盒子里面的软件) Web APP(基于网页的软件) ...
Page 41
我们国家的软件发展方向是否是“有竞争力的”?
前段时间读到一篇文章(已经找不到了),作者表达了他对中国软件行业发展的不满:国内有越来越多的软件都嵌在已有的软件上(微信、支付宝),导致已有软件愈加臃肿冗余;而国外发达的工业界则专注于大型软件和Web,这种解耦的做法才是比较优秀的。
我一开始对这种想法嗤之以鼻,心想我们到今天为止在已有软件上的嵌入开发不是都很有效吗?人人都有手机,这样做不是很方便吗?知道我参加了2023年的美赛,对比了我国和美国官方和民间机构的专业网站和资料库后,才体会到作者的用意。直接对比中国国家统计局和美国Census Bureau的Web功能,就会发现两者在提供专业功能上有很大的差距;更糟糕的是,你没有办法在微信小程序上提供这些专业功能,而美国有很多机构都有相应的、精美制作的Web(包括NASA)。
容易开发且简单的小程序固然讨喜,但这真的是正确的方向吗?
2.合作中如何正确、高效地给予反馈?
4.6.2 如何正确地给予反馈
Page 104
作者在本部分介绍了一种“三明治”式的反馈方法,很显然,作者很推崇这种办法。然而,这种方法虽然容易接受,但信息的输出率却不高,真正的目的很容易被前后的“套辞”冲散;并且这一套路应当是广为人知了,频繁使用反而会显得拙劣(很多管理者指出最近几年这种三明治反馈法并不是那么好用了)。或许在现代企业中,可以增大直接、坦诚的反馈的比例?正如乔布斯所说的,“我特别喜欢和聪明人交往,因为不用考虑他们的尊严”
3.同学们的能力和敏捷开发的可行性?
如果你的团队很弱,那么强行把敏捷(或者其他高级方法)套在上面也没有用, 也许还会适得其反,往往需要多次Sprint才能让Scrum走上正轨。
看到这一句话,我不禁想起上大学以来每一次和Web开发有关的作业:几乎每次都是忘掉了上次做的所有东西,还得重新学习一遍;技术的使用也是大杂烩,没有人告诉我解决哪个需求用什么样的工具更快,不停地重复造轮子。我想,如果要培养进入企业的软件工程师,或许在更多的学期开放这一课程是更好的办法;而在几周内实现敏捷,对于相当一部分同学来说显然是很不友好的。
如果真的想要细致地培养敏捷的能力,或许可以开两个学期的敏捷软件工程?
4.敏捷开发是一直有效的吗?
第6章 敏捷流程
Page 133
我在寻找敏捷开发相关的文章时,留意到了这么一条链接:为什么大厂程序员不喜欢敏捷开发
我当然相信敏捷开发能够培养团队协作开发小型项目、应付大量日常客户需求的能力,但是正如某些业内人员提到的,敏捷开发使得很多工程师和客户变得“短视”了。“短视”在应对大型项目(如飞机安全软件、操作系统)的时候显然是很不可取的态度,这是一个本科生都知道的。另外,敏捷的超短Sprint流程总是要求阶段性的成果,这又很不利于沉下心来进行开发。
总而言之,或许在低端的小型项目中,敏捷是好的概念,因为小的项目不用担心长远的迭代计划;但上升到大型工程软件,譬如要做出Adobe系列VHDL仿真软件、JetBrains系列这样的软件,敏捷真的可取吗?()5.如何判断技术达到了“效能过剩”这一阶段?
16.3.4 效能过剩和竞争的各个阶段
作者用他在2013的经历暗示我们CPU的技术已经到达了维持性的阶段,产业进入了“效能过剩”时期。然而2023年,人们还在不断渴望更大的算力和更低的计算成本,ChatGPT的一次训练的价格达到了高昂的140万美元。搭载在硬件上的软件发展速度非常之快,以至于硬件公司仍在不停地推出新的产品。“效能过剩”似乎成为一个难以预见的节点。尽管5G现在看起来用处不大,但其他领域的需求发展之后,现状还会如此吗?
我好像看到往年也有同学对这一点表达了疑惑,有可能作者的本意并不局限于硬件产业,但显然用效能过剩单独评估硬件产业是很不公平的。
6.总结
老师的文章高屋建瓴地向我们介绍了软件工程开发的各个方面,让我对其流程和方法论有了初步的了解。不过,理论和实践总是有差距,理论的更新总是慢的,而技术在不断地发展,这也是事实。十几年前的工程师可能无法想象今天的一个高中技术宅就能开发出美观的中小型界面,理论和实践的区别可见一斑。在学习了邹老师的软件开发知识后,我希望日后我并不是按部就班地执行流程,而是能够在开发流程中切身感受,形成自己的思考和见解。