50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:243461
用户头像

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

关注

评论

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

我在京东做研发丨【混合多云第一课】为何多云多活被称为“技术皇冠上的明珠”?

京东科技开发者

京东云 研发 混合多云

C++ sort和for_each算法的普通、文艺和2B用法

老王同学

c++ 排序

预售登上计算机新书热卖榜TOP1,开年重磅,助力Java程序员飙升核心技能

图灵教育

Spring boot starter test java 后端、 程序员 java

【经验分享】电路板上电就挂?新手工程师该怎么检查PCB?

华秋PCB

工程师 电路 PCB PCB设计

九科祝福丨人生不设限,愿你自由绽放

九科Ninetech

ERP和MES如何做到优势互补,它们的区别在哪?

工赋开发者社区

如何降低 Flink 开发和运维成本?阿里云实时计算平台建设实践

Apache Flink

大数据 flink 实时计算

Centos7下安装Dogtail GUI自动化测试工具并打开sniff工具过程中遇到的问题解决方法

Python centos 自动化测试 sniff dogtail

直播预约|Search for Future,阿里云 × Elastic 中国用户峰会 2023

阿里云大数据AI技术

大数据 阿里云 搜索

2023年适用于Windows和Mac的FTP传输工具

镭速

字典数据结构 FST(Finite State Transducer)

alexgaoyh

Java Trie FST dat 字典数据结构

软件测试/测试开发 | 数据持久化技术(Java)

测试人

软件测试 测试发开

那些年,我们写过的无效单元测试

阿里巴巴中间件

阿里云 编程 云原生

直播报名 | 金融机构如何通过标签画像实现精细化客户运营?

索信达控股

Kubernetes 部署主从结构的 MySQL 服务

CTO技术共享

MySQL 底层之 MVCC、回滚段、一致性读、锁定读

程序知音

软件测试/测试开发 | Spring Boot 异常处理

测试人

软件测试 springboot 自动化测试 测试发开

SpringApplication启动类的Args详解

石臻臻的杂货铺

spring springboot

构建一个可复用的自定义BaseAdapter

芯动大师

Adapter viewholder item

GitHub破千Star!Java多线程编程实战指南:核心篇+设计模式篇

Java 并发编程 多线程

如何让SpringBoot项目启动时执行特定代码

Java Spring Boot

EasyRecovery16数据恢复软件有哪些新功能?

茶色酒

EasyRecovery Photo16

CorelDRAW矢量图形设计软件2023最新版本功能介绍

茶色酒

CorelDraw2023

三天吃透Kafka面试八股文

程序员大彬

Java Kafka Producer

分享5个我不能没有的Vue.js库

引迈信息

前端 低代码 开发工具 Vue 3

预售登上计算机新书热卖榜TOP1,开年重磅,助力Java程序员飙升核心技能

图灵社区

Spring boot starter test java 后端、 程序员 java

一个可以早点下班的开发技巧

引迈信息

前端 敏捷开发 低代码 JNPF

工赋开发者社区 | 关于ChatGPT八个技术问题的猜想

工赋开发者社区

Redis缓存知识大集合

阿呆

redis 缓存 缓存击穿 缓存雪崩

Gartner首次针对中国市场发布产业数字化白皮书,联合卡奥斯共探区域经济发展最优解

Openlab_cosmoplat

数字化 产业数字化 白皮书 开源社区 Gartner

Dubbo 在 Proxyless Mesh 模式下的探索与改进

阿里巴巴中间件

阿里云 云原生 dubbo

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