写点什么

Justin James 谈高效开发者的特质

  • 2013-05-15
  • 本文字数:2023 字

    阅读完需:约 7 分钟

Justin James 是 Conigent 公司的首席架构师,他指出要想成为一名优秀的开发者,仅仅写出可用的代码是远远不够的,还需要具备一些综合的素质,包括学习技术和非技术两方面的新技能、务实但不教条主义、知道如何寻找答案等等。

高效的开发人员能够主动学习技术和非技术两方面的新知识。糟糕的程序员只知道了解对自己工作必要的东西。但是优秀的开发者会主动学习新的技术技能,不仅是技术方面,他们还会学习非技术技能,对各种知识来源都有一种开放的心态,而不会像有些人那样固步自封。具体而言,糟糕的程序员可能在参加了WPF 有关的项目之后才会开始学习XAML,但是出色的开发者也许在一年之前就已经了解了相关的知识,因为他们觉得这些新知识很有趣,而且他们还会阅读WPF 应用的设计指南、可用性的相关内容,因此能够做出优秀的界面来。

优秀开发者必须遵循实用主义,而不是教条主义。严格的遵守编程规则对许多人来说非常可怕,难以坚持下来。James 指出,他经常能够碰到一些程序员,他们无法或者拒绝做某个任务只是因为完成这个任务的做法通常不符合最佳实践所。业务需求很少会受到实现需求所采用的技术的制约。没有人会说,“我们不应该把这个需求写到规格说明书里,因为要实现这个需求,程序员就不得不写一段很糟糕的代码。” 程序员的任务是要创造一个可以工作的应用程序,而绝不是要求在技术方面达到十全十美。这不是在为垃圾代码做辩护。James 认为,总会在有些时候,你会写出一些不那么优雅的代码,但是这些代码永远不会作为范例向别人展示。如果只有一种写法,那么这种代码就不是糟糕的代码,但要保证你已考虑了其它所有可能的方案。

James 认为,“知道如何寻找答案”很重要。这项技能不仅仅是在搜索引擎中键入几个关键字那么简单, 也不是到 Stack Overflow 或者 MSDN 论坛上类似网站发求助帖。James 就碰到过在搜索引擎里根本搜不到答案的问题,然后在 Stack Overflow 和 MSDN 论坛发的所有问题贴也没有一个像样的答案,不过他最终还是解决了所碰到的问题。有些问题是与情境(上下文环境)相关的,所以如果依赖于搜索引擎和论坛就会被淹没在各种乱七八糟的答案中。要知道如何进行根本原因分析,利用底层系统方面的知识找到其它的线索和解决方案,还要学习在深入分析问题之前要对问题本身有一个全面的高层次认识。

对工作有热情,如果不热爱本职工作,那么你无法成为顶级的开发者。现实世界的确存在一些非常优秀的、为了工作而工作的开发者,James 曾经也是这样的心态,但是如果这成为你的价值观,那么你不会乐意做促进事业成功的许多事情。这种观点会激怒许多开发者,因为他们认为这是一种对自己的侮辱:“我是一名出色的开发者,但是我有其他优先级更高的事情要做,我不能把工作变成生活。”James 表示完全理解,他也有许多优先级高的事情,但是当他投身于工作当中时,他愿意暂时搁置其他优先的事情来完成工作。如果你不能乐意全身心的投入到工作中,那么你无法成为最优秀的开发者,这不是一种侮辱,而是事实。

程序员的热情不仅仅是编程,而且要热爱工作、使用的技术、你的老板、项目等等。James 发现有些出色的开发者在平时工作中表现一般,因为这些人讨厌手头的项目或者讨厌使用的技术。James 也有过类似的心态,他的同事也有这样的人。James 建议,如果你处于这样的情形下,那么需要立刻解决它,要么从工作中找到乐趣,要么换份工作。

许多开发人员都有很强的自尊心。你比其他人更聪明、更有知识或者更有经验并不意味着你比其他人更出色。你需要平等对待他人,认真聆听并考虑其他人的想法,不要小看他们。你应该更在意团队是否成功,而不是个人的成就。

高效开发者应该具备创业精神。最好的程序员不是机器人,他们对产品有自己的情感归属和创业精神。对他们来说,产品成功不仅仅意味着工资的回报。因为他们对工作有情感寄托,他们为了项目成功而工作,而且走得更远。

