`
yiding_he
  • 浏览: 448114 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论
阅读更多
面子驱动编程?这当然是玩笑话。在经历了文档驱动、进度驱动之后,我又遇上了“面子驱动编程”。

首先声明我其实很喜欢我们公司,否则的话不会从毕业到现在一直呆了四年。但世上没有完美的公司,项目中碰到问题是很自然的。

什么是面子驱动?我也是昨天开会后悟出来的。当时小组长(不怕你笑话,我还在干程序员)问我,我负责的模块,权限方面如何设计的。我说根据用户岗位来判断权限。他问,有没有使用现有的权限数据库表(包含角色和资源那种)?我说没有。又问:怎么配置权限?我说写死的。——我就看得出他脸上的黑线条。于是他要我解释。

我的理由是,用户现有的工作方式基本上不会变化,至少在项目生命周期内不会,客户也是明确的说过不需要那么灵活的配置。我曾经做过一个小项目,那个需要登录才能使用的系统,连用户的增删改查都没有,用户照样用得很好。所以我的原则就是在理解用户现状和需求的前提下去掉所有不必要的功能。

我这个模块,用户权限和职务的划分就是基于岗位的。如果我使用了基于角色的权限方式,那么用户在变更岗位之后还要手动更改角色。否则就会造成混乱。这是不必要的麻烦(自动变更角色?想得美,又不是我负责的)。

组长不这么看。他认为权限的配置是“必须的”。其实我这个模块的需求他又不懂,我问他为什么,他只泛泛的说“这样更灵活嘛”。

“灵活性”不是一个褒义词。灵活性是有代价的。通常情况下,一个系统“很灵活”隐含的意义就是:这个系统很庞大,设计很复杂,代码很晦涩,接手这个系统就是你噩梦的开始。最近买的《实现模式》里的说法就印证了我的原则。

另外,追求“灵活性”实际上就是惧怕变更,越是绞尽脑汁想出一些匪夷所思的配置,就越是说明对变更怕得要死。我见过一个系统的用户资料界面,表单中的元素有用户名、编号、拼音、简称、昵称、移动电话1、移动电话2、移动电话3……四个字:雷死我了。

以上说的这些还不是正题。除了害怕变更以外,追求不必要的灵活性还有一个更隐晦的因素:这可以作为在上级面前吹嘘的本钱。上级很喜欢听到“灵活”、“强大”这样的词(虽然仍不及“进度”重要)。能够哄他开心至少能够带来一点长远的好处。

所以有些设计不是完全由用户需求决定的。需求越模糊,“面子驱动”的迹象就越明显。我刚入行那时候也有一段时间沉溺其中,因为别人这么做,我就觉得理所当然的,也吹牛说这个要做的怎么怎么好。结果当用户测试的时候,才明白自己辛辛苦苦捣鼓出来的这点灵活性在用户眼中连个屁都不值,反倒拖累了后续的需求变更。

“面子驱动”这种现象,我想绝非个别的。国人最好面子,不管做什么事情都会有面子的因素在里面。但是在项目中,最好尽量抵制这种影响,以免带来项目范围不必要的扩大。

------------

我的最后回复:

很多回复仍然在强调那些虚幻的“扩展性”和“前瞻性”,似乎我是个目光短浅的技术人员,从来没考虑过这些问题。实际上我不但想过,做过,而且在这上面吃过很大的亏。

有足够经验的开发人员和架构师都会注意到这一点。下面是 ThoughtWorks 软件架构师 Neal Ford 在“演化架构与突发设计”一文中提到的:

“架构与设计的最后一个全局关注点,我将之称为过度的一般性。Java 世界里似乎有一个弊病:通过尝试使解决方案尽可能一般化来过度设计解决方案。这样做的动机十分明显:如果我们构建许多扩展层,我们稍后可以在其上更轻松地构建更多层。但是,这是一个危险的陷阱。因为一般性将增加熵,所以您将破坏在项目初期中通过有趣的方式演化设计的能力。增加过多灵活性将使对代码库的每一次更改都变得更加复杂。

“当然,您不可以忽略可扩展性。敏捷的移动性在决定如何实现功能时很重要:YAGNI(You Ain't Gonna Need It)。这是避免过度设计简单功能的信条。只实现目前需要的功能,在以后您需要更多功能时,可以再进行添加。我看到过某些 Java 项目为了实现一般性和可扩展性,在架构与设计方面使用了大量折衷,最后导致项目失败。这是个令人感到讽刺的教训,因为本来希望尽可能延长项目的生命周期,结果反而缩短了生命周期。了解如何把握可扩展性与过度设计之间的微妙界限十分困难,而且它是我将反复说到的主题。”


某些项目经理提到扩展性和灵活性之类的概念时,他们完全是将项目本身抛开来谈的。毫不客气的说,他们关注项目对自己的价值大大超过项目对客户的价值。我劝这些人扪心自问一下吧。
分享到:
评论
104 楼 terryh 2009-11-29  
yiding_he 写道
面子驱动编程?这当然是玩笑话。在经历了文档驱动、进度驱动之后,我又遇上了“面子驱动编程”。

首先声明我其实很喜欢我们公司,否则的话不会从毕业到现在一直呆了四年。但世上没有完美的公司,项目中碰到问题是很自然的。

什么是面子驱动?我也是昨天开会后悟出来的。当时小组长(不怕你笑话,我还在干程序员)问我,我负责的模块,权限方面如何设计的。我说根据用户岗位来判断权限。他问,有没有使用现有的权限数据库表(包含角色和资源那种)?我说没有。又问:怎么配置权限?我说写死的。——我就看得出他脸上的黑线条。于是他要我解释。

我的理由是,用户现有的工作方式基本上不会变化,至少在项目生命周期内不会,客户也是明确的说过不需要那么灵活的配置。我曾经做过一个小项目,那个需要登录才能使用的系统,连用户的增删改查都没有,用户照样用得很好。所以我的原则就是在理解用户现状和需求的前提下去掉所有不必要的功能。

我这个模块,用户权限和职务的划分就是基于岗位的。如果我使用了基于角色的权限方式,那么用户在变更岗位之后还要手动更改角色。否则就会造成混乱。这是不必要的麻烦(自动变更角色?想得美,又不是我负责的)。

组长不这么看。他认为权限的配置是“必须的”。其实我这个模块的需求他又不懂,我问他为什么,他只泛泛的说“这样更灵活嘛”。

“灵活性”不是一个褒义词。灵活性是有代价的。通常情况下,一个系统“很灵活”隐含的意义就是:这个系统很庞大,设计很复杂,代码很晦涩,接手这个系统就是你噩梦的开始。最近买的《实现模式》里的说法就印证了我的原则。

另外,追求“灵活性”实际上就是惧怕变更,越是绞尽脑汁想出一些匪夷所思的配置,就越是说明对变更怕得要死。我见过一个系统的用户资料界面,表单中的元素有用户名、编号、拼音、简称、昵称、移动电话1、移动电话2、移动电话3……四个字:雷死我了。

以上说的这些还不是正题。除了害怕变更以外,追求不必要的灵活性还有一个更隐晦的因素:这可以作为在上级面前吹嘘的本钱。上级很喜欢听到“灵活”、“强大”这样的词(虽然仍不及“进度”重要)。能够哄他开心至少能够带来一点长远的好处。

所以有些设计不是完全由用户需求决定的。需求越模糊,“面子驱动”的迹象就越明显。我刚入行那时候也有一段时间沉溺其中,因为别人这么做,我就觉得理所当然的,也吹牛说这个要做的怎么怎么好。结果当用户测试的时候,才明白自己辛辛苦苦捣鼓出来的这点灵活性在用户眼中连个屁都不值,反倒拖累了后续的需求变更。

“面子驱动”这种现象,我想绝非个别的。国人最好面子,不管做什么事情都会有面子的因素在里面。但是在项目中,最好尽量抵制这种影响,以免带来项目范围不必要的扩大。

------------

我的最后回复:

很多回复仍然在强调那些虚幻的“扩展性”和“前瞻性”,似乎我是个目光短浅的技术人员,从来没考虑过这些问题。实际上我不但想过,做过,而且在这上面吃过很大的亏。

有足够经验的开发人员和架构师都会注意到这一点。下面是 ThoughtWorks 软件架构师 Neal Ford 在“演化架构与突发设计”一文中提到的:

“架构与设计的最后一个全局关注点,我将之称为过度的一般性。Java 世界里似乎有一个弊病:通过尝试使解决方案尽可能一般化来过度设计解决方案。这样做的动机十分明显:如果我们构建许多扩展层,我们稍后可以在其上更轻松地构建更多层。但是,这是一个危险的陷阱。因为一般性将增加熵,所以您将破坏在项目初期中通过有趣的方式演化设计的能力。增加过多灵活性将使对代码库的每一次更改都变得更加复杂。

“当然,您不可以忽略可扩展性。敏捷的移动性在决定如何实现功能时很重要:YAGNI(You Ain't Gonna Need It)。这是避免过度设计简单功能的信条。只实现目前需要的功能,在以后您需要更多功能时,可以再进行添加。我看到过某些 Java 项目为了实现一般性和可扩展性,在架构与设计方面使用了大量折衷,最后导致项目失败。这是个令人感到讽刺的教训,因为本来希望尽可能延长项目的生命周期,结果反而缩短了生命周期。了解如何把握可扩展性与过度设计之间的微妙界限十分困难,而且它是我将反复说到的主题。”


某些项目经理提到扩展性和灵活性之类的概念时,他们完全是将项目本身抛开来谈的。毫不客气的说,他们关注项目对自己的价值大大超过项目对客户的价值。我劝这些人扪心自问一下吧。

过渡设计!
103 楼 PetriNet 2009-11-24  
我们的则是香港人驱动编程(头儿都是香港人),呵呵,香港人很自大,不懂技术,又非常喜欢忽悠概念,唉
102 楼 taochenpfj 2009-11-07  
哈哈,你们是小组长的面子,我们公司直接上升到管理级
101 楼 zcq100 2009-10-23  
怎样的设计才既灵活而且又不过度?
100 楼 yiding_he 2009-10-19  
jeff312 写道
yiding_he 写道
jeff312 写道
liusu 写道
看了讨论发现LZ真郁闷, 对牛弹琴嘛

不是有那个境界一说,

看山是山,
看山不是山
然后看山又是山。

Lz一直强调他是在第三层得基础上来讨论的,结果很多人一直劝LZ要看的远一点,要看到第二层去。



事实是,LZ不应该站在他自己的角度上看这个问题,显然你程序员做出来的东西是公司的不是你的(业余时间搞出来的开源项目另说),对产品的评估当然也必须站在公司的角度来做。显然,一个被你写死了的功能对于公司来说是不可接受的,把公司的项目或产品绑架在你个人身上怎么可能被公司接受。


我没那么不负责任吧。难道不是我的我就不管了?你哪里看出来这个东西绑在我身上了?现在我已经跳槽了,那东西交接得好好的,几个月来没人因为设计上的问题找我。


我没说过你是不负责任的人呀,但万一交接不好人家回来找你,你又很负责任,岂不是累死自己?
前面说过,没有看到具体实现,不可能判断到底是小组长过度设计还是LZ写得太死,我只是从小组长的角度来看这个问题,并且认为他的担忧有足够的道理,你可能对自己的设计很有信心,但不能强求所有的人对你那么有信心。
我见过交接做得差的,结果非常非常的糟糕,作为小组长,这种担忧绝不是多余的,你如果已经当上了小组长,很快就会明白了。

要从小组长的角度看问题,那就四个字:用人不疑。你担心可以,你提建议可以;但你想插手,这事情的性质就不一样了。另一方面,“过度的一般性”真的能解决问题吗?在这里个例子里,权限设计同用户工作方式不一致的弊病已经显现出来了,不能再走下去。
99 楼 jeff312 2009-10-19  
yiding_he 写道
jeff312 写道
liusu 写道
看了讨论发现LZ真郁闷, 对牛弹琴嘛

不是有那个境界一说,

看山是山,
看山不是山
然后看山又是山。

Lz一直强调他是在第三层得基础上来讨论的,结果很多人一直劝LZ要看的远一点,要看到第二层去。



事实是,LZ不应该站在他自己的角度上看这个问题,显然你程序员做出来的东西是公司的不是你的(业余时间搞出来的开源项目另说),对产品的评估当然也必须站在公司的角度来做。显然,一个被你写死了的功能对于公司来说是不可接受的,把公司的项目或产品绑架在你个人身上怎么可能被公司接受。


我没那么不负责任吧。难道不是我的我就不管了?你哪里看出来这个东西绑在我身上了?现在我已经跳槽了,那东西交接得好好的,几个月来没人因为设计上的问题找我。


我没说过你是不负责任的人呀,但万一交接不好人家回来找你,你又很负责任,岂不是累死自己?
前面说过,没有看到具体实现,不可能判断到底是小组长过度设计还是LZ写得太死,我只是从小组长的角度来看这个问题,并且认为他的担忧有足够的道理,你可能对自己的设计很有信心,但不能强求所有的人对你那么有信心。
我见过交接做得差的,结果非常非常的糟糕,作为小组长,这种担忧绝不是多余的,你如果已经当上了小组长,很快就会明白了。
98 楼 yiding_he 2009-10-18  
jeff312 写道
liusu 写道
看了讨论发现LZ真郁闷, 对牛弹琴嘛

不是有那个境界一说,

看山是山,
看山不是山
然后看山又是山。

Lz一直强调他是在第三层得基础上来讨论的,结果很多人一直劝LZ要看的远一点,要看到第二层去。



事实是,LZ不应该站在他自己的角度上看这个问题,显然你程序员做出来的东西是公司的不是你的(业余时间搞出来的开源项目另说),对产品的评估当然也必须站在公司的角度来做。显然,一个被你写死了的功能对于公司来说是不可接受的,把公司的项目或产品绑架在你个人身上怎么可能被公司接受。


我没那么不负责任吧。难道不是我的我就不管了?你哪里看出来这个东西绑在我身上了?现在我已经跳槽了,那东西交接得好好的,几个月来没人因为设计上的问题找我。
97 楼 jeff312 2009-10-16  
liusu 写道
看了讨论发现LZ真郁闷, 对牛弹琴嘛

不是有那个境界一说,

看山是山,
看山不是山
然后看山又是山。

Lz一直强调他是在第三层得基础上来讨论的,结果很多人一直劝LZ要看的远一点,要看到第二层去。



事实是,LZ不应该站在他自己的角度上看这个问题,显然你程序员做出来的东西是公司的不是你的(业余时间搞出来的开源项目另说),对产品的评估当然也必须站在公司的角度来做。显然,一个被你写死了的功能对于公司来说是不可接受的,把公司的项目或产品绑架在你个人身上怎么可能被公司接受。
96 楼 songze39 2009-10-15  
我们现在也在做你所说的面子工程,但是还是有必要性的.不同的项目都共用了,能减少很多开发量.
95 楼 liusu 2009-10-15  
看了讨论发现LZ真郁闷, 对牛弹琴嘛

不是有那个境界一说,

看山是山,
看山不是山
然后看山又是山。

Lz一直强调他是在第三层得基础上来讨论的,结果很多人一直劝LZ要看的远一点,要看到第二层去。

94 楼 yiding_he 2009-10-14  
最近又碰到一个项目,不过是一个网站而已,竟然要用到 JBoss ESB
93 楼 Max_1106 2009-10-11  
稍微大点的公司都这样
项目都是做为上面看的
项目在短时间内赶出来了,领导有面子了,这就是绩效啊,说明领导管理有方
说明领导可以在年底多拿点钱
具体实施的程序员类,就累的要吐血了,有的时候一个功能用户根本不会那么使用,费用做出来,做到后面都没办法维护了,真是无语
92 楼 勉勉强强 2009-10-07  
满足需求,但防止镀金。又一个案列~
91 楼 jerry_shen 2009-10-05  
我就不明白了,一个权限系统有这么复杂吗,我丢出去的带权限系统的小东西也都是数据库驱动,带界面和单向加密密码的。真没多少工作量。
90 楼 jeff312 2009-09-30  
说实话,单从LZ的表述上看,很难看出是小组长正确还是LZ正确。不过我是做产品的,想来想去,还是觉得做成可配置较好。

LZ说,“用户现有的工作方式基本上不会变化,至少在项目生命周期内不会,客户也是明确的说过不需要那么灵活的配置”。实际上这是不可能的,你根本无法预测用户的工作方式到底会不会变,用户总是很nasty,千万别以为他说不会变就真的不会变,到时候他真的变了,你们全都要死 —— 换句话说,如果你那时已经走了,你的同事包括那位可能还没走的小组长,全都要死。你写好的这个模块,到那时价值完全是零,所有工作都只能从头再来,而重头再来,意味着你花费不少心思清理掉的bug又都会一个个地跑回来,甚至再带上十个八个新的。

其实说起来,即使用数据表配置权限模块也有粗细之分,刚开始可以不用太复杂字段太多,但大体框架总该有的。

89 楼 poson 2009-06-25  
记得以前写了一个小管理,只有只有几百K。因为文件太小,老大还叫我加点图片进去,让exe文件的体积大一点。。。
88 楼 green_land 2009-06-25  
仔细想想有时情况还真是这样的
87 楼 BaSaRa 2009-04-16  
扩展性是要看项目而言的,太多的扩展性完全没必要,项目就是项目,又不是产品

适合这个工程,做到一定扩展性的就可以了

PS:面子驱动这个名词不错
86 楼 elfmtian 2009-03-31  
没有办法 谁叫我们是社会注意特色国家呢,一个系统搞的维护比应用还大,还冗余,你说能怎么办。用户用的都麻烦。不过灵活性的代价真的很大
85 楼 hepeng421 2009-03-23  
作为一个系统,需要一个比较实用的权限模块是必要的。

相关推荐

    javaeye热点阅读

    此外,文件还涉及到了软件开发和项目管理的话题,如面子驱动编程、创业公司项目管理的挑战等,这些都是开发者职业生涯中不容忽视的重要议题。 总之,JavaEye热点阅读为Java开发者提供了一套全面的知识资源,涵盖了...

    蒋公的面子剧本.doc

    蒋公的面子剧本.doc

    爱普生机械手编程

    另外,用户界面子画面包括菜单栏、工具栏、项目资料管理器、状态窗口等。状态窗口能够显示项目编译状态,系统错误、警告等信息,而状态栏则会显示操作模式、紧急停止状态、安装门状态、错误状态、警告状态、任务运行...

    关于社会心理学研究之“面子”理论

    "面子"是中国人在社会互动中产生的一种典型的社会心理现象,是一个中国本土的社会心理概念。作为中国人特有的文化心理现象,它在日常生活中被人们频繁地使用着,在中国人的人际交往中占有极其重要的地位,是人际交往中最...

    中国面子文化PPT学习教案.pptx

    中国面子文化PPT学习教案.pptx

    人工智能-机器学习-试论面子文化与中国当代广告创作.pdf

    这些课题可能包括但不限于如何运用人工智能和机器学习技术更好地理解和模拟面子文化在广告中的运用,以及如何通过数据驱动的方式优化基于面子文化的广告策略。 总结起来,这篇论文结合了人工智能和机器学习的理论,...

    初中语文文摘人生面子

    【面子】在中国文化中是一个非常独特且复杂的概念,它不仅涉及到个人的脸面,更是社会交往中的一种心理状态和行为表现。中国人强烈的做戏本能与戏剧性的表达方式是面子文化的重要特征,体现在日常生活的各个方面,如...

    高质量C++编程(一本非常不错的书)

    但不管怎样,如果你此时此地你要学习编程,那么你应该多多少少知道点什么叫硬件什么叫软件——反正我不管你懂不懂,为了面子,我很不乐意你问我什么叫硬件什么叫软件——我做在这凳子半个小时了,一直想不出如何给...

    初中语文文摘人生闲谈中国人的“面子

    中国人的“面子”是一个饱含深意且历史悠久的社会文化现象,它贯穿于我们的日常生活,并深深影响着我们的人际关系与社会行为。面子不仅仅是一种社会现象,它更是一种文化传统,从古至今一直影响着中国人的思想与行动...

    社会面子与合作博弈.doc

    【社会面子与合作博弈】 社会面子是人类行为中不可或缺的一部分,尤其在中国文化中,面子具有深远的影响。在社会互动中,面子不仅仅关乎个人的声誉,更是一种社会尊严和公众形象的体现。它不仅影响个体的决策,也...

    中国式家长修改器易语言源码

    4. **事件驱动编程**:面子对决的特殊使用条件表明,修改器可能使用了事件驱动编程。学习者可以从源码中学习如何设置事件监听,以及如何在特定事件发生时执行相应代码。 5. **调试与测试**:源码中提到需要多测试...

    powerbuilder编程经验

    powerbuilder编程经验,回想起最初学习PowerBuilder时的情景,当时国内尚没有任何中文资料,更不要说和谁去交流了。但是,领导安排的活如果不能按时完成,对于刚分配到岗位的大学生,这是多么丢面子的事情啊。硬着...

    领导尤其爱面子.docx

    ### 维护领导面子的重要性及策略 #### 一、引言 在职场中,与领导建立良好的关系对于个人职业发展至关重要。《领导尤其爱面子》这篇文章通过几个具体案例阐述了一个重要观点:领导非常重视自己的面子,下属在日常...

    程序员编程规范

    排版是代码的“面子”,直接影响到阅读者的感受。良好的排版要求程序块、变量和语句清晰区分,如if、while、for等结构应各自独立一行。长语句应分多行书写,遵循80字符限制,操作符之间适当留空,以提高代码的可读性...

    面子书:面子书

    【面子书:Facebook数据抓取工具】 在信息技术领域,数据抓取是一种常用的技术,用于从网站上自动收集大量信息。本项目聚焦于Facebook的数据抓取,这是一个涉及到网页解析、网络请求和数据分析的重要课题。Facebook...

    面子不是人给的,必须自己去争.docx

    ### 面子不是人给的,必须自己去争 #### 自尊与面子的重要性 在当今社会中,尤其是在职场环境中,“面子”被视为一种重要的社交资本。本文探讨了面子的概念及其在个体心理和社会互动中的作用。文章开头引用了一句...

    初中语文文摘人生不怕丢面子

    在探讨如何在初中语文教育中融入生活哲理的背景下,我们来深入分析这样一个文摘:《人生不怕丢面子》。这个故事虽然以轻松幽默的方式展开,但它揭示了一些重要的心理和社会现象,与我们日常生活中的人际交往和自我...

    初中语文文摘人生旅游原是面子活

    旅游与面子文化: 1. 旅游作为一种社会现象,常常被人们用来展示生活水平和个人成就,成为一种“面子活”。人们在谈论自己的旅行经历时,可能会夸大其词,以此来提升个人形象和社会地位。 2. 面子心理在旅游中的体现...

    脚本编程正则表达式详解

    - **{}**:用于精确指定前面子表达式的出现次数。 - **{n}**:匹配确定的n次。 - **{n,}**:至少匹配n次。 - **{n,m}**:最少匹配n次且最多匹配m次。 - **?**:非贪婪匹配,尽可能少地匹配字符。 - **.**:...

    LabView多界面子VI同时运行

    LabView多界面子VI同时运行

Global site tag (gtag.js) - Google Analytics