He's Pirate.
扯淡
敏捷的误区
四 26th
人和交互重于过程和工具。
即便你的团队都是一等一的人才,有着超强的技术和超强的表达力。但是如果过程是一团混乱,并且还没有趁手的工具。那一切依然是扯淡。所谓关注人这个核心生产力是对的,但不是说其他就不重要。
可以工作的软件重于求全责备的文档。
相信很多人鼓吹敏捷就是为了以这条来遮羞。写出同样垃圾的软件,而且还能逃避写清晰文档的责任。多么美好的事情啊。课要知道,真正的程序员所追求的不应该只是可以工作,而是要那种可以工作的非常好的软件,比如架构简单,代码整洁。同时,在你代码无法说明问题的时候,依然需要编写完备适时的文档,来提高维护性。
客户合作重于合同谈判。
这点我不懂,但是我想如果合同都是模糊不清责任不明的,将来出现分歧应该会更头痛吧,我相信,客户总有不高兴的时候,无论你怎么合作。
随时应对变化重于循规蹈矩。
又是看似很合理但很傻逼的一句话,如果你的计划是确实可行,考虑周全的。那么我真得不相信你上哪里来那么多变化,需要不停的应对,即便是软件这个所谓变化频繁的行业。这句话是头脑不清晰,做事不周全的人最好使用的借口。
我依然如同03年刚接触敏捷时候一样相信这宣言本身是真诚的确实有重大意义的,但是这么多年过去了,看着周围各种的绕梁小丑群魔乱舞的,让我本能的已经对‘敏捷’这个词产生了条件反射性的恶心。所以才产生了上面这些诡辩,真的。你们这些的所谓的‘敏捷专家’、‘敏捷布道者’让我看来跟坨狗屎好不了哪去。真比忽悠,宁亚还真不一定是我对手。
关于强迫症滴碎碎念
三 29th
刚从Google Reader中看到了Kevin最新的日志(链接),发现Kevin又被强迫症所害。想起自己一年多前,也是被强迫症搞得心力疲惫。所以很想写点什么。
那应该是07年年底的时候,我加入FreeWheel有了个3个月左右的时间。上班没多久,我就开始负责构建系统中报表部分的展现模块。因为是start-up,因为是从头开始构建一个新的系统。对于我来说,很是兴奋,很想大干一场。可现实总是出现不如意滴,比如兄弟团队符合给我提供数据的同事那边经常需要调整数据库schema,调整查询方式,然后还是有PM这边断断续续提出来的需求。慢慢的,自个身上的锐气就变成了怨气。因为总是出现很多新的变化,使得我最初所设计的小框架无法轻易支持或者说扩展。后果就是代码结构越来越混乱,伴随着的就是代码质量的下降。那会尝尝对着IDE发呆,因为不知道明天有会产生怎样的变动。过了元旦,系统上线了。各方面开始慢慢稳定下来,我窃喜以为终于有个机会可以好好收拾自己的代码了。于是我又怀着极大滴热情开始着手重构的事宜。我心想,前阵子各种对于理清代码结构或者提升架构的点子终于可以好好发挥了。结果进行了一两个礼拜,中间换了好几种思路,都觉得没有一个最perfect的状态,总有各种不满,然后导致我严重怀疑自己。于是在JavaEye上发了个帖子发泄了下(链接)。
强迫症的状态是越来越明显,我开始每天的失眠,每天的不停的在IDE里面敲code,实现我的新想法,然后最后又开始自我否定,全部删掉。坦白讲,那会有点崩溃的。因为本来觉得代码烂是别人的问题,比如需求变动,接口变动。结果等到各方面都稳定的时候,发现我还是不能写出让自己觉得舒坦的code。所以一下子就怀疑自己了。我那会不停的买书,翻书,各种讲设计,讲模式,讲重构的,我挨个的从中寻找我的解药,可惜最后还是无解。知道有一天在SMN上和robbin以及gigix的聊天使我一下来醒过来了。
robbin告诉我,代码分什么好坏,然后拿着JavaEye举例子,说如果现在给我看JE的源码也许我照样觉得很丑陋。但是就是这份也许很多程序员觉得很垃圾的代码,却支撑起了一个业界专业的一个网站,让很多人在上面交流技术,经验。这就是那份代码的价值,即便也许会有人觉得他很丑,但是他的价值是巨大的。
robbin的话一针见血,让我一下子就翻过劲儿来了。而gigix说的则是更好。嗯,其实他没怎么说我应该如何解决我的困惑。只是把他和他同事曾经的一段聊天记录发给了我看看。记录里,他们在讨论代码的价值,某位高人是这么讲,代码的价值是通过客户来实现的,如果你的项目使得客户获得了更大的收益,那么你这个项目的代码就是有价值的。而做不到这一点,你代码写的在天花乱坠其实也没什么用处。譬如重构,如果重构是为了减轻客户维护的成本,或者减轻系统某方面的开销,那么做这个重构就是有价值,如果重构只是为了程序员自己心里是否舒坦,那么这个是没什么意义的。至少浪费客户的时间与金钱。
gigix和他同事都是做咨询滴,所以看待问题就是看代码对于客户是否能产生商业价值。而对于自己公司的产品,我想更是应该这么要求。
强迫症很快好了起来,我不再每天对着IDE纠结。而是不停以是否为公司代码的商业价值去编码,去重构,去设计。我再也不只考虑自个是否舒服了。因为只考虑自个看着是否舒服不符合公司的利益。如果只为满足自己的喜好,那下班回家做opensource去,在公司为公司写的代码,衡量他的唯一标准就是以公司的利益。无他……
再往后,顺带着自己又多了些变化,特别是和同事争论或者讨论的时候,我只留心对于公司是否有好处的东西,如果你只是说因为某某书上说要这样那样,而要求我这样那样,对不起,我没兴趣。而如果你告诉我,你是从公司利益角度出发,来思考,觉得某些地方应该有change之类的,那么我会非常乐意倾听与讨论。
至此,关于代码的强迫症在我身上已经完全不存在了,直到今天,我依然每天都是以比较良好的心态去写着代码,改着代码。再也没有怀疑过自己。当然,我还是尽量把代码写的让自己舒服的,但是如果某些原因导致我怎么也没办法写出让自己看着特爽的代码,我也不会睡不好。因为我知道,如果某些地方实在复杂,那么就很难找到完美的状态。而抱着实用的心态去解决问题,才能产生最大的价值。
回忆到此结束。随着我对于代码的心结揭开,其他强迫症迹象也都纷纷好转。终于又过上的幸福快乐滴生活。哈哈。。。当然,这段经历对我来说,实在影响很大,我后来也对强迫症这种行为产生的兴趣,并且思考很多。下面是一些碎碎念。
我觉得强迫症一般都会发生在完美主义的人身上,因为只有一个人特别要求完美,才会对不够完美的地方玩命的思考,玩命的拧巴。如果说是一个大大咧咧的人,他很难对一项事物具有太大的执着。
所以像天天强迫自己每天要看多少书,写多少code的人来说,他肯定是希望他的编码技艺是最好的,是不会犯错滴。
一天洗手20次的人,肯定是对自己有强烈的洁癖,从不想让手有不干净的细菌。
总之,他强迫症所在的地方,就是他潜意识里最希望自己在那方面完美的地方。
而解决办法,其实就是很简单的,从另外的角度思考问题,也许每天只是强迫看过多书与编过多的code,并不一定能真正得到非常大的提高。反而是自己丧失了灵性。而每天洗手太多,也许并不能把手洗的更干净,反而造成脱皮等等更不好的情况发生。
这是第一点,先认识到强迫症所在并不一定有助于解决自己想变得完美的那个方面,然后再想想如何真正的去改善。比如也许更多的和高手切磋会更加显著的提高编码技艺,比如我如果勤剪指甲会使得手自然携带细菌数量就会减少。
当然,方向很重要,比如我当初就是方向错误,只顾着自己的审美观,而没去考虑代码真正的商业价值。所以还有一点就是一定要认识到自己强迫症的目标是否是一个伪命题。如果是那么立刻收手啦。人生短暂,应该把时光浪费在美好滴事物上滴。
嗯,俺滴碎碎念说完了,review了一遍,感觉也许都没说到点,不过也无所谓啦,强迫症本来就是一种自我拧巴的过程,自我累的时候,大脑自然就会出来调停,告诉你,要休息了,不要内战啦。
最后祝福Kevin速度摆脱强迫症滴干扰:D
没头脑
一 5th
早上6点钟睡不着,起来开始发呆。
看看JIRA上面还有一个ticket,而一会早上还有例会,产品的最新版也马上要release。无形的压力让我很不爽。
其实本来这个ticket昨天可以做完的,但我觉得最近干的活有点糙,所以希望能至少在代码层改进下,所以昨天又思考了下没做。
其实软件开发,总是这样子,在需求的迭代和变更中,开发人员慢慢迷失了自己,导致的后果就是代码越来越ugly,越来越不和谐。而被大多数人鼓吹的Agile与重构其实也并不是银弹。造成代码丑陋的问题也与Agile和重构没太大关系,最主要的还是需求变更导致早期为原来需求设计的架构不适应新的需求。而往往时间又仓促,结果造成代码拧巴。真的就是这样,别提什么方法论。那都是扯淡的,时间摆着,需求变化在那摆着,你丫再拥抱也就那样子,本质上依然有着矛盾,这就是个无解的本质问题。
从业这几年遇见的信仰问题太多了,至今还总能碰上纠结于是用LINUX还是WIN的人,并且总有一票没头脑鼓吹用Lin比Windows爽,这尼玛有意义么?操作系统的选择是提高生产力的,跟别的没啥关系,而像Agile,REST这些buzzword是为了提高高质量代码生产率。 这些都是过程,流程,都是为了最终的目的服务的。而就有很多人在寻求真理的过程中迷失了,忘记了自己最终的目的,而纠结于形式,于是有了WIN/LIN之争,有了JAVA VS C#, JAVA VS RAILS, VIM VS EMACS这种脑残对比。
我曾经也迷失过,醒过来劲发现傻逼后,就开始苦口婆心的劝着很多人,最后发现效果很差。即便有人回过劲了也基本是自个悟出来的,不是我点醒的。搞得现在人也淡薄了,他傻随他傻去吧。总有开窍那一天。
阿门,上帝保佑吃饱了饭不饿的人们。
程序员就是要写出有价值的代码,你在公司就是写对公司有用的代码,在家就是写让自个舒坦的代码。这跟特定一定要有XX操作系统,XX IDE,XX语言没有一毛钱关系。完全就是看自个喜好,想怎么搞就怎么搞。在这上面没有绝对的真理。适合你的就是你的真理,但也就相对于你。
近期评论