精通型程式設計師的特點
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
你知道有能力勝任和精通之間的區別是什麼嗎?
這聽起來像一個很難回答的問題,因為這兩者似乎意味著同樣的事情。但它們之間的微妙區別至關重要。
有能力勝任是指有足夠的經驗和知識來完成各項工作;精通涉及知道為什麼你要用某種方式來做事情,以及如何融入到大局中。換句話說,精通型從業者總是有能力勝任,但反之可能不成立。
《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
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 程式設計老手的哪些特點,是值得新手程式設計師學習的?程式設計師
- “應對型遊戲”和“計劃型遊戲”的設計特點遊戲
- 我眼中的中美印日四國程式設計師的特點程式設計師
- 好程式設計師Java教程分享Java的五大特點程式設計師Java
- 程式設計師的缺點程式設計師
- 程式設計師的(血型)型別程式設計師型別
- 偉大程式設計師的十個特質程式設計師
- 美女程式設計師觀點:程式設計師最重要的非程式設計技巧程式設計師
- 程式設計師被懟!HR:對不起,我們不招“精通Excel”的程式設計師程式設計師Excel
- 優秀的程式設計師的七個特質程式設計師
- 五種型別的程式設計師型別程式設計師
- 程式設計師的五種型別程式設計師型別
- 程式設計師的四種型別程式設計師型別
- 5種型別的程式設計師型別程式設計師
- 揭祕IT人才特點:中美印日四國程式設計師比較程式設計師
- 優秀程式設計師的6個共同特質程式設計師
- 偉大程式設計師的十大特質程式設計師
- Devops區別於程式設計師和系統管理員的特點? - Redditdev程式設計師
- 五年程式設計師人生的點點滴滴程式設計師
- 優秀程式設計師的首要特質:判斷力程式設計師
- 【雙十一特輯】愛心程式碼(程式設計師的浪漫)-李峋程式設計師
- 函數語言程式設計functional programming的特點函數程式設計Function
- 程式設計師最重要的一點_面向金錢程式設計程式設計師
- 科技愛好者週刊(第 174 期):全能程式設計師 vs 特長程式設計師程式設計師
- 好程式設計師web前端分享JavaScript到底是什麼?特點有哪些?程式設計師Web前端JavaScript
- 做任何職業都不要做程式設計師,特別是Java程式設計師,血淋淋的教訓程式設計師Java
- 好程式設計師Java教程分享Java難點解析之泛型程式設計師Java泛型
- 關於程式設計師的一點感想程式設計師
- PHP程式設計師的40點陋習PHP程式設計師
- 程式設計師的“非程式設計師”之路程式設計師
- 52歲程式設計師的觀點:程式設計要快還是慢?程式設計師
- 程式設計師的定位:『應用型工程師』或『科研型工程師』程式設計師工程師
- 一個想轉型的程式設計師的困惑!程式設計師
- 和程式設計師約會的優點和缺點程式設計師
- 以前的程式設計師,現在的程式設計師程式設計師
- 程式設計師必看的書-Ruby程式設計師程式設計師
- 《程式設計師的春天:EOM與程式設計師》程式設計師
- Lisp程式設計師眼中的其他程式設計師Lisp程式設計師