一个优秀开发者如何才能变得伟大?
还是先不想如何变得伟大:一个不错的开发者如何变成一个优秀的开发者?
从***步到第N步并没有确定的路径,哎呀,甚至不知道第N步是什么. 能逻辑思考的都明白,缺乏一个确定的路线意味着,想从新手到大师,将会是一个艰辛的旅程。在过去几年间,我还是花了相当一些时间,反复思考这一个难题。接下来是什么?我该如何做才能从一个优秀的开发者成为一个相当优秀的开发者?
成功到底是什么样子的?
当我有一个清晰的目标以及一个可以衡量的成功标准的时候,我做的***。比如,我想5分钟跑一英里,这很好衡量,而且成功是明确定义了的。我知道现在我一英里我可以跑多快,而且网上到处都是如何跑快的建议和训练项目。我可以选择一种训练项目,努力训练,我非常自信***能够达到我所期待的目标。而且这个非常容易被衡量,每一周我都可以知道我距离自己的***目标还有多少.
但是,你如何去衡量自己是否达到了一个“相当优秀的开发者”这样一个级别呢?简单得讲,你不能够。这个目标,如上所述,非常的主观,非常的宽泛,简直是无法衡量的。所以,我们该如何定义一个可以衡量的东西?
和想5分钟跑一英里差不多,我们可以从对比现在作为程序员的自己和所期望能成为的程序员来入手。五分钟一英里的赛跑者有而十分钟一英里的赛跑者缺乏的经历是什么?让大师级程序员获益而新手程序员缺乏的经历是什么?这里关键的是经历。
我们都曾有过某种特定的经历提升了我们作为程序员的技能。我们曾学习过一种新的语言,而让我们有一种新的思维方式。或者,我们都曾精雕细琢过***的设计,只是为了观察其在苛刻的现实环境下暴露出的缺陷. 我们因此变成更好的程序员。所以,有些经历给了你新的技术。而有些则是不同的模式,并且能够让你理解为什么会这样。正是这些经历在教你,影响你的思维过程,,影响你解决问题的方法,改进你的设计。方便的是,你是否有过某种特定的经历是很容易被衡量的。(如果把这些经历想成是成就就很有意思啦。)
虽然花了些时间,但是我已经对我那不可衡量悬而未绝的目标,达到“相当优秀的开发者”的级别,感到不烦恼了。如果一个开发者能够以他的经历来区分,也许我们已经有了一个明确定义的路径朝向“相当优秀的开发者”这么一个大方向了。我揣测这么一条路径,应该是这样子的:
1、标志着从一个普通人成长成程序员的经历
2、选择某种经历去追求
3、追去的经历完成了。(成就解锁了!)
4、经历的反思,深入的思考。[A]
5、返回第2步,这次是选择一个新的经历。
如何以一种更好方式开始***步,而不是众包给各位。这里我给出了一部分编程的成就,松散的分了组。[B]我会在文末为你提供多种方式,让你来创造你自己的想法。
成就
学习多种编程范式:
用汇编语言写一个程序
用函数式编程语言写一个应用
用面向对象语言写一个应用
用基于原型的语言写一个应用
用逻辑编程语言写一个应用
用Actor模型写一个应用
用Forth语言写一个应用[C]
体验不同平台上编程的来龙去脉:
写过一个普通的Web应用
写过一个普通的桌面应用
写过一个普通的手机应用
写过一个普通的嵌入式应用
写过一个实时系统
增强你对开发人员所常用的模块的理解:
写过一个网络客户端(HTTP, FTP等)
写过一个设备驱动
写过一个B-tree数据库
包装现有的一个库,以提供更好(更愉快)的用户体验
编写一个应用程序或框架,提供插件模型
写过测试框架
写过编程语言
让自己知道koans, katas, 以及岁月的智慧:
完成过五个code katas
对你想学习的一个语言,完成programming koans
参加一次 coderetreat
阅读 SICP并完成所有练习
开源编程:
为一个开源项目共享代码
补丁被接受
在一个重要的开源项目中得到提交权限
发布一个开源项目
对一个开源项目实施Refactotum
通过教授别人来学习[D]:
发表一次启迪性的讲话
在一个本地用户组中演讲
在一个会议中演讲
教授一次培训课程
发布一个教程
发布一个开源项目的constructive code review
写一本编程的书
关于成就
现在,让我们来继续探讨一会儿。注意每一个成就都是可以衡量的。每一个都是一个布尔值:你完成或者没有完成。例如,很难衡量你是否学过一个函数式编程语言,但是却可以轻易的知道你是否用函数式编程语言写过一个程序。后者是客观察、可测量、布尔的。这种可衡量性意图适用所有这些成就。
需要承认的是,这种可衡量性并不***。比如在一个会议演讲这个成就:你完全可以做到一般称职的时候就说你赢得了这份成就。但是如果你正在读这篇文字,我假设你是想要变得卓越。你知道只是为了把一项从清单中划掉而号称做到是非常逊的。
既然我们谈到了改进
既然我们谈到了改进,你会如何改进这个清单呢?
这个清单现在在github上作为一个gist,你可以任意的fork它然后添加更多的成就(确保你加的成就是可以衡量的)。或者fork它然后标记那些你已经征服了的成就。你还可以标记你正在做的一项,(例如,你可以去看看这些forks :Justin Blake,Pierre Chapuis, Yann Esposito. )
或者发表评论:什么经历将你塑造成一个更好的开发者?以及你会接下来去解锁哪一个成就?
注释
[A] 我无法充分的强调第4步。为了获得几乎每个成就,你应该停顿和反思这些经历,然后再移动到下一个。反思。问问自己,你学到什么,花些时间来写下这些想法。更好的是,与别人分享,并且对比其他人也已经获得这一成就的人,看看你的学习收获的如何。
[B] 可以去 coderwall.com看看基于成就的模型这些方面的,很有意思。.
[C] Forth基本上是自己的范式
[D] 突然想到了这句: “寓学于教” — Paulo Freire
【编辑推荐】