`
zhoushuping
  • 浏览: 45613 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

文来自Totango的联合创始人兼CEO盖伊?尼尔帕兹(Guy Nirpaz),他在本文中列出了优秀的开发者和差的(或还需努力的)开发者之间的区别。

如果你认为使用“优秀”和“差”来区分开发者不妥的话,也可以将这些看作是初级开发者和资深开发者之间的区别。但无论如何,多看看其他的优秀开发者(或资深开发者)是如何做的,对于自身技能、工作方式的提升有很大的帮助。

文章内容如下:

优秀的开发者是一个艺术家,一个享受创作过程的工匠。差的开发者只将自己当作负责产生代码的码农。

优秀的开发者了解客户的问题。差的开发者只了解手头的技术问题。优秀的开发者会不断努力去理解“为什么”,然后去实现,同时能够把握大局。差的开发者专注于构建类、方法和配置文件,而不理会大局。

优秀的开发者了解产品的完整架构。差的开发者只知道他写的组件。优秀的开发人员充分理解在产品中使用的技术,了解它们的用途,以及它们在内部如何工作。

优秀的开发者不害怕新技术,并能够很快掌握。差的开发者只坚持他目前掌握的技术,对于任何技术变化持否定态度。

优秀的开发者通过不断学习来提高自己的技能,他们经常阅读技术文章和书籍。差的开发者没有时间来学习,他们总是太忙了,以致于不能干其他事情。

优秀的开发者关心产品的质量,同时也非常关注过程质量,他们努力创造无缺陷的代码。差的开发者将bug留给QA去发现,然后再修复。

优秀的开发者为客户开发能够创造价值的功能,差的开发者只是想完成任务。优秀的开发者不会声称需求描述是不完整的,并确保充分理解这些特性。差的开发者会等到需求细节完善后才开始工作。优秀的开发者总是确保拥有产品功能的相关信息,一旦信息丢失,他会想办法再得到它。

优秀的开发者不害怕在产品中加入其他人的代码,而差的开发者会担心别人使用他的代码。优秀的开发者认为不应该花费过多的时间来写不言自明(self-explanatory)和显而易见(well-documented)的代码。差的开发者总是需要分配额外的时间来记录和简化代码。

优秀的开发者永远不会觉得自己的代码已经足够好,相反会持续不断地整理和修复。他们始终致力于创造优雅的解决方案,认为他的工作是向客户提供价值。差的开发者只考虑自己代码是否优雅,将创造价值的工作留给别人。

 

Good Developer, Bad Developer
Posted on June 11, 2012 by guynirpaz I recently read Ben Horowitz’s piece on the importance of training people in startup companies. At the end of this article he put together a document “Good Product Manager, Bad Product Manager”. Here’s my spin on it: Good Developer, Bad Developer. Enjoy, I look forward to your comments!

Good Developer, Bad Developer

Good developer is an artist, a craftsman who enjoys the process of creation. Bad developer considers himself as a programmer, responsible for generating lines of code.

Good developer understands the problems of the customers. Bad developer understands only the technical problem at hand. Good developer does not define the why, but constantly strives to understand why. He’s responsible for the how, and still sees the big picture. Bad developer is focused on building classes and methods and configuration files, but does not get the big picture.

Good developer understands the complete architecture of the product. Bad developer knows only the components he’s written. Good developer fully understands the technologies that are used within the product. He understands what they are used for, and how they work internally.

Good developer is not afraid of new technologies but embraces them by quickly getting a grip. Bad developer only sticks to what he knows. His immediate reaction to any technical change is negative.

Good developer is constantly learning and improving his skills. Good developer reads technical articles, and finishes several technical books a year. Bad developer does not have time to learn. He’s always too busy with other stuff.

Good developer cares about the product quality. He is also very much concerned with the process quality. Good developer pushes himself to create bug-free code; bad developer leaves it to QA to find bugs to fix.

Good developer develops features which create value for customers. Bad developer completes tasks. Good developer will never claim the requirements are incomplete, and will make sure to fully understand the features he’s working on. Bad developer will wait until the finest details are available. To emphasize: good developer is the CEO of the feature – he’s going to make sure he always has the information needed to accomplish the feature, and in case information is missing he’ll make sure he gets it.

Good developer is not afraid to go into anyone’s code. Bad developer is afraid of others looking into his. Good developer understands that it shouldn’t take more time to write self-explanatory and well-documented code. Bad developer always needs to allocate extra time to document and simplify.

Good developer will never feel his code is good enough, and will always continue to clean and fix. Good developer always strives to create elegant solutions but understands that his job is to deliver value to customers. Bad developer thinks only about the elegance of his code and leave the job of delivering value to others.

Is that all? Did I miss anything or got some of these wrong? Feel free to chime in the comments below!

Guy Nirpaz
Co-Founder & CEO, Totango

分享到:
评论

相关推荐

    黑马程序员Javase笔记

    接着,我们来看Java和C++的语法区别。尽管两者都是面向对象的语言,但Java更注重内存管理和安全。Java的内存管理由JVM(Java虚拟机)自动进行,包括垃圾回收机制,而C++需要程序员手动管理内存。此外,Java没有指针...

    程序员浏览器程序员浏览器

    此外,标签也可能是为了突出其与常规浏览器的区别,即在浏览网页的基础上,更注重开发者的使用体验。 【文件名称列表】: 1. ChromePlus_1.4.1.0.exe:这是一个基于Google Chrome内核的增强版浏览器,ChromePlus...

    初级程序员 vs高级程序员有什么区别

    以下将详细阐述这两者之间的区别。 首先,技能水平是区分初级和高级程序员的重要标准。初级程序员通常具备基础的编程语言知识,如Python、Java或C++,能够完成简单的代码编写和调试工作。他们可能刚刚从学校毕业...

    程序员面试宝典 程序员面试宝典

    - 内存管理:堆与栈的区别、动态内存分配(malloc, free)。 - 结构体与联合体。 - 预处理器与宏定义。 2. **C++**: - 对象和类:封装、继承、多态。 - 构造函数与析构函数。 - 成员函数:静态成员函数、...

    软考程序员辅导 程序员考试辅导教材

    1. 编程语言分类:了解高级语言、脚本语言、解释型和编译型语言的区别。 2. C/C++/Java/Python等至少一种编程语言的基本语法,包括变量、数据类型、运算符、流程控制语句等。 3. 函数的定义与调用,模块化编程思想,...

    程序员十层楼

    每个层级的程序员在软件开发中的角色和职责不同,所需要的技能和知识也有所区别。例如,在“菜鸟”层级可能更多从事一些基础的软件开发和测试工作,在“大虾”层级则可能开始承担更多设计和编码工作,而“牛人”层级...

    历年程序员试题及答案

    4. **操作系统**:操作系统基础知识如进程与线程的区别、内存管理(包括虚拟内存、页面置换算法)、文件系统、死锁等。例如,试题可能会问到进程间的通信方式,或者是如何避免死锁的发生。 5. **数据库管理**:SQL...

    unix程序员手册.zip_UNIX_unix程序员手册

    理解`.`和`..`符号以及绝对路径和相对路径的区别。 4. **进程管理**:了解如何创建、控制、监控和结束进程。掌握`fork()`、`exec()`和`wait()`等系统调用。 5. **输入/输出重定向和管道**:理解标准输入、输出和...

    【程序员从初级到中级10个秘密】

    【程序员从初级到中级10个秘密】 在IT行业中,程序员的成长之路往往充满挑战与机遇。从初级到中级,这是一个质的飞跃,涉及到技术深度、项目经验、问题解决能力等多方面的提升。以下是对程序员从初级到中级进阶的10...

    程序员笑话大全.docx

    3. 技术误解:C#与C++的混淆,反映出初学者可能对技术术语的细微差别不熟悉,容易造成误解。 4. 程序错误(bug):在程序员的世界里,bug是常见的问题,需要花费大量时间来查找和修复。 5. 工资与现实:程序员的...

    2011-2018程序员考试题目

    考生需要了解CPU的结构与功能、内存与外存的区别、不同类型的网络连接方式(如局域网、广域网)以及TCP/IP协议的基本概念。此外,还需要掌握二进制、十六进制与十进制之间的转换。 【知识点二】编程语言理解 初级...

    程序员的SQL金典,程序员的SQL金典

    书中将详细阐述INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别和使用场景,以及如何使用子查询进行复杂的联接操作。 4. **聚合函数与分组**:GROUP BY和HAVING子句是进行统计分析的关键,书中会讲解COUNT、...

    软考程序员复习资料

    软考程序员复习资料 以下是根据软考程序员复习资料的标题、描述、标签和部分内容生成的相关知识点: 一、排序算法 * 排序的定义和分类 * 稳定的排序算法和不稳定的排序算法 * 快速排序(Quicksort)的算法原理和...

    程序员羊皮卷完整版(有标签)

    4. **数据库管理**:数据库是现代软件系统的核心部分,书中可能会讲解SQL语言、关系型数据库与NoSQL数据库的区别,以及如何进行数据库优化。 5. **版本控制**:Git作为主流的版本控制系统,其使用方法和最佳实践是...

    程序员历年试题及答案

    【程序员历年试题及答案】这个资源集合显然针对的是准备程序员资格考试或者提升编程技能的人员。这类资源通常包含了各种编程语言、数据结构、算法、操作系统、网络、软件工程等多个方面的题目,旨在帮助学习者全面...

    程序员相关资料

    例如,了解如何使用Git进行版本控制,理解敏捷开发和瀑布模型的区别,以及如何编写有效的单元测试,都将对软件开发工作大有裨益。 项目管理资料可能会涉及Scrum、Kanban等敏捷框架,以及如何编写项目计划、管理团队...

    100道程序员笔试题

    4. **操作系统**:进程与线程的区别、内存管理、虚拟内存、死锁、磁盘I/O等是操作系统笔试题的常见考点。理解这些概念有助于编写高效的并发程序。 5. **计算机网络**:TCP/IP协议栈、HTTP协议、DNS解析、网络连接...

    初级程序员考试试题真题

    【初级程序员考试试题真题】是一份集合了2006年至2009年间的初级程序员考试实际试题的资源,对于准备此类考试的考生来说,这是一个宝贵的复习材料。这份资料涵盖的知识点广泛且深入,旨在帮助考生全面理解和掌握初级...

Global site tag (gtag.js) - Google Analytics