http://sd.youkuaiyun.com/a/20111109/307185.html
如果一个开发者能够以他的经历来区分,也许我们已经有了一个明确定义的路径朝向“相当优秀的开发者”这么一个大方向了。我揣测这么一条路径,应该是这样子的:
1.标志着从一个普通人成长成程序员的经历
2.选择某种经历去追求
3.追求的经历完成了(成就解锁了!)
4.经历的反思,深入的思考。[A]
5.返回第2步,这次是选择一个新的经历。
如何以一种更好的方式开始第一步,而不是众包给各位。这里我给出了一部分编程的成就,松散的分了组。我会在文末为你提供多种方式,让你来创造你自己的想法。
成就
1.学习多种编程范式:
2.体验不同平台上编程的来龙去脉:
-
写过一个普通的Web应用 -
写过一个普通的桌面应用 -
写过一个普通的手机应用 - 写过一个普通的嵌入式应用
- 写过一个实时系统
3.增强你对开发人员所常用的模块的理解:
-
写过一个网络客户端(HTTP,FTP等) - 写过一个设备驱动
- 写过一个B-tree 数据库
- 包装现有的一个库,以提供更好(更愉快)的用户体验
- 编写一个应用程序或框架,提供插件模型
- 写过测试框架
- 写过编程语言
4.让自己知道koans,katas,以及岁月的智慧:
完成过五个 code katas
- 对你想学习的一个语言,完成programming koans
- 参加一次coderetreat
- 阅读SICP并完成所有练习
5.开源编程:
- 为一个开源项目共享代码
- 补丁被接受
- 在一个重要的开源项目中得到提交权限
- 发布一个开源项目
- 对一个开源项目实施Refactotum
6.通过教授别人来学习[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