如果你读过软件工程相关的书籍,那么你一定知道,在需求分析阶段所出现的问题如果遗留到了开发的后期阶段,那么为了修复这类错误,在开发后期将要花费比需求分析阶段高出好几倍的努力,这显然是一个真相!但是根据我的经验,让我们的开发团队最为痛苦的并不是因为需求错误(或变化)所导致的设计更改所引起的,而是不良设计所导致的!这是另一个真相!
往往,如果一个软件项目在需求方面出了问题,那么无一例外的需要直接更改设计,且最终都能得到解决。这是因为,功能不满足要求是很容易被客户发现的,而且,公司的管理层也很容易地知道出现了问题。但是,与之不同的是,如果我们的产品在功能上达到了要求,但设计却并不尽人意,且这种不尽人意造成了产品的维护非常的困难,大有“掀了马桶盖却导致楼塌了”之势,对于这种问题管理层(甚至是身在其中的工程师)有时表现得视而不见或麻木!不少项目,由于设计不当从而造成出现大量的加班加点,却于事无补,毫无招架的被“黑洞”给吞噬了。我认为,在软件工程这类书中应当有专门的章节用于阐述软件设计的重要性。
什么是软件设计,在我看来软件设计是采用编程或脚本语言优雅的表达并解决问题的一门科学和艺术,这里所说的问题可以理解成需求。即然有艺术的成份那就存在一定的欣赏问题,并不是每一个从业人员都能体会到这种艺术,只有当我们达到了一定的层次且形成了自己的设计思想和准则时,才能体会到这种艺术到底是“什么模样”。好的设计能让我们相对(甚至是很)方便的解决新的需求问题。而要使得自己能欣赏这门艺术,需要我们不段的修练,包括模仿别人好的设计、思考、实践以及创新。这一切很重要的前提是,我们热爱变化!
那为什么会出现对不良设计所产生的这类劳命伤财的问题视而不见或麻木呢?其一,让这类问题浮出水面往往意味着我们承认自己犯了错误或无能。此时我们的自尊心会告诉我们“不能承认”,如果这样大家只能继续挣扎于现状。对于这种情形,我想我们应当冷静的思考并做出一个拥有更好未来的决策。思考可以包括:1)承认并解决这类问题能为我们(别忘了还有团队)的将来带来好处吗?好处是什么?2)能减少加班从而提升工程师的生活质量吗?3)能从中得到提高吗?等等。如果你是一个决策者,那么试着站在工程师的角度去看问题,这有利于找到答案。站在工程师的角度其实就是站在自己的角度,这一点很难让人明白。当然,做出不明智的决策意味着与自己的短期个人利益是相冲突的。其二,真正能领会设计的重要性的工程师并不多,甚至很少。理解设计的重要性比理解业务逻辑更加的难,到现在为止,我没有看到哪一个软件产品因为理解不了业务逻辑而做不出来,顶多可能就是犯几个“小错”而已。可是对于设计的重要性不理解,这,大有人在。其结果就是看不出问题症结所在,而认为“应用就是有这么复杂”。其三,面对设计问题除了理解问题出在哪以及如何解决或改进它之外,更要有改变的激情,要有追求长期利益的勇气。我们能找出很多很多的理由说,现在不是改变的时候,但如果你想改变,现在总是适时的。改变不要指望总是天翻地覆,而是可以有战略地潜移默化。最后,我们应当明白犯错是构建卓越产品的必由之路。能力是在犯错中获取的,是经验积累的有效方法,从犯错中吸取教训并将之在团队中沉淀下来,有助于打造一个出色的团队,进而打造出色的产品。勇于面对和解决问题往往意味着我们又前进了一步,反之,让“黑洞”在那变大,不但我们不能成长,还有可能被吞噬,更会打击我们的自信。别等待下一次改变的机会,因为下一次还会有“我们无法抗拒”的其它因素!
不良设计往往就出自我们自己之手,也就是说明天的痛苦是我们今天亲手造就的,现在我们该做什么?熬?还是提高并改变?我们一直拥有改变将来的机会!
往往,如果一个软件项目在需求方面出了问题,那么无一例外的需要直接更改设计,且最终都能得到解决。这是因为,功能不满足要求是很容易被客户发现的,而且,公司的管理层也很容易地知道出现了问题。但是,与之不同的是,如果我们的产品在功能上达到了要求,但设计却并不尽人意,且这种不尽人意造成了产品的维护非常的困难,大有“掀了马桶盖却导致楼塌了”之势,对于这种问题管理层(甚至是身在其中的工程师)有时表现得视而不见或麻木!不少项目,由于设计不当从而造成出现大量的加班加点,却于事无补,毫无招架的被“黑洞”给吞噬了。我认为,在软件工程这类书中应当有专门的章节用于阐述软件设计的重要性。
什么是软件设计,在我看来软件设计是采用编程或脚本语言优雅的表达并解决问题的一门科学和艺术,这里所说的问题可以理解成需求。即然有艺术的成份那就存在一定的欣赏问题,并不是每一个从业人员都能体会到这种艺术,只有当我们达到了一定的层次且形成了自己的设计思想和准则时,才能体会到这种艺术到底是“什么模样”。好的设计能让我们相对(甚至是很)方便的解决新的需求问题。而要使得自己能欣赏这门艺术,需要我们不段的修练,包括模仿别人好的设计、思考、实践以及创新。这一切很重要的前提是,我们热爱变化!
那为什么会出现对不良设计所产生的这类劳命伤财的问题视而不见或麻木呢?其一,让这类问题浮出水面往往意味着我们承认自己犯了错误或无能。此时我们的自尊心会告诉我们“不能承认”,如果这样大家只能继续挣扎于现状。对于这种情形,我想我们应当冷静的思考并做出一个拥有更好未来的决策。思考可以包括:1)承认并解决这类问题能为我们(别忘了还有团队)的将来带来好处吗?好处是什么?2)能减少加班从而提升工程师的生活质量吗?3)能从中得到提高吗?等等。如果你是一个决策者,那么试着站在工程师的角度去看问题,这有利于找到答案。站在工程师的角度其实就是站在自己的角度,这一点很难让人明白。当然,做出不明智的决策意味着与自己的短期个人利益是相冲突的。其二,真正能领会设计的重要性的工程师并不多,甚至很少。理解设计的重要性比理解业务逻辑更加的难,到现在为止,我没有看到哪一个软件产品因为理解不了业务逻辑而做不出来,顶多可能就是犯几个“小错”而已。可是对于设计的重要性不理解,这,大有人在。其结果就是看不出问题症结所在,而认为“应用就是有这么复杂”。其三,面对设计问题除了理解问题出在哪以及如何解决或改进它之外,更要有改变的激情,要有追求长期利益的勇气。我们能找出很多很多的理由说,现在不是改变的时候,但如果你想改变,现在总是适时的。改变不要指望总是天翻地覆,而是可以有战略地潜移默化。最后,我们应当明白犯错是构建卓越产品的必由之路。能力是在犯错中获取的,是经验积累的有效方法,从犯错中吸取教训并将之在团队中沉淀下来,有助于打造一个出色的团队,进而打造出色的产品。勇于面对和解决问题往往意味着我们又前进了一步,反之,让“黑洞”在那变大,不但我们不能成长,还有可能被吞噬,更会打击我们的自信。别等待下一次改变的机会,因为下一次还会有“我们无法抗拒”的其它因素!
不良设计往往就出自我们自己之手,也就是说明天的痛苦是我们今天亲手造就的,现在我们该做什么?熬?还是提高并改变?我们一直拥有改变将来的机会!