不同優(yōu)秀程度JavaScript開(kāi)發(fā)者的差別
“優(yōu)秀絕非偶然. 它總是由強(qiáng)烈的意圖、真誠(chéng)的付出以及聰明的行動(dòng)帶來(lái)的。優(yōu)秀代表著明智的選擇——選擇,而不是機(jī)會(huì),它會(huì)決定著你的命運(yùn)。“ – 亞里士多德
我們所有人都想成為自己所在領(lǐng)域的佼佼者,但是很少有人付出時(shí)間和努力去實(shí)現(xiàn)自己所想。成為優(yōu)秀的人很難,任何職業(yè)都是這樣。
評(píng)估一個(gè)JavaScript開(kāi)發(fā)者的優(yōu)秀程度是非常難的事情。
是什么成就一個(gè)優(yōu)秀的JavaScript開(kāi)發(fā)者呢?
我們可以通過(guò)很多標(biāo)準(zhǔn)來(lái)做出判斷。
代碼質(zhì)量、按時(shí)交付、及時(shí)解決ticket(注:ticket類(lèi)似于github中issue的意思,參考這里)是幾個(gè)可以參考的標(biāo)準(zhǔn)。當(dāng)然也包括幫助團(tuán)隊(duì)其他成員解決ticket。
我認(rèn)為以上幾點(diǎn)都沒(méi)有提供準(zhǔn)確的的量度。為了寫(xiě)出優(yōu)美的代碼而使整個(gè)項(xiàng)目延期了兩個(gè)月,僅僅是由于你想要重構(gòu)那些沒(méi)有任何幫助的東西。我們都知道,關(guān)閉一個(gè)ticket并不意味著什么。
有許多變化的因素需要考慮。假如我問(wèn)10個(gè)不同的程序員——他們覺(jué)得是什么成就一個(gè)優(yōu)秀的開(kāi)發(fā)者,我相信我會(huì)得到10種不同的回答。
我相信現(xiàn)在你也在思考著關(guān)于它的定義。
我曾一度掙扎于思考這個(gè)定義,所以我決定嘗試并弄清楚。
專(zhuān)注于工作我想找出所有開(kāi)發(fā)者都會(huì)做的一些事情,然后我就可以基于開(kāi)發(fā)者是如何做的,來(lái)對(duì)開(kāi)發(fā)者的表現(xiàn)做出分類(lèi)。
對(duì)于一個(gè)行業(yè)的優(yōu)秀評(píng)估只基于一件事過(guò)于簡(jiǎn)單化,但,無(wú)論如何我都打算去試一下。
現(xiàn)在你可以持保留態(tài)度。
我會(huì)試著證明我做了一個(gè)不錯(cuò)的選擇。它會(huì)是所有開(kāi)發(fā)者都會(huì)做的,同時(shí)又能夠?qū)?yōu)秀的人從平庸者中篩選出來(lái)的一件事。
所有的開(kāi)發(fā)者都會(huì)偶爾寫(xiě)出垃圾代碼。
讓我們正面這件事吧,你和我都會(huì)時(shí)不時(shí)寫(xiě)一些非常垃圾的,可恥的,以致我們永遠(yuǎn)都不希望被人看見(jiàn)的代碼。
我們都有偶爾寫(xiě)出垃圾代碼的理由。我不打算去討論哪些是正當(dāng)?shù)睦碛?,因?yàn)槲覀兠總€(gè)人都有自己正當(dāng)?shù)睦碛伞?/p>
在展示一些編碼的暴行之前,我們先回顧一下我們寫(xiě)垃圾代碼的原因。然后我們就可以避免陷入代碼氣味,苦苦掙扎。
寫(xiě)垃圾代碼的常見(jiàn)原因1. 趕時(shí)間“時(shí)間不夠”是目前寫(xiě)垃圾代碼最多的一個(gè)原因。對(duì)客戶(hù)的承諾、緊張的日程安排,以及正在等待的新的發(fā)布都可能是造成這個(gè)惡果的原因。
2. 深陷痛苦之中現(xiàn)有代碼庫(kù)實(shí)在是太垃圾了,讓你根本不想努力寫(xiě)出好的代碼。你知道自己無(wú)論做什么都不可能挽救這份將在某一時(shí)刻崩潰的垃圾代碼庫(kù)。
3. “我只需完成任務(wù)然后離開(kāi)”作為開(kāi)發(fā)者,我們有時(shí)候是在不同的項(xiàng)目組工作。假如寫(xiě)完最后幾行代碼你就要轉(zhuǎn)到一個(gè)新的項(xiàng)目,這并不是什么影響別人的大事情。
知道自己在這個(gè)項(xiàng)目上的時(shí)間即將結(jié)束,沒(méi)有人會(huì)再review你的代碼了。于是你就草草提交、推送,然后指望單元測(cè)試來(lái)確保沒(méi)有任何問(wèn)題。
看看真相我們都會(huì)偶爾寫(xiě)出垃圾代碼。這能說(shuō)明我們都是糟糕的開(kāi)發(fā)者嗎?
當(dāng)然不能。正因?yàn)槊總€(gè)人都會(huì)偶爾寫(xiě)出糟糕的代碼,所以這件事本身不能說(shuō)明任何問(wèn)題。
然而,多年來(lái),我漸漸發(fā)現(xiàn)一個(gè)關(guān)于開(kāi)發(fā)者的令人驚訝的真相。
在寫(xiě)出垃圾代碼后如何表現(xiàn),就是對(duì)我們開(kāi)發(fā)者資質(zhì)的根本檢驗(yàn)。
有點(diǎn)不可思議,但確實(shí)是這樣。意識(shí)到你正在寫(xiě)出垃圾代碼,以及為了避免將來(lái)再次發(fā)生而采取的行動(dòng),都反映出你是如何寫(xiě)代碼的,以及你一般都是如何對(duì)待寫(xiě)代碼這件事的。
垃圾代碼與評(píng)估開(kāi)發(fā)者的優(yōu)秀程度有多大關(guān)系呢?有很大的關(guān)系。
我們舉Ron為例。Ron今天寫(xiě)了糟糕的代碼,并為此不高興。因?yàn)橐粋€(gè)令人討厭的五級(jí)深度的Backbone模型繼承鏈,讓Ron根本不能修改一行代碼,除了打破一切。
Ron寫(xiě)了一段超級(jí)垃圾的代碼,繞過(guò)了這個(gè)問(wèn)題。每個(gè)人都很高興,因?yàn)镽on準(zhǔn)時(shí)交付了代碼。然而除了Ron自己。
他告訴團(tuán)隊(duì)老大發(fā)生了什么。他們一起反復(fù)思考如何解決這個(gè)問(wèn)題。他們明確了一點(diǎn),打破繼承鏈并劃分為水平的組合模塊是最佳的解決辦法。
Ron于是請(qǐng)求老大給他時(shí)間實(shí)施自己和老大剛剛討論的重構(gòu)方案。
Roger今天也寫(xiě)了很糟糕的代碼。他告訴自己的開(kāi)發(fā)伙伴,自己用難以置信的hack手法繞過(guò)了一個(gè)奇怪的五級(jí)深度的Backbone模型繼承鏈。他準(zhǔn)備繞過(guò)整個(gè)整個(gè)架構(gòu),就這樣準(zhǔn)時(shí)交付。
Roger自己感到非常滿(mǎn)意,覺(jué)得沒(méi)有進(jìn)一步改善的必要。
四類(lèi)JavaScript開(kāi)發(fā)者你可以通過(guò)程序員對(duì)待寫(xiě)出垃圾代碼的態(tài)度,將他們分為四類(lèi),從差勁到優(yōu)秀。
告訴我你沒(méi)有同時(shí)遇到所有的這四類(lèi)開(kāi)發(fā)者。
Barney - 差勁的JavaScript開(kāi)發(fā)者Barney并不關(guān)心自己正在寫(xiě)垃圾代碼。他關(guān)心的僅僅是能否按時(shí)完成工作,其他任何事都無(wú)關(guān)緊要。代碼能正常運(yùn)行,就沒(méi)有問(wèn)題。
Barney寫(xiě)出的垃圾代碼,有時(shí)也會(huì)阻礙整個(gè)項(xiàng)目的進(jìn)展。代碼工作時(shí),也會(huì)一直帶來(lái)很多問(wèn)題,讓整個(gè)項(xiàng)目進(jìn)度倒退。Barney卻認(rèn)為自己并不需要學(xué)習(xí)什么新的東西。
他已經(jīng)知道了完成工作所需要的關(guān)于JavaScript的所有東西。
Bill - 普通的JavaScript開(kāi)發(fā)者Bill并沒(méi)有意識(shí)到自己正在寫(xiě)垃圾代碼。他遵循著團(tuán)隊(duì)的約定和lint規(guī)則,認(rèn)為自己所做的沒(méi)什么問(wèn)題。但他并沒(méi)有花費(fèi)時(shí)間去理解整個(gè)項(xiàng)目結(jié)構(gòu),以及不同組件之間是如何交互的。
最后的結(jié)果就是,很不幸,一片混亂。
Bill在做出重大的設(shè)計(jì)選擇之前,沒(méi)有咨詢(xún)?nèi)魏稳恕K约涸趺聪氲木驮趺醋?。他讀過(guò)三篇發(fā)表于一年前的博文,它們一直在指導(dǎo)著他的決定。
我經(jīng)常說(shuō)走進(jìn)Bill的代碼中,感覺(jué)就像地雷戰(zhàn),移動(dòng)錯(cuò)了一步,所有的東西都會(huì)炸到你臉上。
Roger - 好的JavaScript開(kāi)發(fā)者我們前面就提過(guò)Roger這種類(lèi)型。完全意識(shí)到自己在寫(xiě)垃圾代碼。他知道如果他想好好寫(xiě)的話(huà),代碼會(huì)是什么樣子。他拍拍自己的背,然后繼續(xù)寫(xiě)出這段垃圾代碼。
Roger的主要問(wèn)題在于沒(méi)有嘗試做一些改變。他做了自己被要求去做的,而且完成的很好。但是他寧愿讓事情該怎樣就怎樣,而不是花點(diǎn)時(shí)間,做一些努力讓其有所改變。
Ron - 優(yōu)秀的JavaScript開(kāi)發(fā)者Ron是一個(gè)優(yōu)秀的程序員,但偶爾他依舊不得不寫(xiě)一些垃圾代碼。
讓Ron與別人不同的,就是在寫(xiě)那些垃圾代碼的時(shí)候,他會(huì)認(rèn)真地思考如何讓這種情況不會(huì)再次發(fā)生,既不為自己,也不為任何其他人。Ron會(huì)弄清楚需要那種類(lèi)型的重構(gòu),哪一塊的技術(shù)方案可以改變或提升。
然后,基于這些發(fā)現(xiàn),Ron會(huì)行動(dòng)起來(lái),去推動(dòng)這些改變。
冷酷的現(xiàn)實(shí)我必須得懺悔一下。 我就是這里的Roger。 但我也是Ron。 我也相信我曾不止一次的偶然當(dāng)過(guò)Bill而自己不知道。我認(rèn)為自己沒(méi)有像Barney那樣過(guò),但是,到底有沒(méi)有,誰(shuí)知道呢!我們都在走向持久優(yōu)秀之路上來(lái)來(lái)回回。有時(shí)候我們是普通的,有時(shí)候我們是好的又或是優(yōu)秀的。總是在嘗試著不要變成差勁的。
我們最終持續(xù)時(shí)間最長(zhǎng)的那個(gè)角色會(huì)決定我們是什么樣的開(kāi)發(fā)者。
說(shuō)實(shí)話(huà),從普通開(kāi)發(fā)者到好的開(kāi)發(fā)者,相較于其他事情,需要的是積累更多的知識(shí)和經(jīng)驗(yàn)。但是想要從好的躍升到優(yōu)秀,你只需要改變一樣——態(tài)度。
“記住,在成為偉大之前,你必須是良好。在你成為良好之前,你必須是差勁。但是,在成為差勁之前,你必須去嘗試。——阿特 威廉姆斯
原文:http://thefullstack.xyz/excellent-javascript-developer/
相關(guān)文章:
1. 愛(ài)因斯坦謎題的java解答方法2. jsp網(wǎng)頁(yè)實(shí)現(xiàn)貪吃蛇小游戲3. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享4. HTML DOM setInterval和clearInterval方法案例詳解5. PHP中file_get_contents設(shè)置header請(qǐng)求頭,curl傳輸選項(xiàng)參數(shù)詳解說(shuō)明6. Springboot整合camunda+mysql的集成流程分析7. idea自定義快捷鍵的方法步驟8. idea重置默認(rèn)配置的方法步驟9. html清除浮動(dòng)的6種方法示例10. python中復(fù)數(shù)的共軛復(fù)數(shù)知識(shí)點(diǎn)總結(jié)
