學習&使用技術的四種層次

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

作者 lucida 現在就職于 Google London;是 LucSoftIdaSoft 的創建者,其下包含撥號助手金庸全集等熱門應用;

lucida 的博客園賬戶:http://home.cnblogs.com/u/figure9/

新浪微博:@peng_gong

  關鍵字

  技術,生活,反思。

  關于

  Bjarne Stroustrup 在他的新書《A tour of C++

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 是 Ruby on Rails。
  • 知道 Rails,Gem 和 Rake 的存在。
  • 知道 DHH 也知道松本行弘。
  • 看過 The Ruby Programming Language,還使用一個基于 RoR 的博客框架 Octopress 寫博客。
  • 但從來沒有使用 RoR 去搭建網站。

  所以我是一個 RoR 的 Stranger。

  對于新技術,絕大多數人都是 Stranger——但是就我對國內技術社區的觀察,相當數量的 Stranger 意識不到自己還是 Stranger——認為知道一點術語一些人名就算了解一門技術,甚至把它寫在簡歷上(Familiar with XXX)或是開始與別人進行討論(當然都是毫無意義的討論)。

  1. Tourist(旅行者)

  當開發者真正開始用一項技術作出了可以用的東西:

  • 面向用戶的產品(End-User-Oriented Product),比如一個手機應用,或是一個瀏覽器插件。
  • 或是面向程序員的工具(Programmer-Oriented Tools),比如一個頁面抓取框架,或一個簡單的 Parser Generator。
  • 注意教科書范例(Textbook examples)和 Hello world 不屬于可以用的東西——這些只是 Dead Code——被執行一兩次,然后被遺忘。

  這時這個開發者就進入到了 Tourist 階段:

  • 了解這項技術的基本元素。
  • 使用這項技術做出了實用的產品或工具。
  • 了解對這項技術的部分細節。

  根據的學習目的的不同,Tourist 又可以分為 Salesman 和 Sightseer。

  1. 1. Salesman(旅行商)

Salesman

  Salesman 是具有明確目的的 Tourist——他們學習技術的目標是為了完成某一項業務,就像旅行商去某地出差是為了賣商品而非觀光一樣。

  絕大多數職業開發者在開發生涯中都會扮演 Salesman 這個角色——接到一個任務,涉及到某項不熟悉的技術,需要在限定時間內完成。

  1. 2. Sightseer(觀光者)

Sightseer

  和 Salesman 相反,Sightseer 學習技術的目標是為了拓展視野,增加見識,而非完成某項特定業務。

  具有主動學習精神的開發者在業余時會時常扮演 Sightseer 角色——找到自己認為有價值的新技術或是基礎知識進行系統學習,從而拓寬視野,提高水平。

  2. Resident(居住者)

  如果一個旅行者在一個地方待了半年以上,那么他/她就會變得原來越像當地人。隨著 Tourist 對某項技術的日益精進,他/她會逐漸演變成這項技術的 Resident:

  • 熟悉這項技術的基本元素。
  • 熟悉這項技術的生態系統(Ecology):既包括開發工具(編輯器,命令行工具,集成開發環境等),也包括開發社區(討論組,郵件列表等)。
  • 了解這項技術能做什么,不能做什么。
  • 了解這項技術有那些坑,如何繞過這些坑,以及識別這些坑帶來的問題。
  • 對某些領域有深入的研究——但并不受限于特定領域。
  • 使用這項技術做出了有相當價值的產品或工具。

  同 Tourist 一樣,根據使用技術的目標不同,Resident 可以分為 Worker 和 Craftsman:

  2. 1. Worker(工人)

Worker

  技術是 Worker 的謀生手段,一個優秀的 Worker 應具備以下特征:

  • 對于給定問題,知道如何給出經濟有效的解決方案。
  • 以團隊合作為主,了解團隊合作的價值,能夠推動團隊項目健康前進。
  • 追求按時交付。

  2. 2. Craftsman(工匠)

Craftsman

  同 Worker 不同,技術并非 Craftsman 的謀生手段,而是某種“副業”——用來提升聲望,修煉開發水平。

  一個優秀的 Craftman 往往具備以下特點:

  • 對于給定問題,知道如何給出優雅的解決方案。
  • 以單兵作戰為主,主要靠個人推進項目,但也能進行一定程度的團隊合作。
  • 追求極致美感。

  3. Architect(架構者)

  有想法且有能力的人在一個地方待久了都會有將這個地方變的更好的沖動——一種方式是從源頭出發,推翻舊制度建立新社會,也就是革命;另一種方式則是保留現有的制度,對其進行溫和但持續的改進,也就是改良。

  技術也是如此,任何技術都跟不上開發者成長的腳步,當這種差距到達一定程度時,就會有卓越的開發者站出來,創造出新的技術,他們就是 Architect:

  • 熟悉多項互相關聯的技術,并了解他們的優勢和不足。
  • 具備強大的領導能力,深厚的基礎和大量實際開發經驗。
  • 能夠帶動整個技術的生態系統發展。
  • 好吧,我編不下去了(尼瑪我要都知道我還至于是 IT 苦屌么 –_-)

  如果你看過 Matrix 2: Reloaded

Matrix 2: Reloaded

  就會知道 Architect 這個詞放在這里再好不過。

  根據目標不同,Architect 分為 Reformist 和 Revolutionist。

  3. 1. Reformist(改良者)

Reformist

  改良者的目標:把現有技術變的更好。(Makes existing technology better)

  例如:

  3. 2. Revolutionist(革命者)

Revolutionist

  革命者的目標:用更好的技術取代現有技術。(Replaces existing technology with better one)

  例如:

  • Alan Kay 把細胞的概念引入軟件開發]進而創造出 OOP 的核心概念。
  • Don Knuth 對計算機算法(TAOCP)以及計算機排版(TEX)的貢獻。
  • iPhone 于 2010 年之前的任何手機(iPhone4 除外)。

  小結

  這篇文章利用 A Tour of C++里的隱喻,把學習/使用技術分成了四個層次七個頭銜:

  • Stranger,
  • Tourist(Salesman,Sightseer)
  • Resident(Worker,Craftsman)
  • Architect(Reformist,Revolutionist)

  然后給出了各個頭銜所應具備的特征和能力。

  關于同類文章

  之前也有類似的文章,例如程序員的十層境界開發者的八種境界

  這些文章的共同點:

  1. 看似很牛逼但回想一下啥都沒說。
  2. 不會給人帶來什么價值。
  3. 沒有一個鑒別的標準。
  4. 沒有指導性,也沒有使用價值。

  本文的應用場景

  考察狀態

  以我自己對編程語言的掌握為例:

  • C/C++: Stranger.
  • Python: Craftsman.
  • Java: Worker.
  • C#: Craftsman.
  • JavaScript: Sightseer.
  • Scheme: Sightseer

  將上面的列表轉置:

  • Stranger: C/C++
  • Sightseer: JavaScript, Scheme
  • Worker: Java
  • Craftsman: C#, Python

  結合這些頭銜的定義,一目了然。

  制定計劃

  運用本文的詞匯,可以進行非常精煉的計劃制定:

  • 例如 Make a thoroughly sightseeing of C++
  • 或是 Become a proficient worker on IntelliJ
  • 抑或 Take a short tour of Sublime Text

  以上。


網載 2014-07-02 10:01:32

[新一篇] 為何計算機至今無法稱雄圍棋

[舊一篇] 這些科技公司的名字竟然是這個意思
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表