如何成为一个优秀的程序员

导读:本文是由做者Jason Rudolph发表的一篇博文《Programming Achievements: How to Level Up as a Developer》翻译而来。html

文章内容以下:程序员

一个优秀的程序员如何能练就成一个卓越的程序员?web

先等等,暂时不谈卓越,先谈谈如何成为一个优秀的程序员。数据库

从第一步到第N步并无明确的路线图。事实上,第N步究竟是什么还不肯定。就像逻辑型思惟的开发者同样,缺少明确的目标会让从入门到精通的道路变得异常崎岖。编程

过去的几年中,我花了很多时间来思索这个问题。我该如何从一名能力尚可的程序员修炼成一个真正优秀的程序员呢?网络

成功是什么?框架

当我对成功有清晰的目标、量化的标准的时候,我就能发挥个人最大潜力。好比,我想实现5分钟跑完一英里这个目标。好吧。这个路程很容易测量,成功的界限分明。我很容易知道跑一英里须要多久,网上也处处都是提升跑步速度的建议和训练计划。我能够选择一个计划并付诸努力,我深信我最终可以实现目标。这是一个神奇的可量化的计划,所以,每一个星期我均可以检测到距离个人终极目标还有多远。编程语言

可是如何界定你是否成为了“足够优秀的程序员”呢?一言蔽之,难以界定。这个目标从一开始就太主观,太模糊,太简单,没法量化。那么咱们能找到能量化的东西吗?函数

咱们都有过一些提升咱们技能的经验。咱们可能曾经学过一门开启咱们思路的新语言。咱们也可能曾经有过一套完美的设计方案,但直到最终投入生产时才发现它漏洞百出,但咱们所以而成长。有一些经验增加你的技能,有一些让你碰见反模式(注:反模式是指软件开发中常常被用到的但效率不高的模式。),并让你认知它们为何是反模式。正是这些经验给你上了课,影响了你的思惟模式,改变了你解决问题的方法,最终改善了你的设计。而你是否得到了某种经验,这是显而易见的。把经验当作是咱们的收获或许颇有趣。学习

因此,虽然这须要付出时间,但我如今学会了适应成为“一个真正优秀的程序员”这一目标的不可量化性。若是一个程序员依靠经验取得了某些进展,那么咱们就能有一个清晰的路线图来实现“成为真正优秀的程序员”这一终极目标。我想这个路线图应该是这样的:

1.肯定哪些技能可以帮助程序员进步

2.着重积累某一个技能的经验

3.直到这个技能彻底掌握(成功攻关!)

4.反复思考这个技能,直到融会贯通[A]

5.从新回到第二步,选择一项新的技能

如何更好的开始第一步呢?下面列出了一些编程目标,我粗略的分了一下类。[B]我会在本文的结尾和你一块儿讨论下想法。

编程目标

学习不一样的编程语言范例

用汇编语言写一个应用

用函数式语言写一个应用

用面向对象语言写一个应用

用基于原型的语言写一个应用

用逻辑编程语言写一个应用

用Actor模型写一个应用

用Forth语言写一个应用[C]

扩宽对咱们开发时使用的基本组件的了解:

写一个网络客户端(如HTTP,FTP客户端)

写一个设备驱动程序

写一个B叉树数据库

改进一个现有的库包,来得到更好的用户体验

写一个提供插件模型的应用或框架

写一个测试框架

写一个程序语言

更上一层楼:不断的练习,积累

完成五个code katas(Kata是来自日本武术的概念,经过不断的重复和练习来提升技艺)

Koan编程来学习一种你想学的语言

参加编程进修课程

阅读SICP,完成全部的练习

编写程序并开源:

为开源项目贡献力量

让别人接受你的补丁

得到一个重要的开源项目的提交权限

发布一个开源项目

优化一个开源项目的代码,详细记录并分享出来

经过教导别人来提升本身[D]

作一个绘声绘色的演讲

在一个本地用户组面前演讲

在一个会议上演讲

开设一个训练课程

发布一个教程

发布一个开源项目的有建设性代码审核

写一本有关编程的书

关于这些目标

如今让咱们来多说一点。注意这些目标都是可量化的。每个都有个布尔值:你要么完成了,要么没有。例如,虽然很难界定你是否掌握了一门函数式语言,可是很是容易肯定你是否用函数式语言写了一个应用。后者是可观测的,可量化的,布尔值。以上全部的目标都具备这一特性──可量化性。

无能否认,这个可量化性并不是无懈可击。就拿在一个会议上进行演讲来讲,你固然能够作一个很烂的演讲,而后还能够拍拍胸脯说你实现了这个目标。不过既然你是我这篇博客的读者,我假设你想成为一个优秀的程序员,你是一个对自身要求很高的人,不会是仅仅完成了某个任务就沾沾自喜的人。

既然咱们在讨论改善,那么你对这份列表有什么改进意见呢?

这个列表做为GitHub的有效依据,大家能够随意fork并添加更多的成绩。(确保它们是可量化的。)

或者fork以后,你能够划分出你已经取得的成绩。你还能够为你正在努力的目标作上标记。(能够参考Justin Blake, Pierre Chapuis, Yann Esposito的分支)

你也能够写评论,什么经验让你变得更为优秀,以及你但愿下一步实现什么目标。

注释

A.不得不强调下第四步。想要更出色的实现目标,你必须在你进行下一步以前停下来回想一下,问问本身到底学到了什么。花些时间写下些想法,更好的作法是,和他人分享,与其余完成一样任务的人做个对比,看看你的学习效果。

B.在coderwall.com这个网站,你能够更详细了解以目标为驱动的学习方法。

C.Forth自己就是一个语言范例。

D.我想起Paulo Freire的一句名言:“传授知识自己就是在学习传授知识的艺术...”

相关文章
相关标签/搜索