今天的文章來自我知乎問題的回答:電腦科學與技術專業的學生要怎樣做才能避免成為低階的碼農?
我從大到小,總結出了四條建議。如果你能做到,你一定不會只是一個普通的碼農。
端正心態
制定目標我們人人都會,當我們立下flag:想要成為優秀的工程師、想要學會TensorFlow的時候,其實就是樹立了目標了。然而樹立目標並沒有什麼卵用,目標還是目標,你還是你,不說接近並且達到目標了,就連往目標移動的趨勢都沒有。這也是絕大多數人中途放棄的原因,所以在一切的一切開始之前,首先要端正心態。
世上沒有一蹴而就的事情,想要提升自己的實力,往上走是一個漫長的和自己對抗的過程,不是今天打了雞血看了幾篇技術文章,明天刷了兩道LeetCode就能變強的。
巴菲特說過一段話,我們長久以來持續不斷的努力,就像是在一個長長的斜坡上往下滾雪球。這個斜坡太長了也太平緩了,以至於一開始的時候幾乎看不出來它是一個斜坡,雪球滾起來也無比地緩慢。但是,只要我們堅持下去,它就會越來越快,越到後面雪球也越大,給你的收穫也就越大。
我現在越來越覺得,所謂的天賦其實很多是一個人的耐心而不是聰慧。你能有多耐得下性子,能夠有多熬得住,你就能把事情做得有多好。
很多人聽到這些道理估計都怕了,擔心自己熬不下去,但好訊息是提升技術實力的斜坡其實非常陡峭,比大家想象的要陡峭的多。
堅持一個月能學會一門語言,堅持半年能夠熟悉一個領域的技術,堅持兩到三年就可以成為一個優秀的工程師。這其實已經非常非常迅速了,不相信的話,我隨便舉個例子,你們可以去看看《人民的名義》和《大明王朝1566》這兩部劇,去看看想要在官場混得如魚得水,把事情做得滴水不漏有多難。我個人的感覺是想要從愣頭青變成官場老油條,至少需要十年起步。相比之下,工程師的兩三年成才,是不是已經快得多了?
制定目標和拆解目標
很多大神給你分享了許多方法論,都很有道理。但是真正讓你實操,你可能還是不知道該從何做起。這裡面的原因其實很簡單,因為你的目標本身就沒有找好。
在績效考核領域有一個著名的SMART原則,分別是specific,mesureable,attainable,relevant和time-bound。翻譯過來就是具體的、可衡量的、可實現的、相關的以及有時效的。舉個簡單的例子好了,我們想要提升自己成為高階碼農,那麼問題來了,什麼樣的碼農是高階碼農?我們怎麼量化指標?這個目標有哪些相關的小目標?你準備用多久達到?
這幾個問題問一問自己,是不是感覺立刻就清楚了很多?不再像是剛才那麼迷茫了?
我們都知道做事前要有目標,但是很少有人清楚目標分為兩種。一種是用來持續努力逐漸逼近的長期目標,另外一種是當下可以立即執行的短期目標。在你努力的過程當中,短期目標隨著你進度的不斷推進,是一直會變化的。而長期目標,相對穩定,幾年內保持不變。
就拿我自己來說吧,成為頂級公眾號,坐擁10w以上的粉絲是我的長期目標,當下把頭條的閱讀提升到600以上是我的短期目標。長期目標可能需要幾年甚至十幾年的時間,但短期目標是實時迭代的,也許下週我就達成了。到時候就會指定新的目標。
人很多時候迷茫,主要原因有兩個,一個是不確定做什麼對我們的目標有幫助,第二個是不知道如何找到目標當中的執行點。針對這兩個問題,最好的辦法就是拆分。把目標拆分地越細越好。越細的目標越明確,越明確越容易執行。
比如你想要進入BAT,針對這個大目標你什麼也做不了。但是當你拆解出夯實基礎、積累經驗、準備面試這三個中等目標之後,你就不是一頭蒙了。如果你繼續拆分,把夯實基礎拆分成熟練掌握Java,再把熟練掌握Java拆分成了解Java中物件導向的概念,那麼你當下就很明確地知道你要做什麼了。如果在這個過程當中再能結合上上剛才說的SMART原則,那麼你的目標感以及驅動力也會更強。
知其然更要知其所以然
前面講了一些總的方法,後來來聊聊一些具體的舉措,可以實實在在地應用起來幫到大家。這一點我在之前的文章當中介紹過很多次,是我個人總結出來非常非常有效的方法。
程式設計師的成長貫穿著bug,碰到bug與各種問題是必然的。但是遇到bug之後每個人不同的處理方式是完全不同的。
打個比方說,寫java的時候,少配置了配置檔案,導致環境異常,報錯。有的人是什麼也不做,這次遇到了這種情況,花了很多時間查資料解決了,下次再遇到還是要查資料。有的人呢,則是記住了這個異常發生的原因,下次再遇到就不用查資料了,直接可以解決。還有的人呢,不僅記住了異常的原因,而且搞清楚了問題產生的背景和原因,為什麼需要配置檔案,這個配置檔案起到了什麼作用。這樣,不僅下次遇到相同的問題能解決, 遇到近似的問題,都能想明白該怎麼解決。而且解決問題背後帶來的就是技術的成長和突破。
我以前剛畢業做java的時候,git、maven都沒有用過。maven非常容易出問題,寫過java的應該都懂,稍微一個包沒配好,或者是版本不對就會報錯。一開始的時候,都是師兄幫我解決問題。後來我發現這樣我根本沒有長進,於是我試著自己去解決。
一開始的時候要花很多時間,才能摸索出來問題的原因。後來,我花了點時間學習了一下maven的原理,以及和spring以及tomcat等框架執行的時候是怎麼配合的。很快,我不僅可以解決自己的環境問題,還能幫助別人搞定別人搞不定的問題了。我技術的飛速提升正是在這個階段。
做程式設計師這行,需要技術積累。技術怎麼積累?僅僅靠我們自己去學習鑽研也是不夠的,我們在實踐當中積累的經驗也是非常重要的一個部分。利用好每一次遇到問題的機會,去學習到一個原理或者是一種方法,日積月累,你會發現好像自己什麼都懂一點了,好像很多零碎的只是拼湊起來了。等到了這個時候,你離技術大牛也就不遠了。
多做10%
最後一條其實有些普適性,不僅僅適合程式設計師。
怎麼樣能從普通到優秀,從優秀到更優秀?
總結來總結去,無非是付出更多的努力,以及用更高的標準要求自己。我個人把這條量化一下,設計成方法論,就是一句話,那就是多做10%。
你我都知道,追求決定成就。如果你追求成就大師,即使你成不了大師也能成為專家。如果你追求成專家,你可能只能成學者,如果你追求學者,可能你只能做一個普通員工,如果你追求普通員工,可能連工作也找不到……
但必須承認,不是所有人都敢於設定高標準。也不是所有人都有能力追求高標準,但多做10%卻是完完全全可行的。
這樣的例子太多了,比如老闆讓你做一份資料,你用了一個小時跑完了資料,是不是可以多用十分鐘寫一段python做幾張圖表呢?你花了一下午的時間開發了某一個功能,是不是可以多花二十分鐘多review一下自己的程式碼找找潛在的bug呢?你花了很多時間學了一點新技術,是不是也可以再多花一點點時間記錄下來方便以後複習呢?
我剛畢業的第一年是我技術成長非常迅速的時間,那時候當時的主管每週都會給我們做技術分享。其他人都是帶著耳朵來聽,聽完就結束,只有我一邊聽一邊記,之後還花了點時間把筆記整理了一下。
結果靠著筆記記錄的內容,以及充分的準備,我用一年的工作經驗面試過了阿里高階工程師(而且我還是本科生),這也是阿里晉升的最快速度。不僅如此,我把這份筆記借給過許多朋友,幫助他們也獲得了不錯的機會。
仔細想想,其實這也非常符合邊際效益,很多事情邊際效益是先遞增再遞減的,好比考試,從0分考到60分其實要比從60分考到80分難得多。因為能考到60分,說明大部分基礎題都會了,只需要再鞏固一點,再學一點附加題,完全可以考到80。反而是從80分考到90分很難,因為容易做的題都做了,剩下的都是硬骨頭。但很多人付出了許多努力,剛做到60分就迫不及待地放棄了,不得不說是非常可惜的。
突破自己,其實並不需要我們做驚天動地的大事,很多時候就是從這些看起來很小的事情上入手的。
今天的文章就到這裡,衷心祝願大家每天都有所收穫。如果還喜歡今天的內容的話,請來一個三連支援吧~(點贊、關注、轉發)
本文使用 mdnice 排版
{{uploading-image-338908.png(uploading...)}}