《构建之法》——构建团队开发的基本要领(构建之法阅读笔记02)
就个人而言,我希望自己能成为一个出色的工程师甚至一个软件设计师,希望拥有过人的编程能力、软件设计能力和团队领导能力。随着学习的不断深入,我领会到作为个人的局限性,团队的重要性,我所应该做的更应该是培养自己的角色扮演能力。团队里面任劳任怨的苦力——马这一角色很重要,而能言善辩、能指明方向的精明人——鹦鹉这一角色也很重要,鹦鹉的开发能力肯定不如马,单靠马也成不了一个团队。如何分清自己的角色是很重要的事,而如何成为角色中的主角同样也是进步的目标之一。软件工程的恒久课题之一,个人的培养与团队的组成,正是我所希望通过《构建之法》学到的重要内容。
一个软件工程师的养成
我常常想知道,除了知识储备之外,高级工程师的闪光点还有哪些,在我的幻想中,高级工程师往往独领风骚,。书中开篇就打消了我的幻想——高级工程师和普通工程师在表面上没什么区别,都是在办公室敲代码,只不过整个团队都期待着这位大师的出手,因为这位大师的处理问题、解决问题的能力是如此出色,尽管平常该如何还是如何,团体并不是由这位工程师带领的,除非这位是个举世无双的天才,否则团队没了这位大师并不会失去存在的意义,最终项总会完成的。也不用期待有位大师的参与,代码会变得多么优美,多么高效,能做到这些的只有团队。所以,我从书中学到的是如何自我评估并且学习我应有的能力而不是技术。
“没有人能在学校掌握将来所用到的所有知识”,正如章节技术的反面所描述的,不要想着马上像一位顶尖人物一样做事,这只会使自己陷入恐慌。我们需要学习的是能力,要做的是实践,从最基本的实践开始。应当学习的能力 包括累积知识的能力、增长见识的能力、软件设计思想、软件工程思想、自我管理能力、表达交流能力、合作能力,这些都是不可或缺的能力,当然这些都是目标,一个人生今后的发展方向,也就是无论我从事的行业是什么,这些都是使我受益的能力。至于实践,其实我现在在做的,对我了解的、看见的、学会的进行总结,不过我做的也确实不好,对于总结这些事总是进行拖欠。
实践也往往不是做了就好的事,进行实践的方式、总结实验的方式才是比较重要的事,如果我完成一个项目不需要框架,那我再进行类似项目时为什么不尝试使用框架呢?我在本学期课堂上学会了PHP语言,然后在进行大作业之前我学习了Yii2这个比较高级的PHP框架,所以我决定在进行大作业——完成一个网站的编写时运用框架的知识。就目前而言十分顺利,我自己编写了一个小框架,尽管不值得夸耀。就这个过程里,我学会了MCV形式的框架如何搭建,虽然在上学期已经有推荐学习,但如此且切身的体会还是很难得的。
另外,我还有很多需要去实践,就书中所写的,我没体会过编写一个具有拓展性的系统,没有体会过根据用户需求来设计系统,没有体会过尝试编程的各类玩法。就我目前,还远远不够。
一个团队成员的发展
单人乐队是个神奇的存在,一个人完成一次出色的演奏。这个概念放软件工程里就是全栈工程师这个概念,但一般而言如果一个程序员包揽了大部分工作就可以被叫成全栈了。不会有现代项目仅需要一个人就能完成,有也十分少见了。但仍然有类似车库开发的最小合作的软件,两个人就能完成开发,但如此仍有很多需要注意的地方。
就像前面提到的大作业,这个作业其实是结对开发,我的一个错误就是忽视了队友的学习工作,对他而言学习我的开发模式只是浪费时间,所以最终我只做了一个半吊子的框架,浮于表层。这就是不注重结对开发的结果。
而对于团队来说,我体会更深的是选择一个适合自己的团队。团队水平太低直接拉低了自己的效率。书中介绍的需对团队模式都是高效、目标一致的,就算像官僚团队这样的模式应用好了也有着巨大的动力。团队不是一群乌合之众,也不是马拉火车,团队应该有自己的特点和相同的利益目标,由此才能做到各自分工协作。
书本介绍了一种敏捷开发模式,将开发时间缩短,增加沟通交流的机会,增强自我管理。敏捷开发的流程就像豹子一样,把致胜点把握在一段短时间内,,在这段短时间里面快速冲刺,但在这之前卯足了劲,充分做好审题工作,对项目胸有成竹,而且在开发之后有充分的机会进行代码复查以及测试,并且长期进行代码维护。这种模式适用于容忍出错、需求不断更新的开发项目,比如开发个网站,这正是这个模式的优势所在。我们正好经历了一次敏捷开发流程,尽管因为学习时间不充足开发断断续续的,但冲刺的时候,我们每天都能看见自己的不断进步,不断将产品的轮廓显现出来,这种体验是很棒的。
就现在而言,我们不能很好的驾驭这种敏捷开发模式,期待将来有所成长的时候我能前车熟路吧。