經(jīng)驗(yàn)分享:如何從初級(jí)程序員變成高級(jí)程序員?
區(qū)分高級(jí)和初級(jí)程序員的標(biāo)準(zhǔn)是工作年限嗎?程序員最重要的工作就是寫代碼嗎?

高級(jí)程序員是一名犯過其領(lǐng)域內(nèi)所有可能犯到的錯(cuò)誤的專家。
如果按照工作經(jīng)驗(yàn)對(duì)軟件開發(fā)人員進(jìn)行分類,可能是這樣的:
初級(jí):2-3 年工作經(jīng)驗(yàn)
高級(jí):10 年以上工作經(jīng)驗(yàn)
中級(jí):介于初級(jí)和高級(jí)之間
這種按工作年限的分類存在一個(gè)問題。那就是:它對(duì)軟件開發(fā)的質(zhì)量只字未提。在工作的那些年里你到底獲得了多少經(jīng)驗(yàn)和技能?這正是面對(duì)開發(fā)人員的求職和面試如此復(fù)雜的原因。度量技能是很困難的,所以我們?cè)诿嬖囍薪o開發(fā)人員進(jìn)行了很多有難度的測(cè)試。但這些測(cè)試充其量也只是了解一個(gè)大概,無法度量其究竟具備多少完成該項(xiàng)工作所需的經(jīng)驗(yàn)或?qū)I(yè)技能。
這就引出了下一個(gè)問題。
一旦你不再是初級(jí)程序員,什么時(shí)候會(huì)成為高級(jí)程序員呢?
多年的工作經(jīng)驗(yàn)會(huì)自動(dòng)讓你成為高級(jí)程序員嗎?未必。
以我自身為例。當(dāng)我還是一名年輕的初級(jí)程序員時(shí),我以為自己什么都懂。我傲慢自大,獨(dú)來獨(dú)往。我認(rèn)為自己是“代碼之神”。我不喜歡與他人合作,我認(rèn)為編寫優(yōu)秀的代碼是程序員最最重要的大事。
我錯(cuò)了嗎?倒也沒錯(cuò)。編碼的確很重要——程序員必須得去編寫可工作的代碼。但是編寫代碼并不是他唯一重要的事情。
我是在為第一個(gè)客戶工作的時(shí)候艱難地認(rèn)識(shí)到這一點(diǎn)的。我與客戶交談了 15 分鐘,收集了需求要點(diǎn),并假定我很明確客戶想要什么。我開始像瘋子一樣瘋狂地寫代碼,享受編寫純粹代碼的過程。我在 3 天內(nèi)交付了應(yīng)用,但是客戶卻不認(rèn)可。因?yàn)樗f:這不是他期望的東西。
不用說,我的自尊心勢(shì)必受到了傷害,我把這歸咎于客戶沒有提供足夠的信息。那時(shí)候我說話做事還不成熟?,F(xiàn)在看來,客戶永遠(yuǎn)是對(duì)的。如果我投入更多的時(shí)間來分析客戶需求,情況可能會(huì)大不相同。不過我走了好大一段彎路才明白了這一點(diǎn)。
一名程序員不會(huì)因?yàn)樗麜?huì)寫代碼而成為一名合格的程序員,而是因?yàn)樵陂_始做任何事情之前先做分析,然后再來開展工作,這才是真正的程序員。分析必須在多個(gè)層次上進(jìn)行:
(1)為更好地執(zhí)行所做的自我分析
(2)為更好地交付所做的客戶需求分析
(3)為幫助每個(gè)人更好地完成工作所做的對(duì)整個(gè)項(xiàng)目的分析
如果你想從初級(jí)成為高級(jí)開發(fā)人員,你需要培養(yǎng)這些分析技能,以蛻變成一個(gè)真正優(yōu)秀的高級(jí)開發(fā)人員。他所為人稱道的是專業(yè)知識(shí),而不是具備多少年經(jīng)驗(yàn)。
一個(gè)好的高級(jí)開發(fā)人員就像一個(gè)成年人一樣,可以自己照顧自己。他的生活不再是飄忽不定的、無意識(shí)的和實(shí)驗(yàn)性的。他從自己的錯(cuò)誤中吸取教訓(xùn),為自己的人生打下堅(jiān)實(shí)的專業(yè)基礎(chǔ),他可以回首過去并為之自豪。他可能仍然“年輕”,但他所擁有的,是大量可實(shí)際高效做事的技能,這遠(yuǎn)比他的工作年限更有價(jià)值。
以下,將給出一些從初級(jí)程序員到高級(jí)程序員的方法。

