如何成爲一名優秀的程序員?

如何成爲一名優秀的程序員?

誰不想成爲一名優秀的程序員呢?前端

每一年都有超過數十萬名計算機專業的畢業生進入社會,據不徹底統計,進步最快的階段在剛參加工做的 1-3 年,同時衆多程序員中 3-5 年工做經驗的站大多數,不少人在此階段達到瓶頸期,專業能力停滯不前,因此如何持續進步成爲一名優秀的程序員?程序員

回答這個問題很簡單,咱們只須要找到做爲一名優秀的程序員,應該具備哪些特質,而後分析具有這些特質的條件。特質即結果,條件即方法,經過正確的方法獲得想要的結果,從而成爲一名優秀的程序員。算法

優秀的程序員具有的特質有不少,這裏我向你們分享一個我最看重也是最欣賞的一點特質就是:創造力。設計模式

爲何是創造力?

回想一下當你遇到瓶勁期,專業能力停滯不前時的感覺:每次寫的代碼千篇一概、拿手的需求駕輕就熟,不拿手的需求每次都要 Google 一下粘貼複製、即便你寫了不少年代碼,作了無數的需求,但腦子裏的存貨仍是那些,僅僅是把別人的代碼拿來完成需求,並無把別人的知識變成你的知識。markdown

若是說到了你的痛點,別急,還有。網絡

每次拿到需求都束手無策,但有的人卻能同時拿出好幾套解決方案,聽到新的技術名詞老是一臉疑惑,而隔壁家的小孩卻早已掌握。數據結構

固然,這是你的痛點,也是個人痛點。app

平常逛 GitHub 是個人習慣,每次看到好玩的開源庫,我嚐嚐在感嘆,爲何我寫不出這樣高質量的代碼?爲何想不到這麼巧妙的解決方案?數據結構和算法

其中之一的緣由就是:優秀的人在創造代碼,而我只是在粘貼複製代碼。oop

擁有好的創造力也就意味着你擁有不錯的解決問題的能力。

如何提升創造力?

擁有創造力是咱們的目標,根據前面說的:特質即結果,條件即方法。如今咱們就來尋求一下經過哪些方法來提升本身的創造力。

豐富的知識儲備

首先巧妙高質量的代碼不是憑空蹦出來的,而是須要知識儲備的,做爲程序員咱們天天和各類各樣的 API 打交道,你知道哪些 API 能夠實現怎樣的需求,你作起來就會駕輕就熟,你不知道就會在作的時候束手無策,因此我一直認爲寫代碼不是一個拼智商的工做,而是一個拼經驗拼知識儲備的工做。

擁有豐富的知識儲備,須要有獲取知識和結構化知識的能力,在這裏小跑一下題,一樣咱們能夠把知識儲備當成一個小目標,把獲取知識和結構化知識視爲實現目標的方法,以此類推你能夠不斷拆解,以此來發現本身已具有哪些特質,須要朝着哪些特質努力,而且找到實現這些特質的條件。

獲取知識

獲取知識的方法很簡單,知識能夠分爲新知識和舊知識,舊知識就是咱們已經瞭解的,新知識就是隨着技術的發展而順應趨勢出現的。可能有同窗會問:舊知識爲何還要獲取呢?一葉障目明白吧?正由於是舊知識咱們很容易會盲目相信自我,若是有錯誤的理解會一直根深蒂固的留在咱們的腦子中,因此舊的知識也要時不時拿出來篩選篩選,查漏補缺。同時在舊的知識上面,咱們有必定本身的理解,在遇到相左的狀況時,也能更快的分辨出真假。

對於舊的知識,個人方法是去多看不一樣人實現的代碼,需求同樣,實現的方式會千差萬別,GitHub 是一個很是好知足這一方法的地方,很早就以前就有人和我說過:「永遠要寫不同的代碼,這樣纔會進步」。

