精通型程式設計師的特點

2016-08-29    分類:程式設計師人生、首頁精華0人評論發表於2016-08-29

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

你知道有能力勝任和精通之間的區別是什麼嗎?

這聽起來像一個很難回答的問題,因為這兩者似乎意味著同樣的事情。但它們之間的微妙區別至關重要。

有能力勝任是指有足夠的經驗和知識來完成各項工作;精通涉及知道為什麼你要用某種方式來做事情,以及如何融入到大局中。換句話說,精通型從業者總是有能力勝任,但反之可能不成立。

Dreyfus Model of Skill Acquisition》非常詳細地涵蓋了這個主題。雖然標題聽起來有點學術化,但是論文非常平易近人。

我建議閱讀原始資源材料以便於能更好地縱觀從初學者到專家的歷程。在這篇文章中,我將重點放在大多數軟體開發人員都會碰到的瓶頸:跨越從勝任到精通的溝壑。

因此,首先,我們要知道的是,這裡勝任的工作定義是“我知道該怎麼做” ——雖然過於簡化,但非常貼合我們的需要。公平地說,不管你工作在什麼樣的職業,知道怎麼做是非常重要的。如果你是一個程式設計師,學習該怎麼做是你工作的重要部分:

  • 我需要知道如何使用版本控制
  • 我需要知道如何使用一種一致的編碼風格
  • 我需要知道如何建立一個持續整合伺服器
  • 我需要知道如何查詢資料庫
  • 我需要知道如何實現響應式佈局
  • 我需要知道如何使用服務API

不要誤會我的意思:知道怎麼做,是非常重要的。不要停止去學習怎麼做,否則,你很快就會發現自己會失去這份工作。

但是,處於兩者之間的程式設計師往往會被卡住(很多因此而裹足不前),而他們被卡住的地方被認為是初學者和專家之間的差別,可以用來衡量你知道多少東西。這裡只有一半是正確的,並且它強調的是不那麼重要了的一半。

這正是精通的來源。並且精通的實質是“為什麼你要用某種方式做事” -——是單獨理解問題的每個部件與理解部分是如何融入整體之間的差異。

勝任和精通之間的差距可以解釋為什麼如此多的人想要攀登高層次的程式設計思想,例如設計模式

一個有能力勝任的程式設計師當然可以閱讀Memento Pattern並理解如何去實現它。他們或許甚至能夠確定可以應用模式的場景(可能在GUI中實施撤消操作)。但是,如果沒有更多地瞭解大局,他們仍可能會應用不適當的模式。

相比之下,精通型程式設計師則能夠確定何時Memento Pattern失敗(例如,在你要複製大量資料,或要有大量拷貝量的時候)。他們或許會知道一些可考慮的替代方案,在模式並非完美匹配的時候。他們還對如何在Memento背後採用基本概念有一些想法,然後應用這些想法以建立一個自定義更適合特定用例的解決方案。

更為重要的是,精通型程式設計師能夠識別正確和錯誤的設計模式——如果建設概念驗證功能,適當程式碼設計的問題可能就變得無關緊要。如果向初學者解釋程式碼庫,精通型開發者可能會堅持著重於程式碼實際上是做什麼的,而不會丟擲命名模式,並告訴新手“在問我任何問題之前,先去閱讀《Gang of Four》”。

所以精通還意味著有整體思維的靈活性。

模式,原則,風格,庫,語言功能——這些都是工具。但是,一個真正的精通型程式設計師會讓工具來匹配工作,而不是工作匹配工具。

許多人從來沒有專門專注於發展精通能力,因為坦率地說,勝任能力更直接。但是,如果你想要改變重點並得到一些幫助來攀登一段新的歷程,那麼不妨試試這些:

  • 解釋為什麼你想要用某種方式做事的原因推理,不依賴於通用的“最佳做法”或社群準則。單單隻在你要解決的當前問題的背景下討論利弊。
  • 瞭解的東西越少,瞭解得越深。然後嘗試在不同的上下文中加以應用,看看它們在哪裡有效,在哪裡無效。從失敗中尋找機會來尋求新的工具,可以幫助拓寬你的技能集的工具,但只在你已經確立了明確要求的時候。
  • 尋找其他人“打破規則”並取得成功的範例。偶爾打破自己的一些規則,看看是會傷害你,幫助你,還是沒有變化。
  • 挖掘基本的資源,而不僅僅是閱讀摘要。這需要更多的時間和精力,但可以幫助你弄清楚基礎和技術界限,同時也給你一個機會來生成由核心原則啟發的新想法。
  • 深入鑽研一個你不熟悉的專案,並且試著不依賴記憶套路、習慣和規則,找到你自己的做事方式。
  • 要求別人解釋為什麼他們要這樣做事,但不要只是接受教條式的推理。要求例子並詢問上下文背景,以便於你可以嘗試著設身處地地去想。這樣做是非常有價值的,因為可以讓你看到他們自然習慣中的長處和短處。
  • 挑選少數特定你只是擅長但不精通的技能,然後開發勝任的能力到極致,到幾乎偏執的程度。一旦你到達頂峰,檢查深刻且高度專業化知識的利弊。

關於精通,一次一步,有很長的路要走。你需要超凡程度的勝任才能夠在“懂和會”上脫穎而出——但即使是鬆散的明白“如何在正確的時間做正確的事情”也會帶你走得很遠。

關於精華的部分是:一旦你開始注重於精通程度,那麼你有很大的機會最終會發現解決謎團的正確路徑。

譯文連結:http://www.codeceo.com/article/trait-of-proficient-programmer.html
英文原文:The traits of a proficient programmer
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章