本文來(lái)源于我的知識(shí)星球“碼農(nóng)翻身”的一個(gè)討論帖子,編程新手面對(duì)新的技術(shù)和項(xiàng)目,如何學(xué)習(xí),如何快速提高個(gè)人開(kāi)發(fā)能力?抓狂的觀點(diǎn)很有意思,我建議他擴(kuò)展了一下,寫成了這篇文章。
說(shuō)服自己
拿我自己這一年的工作經(jīng)歷來(lái)說(shuō)吧。
首先,說(shuō)服自己很重要,什么叫說(shuō)服自己呢,就是一定要先把自己“忽悠”了,讓自己覺(jué)得現(xiàn)在做的事情非常的牛x。
去年這個(gè)時(shí)候,我也是剛畢業(yè)進(jìn)公司,上來(lái)就要搞一個(gè)之前從沒(méi)有接觸過(guò)的技術(shù),怎么辦?
首先,開(kāi)始瘋狂暗示自己,這個(gè)項(xiàng)目很牛x --- 大名鼎鼎 Erlang 平臺(tái),號(hào)稱可以寫出十幾年不用停機(jī),超高可用性的項(xiàng)目,同時(shí)搭配吸取了 Ruby on Rails 精髓的 Elixir/Phoenix 開(kāi)發(fā)框架,開(kāi)發(fā)速度據(jù)說(shuō)是 Java 的 20 倍。如此牛逼的技術(shù),學(xué)起來(lái)還不得偷著樂(lè)?
然后搗鼓開(kāi)發(fā)環(huán)境吧,語(yǔ)言太新,沒(méi)有成熟 IDE,正好可以學(xué)學(xué)多年來(lái)一直想學(xué)的 Emacs --- 這可是號(hào)稱神之編輯器,號(hào)稱偽裝成編輯器的操作系統(tǒng),號(hào)稱無(wú)所不能。
硬著頭皮學(xué),一開(kāi)始保存文件快捷鍵都要想一下怎么按,把快捷鍵列表放在屏幕另一邊,一邊看一邊寫,竟然也能慢慢上手了。
然后項(xiàng)目跑起來(lái),學(xué)習(xí)語(yǔ)言,理解核心要點(diǎn),開(kāi)始寫代碼,寫項(xiàng)目 --- 從一開(kāi)始寫爬蟲(chóng),到研究如何打包項(xiàng)目,熱部署,再到代碼結(jié)構(gòu)的設(shè)計(jì)優(yōu)化 ...
甚至橫向發(fā)展: 前端,交互設(shè)計(jì),SEO 都開(kāi)始涉及。慢慢的也能理解更深層次的東西了,非常有成就感。
但是還不能滿足,能不能更好?學(xué)習(xí)一下別的大牛是怎么做的?都用的什么?最新的開(kāi)源項(xiàng)目用的什么技術(shù)?學(xué)過(guò)來(lái)!
于是埋頭研究,把公司老舊技術(shù)替換成更好的新技術(shù),GraphQL,持續(xù)集成/持續(xù)部署(CI/CD) ...
同時(shí)自己也搞點(diǎn)個(gè)人愛(ài)好,比如給自己博客用上公司還不敢用的更加激進(jìn)的新技術(shù),折騰一下 ArchLinux,嘗試自己搭建一個(gè)代理服務(wù),等等等等 ...
這樣既能提升自己的水平,又給公司創(chuàng)造了價(jià)值,這樣帶著榮耀感去學(xué),怎么會(huì)覺(jué)得枯燥?
總之,“自我催眠”,認(rèn)為自己做的事情很牛x,這樣做起來(lái)才會(huì)有激情。不然如果自己都覺(jué)得無(wú)聊,一看見(jiàn)就煩,那樣能做好才奇怪。
內(nèi)功
貌似學(xué)了這么多東西,如果僅僅只能學(xué)到點(diǎn)新技術(shù)的用法,能行么?新技術(shù)日新月異,瞎追是追不上的。這就又回到老掉牙的話題了,內(nèi)功。
真正的聰明人聰明在思考問(wèn)題的方式和你不一樣。聰明人有聰明人的思路,而你想不到這個(gè)思路。 但要知道大部分人并不是聰明人,所以也不要自卑。
扯遠(yuǎn)了,再說(shuō)內(nèi)功。為什么有的人學(xué)知識(shí)特別快?可能并不是因?yàn)樗卸嗦斆鳎撬麅?nèi)功扎實(shí)。也就是對(duì)計(jì)算機(jī)的知識(shí)體系有一定程度上的理解。
比如在你懂了計(jì)算機(jī)網(wǎng)絡(luò)之后,就可以很快理解 RESTAPI,GraphQL,RPC 之間的異同,也可以明白即時(shí)通訊協(xié)議 XMPP,MQTT 的優(yōu)劣。
比如你了解 Lambda 演算,編譯原理,形式語(yǔ)言,自動(dòng)機(jī),也就能理解一個(gè)語(yǔ)言為什么要這么設(shè)計(jì)語(yǔ)法,為什么不能這么寫。
比如你懂了數(shù)據(jù)結(jié)構(gòu),你就能理解數(shù)據(jù)庫(kù),搜索引擎中的細(xì)節(jié)原理。
這些知識(shí)并沒(méi)有被什么邪惡組織封鎖,只要你想學(xué),網(wǎng)絡(luò)上有大把的資源供你所學(xué)。
所以你眼中的聰明人真的是天才么?不排除真的有天才,但我想更多的是普通人,只不過(guò)他學(xué)的稍微比你多一點(diǎn),知識(shí)體系比你更系統(tǒng)一點(diǎn)罷了。
所以只要你愿意學(xué),愿意思考,愿意動(dòng)腦子,愿意較真,愿意折騰,也一定能成為別人眼中的聰明人。
道理我都懂,但是到底要怎么做?
技術(shù)是復(fù)雜的,而且每個(gè)人都有自己的學(xué)習(xí)習(xí)慣,所以具體例子可能并不適用于所有人。
所以到底怎么做才能快速提高開(kāi)發(fā)能力?
別急,先講兩個(gè)故事。
利其器
一開(kāi)始學(xué)校老師讓你用純文本編輯器,不讓用 IDE,所以你就選則了比較流行的 Notepad++。
這是第一步,先上手。第二步,在用的過(guò)程中尋找問(wèn)題,并解決問(wèn)題。
比如,經(jīng)常因?yàn)闃?biāo)點(diǎn)符號(hào)打錯(cuò)而不能通過(guò)編譯,怎么辦,首先老師不讓用 IDE 的原因之一就是讓你認(rèn)識(shí)到這些錯(cuò)誤,養(yǎng)成一種嚴(yán)謹(jǐn)?shù)牧?xí)慣。
那就打字之前小心嚴(yán)謹(jǐn)一點(diǎn)。但是就算你非常嚴(yán)謹(jǐn),難免也有筆誤的時(shí)候,這個(gè)時(shí)候 Eclipse 登場(chǎng)了,問(wèn)題解決。
然后循環(huán)這個(gè)過(guò)程 --- 遇到新的問(wèn)題,解決問(wèn)題。
比如有些代碼片段記不住怎么辦,用自動(dòng)補(bǔ)全。變量改名方法結(jié)構(gòu)調(diào)整的時(shí)候非常麻煩怎么辦,用 IDE 的重構(gòu)功能,等等。
其中解決問(wèn)題的時(shí)候也會(huì)遇到問(wèn)題,比如怎么才能找到問(wèn)題的解決辦法呢?一開(kāi)始總是黑暗的,這個(gè)時(shí)候可以求助他人,比如現(xiàn)在有人告訴你,搜索引擎是個(gè)好東西,于是你知道可以用搜索引擎。
搜索引擎搜索不到怎么辦?這個(gè)時(shí)候就發(fā)揮作為人類的能力,也就是結(jié)合和運(yùn)用之前的經(jīng)驗(yàn)的能力,怎么辦?你現(xiàn)在只會(huì)用搜索引擎,那只好在搜索引擎里搜索“如何使用搜索引擎”... 結(jié)果還真搜到幾篇有用的內(nèi)容,一看都是來(lái)自某某公眾號(hào)的文章,果斷收藏。
發(fā)散思維之后還要收回來(lái),得到了搜索引擎使用秘籍之后要投入使用啊,比如把某搜索引擎換成更好的搜索引擎,把整句分割成關(guān)鍵字來(lái)查詢,最終你成功搜到了想要的結(jié)果。同時(shí),積累了數(shù)個(gè)收藏夾。
下次再遇到問(wèn)題的時(shí)候,你又可以站在之前的經(jīng)驗(yàn)上,繼續(xù)提高自己。
這樣你就滿足了嗎?雖然你解決了自己遇到的問(wèn)題,但是有沒(méi)有可能另一種解決方式更完美呢?
所以繼續(xù)發(fā)動(dòng)人類能力,于是你從你同學(xué)口中得知一種叫 IDEA 的東西,又從搜索引擎上得知 IDEA 的優(yōu)點(diǎn),又在之前收藏的論壇里發(fā)現(xiàn)了一篇 IDEA 的教程,再結(jié)合自己 Eclipse 的使用經(jīng)驗(yàn),你成功的上手了 IDEA。這就是人類的能力,可以結(jié)合運(yùn)用之前得到的經(jīng)驗(yàn)的能力,而不是只能零散的使用。
你甚至把這個(gè)過(guò)程總結(jié)成一篇文章,得到了許多膜拜,也得到了許多批評(píng)建議,不僅能收獲了,還能輸出了。
最后,追求永無(wú)止境,能不能更好?更舒適的字體,更快的快捷鍵,更強(qiáng)的代碼模板 ... 總之,就像劍客對(duì)其兵刃的喜愛(ài)一樣,投入精力不斷打磨,總是有回報(bào)的。
重構(gòu)
拿著錘子不會(huì)錘釘子也不行啊。工具并不能直接提高你的編程水平,怎么辦?
繼續(xù)發(fā)動(dòng)人類天賦技能,之前你已經(jīng)學(xué)到了遇到問(wèn)題解決問(wèn)題的能力,那寫代碼有什么問(wèn)題呢?
首先第一步還是先搞起來(lái)再說(shuō),于是你花了三天時(shí)間寫了一個(gè)“高達(dá)” 80 行的程序。寫完之后覺(jué)得自己好牛x啊,厲害的不得了。
冷靜下來(lái),這樣夠了么?不夠,因?yàn)榇a中有三段都是重復(fù)的,僅僅只有一點(diǎn)區(qū)別,如果以后需要改動(dòng),那就需要改動(dòng)三處代碼,這樣不行。
于是你花了兩個(gè)小時(shí)把那些代碼改寫成一些函數(shù),使用之前學(xué)到的 IDE 重構(gòu)功能,消除了重復(fù)代碼,現(xiàn)在只剩下 40 行了。寫完之后感覺(jué)已經(jīng)超神了,怎么會(huì)有這么聰明的人?
冷靜,這樣還不夠,雖然提取了出來(lái),但是方法名不能體現(xiàn)出功能,而且可讀性太差。如果過(guò)兩天來(lái)看完全不知寫的啥。
于是你整理代碼結(jié)構(gòu),增加注釋,代碼變得賞心悅目起來(lái)。寫完之后感覺(jué)精神振奮,抬頭一看,天已經(jīng)黑了,嗯,晚上能吃三個(gè)饅頭。
冷靜,這些代碼有沒(méi)有值得總結(jié)的通用邏輯?下次如果遇到類似問(wèn)題能不能直接寫出最后一步的代碼而不是再這么重構(gòu)一遍?
于是你認(rèn)真分析,總結(jié)出一個(gè)非常通用的邏輯,什么時(shí)候可以用,什么時(shí)候不適用。寫完長(zhǎng)舒一口氣,晚上能睡個(gè)好覺(jué)了。
這么晚了只能吃夜宵了,路上你想,我這個(gè)東西這么厲害,怎么能忘了出去炫耀一下?馬上打開(kāi)手機(jī),正準(zhǔn)備發(fā)帖,突然想到,聰明人大有人在,是不是已經(jīng)被捷足先登了?
于是你利用自己之前積累的豐富的搜索引擎使用姿勢(shì),快速搜索到原來(lái)早就有人總結(jié)了出來(lái),還出了書,稱之為設(shè)計(jì)模式。不禁出了一身冷汗,這要是真出去得瑟了還不得被笑話,幸好搜了一下。
吃完飯回來(lái),翻開(kāi)設(shè)計(jì)模式,哦,原來(lái)別人是這么總結(jié)的,大同小異。設(shè)計(jì)模式算是理解了,今天是太晚了,只能以后再多加練習(xí)。
一星期后,你發(fā)現(xiàn)有人在抱怨設(shè)計(jì)模式好難學(xué)啊,背也背不會(huì),用也不會(huì)用,根本無(wú)從下手。于是給他耐心講解一二,那人發(fā)出感嘆,“大神啊,你怎么這么聰明。”
你一時(shí)語(yǔ)塞 ... 真的是我聰明么?
總結(jié)
僅僅只是兩個(gè)故事么?
其實(shí),開(kāi)發(fā)能力的提升都像這兩個(gè)故事中說(shuō)的那樣。
如何寫出高質(zhì)高效的代碼?并不是一蹴而就,同樣需要先按以往經(jīng)驗(yàn)寫出初版,然后提取、抽象,最后歸納總結(jié),甚至開(kāi)源分享。為下一次更好更快的開(kāi)發(fā)做好準(zhǔn)備。
所以并不是按照某種經(jīng)驗(yàn)照做就可以快速提升個(gè)人能力了,而是需要按照一定的節(jié)奏,站在之前的基礎(chǔ)上,不斷自我升級(jí),迭代,優(yōu)化,開(kāi)發(fā)水平和速度才能穩(wěn)步提高。
那到底是什么節(jié)奏呢?各位都是程序猿了,那就總結(jié)的程序一點(diǎn):
遇到問(wèn)題
解決問(wèn)題
若解決途中再次遇到問(wèn)題,則解決子問(wèn)提
能不能更好?
同時(shí),說(shuō)服自己非常重要,自信,但不能自滿,要在覺(jué)得自己很牛x的情況下虛心前進(jìn),這樣有動(dòng)力又走的遠(yuǎn)。
這一點(diǎn)兒也不矛盾。『雖知大海的深邃,但仍為撿到貝殼而歡呼。』這是我非常喜歡的一句話,作為結(jié)尾。
-
程序員
+關(guān)注
關(guān)注
4文章
953瀏覽量
29822
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論