新知識就簡單了,最正確的途徑就是官網、官方論壇、官方的 GitHub 倉庫等等,一手新內容必定是官方頻道最新更新的,不要等着天天就看看一些技術公衆號來幫咱們介紹新技術,本身動手去了解是最快最直接最正確的方法。

結構化知識

當你擁有不少知識的時候,就須要去掌握組織、結構化知識的能力。不少時候,咱們一直在努力學習,看了不少、也實踐了不少,但遇到稍微有點變式的問題,就又會束手無策,這時你須要把腦子中的知識,組織起來,增強之間的聯繫,多種知識創建鏈接,才能在遇到問題的時候組合出不一樣的解決方案。

我在這方面經常使用的方法就是,先按最小單元拆分,而後已最小單元爲基礎進行查漏,看看有沒有忽略的地方,而後去嘗試經過各類方法去找尋各單元之間的聯繫。舉個例子,在 Android 的官網中,咱們能夠查到在 Android SDK 中提供執行後臺任務的 API 有 4 種:

就像上圖所示,4 種每個都是最小單元,當我都清楚每個是幹什麼的、該如何使用以後,就要去找尋這 4 種單元之間的關係,這張圖很好的詮釋的它們之間的關係,當我理解完這張圖以後,之後再遇到相似的需求,就能夠很好的拿出合適的解決方案了。

紮實的基礎

雖然咱們有的在作客戶端開發,有的作前端開發、有的在作服務端開發,從大類上劃分咱們都同屬於計算機學科。基礎方面咱們能夠劃分爲兩大類:計算機基礎和專業基礎。

計算機基礎

這方面就是咱們老生常談的一些東西了,例如:數據與數據結構,算法、網絡基礎、操做系統基礎、設計模式等等,掌握這些方面,不只能夯實咱們基礎,還能幫助咱們在與不一樣領域的人協做的時候,減小沒必要要的麻煩下降成本,拓寬咱們的技術視野,增強技術棧。

有人確定會說你說的這些我都知道啊,但是我問你,你真的都懂了嗎?問幾個簡單的問題:

數據和數據機構有什麼關係?

數據結構和算法又有什麼關係?

哪些是基礎數據結構,哪些是高級數據結構?兩者之間有什麼聯繫?

歡迎在評論區分享你的見解~

專業基礎

這方面就看各自的專業了,除了小白,大多數人都知道本身專業領域中,哪些是基礎內容,哪些是高級內容,一切源於基礎,高級內容是在基礎之上加以擴展優化出來的。小白也許會問了,那咱們怎麼辦啊?我只能說你如今瞭解、學習、掌握的都是基礎...把現有的先吸取整理好,等你成長了,再回頭看看。

因此在這方面,我能提供給你們的經驗,就是寫一份思惟導圖,劃分出本身當前專業下,須要掌握的計算機基礎和專業基礎有哪些,總結出一份技能圖譜,而後查漏補缺。

分享一份我曾經總結的 Android 技能圖譜,看似簡單,但擴展開其實內容不少。

學習能力

又是一個很常見的話題,咱們從幼兒園就開始上學,一直到大學畢業,學習了十幾年,可是 ... 你真的會學習嗎?

一個完整學習過程的閉環包括三部分:學習、記憶、傳授。這裏簡單和你們分享一下個人理解,若是你對此頗有興趣,能夠評論告訴我,我專門寫一篇文章像你們分享一下。

學習

一樣學習也分爲學習新的東西和舊的東西。在學習舊的東西的時候,咱們是經過深度聯想來學習的,用咱們已知的理解來檢索式學習,不斷過濾咱們已有知識概念,將新的理解與以前的理解創建聯繫加深記憶,這能夠看做一個更新補充咱們現有知識的過程。學習新的知識的時候,咱們是經過字面聯想來學習的,由於咱們沒有舊知識來作檢索,因此咱們只能經過文字上的理解來學習,這時就須要咱們在學習的過程當中,提取關鍵的概念,創建心智模型,同時須要咱們拿其餘方面已創建的心智模型來輔助咱們記憶,這是一個新增的過程。

