`
langyu
  • 浏览: 888211 次
  • 性别: 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  
请在点踩之前把你的意见留下,不然这算什么

相关推荐

    近100个优秀Java程序员的编程源码

    【标题】"近100个优秀Java程序员的编程源码"揭示了这个压缩包包含的是Java编程领域的高质量代码示例。这些源码是来自经验丰富的Java开发者的实践成果,可以作为学习和参考的宝贵资源。Java作为一种广泛使用的面向...

    如何成为一个优秀的JSP 程序员下载

    标题“如何成为一个优秀的JSP程序员下载”暗示了我们即将探讨的是关于JSP编程技术的提升和专业发展路径。描述中的重复内容并没有提供额外信息,但可以理解为强调成为优秀JSP程序员的重要性。 **标签解析** 1. **...

    如何成为一个优秀的JSP 程序员

    要成为一名优秀的JSP程序员,需要掌握一系列技能和知识,这将涉及到编程基础、Web开发框架、数据库交互以及最佳实践等多个方面。下面,我们将详细探讨如何通过学习和实践来提升自己的JSP开发能力。 1. **Java基础...

    2021最新Java程序员面试题

    在当前的IT行业中,Java程序员面试已经逐步升级为考察应聘者对多个技术栈的综合理解和应用能力。以下内容根据提供的文件信息整理出的Java程序员面试知识点: 1. MyBatis框架 - MyBatis定义:MyBatis是一个支持定制...

    程序员简历模板单页单色风格(优秀毕业生)46.zip

    这个模板特别强调了单页和单色的设计风格,旨在突出专业性和简洁性,适合那些刚毕业或者有一定经验的优秀程序员用来展示自己的技能和成就。 【描述】:“程序员简历模板单页单色风格(优秀毕业生)46.zip”的描述简洁...

    如何成为优秀的JSP 程序员

    要成为一位优秀的JSP程序员,需要掌握一系列关键技能和知识。以下将详细阐述成为优秀JSP程序员所需掌握的核心要点。 1. **基础理论**: - **Java语言**:JSP是基于Java的,所以扎实的Java基础知识是必不可少的,...

    注重实效的程序员.pdf

    综上所述,《注重实效的程序员》这本书不仅涵盖了编程技能本身,还涉及到了软件工程实践、技术栈选择与学习路径规划等多个方面,旨在全方位地帮助读者成为具备实战经验且能够应对未来挑战的优秀程序员。通过阅读本书...

    如何成为优秀的JSP程序员

    4. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL提供了许多预定义的标签,可简化JSP页面,避免过多的脚本代码。学习`fmt`、`fn`、`c`等核心库的用法,提高代码可读性和维护性。 5. **Servlet生命周期*...

    程序员简历模板单页单色风格(优秀毕业生)20.zip

    【标题】:“程序员简历模板单页单色风格(优秀毕业生)20.zip”指的是一个针对程序员设计的简洁、单色的简历模板,适用于优秀的大学毕业生。这个压缩包包含了一个文档,便于求职者根据自身经历快速定制自己的简历。 ...

    程序员成功之路The road ahead for programmer

    - **全身心投入**:编程的乐趣来源于全身心的投入,这是优秀程序员的共同特征。 - **不可轻言放弃**:成功往往需要长期的坚持和努力,一旦放弃,可能错失成功的机会。 ### 3. 程序员的职业观 - **自我认知**:询问...

    j2ee笔记-JAVA程序员JAVA工程师面试必看

    在Java开发领域,J2EE(Java 2 Platform, Enterprise Edition)是企业级应用开发的重要框架,它为构建分布式、多层...在实际工作中,还要注重代码的可读性、可测试性和性能优化,这些都是优秀Java工程师应具备的素质。

    互联网行业-程序员简历模板

    一份优秀的程序员简历应该清晰、精炼且有针对性,以下是根据提供的内容和标签,针对程序员简历的构建要点进行的详细说明: 1. **个人信息**: - 包括姓名、联系方式(电话、电子邮件)、出生日期(可选,但不强制...

    史上超强 vim配置 服务器开发程序员专用

    1. **基础配置**:一个优秀的Vim配置通常会包含一系列优化设置,以提高开发效率。这可能包括调整缓冲区数量、改变默认行为(如设置自动缩进、关闭换行符显示)、启用多窗口编辑、以及设置快捷键映射等。 2. **插件...

    c#一个程序员陪伴孩子顺手写的作业进度打分软件.rar

    从标签“c#一个程序化陪伴孩子顺手写的作”我们可以推断,这是一款个人开发者为了陪伴孩子学习而编写的程序,具有一定的实用性与教育意义。C#是一种常用的面向对象的编程语言,尤其在开发Windows桌面应用程序方面...

    程序员必备工具.docx

    这份文档列出了十个程序员不可或缺的神器,旨在帮助新手程序员提升工作效率,实现华丽逆袭。以下是对这些工具的详细介绍: 1. **Xshell 和 Xftp**:这两个工具是网络管理和文件传输的强大组合。Xshell 提供了一个...

    疯狂程序员

    综上所述,"疯狂程序员"不仅是一个标签,更是一种追求卓越的精神体现。他们通过不断学习、创新和实践,推动着IT行业的进步。在crazy programmer.txt这个文件中,可能记录的就是这样一位程序员的学习笔记、代码片段...

    编程经验总结—一个程序员的经验

    学会有效地沟通,理解需求,协同工作,是成为一个优秀程序员的重要环节。 以上只是“编程经验总结”中可能涵盖的部分知识点,实际内容可能会根据作者的经验和关注点有所不同。这份.chm文件可能包含更具体的实践案例...

    java程序员上班那点事

    此外,文档可能还会涉及项目管理方面,如敏捷开发方法Scrum或Kanban,以及如何编写清晰、简洁的代码以实现可维护性和可扩展性。团队协作也是Java程序员工作中的一部分,因此版本控制策略、代码审查流程和有效的沟通...

    程序员修练之道英文版

    12. **职业态度**:提醒程序员要有责任心,重视沟通,理解业务需求,以及如何成为一个团队的有效成员。 13. **编程习惯**:强调养成良好的编程习惯,如编写简洁的代码,避免重复代码(DRY原则),以及保持代码整洁...

Global site tag (gtag.js) - Google Analytics