开发人员:月薪过万与年薪百万之间的差距
有一句話在開(kāi)發(fā)人員圈子廣為流傳:“初級(jí)開(kāi)發(fā)人員的標(biāo)志就是需要在中級(jí)和高級(jí)開(kāi)發(fā)人員的指導(dǎo)下完成工作?!彼?#xff0c;我們不要苛刻初級(jí)開(kāi)發(fā)人員寫的代碼對(duì)錯(cuò)嚴(yán)謹(jǐn),畢竟每個(gè)開(kāi)發(fā)人員都有這樣的一個(gè)過(guò)程。據(jù)譯者觀察,初級(jí)開(kāi)發(fā)人員往往認(rèn)為自己寫的代碼都是高質(zhì)量的;而中級(jí)開(kāi)發(fā)人員認(rèn)識(shí)到了軟件知識(shí)會(huì)影響代碼質(zhì)量;中高級(jí)開(kāi)發(fā)人員則認(rèn)識(shí)到硬件知識(shí)會(huì)影響到代碼質(zhì)量;高級(jí)開(kāi)發(fā)人員反而認(rèn)為自己寫的部分代碼質(zhì)量不夠高,需要惡補(bǔ)硬件知識(shí)和編譯器等相關(guān)知識(shí)……至于骨灰級(jí)開(kāi)發(fā)人員,可以寫出高質(zhì)量代碼,并能夠充分考慮各種情況。本文,后端開(kāi)發(fā)者 Daan 講述了初級(jí)、中級(jí)和高級(jí)開(kāi)發(fā)人員之間的區(qū)別。
作為初級(jí)、中級(jí)或高級(jí)開(kāi)發(fā)人員,并不僅僅跟多少年的編程經(jīng)驗(yàn)相關(guān)。初級(jí)開(kāi)發(fā)人員甚至可以比高級(jí)開(kāi)發(fā)人員年齡要大。這一切都取決于技能。不過(guò),這并不意味著高級(jí)開(kāi)發(fā)人員必須是所有方面的專家,但可以肯定地說(shuō),高級(jí)開(kāi)發(fā)人員要比初級(jí)、中級(jí)開(kāi)發(fā)人員熟練得多。
既然高級(jí)開(kāi)發(fā)人員與初級(jí)、中級(jí)開(kāi)發(fā)人員的區(qū)別不僅在于編程技能,那么到底有什么區(qū)別呢?
知識(shí)
很顯然,高級(jí)開(kāi)發(fā)人員比初級(jí)、中級(jí)開(kāi)發(fā)人員掌握更多的知識(shí)。了解設(shè)計(jì)模式、架構(gòu)、自動(dòng)化測(cè)試、性能、安全性等,這是初級(jí)開(kāi)發(fā)人員縮小與中級(jí)、高級(jí)開(kāi)發(fā)人員之間的知識(shí)差距的好方法。
了解軟件開(kāi)發(fā)中的事情應(yīng)該如何進(jìn)行是很重要的。但是,僅僅知道這些知識(shí)并不能讓你成為高級(jí)開(kāi)發(fā)人員。知識(shí)并不是開(kāi)發(fā)人員之間最大的區(qū)別,它只是其中的一個(gè)因素。
編程
不管大多數(shù)人是怎么想的,編程并不是與計(jì)算機(jī)進(jìn)行通信。編程是關(guān)于與人類交流和指導(dǎo)的計(jì)算機(jī)。最終,代碼被編譯并轉(zhuǎn)為一連串的 0 和 1。
代碼必須對(duì)將來(lái)使用它的其他開(kāi)發(fā)人員有意義。一個(gè)以前從未見(jiàn)過(guò)代碼的新團(tuán)隊(duì)?wèi)?yīng)該能夠閱讀代碼并開(kāi)始研究新功能或進(jìn)行 bug 修復(fù)。這就是初級(jí)和高級(jí)開(kāi)發(fā)人員之間的巨大差異所在。
在這一比較中,我將把中級(jí)開(kāi)發(fā)人員排除在外,因?yàn)?#xff0c;在編程技能方面,中級(jí)開(kāi)發(fā)人員處于一個(gè)灰色地帶。顯然,中級(jí)開(kāi)發(fā)人員介于初級(jí)和高級(jí)開(kāi)發(fā)人員之間,他們可能更傾向于高級(jí)開(kāi)發(fā)人員。這主要與經(jīng)驗(yàn)有關(guān),因?yàn)橹屑?jí)開(kāi)發(fā)人員可能至少經(jīng)歷過(guò)一次整個(gè)開(kāi)發(fā)周期。他們犯過(guò)許多最簡(jiǎn)單的錯(cuò)誤,并從中汲取了教訓(xùn)。
如何識(shí)別初級(jí)開(kāi)發(fā)人員?
初級(jí)開(kāi)發(fā)人員缺乏經(jīng)驗(yàn)。有些人剛剛畢業(yè),正在開(kāi)始他們的第一份全職工作。初級(jí)開(kāi)發(fā)人員的心態(tài)通常是能夠讓代碼工作就萬(wàn)事大吉了。工作軟件和良好的軟件對(duì)他們來(lái)說(shuō),沒(méi)什么不同。
編寫簡(jiǎn)單的代碼其實(shí)是一件很困難的事情,這恰恰就是初級(jí)開(kāi)發(fā)人員不擅長(zhǎng)的事情。初級(jí)開(kāi)發(fā)人員傾向編寫花哨的代碼。你可以通過(guò)古怪的代碼、過(guò)于復(fù)雜的抽象來(lái)識(shí)別出初級(jí)開(kāi)發(fā)人員。這就是初級(jí)開(kāi)發(fā)人員炫耀的方式,好讓其他開(kāi)發(fā)人員知道他們編寫的代碼有多牛逼。其實(shí),他們這一做法是錯(cuò)誤的。
初級(jí)開(kāi)發(fā)人員只專注于代碼的計(jì)算機(jī)方面,而忽視了人性方面。
那么,高級(jí)開(kāi)發(fā)人員呢?
當(dāng)你查看高級(jí)開(kāi)發(fā)人員編寫的代碼時(shí),你心里可能會(huì)嘀咕:就這些嗎?代碼的其余部分在哪里呢?高級(jí)開(kāi)發(fā)人員編寫的代碼,看上去簡(jiǎn)潔、直接了當(dāng),甚至還可能讓人覺(jué)得很愚蠢。而這正是開(kāi)發(fā)人員在編程時(shí)可以擁有的最大品質(zhì)之一。高級(jí)開(kāi)發(fā)人員遵循的是 KISS 原則:保持簡(jiǎn)潔,愚蠢。
譯注:KISS 是英文 “Keep it Simple and Stupid” 的首字母縮寫,意思是 “保持簡(jiǎn)單和愚蠢”,其中 “愚蠢” 不是 “傻”,它還有 “遲鈍”、“不敏感”、“乏味”、“無(wú)價(jià)值” 等綜合含義。另一種對(duì) KISS 的解釋是:“Keep It Simple,Stupid” 由于中間加了逗號(hào),意思就變成了 “保持簡(jiǎn)單,傻瓜”,是一種祈使語(yǔ)態(tài),帶有調(diào)侃的色彩。
好的目標(biāo)不是越復(fù)雜越好,反而是越簡(jiǎn)潔越好。這就是 KISS 原則。符合 KISS 原則的目標(biāo)都是關(guān)鍵的,而非包羅萬(wàn)象;目標(biāo)必須確定優(yōu)先順序,而關(guān)鍵的目標(biāo)則是資源和努力的重心??偨Y(jié)開(kāi)發(fā)人員在編程過(guò)程中的經(jīng)驗(yàn),大多數(shù)應(yīng)用程序的設(shè)計(jì)應(yīng)保持簡(jiǎn)潔和單純,而不摻入非必要的復(fù)雜性,這樣的應(yīng)用運(yùn)作成效會(huì)取得最優(yōu);因此簡(jiǎn)單性應(yīng)該是軟件開(kāi)發(fā)中的關(guān)鍵目標(biāo),盡量避免不必要的復(fù)雜性。
高級(jí)開(kāi)發(fā)人員以不同于初級(jí)開(kāi)發(fā)人員的方式思考他們的代碼。高級(jí)開(kāi)發(fā)人員編寫的代碼會(huì)考慮到可維護(hù)性和可擴(kuò)展性。這與初級(jí)開(kāi)發(fā)人員的思維方式完全不同:高級(jí)開(kāi)發(fā)人員考慮的是必須與代碼打交道的人,而初級(jí)開(kāi)發(fā)人員只是考慮如何讓代碼在計(jì)算機(jī)上工作。
不僅僅是編程技能的問(wèn)題
除了編程技能外,還有一些其他因素可以告訴你誰(shuí)是哪種類型的開(kāi)發(fā)人員。
一般來(lái)說(shuō),初級(jí)開(kāi)發(fā)人員執(zhí)行最簡(jiǎn)單的任務(wù)或影響較小的任務(wù)。他們不參與任何架構(gòu)設(shè)計(jì)。中級(jí)開(kāi)發(fā)人員也不負(fù)責(zé)設(shè)計(jì)解決方案,他們只是執(zhí)行任務(wù)。與初級(jí)開(kāi)發(fā)人員的不同之處在于,只要分配給他們相對(duì)常規(guī)的任務(wù),他們就會(huì)執(zhí)行這些任務(wù),而無(wú)需過(guò)多的監(jiān)督。而高級(jí)開(kāi)發(fā)人員則完全可以自己開(kāi)發(fā)應(yīng)用程序。
但這并不意味著高級(jí)開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中沒(méi)有任何問(wèn)題。實(shí)際上,每個(gè)開(kāi)發(fā)人員每天都會(huì)遇到很多問(wèn)題,這點(diǎn)是不會(huì)改變的。對(duì)于高級(jí)開(kāi)發(fā)人員來(lái)說(shuō),也是概莫能外。
區(qū)別在于高級(jí)開(kāi)發(fā)人員知道如何提出正確的問(wèn)題,以及如何處理這些問(wèn)題。當(dāng)涉及到相對(duì)常規(guī)的任務(wù)時(shí),中級(jí)開(kāi)發(fā)人員可以提出正確的問(wèn)題,但在更復(fù)雜的任務(wù)上就力有未逮,需要高級(jí)開(kāi)發(fā)人員的幫助了。
高級(jí)開(kāi)發(fā)人員永遠(yuǎn)不會(huì)迷失方向,他們知道如何以正確的行動(dòng)來(lái)跟進(jìn)問(wèn)題。但是,這并不意味著高級(jí)開(kāi)發(fā)人員不能向其他開(kāi)發(fā)人員尋求幫助。有時(shí),最好的方法就是向其他在該領(lǐng)域有經(jīng)驗(yàn)的開(kāi)發(fā)人員尋求幫助。
中級(jí)開(kāi)發(fā)人員也應(yīng)該能夠提出正確的問(wèn)題,只要他沒(méi)有被分配到需要深入知識(shí)層面的高度復(fù)雜的任務(wù)。
你不應(yīng)該指望初級(jí)開(kāi)發(fā)人員能夠立即提出正確的問(wèn)題。由于初級(jí)開(kāi)發(fā)人員缺乏經(jīng)驗(yàn),他們需要更有經(jīng)驗(yàn)的開(kāi)發(fā)人員的指導(dǎo)。初級(jí)開(kāi)發(fā)人員需要獲得必要的資源,或向正確的方向大力推進(jìn)。
晉升下一個(gè)層次
作為開(kāi)發(fā)人員,我們都想提高自己,變得更好。但是,你可以采取哪些步驟來(lái)晉升到下一個(gè)層次呢?
從初級(jí)開(kāi)發(fā)人員到中級(jí)開(kāi)發(fā)人員
由于初級(jí)開(kāi)發(fā)人員缺乏經(jīng)驗(yàn),因此至少要經(jīng)歷幾次整個(gè)開(kāi)發(fā)周期,這一點(diǎn)是很重要的。這樣一來(lái),你會(huì)掉進(jìn)很多陷阱中,并學(xué)會(huì)如何在下一次避免它們。
說(shuō)到編程,你應(yīng)該學(xué)習(xí)如何編寫簡(jiǎn)單的代碼。想想下一個(gè)將要處理這段代碼的人。你還應(yīng)該學(xué)習(xí)如何調(diào)試,因?yàn)檫@將使你能夠更好地理解這一過(guò)程中發(fā)生的事情。
此外,你應(yīng)該熟悉最佳實(shí)踐,并了解架構(gòu)、性能、安全性等??s小到達(dá)中級(jí)水平所需的知識(shí)差距。
從中級(jí)開(kāi)發(fā)人員到高級(jí)開(kāi)發(fā)人員
從中級(jí)開(kāi)發(fā)人員到高級(jí)開(kāi)發(fā)人員可能會(huì)相當(dāng)困難。有些開(kāi)發(fā)人員在整個(gè)職業(yè)生涯中,始終處于中級(jí)水平。
高級(jí)開(kāi)發(fā)人員知道什么可以走捷徑,什么永遠(yuǎn)不可以走捷徑。這些都是從過(guò)去所犯的錯(cuò)誤中汲取的教訓(xùn)。
如果你想要成為高級(jí)開(kāi)發(fā)人員,就必須準(zhǔn)備好接受沒(méi)有人知道如何解決的任務(wù)。但你應(yīng)該知道的不僅僅是如何完成工作。
作為高級(jí)開(kāi)發(fā)人員,你的工作還包括幫助經(jīng)驗(yàn)較少的開(kāi)發(fā)人員。當(dāng)他們不知道如何做某些事情時(shí),你就是他們的后備力量。
高級(jí)開(kāi)發(fā)人員掌握了他們的技術(shù)棧,這可能不會(huì)讓你感到驚訝。記著,成為高級(jí)開(kāi)發(fā)人員可不僅僅是編程技能,還要了解你所在公司中使用的所有工具和應(yīng)用程序。
結(jié)論
初級(jí)、中級(jí)和高級(jí)開(kāi)發(fā)人員之間的區(qū)別并不全在于有多少年的經(jīng)驗(yàn)。當(dāng)然,可以肯定地說(shuō),高級(jí)開(kāi)發(fā)人員比初級(jí)、中級(jí)開(kāi)發(fā)人員更熟練,但知識(shí)并不是最重要的因素。
與初級(jí)開(kāi)發(fā)人員相比,高級(jí)開(kāi)發(fā)人員編寫的代碼更簡(jiǎn)單,并且思維模式也不同。但這不僅僅是編程技能。知道要問(wèn)什么問(wèn)題,以及如何跟進(jìn)這些問(wèn)題是至關(guān)重要的。只有那些擁有豐富經(jīng)驗(yàn)的高級(jí)開(kāi)發(fā)人員,才知道在如何在任何情況下做到這一點(diǎn)。
作為一個(gè)初級(jí)開(kāi)發(fā)人員,你應(yīng)該專注于如何編寫簡(jiǎn)單的代碼,并經(jīng)歷多個(gè)開(kāi)發(fā)周期。要從中級(jí)開(kāi)發(fā)人員晉升到高級(jí)開(kāi)發(fā)人員,你應(yīng)該專注于學(xué)習(xí),而不僅僅是解決常規(guī)任務(wù)。你應(yīng)該愿意承擔(dān)最艱巨的任務(wù),成為技術(shù)棧的大師。高級(jí)開(kāi)發(fā)人員的另一個(gè)職責(zé)是為經(jīng)驗(yàn)不足的開(kāi)發(fā)人員提供后援力量。
我將引用 Martin Fowler 的一句話作為結(jié)束語(yǔ):“任何傻瓜都可以寫出計(jì)算機(jī)能理解的代碼,而優(yōu)秀程序員可以寫出人能讀懂的代碼?!?#xff08;Any fool can write code that a computer can understand. Good programmers write code that humans can understand.)
作者介紹:
Daan,荷蘭的后端開(kāi)發(fā)者,密碼學(xué)愛(ài)好者。
原文鏈接:
The Differences Between a Junior, Mid-Level, and Senior Developer
總結(jié)
以上是生活随笔為你收集整理的开发人员:月薪过万与年薪百万之间的差距的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php预处理_如何用预处理让 PHP 更
- 下一篇: 4.搭建主从