如何成為一名優(yōu)秀的程序員?
誰不想成為一名優(yōu)秀的程序員呢惨驶?
每年都有超過數(shù)十萬名計算機專業(yè)的畢業(yè)生進入社會白热,據不完全統(tǒng)計,進步最快的階段在剛參加工作的 1-3 年粗卜,同時眾多程序員中 3-5 年工作經驗的站大多數(shù)屋确,很多人在此階段達到瓶頸期,專業(yè)能力停滯不前续扔,所以如何持續(xù)進步成為一名優(yōu)秀的程序員攻臀?
回答這個問題很簡單,我們只需要找到作為一名優(yōu)秀的程序員纱昧,應該具有哪些特質茵烈,然后分析具備這些特質的條件。特質即結果砌些,條件即方法呜投,通過正確的方法得到想要的結果,從而成為一名優(yōu)秀的程序員存璃。
優(yōu)秀的程序員具備的特質有很多仑荐,這里我向大家分享一個我最看重也是最欣賞的一點特質就是:創(chuàng)造力。
為什么是創(chuàng)造力纵东?
回想一下當你遇到瓶勁期粘招,專業(yè)能力停滯不前時的感受:每次寫的代碼千篇一律、拿手的需求得心應手偎球,不拿手的需求每次都要 Google 一下粘貼復制洒扎、即使你寫了很多年代碼,做了無數(shù)的需求衰絮,但腦子里的存貨還是那些袍冷,僅僅是把別人的代碼拿來完成需求,并沒有把別人的知識變成你的知識猫牡。
如果說到了你的痛點胡诗,別急,還有淌友。
每次拿到需求都一籌莫展煌恢,但有的人卻能同時拿出好幾套解決方案,聽到新的技術名詞總是一臉疑惑震庭,而隔壁家的小孩卻早已掌握瑰抵。
當然,這是你的痛點器联,也是我的痛點二汛。
日常逛 GitHub 是我的習慣婿崭,每次看到好玩的開源庫,我嘗嘗在感嘆习贫,為什么我寫不出這樣高質量的代碼?為什么想不到這么巧妙的解決方案千元?
其中之一的原因就是:優(yōu)秀的人在創(chuàng)造代碼苫昌,而我只是在粘貼復制代碼。
擁有好的創(chuàng)造力也就意味著你擁有不錯的解決問題的能力幸海。
如何提高創(chuàng)造力祟身?
擁有創(chuàng)造力是我們的目標,根據前面說的:特質即結果物独,條件即方法⊥嗔颍現(xiàn)在我們就來尋求一下通過哪些方法來提高自己的創(chuàng)造力。
豐富的知識儲備
首先巧妙高質量的代碼不是憑空蹦出來的挡篓,而是需要知識儲備的婉陷,作為程序員我們每天和各種各樣的 API 打交道,你知道哪些 API 可以實現(xiàn)怎樣的需求官研,你做起來就會得心應手秽澳,你不知道就會在做的時候一籌莫展,所以我一直認為寫代碼不是一個拼智商的工作戏羽,而是一個拼經驗拼知識儲備的工作担神。
擁有豐富的知識儲備,需要有獲取知識和結構化知識的能力始花,在這里小跑一下題妄讯,同樣我們可以把知識儲備當成一個小目標,把獲取知識和結構化知識視為實現(xiàn)目標的方法酷宵,以此類推你可以不斷拆解亥贸,以此來發(fā)現(xiàn)自己已具備哪些特質,需要朝著哪些特質努力浇垦,并且找到實現(xiàn)這些特質的條件砌函。
獲取知識
獲取知識的方法很簡單,知識可以分為新知識和舊知識溜族,舊知識就是我們已經了解的讹俊,新知識就是隨著技術的發(fā)展而順應趨勢出現(xiàn)的』褪悖可能有同學會問:舊知識為什么還要獲取呢仍劈?一葉障目明白吧?正因為是舊知識我們很容易會盲目相信自我寡壮,如果有錯誤的理解會一直根深蒂固的留在我們的腦子中贩疙,所以舊的知識也要時不時拿出來篩選篩選讹弯,查漏補缺。同時在舊的知識上面这溅,我們有一定自己的理解组民,在遇到相左的情況時,也能更快的分辨出真假悲靴。
對于舊的知識臭胜,我的方法是去多看不同人實現(xiàn)的代碼,需求一樣癞尚,實現(xiàn)的方式會千差萬別耸三,GitHub 是一個非常好滿足這一方法的地方,很早就之前就有人和我說過:「永遠要寫不一樣的代碼浇揩,這樣才會進步」仪壮。
新知識就簡單了,最正確的途徑就是官網胳徽、官方論壇积锅、官方的 GitHub 倉庫等等,一手新內容一定是官方頻道最新更新的养盗,不要等著每天就看看一些技術公眾號來幫我們介紹新技術乏沸,自己動手去了解是最快最直接最正確的方法。
結構化知識
當你擁有很多知識的時候爪瓜,就需要去掌握組織蹬跃、結構化知識的能力。很多時候铆铆,我們一直在努力學習蝶缀,看了很多、也實踐了很多薄货,但遇到稍微有點變式的問題翁都,就又會一籌莫展,這時你需要把腦子中的知識谅猾,組織起來柄慰,加強之間的聯(lián)系,多種知識建立連接税娜,才能在遇到問題的時候組合出不同的解決方案坐搔。
我在這方面常用的方法就是,先按最小單元拆分敬矩,然后已最小單元為基礎進行查漏概行,看看有沒有忽略的地方,然后去嘗試通過各種方法去找尋各單元之間的聯(lián)系弧岳。舉個例子凳忙,在 Android 的官網中业踏,我們可以查到在 Android SDK 中提供執(zhí)行后臺任務的 API 有 4 種:
就像上圖所示,4 種每一個都是最小單元涧卵,當我都清楚每一個是干什么的勤家、該如何使用之后,就要去找尋這 4 種單元之間的關系柳恐,這張圖很好的詮釋的它們之間的關系伐脖,當我理解完這張圖之后,以后再遇到類似的需求胎撤,就可以很好的拿出合適的解決方案了晓殊。
扎實的基礎
雖然我們有的在做客戶端開發(fā)断凶,有的做前端開發(fā)伤提、有的在做服務端開發(fā),從大類上劃分我們都同屬于計算機學科认烁≈啄校基礎方面我們可以劃分為兩大類:計算機基礎和專業(yè)基礎。
計算機基礎
這方面就是我們老生常談的一些東西了却嗡,例如:數(shù)據與數(shù)據結構舶沛,算法、網絡基礎窗价、操作系統(tǒng)基礎如庭、設計模式等等,掌握這些方面撼港,不僅能夯實我們基礎坪它,還能幫助我們在與不同領域的人協(xié)作的時候,減少不必要的麻煩降低成本帝牡,拓寬我們的技術視野往毡,加強技術棧。
有人肯定會說你說的這些我都知道啊靶溜,可是我問你开瞭,你真的都懂了嗎?問幾個簡單的問題:
數(shù)據和數(shù)據機構有什么關系罩息?
數(shù)據結構和算法又有什么關系嗤详?
哪些是基礎數(shù)據結構,哪些是高級數(shù)據結構瓷炮?二者之間有什么聯(lián)系断楷?
歡迎在評論區(qū)分享你的看法~
專業(yè)基礎
這方面就看各自的專業(yè)了,除了小白崭别,大多數(shù)人都知道自己專業(yè)領域中冬筒,哪些是基礎內容恐锣,哪些是高級內容,一切源于基礎舞痰,高級內容是在基礎之上加以擴展優(yōu)化出來的土榴。小白也許會問了,那我們怎么辦跋炫!玷禽?我只能說你現(xiàn)在了解、學習呀打、掌握的都是基礎...把現(xiàn)有的先吸收整理好矢赁,等你成長了,再回頭看看贬丛。
所以在這方面撩银,我能提供給大家的經驗,就是寫一份思維導圖豺憔,劃分出自己當前專業(yè)下额获,需要掌握的計算機基礎和專業(yè)基礎有哪些,總結出一份技能圖譜恭应,然后查漏補缺抄邀。
分享一份我曾經總結的 Android 技能圖譜,看似簡單昼榛,但擴展開其實內容很多境肾。
學習能力
又是一個很常見的話題,我們從幼兒園就開始上學胆屿,一直到大學畢業(yè)奥喻,學習了十幾年,但是 ... 你真的會學習嗎莺掠?
一個完整學習過程的閉環(huán)包括三部分:學習衫嵌、記憶、傳授彻秆。這里簡單和大家分享一下我的理解楔绞,如果你對此很有興趣,可以評論告訴我唇兑,我專門寫一篇文章像大家分享一下酒朵。
學習
同樣學習也分為學習新的東西和舊的東西。在學習舊的東西的時候扎附,我們是通過深度聯(lián)想來學習的蔫耽,用我們已知的理解來檢索式學習,不斷過濾我們已有知識概念,將新的理解與之前的理解建立聯(lián)系加深記憶匙铡,這可以看作一個更新補充我們現(xiàn)有知識的過程图甜。學習新的知識的時候,我們是通過字面聯(lián)想來學習的鳖眼,因為我們沒有舊知識來做檢索黑毅,所以我們只能通過文字上的理解來學習,這時就需要我們在學習的過程中钦讳,提取關鍵的概念矿瘦,建立心智模型,同時需要我們拿其他方面已建立的心智模型來輔助我們記憶愿卒,這是一個新增的過程缚去。
記憶
從小到大的上學經歷,告訴我們要通過記憶來學習琼开,在我看來學習和記憶應該相輔相成易结。學習是理解的過程,理解之后就自然記憶了稠通,而不是通過死記硬背強行把知識留在我們腦中衬衬,到頭來我們僅僅記得兩個字:學過买猖。最佳的記憶方式是:我們通過已有的知識來理解新的東西改橘,將各個知識建立起聯(lián)系來加深記憶,從而把新的東西轉化成自己的東西玉控。舉個通俗的例子飞主,你有一位很要好的朋友,你是如何記住他是你很要好的朋友的高诺?在你的腦海中碌识,不是因為你單單記住了他這個人,而是你一想起他虱而,就想到了你們之間發(fā)生的事情筏餐,你的這位好朋友就相當于一個記憶點,而你們之前發(fā)生的事情牡拇,就是建立起來的聯(lián)系魁瞪,你們是通過聯(lián)系而產生的記憶。
傳授
這是檢驗你學習成果的最好方式惠呼。當你能正確的把學到的知識教給別人导俘,這才說明你真的學會了,因為從你口中組織語言說出的東西剔蹋,才是你自己的理解旅薄,這不是復述那么簡單,復述和傳授有著本質的區(qū)別泣崩,同時當你這篇文章看到這里的時候少梁,我也很期待你的回復洛口,希望你可以告訴我,我寫的這些對你來說是否好理解凯沪。當你下一次向別人分享東西的時候绍弟,可以分析一下自己這段是復述還是傳授,當然在你聽別人分析的時候著洼,不一定是你理解不夠樟遣,也可能是說的那個人自己理解不夠,導致你很難理解身笤。
最后
說了這么多豹悬,我們再看一下開頭這個問題:如何成為一名優(yōu)秀的程序員?
我說了優(yōu)秀的程序員是具有創(chuàng)造力的液荸,具備創(chuàng)造力的必要條件是具有:豐富的知識儲備瞻佛、扎實的基礎、良好的學習能力娇钱。
當我們把這些倒過來看伤柄,其實正是我們從上學到工作所經歷的過程,十幾年的學習生涯文搂,無時不刻在鍛煉我們的學習能力适刀,上了大學,各種各樣的計算機基礎課煤蹭,工作之后我們進入了不同的專業(yè)領域笔喉,隨著工作開始儲備我們的知識庫。
所以優(yōu)秀的程序員和我們走過的是同樣的路硝皂,我們還在原地掙扎是因為我們在這條路上遇到了眾多問題還沒有解決常挚,而優(yōu)秀的人也只是先我們一步解決了那些問題,所以大家要努力加油呀稽物!
如果你覺得這篇文章還不錯奄毡,歡迎分享、轉發(fā)贝或、點贊吼过、關注、這對我有很大的幫助傀缩。
最后的最后那先,上一篇文章《Android 工程師開發(fā) iOS 是怎樣的體驗?》發(fā)布后赡艰,公眾號這邊還好售淡,在掘金那邊,真是鍵盤橫飛,受到了很多冷嘲熱諷揖闸,好傷心揍堕,寫這篇文章的緣由是因為我第一次嘗試去開發(fā)了一款 iOS App,作為 Android 工程師很激動汤纸,想通過這篇文章衩茸,與同樣是參與過兩端開發(fā)的小伙伴們,交換一下想法贮泞,沒想到...??楞慈,當然我的 App 也順利上線啦,分享一張截圖給你們:
App 的名字叫 Time Fly啃擦,很多人妄圖做出翻天覆地的產品囊蓝,把人性研究到極致,然后悄聲無息的偷走你的時間令蛉,這款產品的邏輯很簡單聚霜,以一條時間軸為載體,幫助大家記錄每天的日常珠叔,當然之后的版本還有很多有趣蝎宇、異想天開的想法在設計中,希望這款 App 可以幫你找回被偷走的時間祷安。
目前只有 iOS 版本姥芥,Android 版本還在計劃中,之前調研了一下使用 Kotlin 的跨平臺功能來為兩端做非 UI 代碼的實現(xiàn)辆憔,不過這個方案還在考慮中撇眯。
在評論區(qū)分享你對本篇文章的想法报嵌,我會隨機抽幾位小伙伴送出 Time Fly 的兌換碼虱咧。
感謝,我們下期再見??锚国。