初級、中級和高級工程師並非經過你從事編碼工做的年限來判斷的。初級工程師有時可能比高級工程師工做時間還要長。可否成爲更高等級的工程師徹底取決於你對專業技能的掌握程度,這也不是說高級工程師必須在每一方面都是專家,可是能夠確定的是,高級工程師必定比初級和中級工程師更加專業。 編程
不只僅是編程能力更加專業,高級工程師和初中級工程師相比還有其餘區別。這區別究竟是什麼呢?設計模式
很明顯,高級工程師須要掌握更多的知識。學習設計模式、架構、自動化測試、性能、安全等知識是初級工程師邁向中高級工程師的必經之路。安全
知道軟件開發過程當中須要作什麼是一件很是重要的事情。可是當你掌握了上面所說的所有知識時,你並非已經成爲高級工程師了,這些知識只是不一樣等級工程師之間的區別之一。架構
不少人認爲編碼是人和計算機之間的一種交流,其實是人和人的交流而後用於指導計算機。代碼最終還須要編譯成二進制碼。工具
你的代碼須要保證可讀性,這樣之後其餘開發者才能在這基礎上作其餘工做。最好能作到讓一個歷來沒有看過你的代碼的團隊一打開就能當即進行新功能開發或者修復bug。這也是初級和高級工程師的區別之一。性能
這裏咱們忽略了中級工程師,由於中級工程師在編程能力的比較中處於灰色地帶。由於中級工程師介於初級與高級之間,而且更傾向於高級。編碼能力更更加依賴於經驗,而中級工程師一般至少參與過一次完整的軟件開發流程。他們已經從一些簡單的錯誤中吸收了教訓。學習
初級工程師一般沒有開發經驗。有些是剛畢業,第一次全職作開發。初級開發者的心態一般就是「能用就行」。能用的軟件和好用的軟件在他們看來都同樣。測試
寫出簡潔的代碼是一件困難的事情。這也是初級工程師不具有的能力,他們寫的代碼每每比較繁瑣。你能夠經過詭異的單行代碼以及龐雜的抽象邏輯來識別初級工程師。這是初級工程師炫耀的方法,讓其餘開發人員知道他們的能力,但這是錯誤的作法。編碼
初級工程師編碼時專一於計算機端,而忽略了人力端。架構設計
當查看高級工程師的代碼時,你也許會想:這是所有代碼嗎?剩下的在哪?高級工程師寫的代碼老是簡單、直接的。這時編程時能夠修煉的最強技能之一。高級工程師遵循KISS原則:Keep it simple, stupid。
高級工程師在編碼方式和初級工程師有所不一樣,他們會優先考慮代碼的可維護性和可擴展性。兩種級別的工程師編碼時的心態也徹底不一樣,高級工程師更多考慮的時後續維護代碼的人,而初級工程師考慮的是使代碼能夠被計算機執行。
除了編程能力以外,還有一些其餘因素能夠告訴你一名工程師的級別。
初級工程師一般只是作一些簡單的任務。他們不負責任何架構設計。中級工程師也不設計解決方案,他們一樣是執行任務。與初級工程師不一樣的是,他們並不須要太多的監督和指導,只要分配給他們較爲常規的任務,他們就能獨立完成。高級工程師則能夠獨立的開發一款應用。
這並不意味着高級工程師在開發過程當中就不會碰到問題,每一個開發人員天天都會遇到大量的問題,對於高級工程師來講也是如此。
不一樣之處是高級工程師知道如何正確提問以及怎麼解決問題。中級工程師在對於常規問題也知道如何正確提問,但遇到更加複雜的問題時則須要尋求幫助。
高級工程師從不迷失方向,他們知道如何以正確的方式跟蹤問題。不是說高級工程師不須要向其餘人尋求幫助。有時最正確的選擇就是向相關領域的專家尋求幫助。
中級工程師也須要具有正確提出問題的能力,除非分配給他們的是須要很深刻的專業知識的複雜任務。
你不能期望初級工程師老是準確的提出問題。由於他們缺少經驗,他們須要更有經驗的工程師來指導。咱們要爲初級工程師提供必要的資源,以及不斷推進他們朝着正確的方向前進。
咱們都但願提高本身的等級,成爲更好的工程師,可是要怎麼作呢?
因爲初級工程師缺少經驗,所以他們至少要經歷幾回完整的軟件開發流程。這一過程當中他們不遇到不少坑,而後須要在下次避免再踩這樣的坑。
編碼時,初級工程師要學會使本身的代碼變得更加簡潔。多爲下一位接手這段代碼的人考慮。你須要學會怎麼調試代碼,這會幫助你更好的理解它的運行過程。
此外,你須要對一些最佳實踐更加熟悉,同時你須要學習架構、性能、安全等知識,從而跨越到達到中級工程師的知識鴻溝。
從中級工程師到高級工程師可能會比較困難。有些開發人員整個職業生涯都停留在中級工程師。
高級工程師知道什麼能夠作什麼不能夠作。這是最難學的一門課程,你只能從過去犯的錯誤中學習。
若是你想要達到高級水平,你必需要準備好承擔沒有人能處理的任務。你應該考慮的是如何把工做作得更好,而不只僅是怎麼完成。
做爲高級工程師,你還有一項工做就是要幫助缺少經驗的工程師,當他們不知道怎麼作時,你就是他們堅強的後盾。
高級工程師的技術棧可能不會使你感到驚訝,除了編程能力,他們對公司所用的工具和應用的使用都是很是熟悉的。
初級、中級、高級工程師的區別不僅是工做年限。固然,你能夠確定的說,高級工程師要比初級和中級工程師更加專業,知識更豐富。但這不是決定工程師等級的惟一因素。
高級工程師寫代碼更加簡潔,而且編碼時的心態與初級開發者不一樣。可是除了編碼,知識如何提出並跟進問題也是一項必要的能力。只有高級工程師才能憑藉豐富的經驗從容的應對各類問題。
初級工程師想要成長就要專一於編寫更加簡潔的代碼,而且多經歷完整的開發流程。從中級進階到高級則須要學會處理更多困難的問題。你應該願意承擔更有挑戰的任務,併成爲技術棧的主人。高級工程師的另外一項工做就是做爲其餘開發人員的後盾。
最後送給你一句Martin Fowler的話:「任何傻瓜都能編寫計算機能夠理解的程序,好的工程師編寫人類能夠理解的代碼。」
本文做者從編碼能力和處理問題的能力闡述了不一樣級別工程師之間的區別。我的認爲做者對於中級工程師的能力和國內的互聯網公司的要求仍是有些區別的。至少我接觸的中級工程師都要具有必定的系統設計能力了。而高級工程師則須要具有更加全面的問題處理的能力。不過對於大多數人來講,可能頭銜已是中級了,可是並無掌握文中提到的那些知識,這反而成爲了中級到高級的鴻溝。相信你們也都意識到了學習的重要性,既然入了這行,就一塊兒活到老學到老吧。