精通一项专业领域大约需要一万小时的时间,一般情况下大致如此,但编程领域可能要除外,因为它所能涵盖的内容范围实在是太宽泛了。
实际上,能否解决任意代码问题最终来看并不重要,重要的是要去解决面向特定领域的问题。问题也许是一个策略类游戏,也许是一个矢量绘图工具、音乐创作软件、或者卫星控制系统。从这个角度来看,谁才是真正的专家呢?当有人问我一年能创作多少高端 3D 游戏时,我在白板上写了一个“3”,稍停片刻以便倾听“这比我预想的要少”之类的评价,然后,我最终会将其写成:“1/3”。在十年时间里,你会在多少个卫星系统上工作?一个?也许是两个。
和木匠、画家、漫画家相比,如果他们愿意倾全力投入的话,他们可以在一个相对短的时间内回顾大量过去的工作成果。和那些需要两年才能发布一款软件项目的人相比,那些在一年内就可以完成50项屋顶作业的人,看起来更像是一名专家。你仅仅设计了一款绘画程序,然后五年来一直维护它,从来没有尝试其它方法,你能说你已经精通了绘画程序的用户界面设计吗?
要想成为一名专家,你需要实践更多的项目。它们可以是很小的、实验性的项目,甚至可以是尚未出现的大型应用程序中一个独立部分。你可以直接从中间开始而不需要先建立框架和模块。这正是尝试不同语言的好时候,因此在你做出选择之前,你能看到 Go、Clojure、Rust 分别都有哪些好处。或者尝试查克·摩尔式极简主义的最佳实践:有没有可能在100行代码之内就让你的核心想法得以实现?但是在大多数情况下,这样做的结果是可能导致大量候选解决办法遭致淘汰。
这个用于实现想法的速写本并不是一类纸质的东西,而是一个小程序集合。它就像文件夹一样简单,里面包含了 Python 脚本和 Erlang 模块。这与对错无关,其中很多想法都不一定可行,但你可以从中得以学习。它让你探索你的兴趣,它让你摆弄代码,它让你玩得高兴。而且,在这个过程中,你很有可能成长为一名专家。
作者: James Hague,自上世纪80年代一来一直从事视频游戏设计开发工作。
原文: The Software Developer's Sketchbook
感谢: Jodoo 帮助审阅并完成校对。