克服鄧寧 - 克魯格效應(yīng)
鄧寧 - 克魯格效應(yīng)是一種認(rèn)知偏見,人們總會(huì)高估自己,他們眼中的自己比現(xiàn)實(shí)中的自己更聰明、更能干。從本質(zhì)上說,能力低的人不會(huì)認(rèn)識(shí)到自己真的無能,相反他們都會(huì)高估自己。
作為一名初級(jí)程序員,這絕對(duì)是一場(chǎng)災(zāi)難。你可能認(rèn)為你是一個(gè)超級(jí)明星程序員,無所不知。但事實(shí)是,你知道的很少,距離優(yōu)秀還有很長(zhǎng)的路要走。你應(yīng)小心提防,不要掉進(jìn)這樣的陷阱。
初級(jí)程序員和高級(jí)程序員的區(qū)別在于初級(jí)程序員認(rèn)為自己什么都懂,而高級(jí)程序員則知道自己還有很多東西要學(xué)。初級(jí)程序員往往高估自己的知識(shí)和能力,無法認(rèn)識(shí)到其他人的技能和能力水平,這就是為什么他們總是認(rèn)為自己比別人更有能力,知道得更多。
正如 David Dunning 所明確指出的:在許多情況下,無能并沒有使人們失去方向、困惑或謹(jǐn)慎。相反,不稱職的人通常會(huì)盲目自信。
Dunning 和 Kruger 認(rèn)為,隨著工作經(jīng)驗(yàn)的增加,過度的自信通常降低,變得更為現(xiàn)實(shí)。當(dāng)程序員開始深入鉆研他們的領(lǐng)域時(shí),他們開始認(rèn)識(shí)到自己缺乏相應(yīng)的知識(shí)和能力。當(dāng)他們獲得這些知識(shí)后,他們的專業(yè)能力就會(huì)增加,他們的信心水平也會(huì)再次提高。
他們提出了以下方法來克服過度自信。

堅(jiān)持學(xué)習(xí)和實(shí)踐。一旦你對(duì)個(gè)主題有了更多的了解,你就更有可能認(rèn)識(shí)到還有多少東西需要學(xué)習(xí)。這可能避免想當(dāng)然地把自己假想成專家。
問問別人你做得怎么樣。向別人尋求建設(shè)性的意見可以讓你了解到別人是如何看待你的能力的。
質(zhì)疑你已知的東西。不斷挑戰(zhàn)你的信念和期望。尋找挑戰(zhàn)你想法的信息。你提的問題越多,你學(xué)到的東西就越多。
記住,博學(xué)是一種美妙的感覺。但是你需要注意提高你的標(biāo)準(zhǔn)。為此,你需要更深耕,以便更好地理解某個(gè)特定的主題。這,會(huì)讓你意識(shí)到還有多少東西需要學(xué)習(xí)。
知道什么時(shí)候不做什么
Mark Manson 在《不在乎的精妙藝術(shù)》一書中談到了保持一種身份的重要性,這種身份的定義越少越好。這是因?yàn)楫?dāng)我們涉及到我們的身份時(shí),當(dāng)我們決定某些行為或事件時(shí),代表的是我們作為一個(gè)人的價(jià)值。
簡(jiǎn)單地說,我們?cè)跊Q定做某件事時(shí),經(jīng)常是基于它如何滿足我們的自我或者孩子般地迷戀與刺激,而不是真正需要做這件事。Manson
告訴我們,當(dāng)我們把“自我”置身于決定之外時(shí),做出的決定才是最好的決定,因?yàn)檫@很可能不是關(guān)于“你”的。直接問問自己:“這樣做好嗎?”好?那就去做吧。
這一點(diǎn)也適用于程序員。實(shí)際上,大多數(shù)程序員天生就是喜鵲,他們總是收集亮晶晶的東西,把它們存儲(chǔ)起來,然后試圖把它們粘起來粉飾巢穴。如果你沒有意識(shí)到這一現(xiàn)象,“亮晶晶玩具綜合癥”的典型特征就是想要擁有最新的玩具,通常不考慮實(shí)用性或功能性的需要。或者,在注意力尚未轉(zhuǎn)移到其他東西之前,總是十分渴望地想要擁有它。
如果你的目標(biāo)是成長(zhǎng)為一名高級(jí)程序員,你需要不惜一切代價(jià)避免患上這種病。最優(yōu)秀的高級(jí)程序員清楚地知道什么時(shí)候不應(yīng)該做什么。他們知道,為了提高可讀性而從頭重寫一個(gè)類庫(kù),或者從舊的框架切換到最新的框架并不總是好的決定。這些代碼的目的應(yīng)該足夠清楚,讓人可以在幾分鐘甚至幾秒鐘內(nèi)了解到。應(yīng)該讓大家很容易就可以瀏覽這些代碼,即使不具備復(fù)雜的技巧。
關(guān)鍵不在于規(guī)避風(fēng)險(xiǎn),而在于謹(jǐn)慎選擇正確的戰(zhàn)場(chǎng)。