記憶

從小到大的上學經歷,告訴咱們要經過記憶來學習,在我看來學習和記憶應該相輔相成。學習是理解的過程,理解以後就天然記憶了,而不是經過死記硬背強行把知識留在咱們腦中,到頭來咱們僅僅記得兩個字:學過。最佳的記憶方式是:咱們經過已有的知識來理解新的東西,將各個知識創建起聯繫來加深記憶,從而把新的東西轉化成本身的東西。舉個通俗的例子,你有一位很要好的朋友,你是如何記住他是你很要好的朋友的?在你的腦海中,不是由於你單單記住了他這我的,而是你一想起他,就想到了大家之間發生的事情,你的這位好朋友就至關於一個記憶點,而大家以前發生的事情,就是創建起來的聯繫,大家是經過聯繫而產生的記憶。

傳授

這是檢驗你學習成果的最好方式。當你能正確的把學到的知識教給別人,這才說明你真的學會了,由於從你口中組織語言說出的東西,纔是你本身的理解,這不是複述那麼簡單,複述和傳授有着本質的區別,同時當你這篇文章看到這裏的時候,我也很期待你的回覆,但願你能夠告訴我,我寫的這些對你來講是否好理解。當你下一次向別人分享東西的時候,能夠分析一下本身這段是複述仍是傳授,固然在你聽別人分析的時候,不必定是你理解不夠,也多是說的那我的本身理解不夠,致使你很難理解。

最後

說了這麼多,咱們再看一下開頭這個問題:如何成爲一名優秀的程序員?

我說了優秀的程序員是具備創造力的,具有創造力的必要條件是具備:豐富的知識儲備、紮實的基礎、良好的學習能力。

當咱們把這些倒過來看,其實正是咱們從上學到工做所經歷的過程,十幾年的學習生涯,無時不刻在鍛鍊咱們的學習能力,上了大學,各類各樣的計算機基礎課,工做以後咱們進入了不一樣的專業領域,隨着工做開始儲備咱們的知識庫。

因此優秀的程序員和咱們走過的是一樣的路,咱們還在原地掙扎是由於咱們在這條路上遇到了衆多問題尚未解決,而優秀的人也只是先咱們一步解決了那些問題,因此你們要努力加油呀!

若是你以爲這篇文章還不錯,歡迎分享、轉發、點贊、關注、這對我有很大的幫助。

最後的最後,上一篇文章《Android 工程師開發 iOS 是怎樣的體驗?》發佈後,公衆號這邊還好,在掘金那邊,真是鍵盤橫飛,受到了不少冷嘲熱諷,好傷心,寫這篇文章的原因是由於我第一次嘗試去開發了一款 iOS App,做爲 Android 工程師很激動,想經過這篇文章,與一樣是參與過兩端開發的小夥伴們,交換一下想法,沒想到...😂,固然個人 App 也順利上線啦,分享一張截圖給大家:

App 的名字叫 Time Fly,不少人妄圖作出翻天覆地的產品,把人性研究到極致,而後悄聲無息的偷走你的時間,這款產品的邏輯很簡單,以一條時間軸爲載體,幫助你們記錄天天的平常,固然以後的版本還有不少有趣、異想天開的想法在設計中,但願這款 App 能夠幫你找回被偷走的時間。

目前只有 iOS 版本,Android 版本還在計劃中,以前調研了一下使用 Kotlin 的跨平臺功能來爲兩端作非 UI 代碼的實現,不過這個方案還在考慮中。

Time Fly App Store 下載連接

在評論區分享你對本篇文章的想法,我會隨機抽幾位小夥伴送出 Time Fly 的兌換碼。

感謝,咱們下期再見👋。

相關文章
相關標籤/搜索