`
langyu
  • 浏览: 884442 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

优秀程序员还得有个标签:可控性

阅读更多

    读到CSDN的一篇文章《优秀程序员的首要特性:判断力》,作者讲了一个故事来说明作为程序员判断力是如何重要。节省时间,我把故事贴出来:


引用
关于Jack和Dianne的故事

Jack是一个摇滚巨星。Jack喜欢谈论世界上最酷会议中提到的最新发展趋势。他很重视在一个新项目中使用三种以上的新技术。当请他做一个基于互联网的控制后台,用于将烹饪方法与厨具进行匹配。他投入很大的精力开始做此事。最终该后台中用到了Google Protocol Buffers、node.js,具有可扩展性,却很难维护。

Dianne是一个优秀的程序员。最初Dianne是一个Unix 管理员,两年前才开始做Ruby开发。当被要求开发一个同样的系统时,她首先问了以下几个问题:

“预期会有多少厨具?”

“我们希望12个月内卖出500套厨具。”

“需要多长时间出一份报告?”

“大概一小时一次。”

“这网络的可靠性如何?”

“使用WiFi,它很稳定。”

Dianne使用MySQL数据库写了一个RESTful API结点。PostgreSQL可能更适合,但她只懂MySQL。

Dianne采用的这个解决方案可以扩展到1万个用户吗?不能,但这个系统并不需要这样做。Dianne的解决方案很简单、容易理解,具有更好的维护性。Dianne知道它并不是最简洁的解决方案,但她却知道任何更复杂的事都会超出她现在的能力。



    看到这个故事时我的第一反应就是:神呐,让Jack用三年时间维护这个系统吧。

    因为我之前遇到过像Jack这样的同事,碰到人就海吹新技术,且在产品线上的AS程序中频繁使用这些新技术。如果能保证质量也相当好,主要是不能,每次都是别人替他擦PG,久而久之,他就成了产品线上的“DEMO大师”。

    大家以前都听过,产品的生命周期中,维护占着95%的时间,如果在2~3%的开发时间爽了,那么之后很容易陷入无穷无尽的苦难(和生小孩一个道理)。所以Dianne的优秀之处就在于:PostgreSQL可能更适合,但她只懂MySQL。她之前在MySQL上的经验和教训就能传承到新的项目中,对自己所用的技术自信且有能力保证产品质量。我觉着程序员对产品的可控在于:自己能力适当,对常用的基础产品可以掌控(DB,Cache,网络等逻辑架构熟悉,常见bug都能fix),对产品架构扩展有足够能力。不管是同事,客户还是领导都会信任这样的队友,我觉着这就是优秀。

    其次,我很认同Dianne做事风格的一点就是,提前将产品的环境与容量搞清楚。就从我自己还有接触的同事来看,很少有人去管与产品容量规划有关的事,总觉着是Leader应该处理的范畴。如果产品的用户就是一百万,我们就做一百万的设计与规划,有适当余量是可以的,但不要考虑太多当用户是两百万时怎么办的问题。这个话题另说吧。

    我这样说肯定有人质疑说,程序员应该是对技术敏感的,如果都用自己会的技术,对产品和个人发展不利。但程序员对新技术的敏感是与产品的稳妥性相冲突。程序员对技术的前瞻和创新首先应该是在自己的头脑里,不能抹杀这种热情。接着将自己的大胆想法做出原型与试验,证明它可以用在产品线上。在不断地仔细验证之后,才能将程序员的想法用在产品环境上。所以我的总结是:头脑跑在前面,试验新的技术,用最稳妥的技术。Jack使用新的技术没错,但不可控,如果出现问题的话,产品环境被拖累,自己也会很疲惫。

    一己之见,诚请批评
2
4
分享到:
评论
11 楼 langyu 2011-11-22  
wupuyuan 写道
我觉得“可控性”等软性指标,不仅仅归纳在程序员里。而是各行各业的人成为优秀者必备的能力。不同行业的人所需的技能是有交集的。呵呵,难得来踩一下!

呵呵,欢迎璞渊兄来访。可能大家怀疑的地方在于可控对于程序员的创新是不利的。
10 楼 wupuyuan 2011-11-22  
我觉得“可控性”等软性指标,不仅仅归纳在程序员里。而是各行各业的人成为优秀者必备的能力。不同行业的人所需的技能是有交集的。呵呵,难得来踩一下!
9 楼 langyu 2011-11-18  
wangjinpeng 写道
...

谢谢Jinpeng的提点,组内能有做DEMO很快很好的同事,当然是福音,既能提高大家对新技术的敏感度,又能激发团队合作的动力。当然谁都不希望在产品线上做DEMO,说实话我是被这样的经历搞怕了。技术不管新旧,好用就成,但一定得验证,且使用的人得有经验。这种经验来自于之前的开发或运营经历,有继承性。同意你的说法,程序员在想法上不要畏手畏尾,大胆提出,但一定得小心论证。这与对产品线的可控一点不矛盾。Jack缺少经验做出来的东西,只要他不甩屁股丢给别人,应该有他受的,经过很长一段时间后,他还会像当初一样激情么。
8 楼 wangjinpeng 2011-11-18  
你常用的不见得是可靠的, 你没用过的新东西也不见得是不可靠的, 做事情么, 我觉得实事求是做好每一步就好了, 思考-->选型-->讨论-->Demo-->测试-->重构, 稳定是相对的,如果每个步骤都做的很到位,那就可控了,如果做了设计不讨论,写了代码不测试,系统上线不监控, 那在熟悉也是不稳定的...总之我觉得程序员做事情尽量从实际情况去考虑,用不着害怕什么新的旧的,新的合适就用新的, 当然用新的也是有原则的, RC版本, 有社区支持, 有深入问题debug的能力, 这些是基本原则. 当发现系统难于维护,难于扩展, 该重构就重构, 没有魄力咋行...

我就挺欣赏Jack, 有激情, 关注新技术, 能找到将新技术融合进项目的点, 并且考虑扩展性, 而且喜欢酷的东西, 虽然有时候不太合时宜, 他缺的仅仅是经验和一些合适的搭档.

"Demo大师"我想要么是他缺乏耐心浮躁技术能力不够,要么是没有得到team的全力支持,要么就是一开始需求设计就偏离了...team里面有个Demo大师其实还是挺幸福的事情...
7 楼 jiafu1115 2011-11-17  

我觉得分阶段吧:
可能才开始学技术都想当DEMO大师,尝百草,等都有点知道后,才可能淡定地做点事情,哈哈
6 楼 langyu 2011-11-14  
很感谢楼上几位可以这样看
我是实在想看到反对这个观点的同学持有怎样的想法呢
5 楼 ada_li_li 2011-11-14  
曾经也以"demo大师"自居过,因为学东西比别人快,出活儿似乎也比别人快. 不过后来特别头痛维护自己写过的程序,就想扔给别人.

换位思考一下, 如果必须"eat your own dog food"  , 程序员写出的东西可能就会是另外一个思路.
4 楼 houxinyou 2011-11-09  
工作和学习不同,工作要做到稳定,学习要创新。牛逼的技术是学习时用的,当你学的很熟悉的时候才能用到工作中。
就像选择电脑,服务器,最重要的是稳定!哪怕慢一些也好。每小时能稳定的处理10个任务要比的每小时处理1~20个不定任务要好。
3 楼 langyu 2011-11-08  
wanghuazhongzju 写道

其实我觉得主要是看问题的角度不一样吧。程序员都喜欢从技术的角度,要用最牛逼的技术来做一件事情。而产品经理关心的就是产品的实用性,他才不管你用什么技术做,只要产品能做出来,符合现阶段需求就行了。。

呵呵,是有一段时间没更新了。牛逼的技术也会带来很“牛逼”的bug,这可不是你能不能解决bug所能控制的。当别人知道你对你用的技术了解的不透,那谁信任你?其实就是说,我们在用自己的牛逼技术透支上司的信任与客户的忍耐。

我相信没人一直想做coding吧,不管是站在架构师或项目经理的角度,项目是否高可靠性是不可避免的事。这里的高可靠一是指项目本身质量,二是程序员本身,你离职了谁来代替你维护呢,你觉着呢?
2 楼 wanghuazhongzju 2011-11-08  
呵呵。。denny,好久没更新博客了吧。。

其实我觉得主要是看问题的角度不一样吧。程序员都喜欢从技术的角度,要用最牛逼的技术来做一件事情。而产品经理关心的就是产品的实用性,他才不管你用什么技术做,只要产品能做出来,符合现阶段需求就行了。。

所以程序员应该不要不局限于技术层面的东西,再牛逼的技术都要以实用为主。。。
1 楼 langyu 2011-11-08  
请在点踩之前把你的意见留下,不然这算什么

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    测试培训教材

    测试管理与QualityCenter培训手册 1、测试流程管理、测试度量方法 按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。...设置“Sign-On User Name”的时间依赖性: ...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包7

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包9

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包101

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    Java资源包01

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    Struts原理、开发及项目实施

    一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是...

    Tcl_TK编程权威指南pdf

    我一直使自己在很大程度上保持着一个Tcl程序员的角色,而我们工作组中的其他人员则埋头于Tcl本身的C语言实现。我创建的应用程序有HTML编辑器、EMAIL比用户接口程序、Web服务器以及用户数据库,我们的商务应用就建立...

Global site tag (gtag.js) - Google Analytics