个人阅读作业Week7

个人阅读作业Week7

银弹

  “没有银弹”一文出现在《人月神话中》。作者认为,在软件的发展历程中,由于软件的复杂度、一致性、可变性等特点,软件无法像硬件那样“在30年内取得6个数量级的提高”。因此,不会出现一个发明,像能解决所有狼人的“银弹”一般,解决束缚软件发展速度的所有问题。
  事实上,在软件发展过程中,出现很多重大的变革。比如高级语言的出现,取代了汇编语言繁复的编码方式;再如IDE工具的出现,提供了一体化的平台,方便的编辑模式,可视化地调试过程;再如IOS,android平台的出现,虽然没有极大地改变已存在的编程方式,却刺激了编程人员之间的竞争,促进了许多具有优良创意的软件的诞生。
  我们理想中的软件发展的大变革应该是什么样的?我认为无论是编程工具的革新、还是编程语言的更迭都不能颠覆现有的模式,很难使得编程自动化,即通过简单的逻辑,少数的代码就实现复杂的功能。当下能产生更大效益的,应该是功能模块的复用。很多人认为,我们这一代程序员不应将过多的时间花在完成重复性、基础性的工作上,而应适应使用已存在的功能模块。虽然不能确信这会产生变革,但是至少,这种方式可以大幅提高软件开发的效率,缩短周期。

大煤球

  大煤球指的是杂乱无章的、风格凌乱的代码。大煤球的产生多是由于一次性代码、没有前期设计、对任务需求不够熟悉、缺乏合理的架构。
  大煤球似的代码必然让阅读者痛苦不堪。在团队项目中,我的团队任务是“学霸”手机客户端的开发。
  在阅读前辈们的代码时,其中最让我疯狂的就是过量使用匿名类,以及随意的缩进方式。这两种凌乱的方式天衣无缝地结合在一起,使得我不得不逐行修改缩进,甚至将匿名类取出,修改为普通类。
  此外,android开发中常用handle-message机制传送消息。每个Handle对象对应一个线程。在代码逻辑较复杂的情况下,如果大肆使用匿名类,甚至对象的命名没有一定的联系,会大大延长阅读的工作量……
  学长的代码良好地使用了MVC框架,将处理用户操作的控制器、呈现程序运行情况的视图、以及和数据传输相关的模型进行了明确的划分。
  前期设计提供有效的规范,而我认为“文档”正是团队间明确划分任务的根据。然而在这次的任务中,由于我们对android开发严重缺乏经验,无法一一列举所需实现的模块,前期只能粗略地将任务划分为UI设计,服务器配置,随着任务进行,一步步增加和完善所需功能。

教堂与集市

  大教堂模式(The Cathedral model):源代码在软件发行后公开,但在软件的每个版本开发过程中是由一个专属的团队所控管的。作者以GNU Emacs及GCC这两软件为例。
  市集模式(The Bazaar model):源代码在开发过程中即在互联网上公开,供人检视及开发。作者以Linux核心的创始者林纳斯·托瓦兹带领Linux核心的开发为例,亦引用fetchmail的开发为例。

  我相信教堂模式和市集模式在特定的场合有各自的优势。商业中的种种我了解的是在不多。
  在实际工作中,我更倾向于前者。在教堂模式中,程序的“开发权”仅掌握在团队成员中,可以通过结对编程或者类似的集中化的方式,“快刀斩乱麻”地解决问题,并缩小了出现矛盾,过多的选择情况的概率。而市集模式固然能集思广益,但是却容易使得代码被大肆复制、盲目修改,劣质代码泛滥,失去“精英模式”,即所谓的“lost in CatB”。

阶段性总结

  alpha阶段的团队任务进行的并不顺利。由于android开发经验的缺乏(团队中只有1人有过开发经历),我们团队没有很早地设计出开发文档,没有计划阶段性工作量,只是粗略地分配了各自的负责方向,然后分头学习。我们用了整整一周的时间学习各类知识,大概是从第3周才开始开发。
  其中,我负责配置服务器、修改后端代码。配置服务器的任务包括tomcat、SQLserver的安卓,程序的部署。在这个进程中,出现过很多小问题,比如端口被占用,数据库的连接,防火墙的设置……而修改后端代码的任务是和测试同时进行的。学长提供的后端代码原本是比较完善的,但是由于我们对前端进行的较大的重构,以及我们最初搭建数据库和学长的不尽相同,所以在整个开发流程中,我一直在修改后端代码。
  没有提早设计出文档、队友间缺乏配合是我们存在的最严重的问题。前者的原因不再赘述,在alpha阶段中,我们掌握了android移动开发的基础知识,也思考了许多学霸系统应具备的功能,相信在beta阶段中,会有做出合理的规划。而队员的合作方面,让我感悟最深的是,我们每个人都应尽力朝“全栈”的方向努力,搞后端的至少要粗通前端设计;做UI的不能对servlet通讯机制一无所知。在调bug的时候,我们往往需要从UI入手,到前端的逻辑部分,前端的通讯部分,后端通讯部分,最终到达后端数据库操作部分。因此,我花费了很长时间,了解UI的一些组件的知识,这样才能融会贯通,理解程序的架构。

你可能感兴趣的:(个人阅读作业Week7)