你知道有能力勝任和精通之間的區(qū)別是什么嗎?今天動(dòng)寶兒來給大家講解一下,讓大家努力做精通型的程序員。
這聽起來像一個(gè)很難回答的問題,因?yàn)檫@兩者似乎意味著同樣的事情。但它們之間的微妙區(qū)別至關(guān)重要。
有能力勝任是指有足夠的經(jīng)驗(yàn)和知識(shí)來完成各項(xiàng)工作;精通涉及知道為什么你要用某種方式來做事情,以及如何融入到大局中。換句話說,精通型從業(yè)者總是有能力勝任,但反之可能不成立。
本篇文章主旨是大多數(shù)軟件開發(fā)人員都會(huì)碰到的瓶頸:跨越從勝任到精通的溝壑。
因此,首先,我們要知道的是,這里勝任的工作定義是“我知道該怎么做”——雖然過于簡(jiǎn)化,但非常貼合我們的需要。公平地說,不管你工作在什么樣的職業(yè),知道怎么做是非常重要的。如果你是一個(gè)程序員,學(xué)習(xí)該怎么做是你工作的重要部分:
• 我需要知道如何使用版本控制
• 我需要知道如何使用一種一致的編碼風(fēng)格
• 我需要知道如何建立一個(gè)持續(xù)集成服務(wù)器
• 我需要知道如何查詢數(shù)據(jù)庫(kù)
• 我需要知道如何實(shí)現(xiàn)響應(yīng)式布局
• 我需要知道如何使用服務(wù)API
不要誤會(huì)我的意思:知道怎么做,是非常重要的。不要停止去學(xué)習(xí)怎么做,否則,你很快就會(huì)發(fā)現(xiàn)自己會(huì)失去這份工作。
但是,處于兩者之間的程序員往往會(huì)被卡住(很多因此而裹足不前),而他們被卡住的地方被認(rèn)為是初學(xué)者和大神之間的差別,可以用來衡量你知道多少東西。這里只有一半是正確的,并且它強(qiáng)調(diào)的是不那么重要了的一半。
這正是精通的來源。并且精通的實(shí)質(zhì)是“為什么你要用某種方式做事”-——是單獨(dú)理解問題的每個(gè)部件與理解部分是如何融入整體之間的差異。
勝任和精通之間的差距可以解釋為什么如此多的人想要攀登高層次的編程思想,例如設(shè)計(jì)模式。
一個(gè)有能力勝任的程序員當(dāng)然可以閱讀MementoPattern并理解如何去實(shí)現(xiàn)它。他們或許甚至能夠確定可以應(yīng)用模式的場(chǎng)景。但是,如果沒有更多地了解大局,他們?nèi)钥赡軙?huì)應(yīng)用不適當(dāng)?shù)哪J健?/p>
相比之下,精通型程序員則能夠確定何時(shí)MementoPattern失敗。他們或許會(huì)知道一些可考慮的替代方案,在模式并非很好匹配的時(shí)候。他們還對(duì)如何在Memento背后采用基本概念有一些想法,然后應(yīng)用這些想法以創(chuàng)建一個(gè)自定義更適合特定用例的解決方案。
更為重要的是,精通型程序員能夠識(shí)別正確和錯(cuò)誤的設(shè)計(jì)模式——如果建設(shè)概念驗(yàn)證功能,適當(dāng)代碼設(shè)計(jì)的問題可能就變得無關(guān)緊要。如果向初學(xué)者解釋代碼庫(kù),精通型開發(fā)者可能會(huì)堅(jiān)持著重于代碼實(shí)際上是做什么的,而不會(huì)拋出命名模式,并告訴新手“在問我任何問題之前,先去閱讀《GangofFour》”。
所以精通還意味著有整體思維的靈活性。
模式,原則,風(fēng)格,庫(kù),語言功能——這些都是工具。但是,一個(gè)真正的精通型程序員會(huì)讓工具來匹配工作,而不是工作匹配工具。
許多人從來沒有專門專注于發(fā)展精通能力,因?yàn)樘孤实卣f,勝任能力更直接。但是,如果你想要改變重點(diǎn)并得到一些幫助來攀登一段新的歷程,那么不妨試試這些:
• 解釋為什么你想要用某種方式做事的原因推理,不依賴于通用的“最佳做法”或社區(qū)準(zhǔn)則。單單只在你要解決的當(dāng)前問題的背景下討論利弊。
• 了解的東西越少,了解得越深。然后嘗試在不同的上下文中加以應(yīng)用,看看它們?cè)谀睦镉行В谀睦餆o效。從失敗中尋找機(jī)會(huì)來尋求新的工具,可以幫助拓寬你的技能集的工具,但只在你已經(jīng)確立了明確要求的時(shí)候。
• 尋找其他人“打破規(guī)則”并取得成功的范例。偶爾打破自己的一些規(guī)則,看看是會(huì)傷害你,幫助你,還是沒有變化。
• 挖掘基本的資源,而不僅僅是閱讀摘要。這需要更多的時(shí)間和精力,但可以幫助你弄清楚基礎(chǔ)和技術(shù)界限,同時(shí)也給你一個(gè)機(jī)會(huì)來生成由核心原則啟發(fā)的新想法。
• 深入鉆研一個(gè)你不熟悉的項(xiàng)目,并且試著不依賴記憶套路、習(xí)慣和規(guī)則,找到你自己的做事方式。
• 要求別人解釋為什么他們要這樣做事,但不要只是接受教條式的推理。要求例子并詢問上下文背景,以便于你可以嘗試著設(shè)身處地地去想。這樣做是非常有價(jià)值的,因?yàn)榭梢宰屇憧吹剿麄冏匀涣?xí)慣中的長(zhǎng)處和短處。
• 挑選少數(shù)特定你只是擅長(zhǎng)但不精通的技能,然后開發(fā)勝任的能力到top,到幾乎偏執(zhí)的程度。一旦你到達(dá)頂峰,檢查深刻且高度專業(yè)化知識(shí)的利弊。
關(guān)于精通,一次一步,有很長(zhǎng)的路要走。你需要超凡程度的勝任才能夠在“懂和會(huì)”上脫穎而出——但即使是松散的明白“如何在正確的時(shí)間做正確的事情”也會(huì)帶你走得很遠(yuǎn)。
關(guān)于精華的部分是:一旦你開始注重于精通程度,那么你有很大的機(jī)會(huì)發(fā)現(xiàn)解決謎團(tuán)的正確路徑。