一个好的开发人员如何成为一个伟大的开发人员?
暂时忘记伟大:一个体面的开发人员如何成为一个好的开发人员?
从步骤 1 到步骤 n 没有明确的路径。 哎呀,甚至不清楚步骤n是什么。 作为具有逻辑思维的开发人员类型,缺乏明确的路线可能会导致从新手到大师的艰巨旅程。
在过去的几年里,我花了相当多的时间来应对这个难题。 下一步是什么? 我如何从一个优秀的开发人员变成一个真正优秀的开发人员?
成功是什么样子的?
当我有一个目标,有明确、可衡量的成功标准时,我会尽力而为。 例如,我想跑 5 分钟一英里。 好。这很容易衡量,成功是明确的。 我可以弄清楚我现在能跑多快一英里,网上到处都是关于跑得更快的建议和培训计划。 我可以选择一个培训计划,努力工作,我可以确信我最终会到达我想去的地方。 它是如此奇妙的可衡量,以至于每周我都会知道我离我的最终目标有多近。
但是,您如何衡量自己是否达到了“真正优秀的开发人员”的排名? 简而言之,你不能。 如前所述,这个目标太主观,太模糊,根本无法衡量。 那么我们如何找到可测量的东西呢?
就像想要跑 5 分钟英里的目标一样,我们可以从查看我们作为程序员的位置与我们想去的位置开始。 一个 5 分钟英里的跑步者接触到了 10 分钟英里跑步者所缺乏的哪些经验? 程序员大师从中获得了哪些经验,而新手程序员却缺少这些经验? 重要的是体验。
我们都有过特定的经验,这些经验明显提高了我们作为开发人员的技能。 我们学会了一种新的语言,使我们接触到一种新的思维方式。 或者我们精心设计了完美的设计,只是看着它在生产环境的严酷现实中揭示了它的严重缺陷。 正因为如此,我们成为了更好的程序员。 一些经验为您提供了新技术。 其他人让你接触到反模式...并让您了解为什么它们是反模式的。 正是这些经验教会了你,影响了你的思维过程,影响了你解决问题的方法,改进了你的设计。 方便的是,衡量您是否获得了特定经验很简单。 (将它们视为成就可能会很有趣。
所以花了一段时间,但我越来越适应我悬而未决的目标的不可估量性:获得“真正优秀的开发人员”的称号。 如果这样的开发人员因为他的经验而获得这种荣誉,那么也许我们仍然可以有一条明确的路径,朝着“真正优秀的开发人员”的大方向前进。 我怀疑该路径看起来像这样:
- 确定将个人提升为开发人员的体验。
- 选择要追求的特定体验。
- 追求这种体验直到完成。(成就已解锁!
- 反思一下那段经历。真的浸泡在里面。[一]
- 返回到步骤 2,这次选择新体验。
还有什么比众包更好的方法开始第 1 步呢? 这是编程成就列表的第一个切口,松散地组织成组。 最后,我会提供多种方式让你表达你的想法。
成就
学习各种编程范例:
- 用汇编语言编写程序
- 使用函数式语言编写应用程序
- 使用面向对象的语言编写应用程序
- 使用基于原型的语言编写应用程序
- 使用逻辑编程语言编写应用程序
- 使用Actor模型编写应用程序
- 在 Forth 中编写应用程序 [B]
体验不同平台编程的来龙去脉:
- 编写重要的 Web 应用
- 编写重要的桌面应用
- 编写一个重要的移动应用
- 编写嵌入式应用
- 编写实时系统
增强您对我们作为开发人员使用的构建块的理解:
- 编写网络客户端(例如,HTTP,FTP)
- 编写设备驱动程序
- 编写 B 树数据库
- 包装现有库以提供更好的(更愉快)用户体验
- 编写提供插件模型的应用程序或框架
- 编写测试框架
- 编写编程语言
用koan,katas和年龄的智慧来启发自己:
- 完成五个代码卡塔
- 完成您想要学习的语言的编程 koans
- 参加代码务虚会
- 阅读 SICP 并完成所有练习
开放程序:
- 为开源项目做出贡献
- 接受修补程序
- 获得重要开源项目的提交权
- 发布开源项目
- 执行开源项目的重新定义
通过教别人来学习 [C]:
- 呈现闪电演讲
- 在本地用户组中演示
- 出席会议
- 提供培训课程
- 发布教程
- 发布开源项目的建设性代码审查
- 写一本编程书
关于成就
现在,让我们暂时进入元。请注意,这些成就中的每一个都是可衡量的。 每一个都是布尔值:你要么完成,要么没有完成。 例如,很难衡量你是否学习过函数式语言,但很容易知道你是否用函数式语言编写了应用程序。 后者是可以观察到的。可测量的。布尔。 这种可衡量性非常有意地适用于所有这些成就。
诚然,可测量性并不完美。 考虑一下在会议上演讲的成就:你当然可以做一个半途而废的工作,只是为了说你已经赢得了这个成就。 但如果你正在阅读这篇文章,我想你想变得优秀。 你知道,仅仅为了从列表中划掉一个项目而打电话是蹩脚的。