小强怎样练成——读《现代软件工程——构建之法》第三章有感

小强怎样练成

————读《现代软件工程——构建之法》第三章有感

一、知道自己吃几碗干饭

  先秦时期的“革命家”告诉我们“知人者智,自知者明”,“自知之明”是一种美德,即便是老得“掉渣”的思想,直到今天依然有用。

  对于软件工程师来说,这种能力尤为重要。我们与生俱来,有着一种“盲目”性,身处职场或是课堂,看着他人升职加薪得高分,心里的痒痒肉又开始“骚”起来。

  然而,你摸摸自己胸口的肉,“你良心不会痛”吗?如果说“水平”分成100分,“大牛”95分,那么问问自己到“70分”了吗?

  然而为了明白“自己吃几碗干饭”我们就需要一把衡量自己的“尺子”。

二、嘴好使就行

  “软件开发流程”是我们在前两章中,经常会接触到一个名词,简言之就是软件开发者将开发的相关技术和过程统一到体系中的工作过程。此“过程”是“有序”的,但却并非是“无争论”的,“少马爷”说“抬杠长姿势”也就是这个道理。

  为什么呢?

  理由很简单,不同角色的考虑范畴是不同的,有人的地方就有“江湖”,有江湖的地方就有“冲突”。然而好的团队就是尽量释放积极方面(做好自己,说服别人),同时避免消极方面(因为冲突产生的消极、抵触情绪等)。

  那么什么才是“包治百病”的“老中医”呢?其实很简单,就是“唠”。

  说的书面一点就是“沟通”、“交流”2

  作为一名ICIndividual Contributor),交流的作用2有如下:

  1.通过“唠嗑”,理解问题、需求或任务。

    就像《猩球崛起3》里反派上校说的一样,上帝赋予人类区别于禽兽的表征就是“Speak”,开发者通过“交流”了解用户的需求。

  2.提出解决方法和工作量。

    对于没有硬性规定的工作,在开始时期,任务都是“润物细无声”的存在于双方的脑中,需要通过不断的“沟通”将抽象内容具体化。

  3.与相关角色交流解决问题的提案,决定一个可行方案。

  4.执行,把想法“代码化”,同时验证方案“可行性”。

  5.与他人合作,改错。

    “一人计短,三人计长”,在实际问题中,我们总会遇到这样那样的问题,很多时候,一个人很难把所有问题掌握清楚,于是乎,开发中我们也应该具备“圆桌骑士”精神,凡事商量着来。

  6.对发布的结果,进行负责。

    对于已经发布的活儿,需要不断的“嘴对付”,对于提出的问题需要进行“解答”。

三、大招套装(衡量水平)

  哲学喜欢以辩证的方式看待问题,同样衡量一个软件开发者的标准也不可能是“一锤子买卖”。现在,由贫僧教施主两个大招2

  第一招,针对成长的标准

  1.积累软件开发的相关基础知识,增强内力。

    《射雕英雄传》里,郭大侠最喜欢的招就是“飞龙在天”,因为这是整套“降龙十八掌”的第一招和基础,只有基础打牢,才能在更高层次上“游刃有余”。正所谓“重剑无锋,大巧不工”。

  2.积累问题领域的知识和经验。

    然而,再扎实的“基础”也需要一定的实际问题加以验证和实践。如果学会了绝世武功,只知道直着打,不知道“变化”,那么学就不如不学,然而如何学?学的就是“经验”,在实践中,巧练本领,“纸上得来终觉浅,觉知此事需躬行”。

  3.对通用的软件设计思想和软件工程思想的理解。

    什么样的知识才是属于自己的?“师傅领进门,修行在个人”,就像叶问的拳法就和陈华顺先生(咏春拳大师)的手法一模一样?领悟、变化,从而出奇制胜。

  4.提升职业技能(区别于技术技能)

    其包括:自我管理能力,表达和交流能力,合作能力,保质保量完成任务执行力

  5.实际成果

    公开的实际项目是否的道理现实的成效?

  第二招,针对开发工作量和质量

  1.项目/任务的大小 一般通过行数以及功能点数进行标记

  2.花费时间 对于目标项目的花费的时间

  3.质量如何,两种途径

    1)交付测试人员

    2)交付客户

      其中,re-work只表明开发过程中所花费的时间,re-work的多寡并不和最终质量成正比。

  4.是否按时交付

    按时交货是针对于答应客户的承诺来说的,“君子当择言而说,以信立言”,这样客户才更愿意与开发者团队形成较为长期的合作关系。

  四、低级玩家的起跑线

    团队的软件流程(TSP)对于成员的要求有2

    1.交流

    2.说到做到

      人类需要为自己的言行负责,这样才有人愿意与某个人形成一种相互信赖的关系。

    3.接受团队赋予角色并且按角色要求工作

      就像马克思所说,只有人类接受并且按照“社会分工”进行全力以赴的工作,社会才能向前发展。

    4.全力投入团队活动  

    5.按照团队的流程工作

    6.准备

    7.理性的工作

      “冲动是魔鬼,可乐是祸水”,凡是试图将所有问题“一次性”完美解决的人或者行为都是不可靠的。

  五、你以为你以为的就是你以为的吗

    软件的模块之间,存在各种复杂的依赖关系。不可见性以及易变性导致软件很难清楚定义,使得软件不易维护和修复。

  主要问题包括2

    1.分析麻痹

    2.不分主次,想解决所有依赖问题

    3.过早优化

    4.过早扩大化/泛化  

  这些问题的来源都在于“不知道自己吃几碗干饭”,哲学里,反复强调“主要矛盾与次要矛盾”之间的关系,凡是不分主次,“眉毛胡子一把抓”必然不会长久。

  软件工程的特点:模块化,抽象,总顶向下,逐步求精1。想要将软件开发“一蹴而就”本身就是不可取的。开发过程的实质就是将大问题根据边界进行拆分,划分成小问题的过程。只有将每个子问题都解决,其问题的集合才能得到真正的解决。

  六、意气用事还是另有所图

  其实,软件过程的内容与其说是一门技术更像是一门方法论,这种思维应该是凌驾于各种知识之上的一种处理问题以及解决实际问题的能力。人类从“呱呱坠地”开始就是开始学习各种技能,而将技能“巧妙”运用出来,这就是人类区别于“低等动物”的关键。

而软件工程就是这样一门学科,他的难度应该不低于基础学科,然而每年的国内开始学习这门课程的学生却呈现出“逐年上升”的趋势,他们真正懂得这门课程的重要性吗?依我看来,非也。

  多数人投身于此并非主动,或者更多是一种迫于形势的被动(比如服从调剂、就业压力),然而“既来之,则安之”,“行行出状元”当每一个学子抱着一颗“敬畏”“信仰”的心情,深入学习,我觉得应该是“学有所用”的,从而达到“学以致用”的目的。

以上6点,就是本人对于第三章内容的大致总结的读后感,做一个有心人,学会总结,才能逐渐成为一个“小强”,小强不光是“技术”上的而更应该做“遇到困难的小强”。

 

参考文献

1】张海藩 吕云翔 《软件工程(第四版)》 2013.08.01 人民邮电出版社

2】邹欣 《现代软件工程-构建之法(第三版)》 2017.03 人民邮电出版社

原文地址:https://www.cnblogs.com/LiYuxuan1104/p/LeeYuxuan04.html