第一次作业:阅读教材,提5个问题

2006040228王浩 2022-10-06 21:16:39

这个作业的要求是:https://bbs.csdn.net/topics/608340396

在书的p38
谈到软件的一大设计原则是开放——封闭原则(软件实体是可以扩展的,同时是不可修改的)
问题一:为什么我设计好的模块不能修改?不修改代码怎么拓展功能?
资料:只有依赖于抽象。实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。这是实施开放封闭原则的基本思路,同时这种机制是建立在两个基本的设计原则的基础上,这就是Liskov替换原则和合成/聚合复用原则。
根据我的实践,如果想要提升一个函数或方法的功能,我会大幅度地修改函数方法,尝试新的思路。
我的困惑是:如果类依赖于固定的接口,仅通过覆写其方法实现扩展真的可行吗,如果在扩展功能时发现接口设计错误或考虑不周应该怎么办?

在书的p75
写到“函数最好有单一的出口,为了达到这一目的,可以使用goto,只要有助于程序逻辑的清晰实现,什么方法都可以用,包括goto”
问题二:我反对作者的观点:只要有助于程序逻辑的清晰实现,可以使用goto语句。
我提出观点:在编程时goto语句有害必须尽量不用。
理由:goto语句可以通过循环嵌套,标志位设置等方法取代,goto的使用会影响可读性和可修改性,影响团队的工作。迪杰斯特拉曾经提出过《GOTO有害论》,
为了尽量减少不变,应该少用goto。

在书的p192
讲到交流成本问题时,查尔斯提议要把程序员分为MasterProgrammer和Slave Programmer,MP只写抽象的伪代码,SP负责实现,而SP只用和MP交流,减少了交流成本。
问题三:但为什么这次的改革不了了之?
资料:查尔斯认为程序经理作决定时越快越好,深思熟虑的讨论比不好的决定带来的损失更大,程序经理的决定至少有85%被最终证明是正确的。将设计,管理,决定权集中在程序经理上,软件开发将更快,更有效。这种方法的关键是如何建立这样有层次的管理制度,在施乐这显然是不可能的,“最后我终于觉得在施乐没有什么前途,这不止是市场部门和管理部门的问题,也是技术部门的问题。不过施乐的失败倒是救了我一把,如果施乐成功了,我最多能得到1000美元奖金,我不可能分享成功的成果。
启示:好的创新想法和灵感固然重要,选择往往更重要,如果不是去了微软公司,那么好的想法就会因为僵化的体制而被埋没。


在书的p356
讲到创新时,作者用ipod举例,说明其在用户界面上的创新是其成功的重要原因。
问题四:ipod在发明之前已经有相当完善的mp3等随身听,而ipod仅仅凭借更好看的UI界面真的能能取得如此巨大的成功?
资料:但乔布斯在 2003 年的一次演讲中表示:" 我们认为,人们希望通过下载方式在互联网上购买音乐,就像他们购买黑胶唱片、磁带和 CD 一样。"iPod 硬件配合 iTunes 地软件服务做到了这一点。这样的一对完美组合彻底改变了大众听音乐地方式,同时也把索尼地 Walkman 和 MD 机送进了坟墓。苹果也就此登上了随身听领域霸主的地位。
启示:由此可知,ipod的成功不仅在于用户界面上的创新,更在于其在于整个音乐播放模式的整合和生态的优化。
困惑:仅凭当时的时代背景,乔布斯怎么敏锐捕捉到创新的发力点,以及实现自己产品的杀手功能?


在书中的p316
讲到测试的角色时,作者鼓励团队中有独立的测试角色,并且要有一个角色对QA进行负责,并举例说明了分工独立的测试的重要性。
问题五:现在网络中流行一种概念称为“全栈工程师”,是否意味着要集开发前端,开发后端,测试,维护于一身,这样工作与作者的观点相悖,是否会影响工作效率?
资料:全栈工程师是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局性思维的人非常非常重要。全栈工程师的沟通成本几乎为零,因为各种技术都懂,胸有成竹,自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多,让一个后端和一个前端去沟通,那完全是鸡同鸭讲,更不用说设计师与后端了。但如果有一个人懂产品懂设计懂前端懂后端,那沟通的结果显然不一样,因为他们讲的,彼此都能听得懂,大大降低了沟通成本,而且在一些初创的小企业中,全栈工程师可以胜任各种角色,降低了成本。
启示:分工明确固然重要,但通才的重要在于可以有效实现内部的沟通协作,在小型任务时可以独立完成,更加灵活,不会降低工作效率。
困惑:按目前的就业形势,是做精于前端或后端的开发者好,还是面面俱到的全栈工程师更好?

...全文
125 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwareTeacher 2022-10-06
  • 打赏
  • 举报
回复

问题二:我反对作者的观点:只要有助于程序逻辑的清晰实现,可以使用goto语句。


分享不同的观点能帮助我们深入讨论一个问题, 当然, 关键是要深入讨论。 请看以前的同学的讨论: https://www.cnblogs.com/HansBug/p/15470559.html

SoftwareTeacher 2022-10-06
  • 打赏
  • 举报
回复

查尔斯认为程序经理作决定时越快越好,深思熟虑的讨论比不好的决定带来的损失更大,程序经理的决定至少有85%被最终证明是正确的。将设计,管理,决定权集中在程序经理上,软件开发将更快,更有效。这种方法的关键是如何建立这样有层次的管理制度,在施乐这显然是不可能的,


请再说清楚查尔斯和施乐公司的关系? 你说的是 PARC 施乐研究院么? 可以把文献链接也发出来。

另外,这里有很多相关讨论, 可以看看对你是否有启发: https://bbs.csdn.net/forums/SoftwareEngineering?typeId=828

2006040228王浩 2022-10-07
  • 举报
回复
@SoftwareTeacher 1972年查尔斯就来到了施乐的帕洛阿尔托研究中心(PAPR),这时他还未从学校毕业,在这里边工作边学习,但最后觉得施乐的理念“产品越大越好”与自己不和,在施乐无法享受到开发的成果,于是之后离开了施乐加入了微软。是,链接:https://xueqiu.com/3993902801/87397662

80

社区成员

发帖
与我相关
我的任务
社区描述
河海大学-软件工程
软件工程 高校
社区管理员
  • rzqi_water
  • 南川..
  • zjy19990207
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