如何從初級程序員順利晉升到高級程序員?
按經(jīng)驗級別劃分的軟件開發(fā)人員可能如下:
- 初級:擁有兩到三年的經(jīng)驗
- 高級:擁有十年以上的經(jīng)驗
- 中等或 “中級水平”: 介于初級和高級之間
以年為單位衡量工作經(jīng)驗存在一個問題,即沒有說明程序員開發(fā)軟件的質量。工作的那幾年獲得了多少經(jīng)驗和技能?這也就導致開發(fā)人員的求職面試十分復雜。這項技能難以衡量,因此我們最終在面試中對開發(fā)人員進行了高難度測試。但是這些測試充其量只是進行大致地估量,無法準確衡量工作或完成工作所需的專業(yè)知識。
這就引出了下一個問題。
一旦你不再是初級程序員,那什么時候會成為高級程序員呢?
多年的工作經(jīng)驗會使你自然而然地成為高級程序員嗎?
不一定。
以我自己為例,當我還是個初級程序員時,年少無知卻自以為是,傲慢輕狂。認為自己是“代碼之神”,不愿與他人合作,認為編寫出色的代碼是唯一重要的事情。
但我錯了。的確,代碼很重要。說到底程序員必須要編寫工作代碼,但寫代碼并不是唯一重要的事情。
在為第一位客戶服務的過程中,我經(jīng)歷了很多困難才明白了這一點。我與客戶只交談了15分鐘,收集了需求“要點”,自認為已完全了解客戶需求。于是,我開始瘋狂地編寫代碼,享受編寫純代碼的過程。只用了3天就提交了應用程序,可是客戶拒絕了,因為那并不是他想要的。
當然了,我很受傷。自尊心受挫,我便責怪客戶沒有提供足夠的信息。當時的我還很不成熟,所以才說出這樣的話。客戶永遠沒有錯。如果花更多時間分析客戶需求,情況可能會大不相同。通過這次慘痛的教訓,我明白了這一點。
也就是說,程序員之所以被稱為程序員,不是因為可以編程,而是因為他的工作是在任何事情開始之前就分析好一切。分析必須在多個級別上進行。
- 自我分析以求更佳表現(xiàn)
- 分析客戶需求以提供更好的服務
- 分析整個項目,以幫助每個人呈現(xiàn)更優(yōu)秀的表現(xiàn)。
如果想從初級升級至高級開發(fā)人員,則需要培養(yǎng)這些分析技能,憑借專業(yè)知識而非多年的工作經(jīng)驗變成一個真正優(yōu)秀的高級開發(fā)人員。
一名優(yōu)秀的高級開發(fā)人員就像是一個長大了的孩子,變成了可以照顧自己的成人。他的生活不再是飄忽不定、隨性而為,充滿不確定性。會從錯誤中吸取教訓,為生活打下堅實的基礎,回憶過往時,他會為此感到自豪。他仍然“年輕”,但所擁有的是一種務實精神和高效的能力,這將比他實際的工作經(jīng)驗更有價值。
下面是從初級升級至高級程序員的一些方法。
1、克服鄧寧-克魯格效應
鄧寧-克魯格效應是一種認知偏見,人們認為自己更聰明能干。本質上,能力低下者不能認識到自己的無能,這導致他們高估了自己的能力。
作為初級程序員,這勢必帶來麻煩。你或許認為自己是著名的程序員,無所不知,但現(xiàn)實卻是所知甚少,而且遠未達到優(yōu)秀的水平。這是需要避免掉入的陷阱。
初級程序員和高級程序員的區(qū)別在于,初級程序員自認為無所不知,而高級程序員知道要學的還有很多。初級程序員往往高估了自己的知識和能力,無法識別他人的技能和水平,因此始終認為與他人相比,自己能力更強、知識更加淵博。
正如David Dunning所說。
“在許多情況下,無能并不會使人們迷失方向、感到困惑或如履薄冰。相反,無能的人常常懷有盲目的自信,受到他們所認為的類似知識的事物鼓舞著,高高在上。”
Dunning和Kruger建議,隨著工作經(jīng)驗的增加,自信程度通常會從過度下降到更為真實的水平。程序員開始深入自己的領域,逐漸意識到自己缺乏知識和能力。并且隨著知識積累,專業(yè)知識不斷增強,他們的自信程度也會再次提升。
他們提出了以下克服過度自信的方法。
- 堅持學習和練習。對某個主題一旦了解地越多,就越可能認識到仍有很多東西需要學習。這可以克服這一傾向,堅定自己是專家,即使事實并非如此。
- 請求他人評價。請求他人提出建設性批評建議可以為你提供寶貴的見解,了解他人對你能力的看法。
- 質疑原有認知。不斷挑戰(zhàn)信念和期待。尋找質疑你原有觀點的信息。質疑得越多,學到的更多。
記住,感到博學會令人心情愉悅。但是始終需要提高自己的標準。為此,需要更深入地研究以便更準確地理解特定主題。這會讓你認識到還有很多東西需要學習。
2、知道何事不該做
馬克·曼森(Mark Manson)在《毫不在乎的微妙藝術》(The Subtle Art of Not Giving a Fuck)這本書中指出了盡量保持模糊身份的重要性。因為涉及自己身份的時候就是我們認為某些行為或事件代表著我們作為人類的價值的時候。
簡單來說,我們通常會因為滿足自我或幼稚地迷戀驚險刺激而決定做某事,而不是因為真正的需求。曼森告訴我們,當我們將“自我”拒之門外時,會做出最佳決定,因為這很有可能與“你無關”。只需問問自己:“這是一件好事嗎?”如果答案是肯定的,那么就去做。
這也適用于程序員。實際上,大多數(shù)程序員天生有收集癖好,總是收集閃亮的東西,存放起來并尋找關聯(lián)。你可能沒注意到這種現(xiàn)象,一般而言,閃亮玩具綜合癥的特征如下:不顧實際或功能需求而想要擁有比較新的玩具,或者總是沉迷于強烈但短暫的擁有后才將注意力轉向其他事物。
如果致力成為一名高級程序員,則需要不惜一切代價避免這種問題。最出色的高級程序員能夠明確地知道何事不該做。他們知道,從頭開始重寫庫只是為了使其更具可讀性,或者從老舊的框架切換到比較新的框架并非總是明智之舉。代碼的目的應該清晰明了以便在幾分鐘甚至幾秒鐘內(nèi)掌握。即使沒有高超的魔力,瀏覽代碼的過程也應該十分輕松。
關鍵不是要規(guī)避風險,而是謹慎選擇適合的戰(zhàn)斗。
3、具有強烈的好奇心
想知道“應用程序”一詞是什么意思嗎?
為什么我們在智能手機應用程序中運用這些小圖標?這是因為它們將給定的工作流程或算法應用于我們遇到的問題,有助于滿足需求。
也就是說,如果要構建某些東西,那么肯定會犯錯誤。反思自己的工作并不斷改進會促進創(chuàng)新,而創(chuàng)新的根本在于想要發(fā)現(xiàn)事物運行原理的好奇心。記住,這是整個自我完善過程中的重要阻礙。
錯誤->見解->好奇心->創(chuàng)新->錯誤……
這一過程不斷重復……
如果想提升自我并成為一名優(yōu)秀的高級程序員,則需要對一切事物充滿好奇心。好奇心是一種工具,用的越多越好,這正是人們對出色的高級程序員的期望。優(yōu)秀的高級開發(fā)人員以結構化的方式引導他們的好奇心,從而可以在緊急情況下使用已積累的信息。
下面是激發(fā)好奇心并創(chuàng)建品牌的方法。
- 學無止境。選擇一門課程、一本書、一個在線學位,通過它們,豐富已有的想法并獲得新想法。
- 夯實基本原理。確保了解它們的使用方式,以便將其作為基礎應用在工作中。
- 拒絕空想,行動才是真理。想法總是被高估。當你的想法被使用和傳播時,便可以創(chuàng)建自己的品牌。
- 平衡新思想和既定思想。不要盲目接受“應該”知道的想法。挑戰(zhàn)現(xiàn)狀。
- 不只是能運行而已。使它具有可擴展性、可重復使用性和可插拔性。這是培養(yǎng)專業(yè)知識的方式。
一切都始于好奇心。沒有好奇心,不妨退出。正如愛因斯坦所說:
“我沒有什么特殊的天賦,只是擁有極強的好奇心。”