“该出手时就出手”,James 认为开发人员经常犯的一个错误是一头扎进代码堆里,但是又不知道应该做什么,更糟糕的是,这些开发者还将其行为称之为敏捷模式,好像这么说就会显得不错。对于出色的开发者而言,之所以扎进代码里,是因为产品的规格说明对他们来说非常熟悉和有经验。当高效开发者面临新挑战时,他们会认真思考、规划和研究。他们的优点在于,不会掉入“分析瘫痪”的泥沼里爬不出来,他们知道应该对某些要素保持关注。一旦分析太多,那么就是浪费时间。但是也有例外,比如原子弹项目、宇宙飞船计划等。

在某一点上停止计划开始编码,然后根据实际情况调整自己的计划。这也正是 James 喜欢敏捷模式的原因。高效的开发者如果发现项目不再适用于项目实际情况,那么就会做出调整甚至抛弃。

综上所述,James 的观点主要包括:

  • 学习技术和非技术两方面的新技能
  • 务实但不教条主义
  • 知道如何寻找答案,而不是依赖于搜索引擎
  • 热爱工作相关的一切,而不是编程本身
  • 尊重同事,不要自负
  • 对本职工作存在情感归属,而不仅仅是赚钱的途径
  • 减少重复的分析工作,及时启动编码工作,随时调整计划
2013-05-15 10:243168
用户头像

发布了 501 篇内容, 共 264.4 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

技术人员加薪二三事

南方

管理 职场 技术管理 加薪 劈空掌

iOS Release 版本开启调试功能

liu_liu

ios release 调试

20 大类,100+ 网络副业兼职平台汇总推荐

一尘观世界

程序员 自由职业 副业 赚钱

Java新技术:文字块

X.F

Java 编程语言

职场“35岁现象”:焦虑 or 出路?是时候说出真相了!

狂师

职场 成长 软件测试 测试 软件开发

为什么每个软件人都要懂点系统架构?

刘华Kenneth

架构 DevOps 高可用 敏捷 高并发

从Integer开始阅读JDK源码

指尖流逝

Java jdk源码

游戏夜读 | 2020周记(4.3-4.10)

game1night

缓存的五种设计模式

Rayjun

缓存

KubeFATE: 用云原生技术赋能联邦学习(二)

亨利笔记

Kubernetes 云原生 k8s FATE KUBEFATE

动态规划问题的思路和技巧

Kenn

算法 动态规划

认识数据产品经理(一 数据产品经理的细分)

马踏飞机747

大数据 数据中台 数据分析 产品经理

如何梳理画出牛逼的、高大上的架构图?

狂师

程序员 企业架构 开发者 软件测试 软件开发

Spring中的测试类~简洁方便

程序员的时光

spring

找工作不得不知道的事

熊斌

认知提升 求职

动画设计的十个原则

养牛致富带头人

设计 动画

我愿沉迷于学习,无法自拔(三)

孙瑜

深度思考 程序员 感悟

制作Unknown Pleasures效果图的3种方法

张云金_GISer

设计 T恤 GIS 地图

记录自有意义

彭宏豪95

人生 写作 感悟 记录

Kafka系列第4篇:消息发送时,网络“偷偷”帮忙做的那点事儿

z小赵

kafka 推荐 实时计算

Boyer-Moore 算法

Kenn

算法 数组 Boyer-Moore

Dubbo 概述

会飞的猪

为AndroidApk添加系统级签名

Howe

Java android

程序员陪娃漫画系列——上学路上

孙苏勇

程序员 生活 陪伴 漫画

Redis学习笔记(概述)

编程随想曲

redis

Spring Cloud概述

会飞的猪

聊聊数据库原理和索引结构:1000万条数据优化后为什么能提升1500倍

牧码哥

MySQL 数据库 数据结构 性能优化 索引结构

聊聊测试工程师的价值

软件测试 质量 测试工程师产出 测试的价值

Java并发编程系列——锁顺序

孙苏勇

Java Java并发 并发编程 多线程

JAVA中Base64加密与解密

Howe

Java base64 加密解密

Nacos 1.1.4 与微服务的实践经验记录

itfinally

Java 微服务 nacos

Justin James谈高效开发者的特质_语言 & 开发_崔康_InfoQ精选文章