读到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使用新的技术没错,但不可控,如果出现问题的话,产品环境被拖累,自己也会很疲惫。
一己之见,诚请批评
分享到:
相关推荐
【标题】"近100个优秀Java程序员的编程源码"揭示了这个压缩包包含的是Java编程领域的高质量代码示例。这些源码是来自经验丰富的Java开发者的实践成果,可以作为学习和参考的宝贵资源。Java作为一种广泛使用的面向...
标题“如何成为一个优秀的JSP程序员下载”暗示了我们即将探讨的是关于JSP编程技术的提升和专业发展路径。描述中的重复内容并没有提供额外信息,但可以理解为强调成为优秀JSP程序员的重要性。 **标签解析** 1. **...
要成为一名优秀的JSP程序员,需要掌握一系列技能和知识,这将涉及到编程基础、Web开发框架、数据库交互以及最佳实践等多个方面。下面,我们将详细探讨如何通过学习和实践来提升自己的JSP开发能力。 1. **Java基础...
在当前的IT行业中,Java程序员面试已经逐步升级为考察应聘者对多个技术栈的综合理解和应用能力。以下内容根据提供的文件信息整理出的Java程序员面试知识点: 1. MyBatis框架 - MyBatis定义:MyBatis是一个支持定制...
这个模板特别强调了单页和单色的设计风格,旨在突出专业性和简洁性,适合那些刚毕业或者有一定经验的优秀程序员用来展示自己的技能和成就。 【描述】:“程序员简历模板单页单色风格(优秀毕业生)46.zip”的描述简洁...
要成为一位优秀的JSP程序员,需要掌握一系列关键技能和知识。以下将详细阐述成为优秀JSP程序员所需掌握的核心要点。 1. **基础理论**: - **Java语言**:JSP是基于Java的,所以扎实的Java基础知识是必不可少的,...
综上所述,《注重实效的程序员》这本书不仅涵盖了编程技能本身,还涉及到了软件工程实践、技术栈选择与学习路径规划等多个方面,旨在全方位地帮助读者成为具备实战经验且能够应对未来挑战的优秀程序员。通过阅读本书...
4. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL提供了许多预定义的标签,可简化JSP页面,避免过多的脚本代码。学习`fmt`、`fn`、`c`等核心库的用法,提高代码可读性和维护性。 5. **Servlet生命周期*...
【标题】:“程序员简历模板单页单色风格(优秀毕业生)20.zip”指的是一个针对程序员设计的简洁、单色的简历模板,适用于优秀的大学毕业生。这个压缩包包含了一个文档,便于求职者根据自身经历快速定制自己的简历。 ...
- **全身心投入**:编程的乐趣来源于全身心的投入,这是优秀程序员的共同特征。 - **不可轻言放弃**:成功往往需要长期的坚持和努力,一旦放弃,可能错失成功的机会。 ### 3. 程序员的职业观 - **自我认知**:询问...
在Java开发领域,J2EE(Java 2 Platform, Enterprise Edition)是企业级应用开发的重要框架,它为构建分布式、多层...在实际工作中,还要注重代码的可读性、可测试性和性能优化,这些都是优秀Java工程师应具备的素质。
一份优秀的程序员简历应该清晰、精炼且有针对性,以下是根据提供的内容和标签,针对程序员简历的构建要点进行的详细说明: 1. **个人信息**: - 包括姓名、联系方式(电话、电子邮件)、出生日期(可选,但不强制...
1. **基础配置**:一个优秀的Vim配置通常会包含一系列优化设置,以提高开发效率。这可能包括调整缓冲区数量、改变默认行为(如设置自动缩进、关闭换行符显示)、启用多窗口编辑、以及设置快捷键映射等。 2. **插件...
从标签“c#一个程序化陪伴孩子顺手写的作”我们可以推断,这是一款个人开发者为了陪伴孩子学习而编写的程序,具有一定的实用性与教育意义。C#是一种常用的面向对象的编程语言,尤其在开发Windows桌面应用程序方面...
这份文档列出了十个程序员不可或缺的神器,旨在帮助新手程序员提升工作效率,实现华丽逆袭。以下是对这些工具的详细介绍: 1. **Xshell 和 Xftp**:这两个工具是网络管理和文件传输的强大组合。Xshell 提供了一个...
综上所述,"疯狂程序员"不仅是一个标签,更是一种追求卓越的精神体现。他们通过不断学习、创新和实践,推动着IT行业的进步。在crazy programmer.txt这个文件中,可能记录的就是这样一位程序员的学习笔记、代码片段...
学会有效地沟通,理解需求,协同工作,是成为一个优秀程序员的重要环节。 以上只是“编程经验总结”中可能涵盖的部分知识点,实际内容可能会根据作者的经验和关注点有所不同。这份.chm文件可能包含更具体的实践案例...
此外,文档可能还会涉及项目管理方面,如敏捷开发方法Scrum或Kanban,以及如何编写清晰、简洁的代码以实现可维护性和可扩展性。团队协作也是Java程序员工作中的一部分,因此版本控制策略、代码审查流程和有效的沟通...
12. **职业态度**:提醒程序员要有责任心,重视沟通,理解业务需求,以及如何成为一个团队的有效成员。 13. **编程习惯**:强调养成良好的编程习惯,如编写简洁的代码,避免重复代码(DRY原则),以及保持代码整洁...