作者 lucida 现在就职于 Google London;是 LucSoft 和 IdaSoft 的创建者,其下包含拨号助手和金庸全集等热门应用;
lucida 的博客园账户:http://home.cnblogs.com/u/figure9/
新浪微博:@peng_gong
技术,生活,反思。
关于
Bjarne Stroustrup 在他的新书《A tour of C++》
…as an analogy, think of a short sightseeing tour of a city, such as Copenhagen or New York. In just a few hours, you are given a quick peek at the major attractions, told a few background stories, and usually given some suggestions what to see next…
…you do not know the city after such a tour. You do not understand all you have seen and heard. You do not know how to navigate the formal and informal rules that govern life in the city…
…to really know a city, you have to live in it, often for years.
简而言之,编程语言是 City,而开发者则是 Traveller——这是一个很有意思的比喻,在这篇文章里,我试图延续这个类比(Analogy)——把这个类比放大到初学,掌握,了解以至精通一门技术的层面。
不过需要注意:我自己并没有精通哪一门技术——所以这篇文章的内容是值得怀疑(susceptible)的,但它可以作为一个不错的参考。
0. Stranger(陌生人)
使用一项技术最初的层次就是听说过没用过——就像我们之中的大多数人都听过南极,听过北极,知道南极有企鹅,北极有北极熊,但是却从来没有去过南极或北极。
Stranger 具有以下的特征:
以我本人和 RoR 来打个比方:
所以我是一个 RoR 的 Stranger。
对于新技术,绝大多数人都是 Stranger——但是就我对国内技术社区的观察,相当数量的 Stranger 意识不到自己还是 Stranger——认为知道一点术语一些人名就算了解一门技术,甚至把它写在简历上(Familiar with XXX)或是开始与别人进行讨论(当然都是毫无意义的讨论)。
1. Tourist(旅行者)
当开发者真正开始用一项技术作出了可以用的东西:
这时这个开发者就进入到了 Tourist 阶段:
根据的学习目的的不同,Tourist 又可以分为 Salesman 和 Sightseer。
1. 1. Salesman(旅行商)
Salesman 是具有明确目的的 Tourist——他们学习技术的目标是为了完成某一项业务,就像旅行商去某地出差是为了卖商品而非观光一样。
绝大多数职业开发者在开发生涯中都会扮演 Salesman 这个角色——接到一个任务,涉及到某项不熟悉的技术,需要在限定时间内完成。
1. 2. Sightseer(观光者)
DBAE4B52B598.gif" alt="Sightseer" />
和 Salesman 相反,Sightseer 学习技术的目标是为了拓展视野,增加见识,而非完成某项特定业务。
具有主动学习精神的开发者在业余时会时常扮演 Sightseer 角色——找到自己认为有价值的新技术或是基础知识进行系统学习,从而拓宽视野,提高水平。
2. Resident(居住者)
如果一个旅行者在一个地方待了半年以上,那么他/她就会变得原来越像当地人。随着 Tourist 对某项技术的日益精进,他/她会逐渐演变成这项技术的 Resident:
同 Tourist 一样,根据使用技术的目标不同,Resident 可以分为 Worker 和 Craftsman:
2. 1. Worker(工人)
技术是 Worker 的谋生手段,一个优秀的 Worker 应具备以下特征:
2. 2. Craftsman(工匠)
同 Worker 不同,技术并非 Craftsman 的谋生手段,而是某种“副业”——用来提升声望,修炼开发水平。
一个优秀的 Craftman 往往具备以下特点:
3. Architect(架构者)
有想法且有能力的人在一个地方待久了都会有将这个地方变的更好的冲动——一种方式是从源头出发,推翻旧制度建立新社会,也就是革命;另一种方式则是保留现有的制度,对其进行温和但持续的改进,也就是改良。
技术也是如此,任何技术都跟不上开发者成长的脚步,当这种差距到达一定程度时,就会有卓越的开发者站出来,创造出新的技术,他们就是 Architect:
如果你看过 Matrix 2: Reloaded
就会知道 Architect 这个词放在这里再好不过。
根据目标不同,Architect 分为 Reformist 和 Revolutionist。
3. 1. Reformist(改良者)
改良者的目标:把现有技术变的更好。(Makes existing technology better)
例如:
3. 2. Revolutionist(革命者)
革命者的目标:用更好的技术取代现有技术。(Replaces existing technology with better one)
例如:
小结
这篇文章利用 A Tour of C++里的隐喻,把学习/使用技术分成了四个层次七个头衔:
然后给出了各个头衔所应具备的特征和能力。
关于同类文章
之前也有类似的文章,例如程序员的十层境界和开发者的八种境界
这些文章的共同点:
本文的应用场景
考察状态
以我自己对编程语言的掌握为例:
将上面的列表转置:
结合这些头衔的定义,一目了然。
制定计划
运用本文的词汇,可以进行非常精炼的计划制定:
以上。