我最害怕成為被時(shí)間困住的程序員。你知道我在說(shuō)誰(shuí)庙洼。
這些程序員有時(shí)候會(huì)做出糟糕的無(wú)意識(shí)的決定顿痪。“我懂得夠多了油够,我現(xiàn)在經(jīng)驗(yàn)無(wú)比豐富蚁袭。”
從那一刻開(kāi)始石咬,他們停止了求知之路揩悄。他們不再用新的想法挑戰(zhàn)自己。他們現(xiàn)在只依賴(lài)于自己的狹隘的經(jīng)驗(yàn)鬼悠。
我們必須持續(xù)學(xué)習(xí)删性。
很長(zhǎng)一段時(shí)間里,我一直在想這個(gè)問(wèn)題:優(yōu)秀的 JavaScript 開(kāi)發(fā)者和普通開(kāi)發(fā)者之間的差別是什么焕窝?今天我想分享一些零碎想法蹬挺。
“優(yōu)秀不是一兩次的表現(xiàn),而是一種習(xí)慣它掂“桶铮”——亞里士多德
習(xí)慣造就了我們
在我第一次閱讀《習(xí)慣的力量》的時(shí)候,有個(gè)觀點(diǎn)立即獲得我的認(rèn)同。那就是關(guān)鍵習(xí)慣的概念榕茧。
你知道的垃沦,有些習(xí)慣比其他習(xí)慣更重要。有些習(xí)慣會(huì)在我們身上觸發(fā)“連鎖反應(yīng)”雪猪,引起更多的行為改變栏尚。例如,定期鍛煉會(huì)讓你的飲食更加健康只恨,而吸煙則有相反的效果译仗。
這些就是關(guān)鍵習(xí)慣。這些習(xí)慣對(duì)我們的影響超乎你的想象官觅。
這個(gè)發(fā)現(xiàn)讓我思考:“高效的JavaScript開(kāi)發(fā)者的關(guān)鍵習(xí)慣是什么呢纵菌?”
“動(dòng)機(jī)讓你開(kāi)始行動(dòng),習(xí)慣讓你繼續(xù)前行休涤≡墼玻”——Jim Ryun
持續(xù)學(xué)習(xí)
在快節(jié)奏的JavaScript世界里,很多人對(duì)持續(xù)學(xué)習(xí)的必要性已經(jīng)習(xí)以為常了功氨。事實(shí)上序苏,我們有個(gè)專(zhuān)門(mén)的短語(yǔ)用來(lái)描述“JavaScript學(xué)習(xí)疲勞”。但是盡管我們能接觸到大量的信息捷凄,我仍然碰到很多開(kāi)發(fā)者并不積極學(xué)習(xí)忱详。
借口各種各樣《宓樱“我沒(méi)時(shí)間”匈睁、“我的知識(shí)足夠應(yīng)付工作了”或者“每出來(lái)一個(gè)新的JavaScript框架都要學(xué),累不累啊”桶错。
我們都很善于找借口航唆,特別是給自己。我應(yīng)該知道院刁,我是一個(gè)找借口的黑帶選手糯钙。
但是這些借口并不能讓你免于經(jīng)歷JavaScript開(kāi)發(fā)者最大的恐懼——落后于趨勢(shì)。
“我親愛(ài)的開(kāi)發(fā)者同胞黎比,不要問(wèn)你的代碼能為你做什么超营,問(wèn)問(wèn)你能為你的代碼做什么≡某妫”——JFK在另一個(gè)世界如是說(shuō)演闭。
新聞和開(kāi)發(fā)界動(dòng)態(tài)
在快速發(fā)展的JavaScript世界,很難在所有事情上保持領(lǐng)先颓帝。為了了解最新的JavaScript技巧米碰,我的方法是訂閱JavaScript 周報(bào)窝革。我已經(jīng)習(xí)慣了每個(gè)周末瀏覽一遍,看看最近的 JavaScript 世界有什么新東西吕座。
瀏覽所有內(nèi)容大概花費(fèi)我半個(gè)到一個(gè)小時(shí)虐译。這取決于我的興趣和深入程度。有時(shí)候我確實(shí)會(huì)深入閱讀超過(guò)2個(gè)小時(shí)吴趴,如果碰到有意思的教程的話漆诽。
找到正確的平衡很重要,這樣你就會(huì)一直樂(lè)在其中锣枝,不會(huì)把自己搞得筋疲力盡厢拭。
業(yè)余項(xiàng)目是你的好朋友
這也是一個(gè)大招。開(kāi)發(fā)和維護(hù)一個(gè)業(yè)余JavaScript項(xiàng)目是另一個(gè)會(huì)帶來(lái)好處的習(xí)慣撇叁。
業(yè)余項(xiàng)目的特點(diǎn)是它們給了你完全的自由供鸠。沒(méi)有約束條件,沒(méi)有借口陨闹,沒(méi)有截止時(shí)間楞捂。它完全取決于你自己的想象力。
這些項(xiàng)目可以野心勃勃趋厉,也可以閑庭信步寨闹。你可以致力于一個(gè)你希望成為下一個(gè) Twitter 的項(xiàng)目,也可以做一個(gè)讓你的生活更容易的寵物項(xiàng)目君账。這都無(wú)所謂鼻忠。
關(guān)于如何從業(yè)余項(xiàng)目獲得最大收益,我有幾個(gè)想法要分享給你:
- 你可以用你覺(jué)得很酷杈绸,并且想要了解更多的語(yǔ)言、框架矮瘟、技術(shù)來(lái)寫(xiě)業(yè)余項(xiàng)目瞳脓。
- 你可以用熟悉的 Ember.js 而不是 React 來(lái)開(kāi)發(fā),也可以初次嘗試陌生的 Rust澈侠。前者會(huì)給你實(shí)用的見(jiàn)解劫侧,而后者會(huì)打開(kāi)你的思路,接受新的思維方式哨啃。
- 發(fā)布你的項(xiàng)目烧栋。重復(fù)一遍,發(fā)布你的項(xiàng)目拳球!一個(gè)業(yè)余項(xiàng)目是熟悉整個(gè)開(kāi)發(fā)和發(fā)布周期的絕佳機(jī)會(huì)审姓。建立起日志、錯(cuò)誤上報(bào)祝峻、持續(xù)集成等完整機(jī)制魔吐。把它放到 Heroku 的免費(fèi)服務(wù)上去扎筒,安裝所有插件。
從開(kāi)源項(xiàng)目中學(xué)習(xí)
達(dá)爾文估計(jì)會(huì)為我們的開(kāi)源生態(tài)系統(tǒng)感到驕傲酬姆。其中最大的特點(diǎn)是:只有最好的才能榮登榜首嗜桌。(除了Angular)
流行的開(kāi)源庫(kù)傾向于用特殊的方式解決復(fù)雜的問(wèn)題。盡管數(shù)量龐大辞色,它們有一個(gè)共同點(diǎn):對(duì)開(kāi)發(fā)者友好骨宠,容易上手。
好好想想相满。一個(gè)開(kāi)源庫(kù)越難用层亿,它就越難成功。
這就是為什么我一直嘗試從成功的庫(kù)中學(xué)習(xí)的原因雳灵。React 的組件系統(tǒng)棕所,Express 的中間件模式和 Lodash 的方法簽名都是學(xué)習(xí)的機(jī)會(huì)。
寫(xiě)代碼時(shí)考慮同事怎么理解
這是我對(duì)一個(gè)古老的開(kāi)發(fā)者引言的理解:
我嘗試做的是悯辙,在開(kāi)發(fā)過(guò)程中問(wèn)問(wèn)自己“如果是同事寫(xiě)的這個(gè)模塊琳省,我能不用翻遍整個(gè)源碼就能理解和使用嗎?我會(huì)很樂(lè)意并容易地使用它嗎躲撰?
把編寫(xiě)容易使用和理解的代碼擺在首位针贬,是非常值得的。你會(huì)驚訝地發(fā)現(xiàn)拢蛋,我自認(rèn)為“除了我自己沒(méi)有人會(huì)去用這些代碼了”一次又一次地被證明是錯(cuò)誤的桦他。
但是最終是否有人使用了某個(gè)特定的模塊,這無(wú)關(guān)緊要谆棱。始終考慮如何讓你的代碼更好地給其他人使用快压,這會(huì)讓你成為更好的開(kāi)發(fā)者。并且你的同事也會(huì)因此喜歡你的垃瞧。
如果有同事跑來(lái)問(wèn)你做的某個(gè)模塊能否解決他的問(wèn)題蔫劣,這種感覺(jué)非常棒。然而更不可思議的感覺(jué)是个从,他們甚至都不用問(wèn)你脉幢,而你稍后發(fā)現(xiàn)他們已經(jīng)在用你的代碼了。
另一個(gè)額外的好處是嗦锐,你會(huì)發(fā)現(xiàn)你跟同事會(huì)經(jīng)常討論如何寫(xiě)出易于使用和理解的代碼嫌松。想象一下“你妹,我不敢相信我還要用這個(gè)模塊”的場(chǎng)景會(huì)減少奕污,而“不錯(cuò)萎羔,這個(gè)模塊解決了我的問(wèn)題”的場(chǎng)景會(huì)變多。
“傻子都能寫(xiě)出計(jì)算機(jī)能理解的代碼碳默。但好程序員才能寫(xiě)出人能理解的代碼”—— Martin Fowler
考慮理想的解決方案
每當(dāng)我有新任務(wù)外驱,我都會(huì)在開(kāi)始編碼前嘗試考慮理想的解決方案育灸。
尋找理想的解決方案有如下規(guī)則:
沒(méi)有時(shí)間限制。想象下你有無(wú)限多的時(shí)間來(lái)做任何事情昵宇。
沒(méi)有架構(gòu)限制华蜒。想象下你可以使用任何喜歡的庫(kù)苇本,不使用任何不喜歡的東西。
記住這兩個(gè)規(guī)則,我想出了開(kāi)發(fā)項(xiàng)目的理想方式若未。當(dāng)然了活烙,我?guī)缀醪惶赡苋?zhí)行理想計(jì)劃属愤。
但現(xiàn)在我知道理想解決方案是什么了揍诽,我就有了努力的目標(biāo)。當(dāng)我回到有著截止日期和架構(gòu)限制的煩人的現(xiàn)實(shí)中時(shí)犯助,我會(huì)盡可能地靠近理想情況癣漆。
這種方法的另一個(gè)好處是,它幫我避開(kāi)了這樣的集體思維陷阱:“我們一直是這樣做的剂买,所以我們還會(huì)繼續(xù)這樣做惠爽。”
有時(shí)候你會(huì)發(fā)現(xiàn)自己要求額外的時(shí)間瞬哼,以便能夠更接近理想結(jié)果婚肆。并且因?yàn)楝F(xiàn)在你對(duì)想要實(shí)現(xiàn)的結(jié)果有著清晰的藍(lán)圖,調(diào)整起來(lái)也會(huì)更輕松坐慰。
挑戰(zhàn) JavaScript 開(kāi)發(fā)
持續(xù)學(xué)習(xí)和挑戰(zhàn)自我的習(xí)慣并不容易培養(yǎng)较性。但是一旦你掌握了訣竅,你會(huì)發(fā)現(xiàn)它們價(jià)值連城结胀。
對(duì)我們的現(xiàn)狀憤世嫉俗并抱有“太陽(yáng)底下無(wú)新事”的心理赞咙,這再容易不過(guò)了。
但真相卻是糟港,我們使用的每一個(gè)開(kāi)源項(xiàng)目和接手的每一個(gè)任務(wù)人弓,對(duì)我們來(lái)說(shuō)都是利用學(xué)習(xí)技能成為整體上更好的開(kāi)發(fā)者的又一個(gè)機(jī)會(huì)。