抱有瘋狂的好奇心
你有沒有想過“應(yīng)用程序”這個(gè)詞是什么意思?
為什么我們把這些小圖標(biāo)叫做智能手機(jī)應(yīng)用程序?這是因?yàn)樗麄儗⒔o定的工作流程或算法應(yīng)用于我們的問題,并幫助我們解決我們的需求。
也就是說,如果你正在做些什么的時(shí)候,一定會(huì)犯錯(cuò)誤。反思你的工作并不斷改進(jìn)它會(huì)帶來創(chuàng)新,而創(chuàng)新的根源在于對(duì)事物運(yùn)作方式的好奇心。記住,這是自我提升過程中的一個(gè)重要障礙。
錯(cuò)誤 - > 見解 - > …好奇心 - > 創(chuàng)新 - > 錯(cuò)誤重復(fù)……
如果你想繼續(xù)前進(jìn),成為一名優(yōu)秀的高級(jí)程序員,你需要對(duì)你所做的每一件事都保持瘋狂的好奇心。好奇心是一種你越用就會(huì)變得越好的工具,這正是人們對(duì)優(yōu)秀高級(jí)程序員的期望。優(yōu)秀的高級(jí)開發(fā)人員以結(jié)構(gòu)化的方式引導(dǎo)他們的好奇心,使他們可以使用那些在緊急情況下積累起來的信心。
有一些方法可以滿足你的好奇心,塑造你的品牌。
永遠(yuǎn)不要停止學(xué)習(xí)。選擇一門課程、一本書、一個(gè)在線教育學(xué)位,用它來豐富你已有的想法,并獲得新的想法。
注重基本原則。確保你了解它們是如何工作的,這樣你就可以把它作為你工作的基礎(chǔ)。
不要說出你的想法。展示你的項(xiàng)目,無論如何,想法都是被高估的。如果你的想法得到了應(yīng)用和傳播,你就可以塑造起你自己的品牌。
在新想法和已有想法之間細(xì)細(xì)考量。不要盲目接受你“應(yīng)該”知道的東西。挑戰(zhàn)現(xiàn)狀。
不要只是讓它可以工作。使其可擴(kuò)展、可重用并且可插拔。這就是你建立你的專業(yè)知識(shí)的方式。
一切都始于好奇心。如果你不好奇,還不如放棄。正如阿爾伯特·愛因斯坦所說的:
“我沒有什么特殊才能。我只是非常好奇?!?/p>
作者介紹:Ravi Rajan?

另外的話為了幫助大家,輕松,高效學(xué)習(xí)C語言/C++,我給大家分享我收集的資源,從最零基礎(chǔ)開始的教程到C語言項(xiàng)目案例,幫助大家在學(xué)習(xí)C語言的道路上披荊斬棘!可以來我粉絲群領(lǐng)取哦~

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)最重要的是你可以在群里面交流提問編程問題哦!
編程書籍分享:
