作為一個(gè)經(jīng)驗(yàn)豐富的程序員浪感,有哪些事情是你希望在一開始編程的時(shí)候就知道的昔头?或者換個(gè)方式來說,你認(rèn)為每個(gè)新手程序員應(yīng)該做或者學(xué)什么才能讓自己的編程水平更好影兽?
有經(jīng)驗(yàn)的程序員會(huì)做到下面 29 項(xiàng)事情揭斧,這也是每個(gè)新手程序員應(yīng)該知道的事情。
如果你想成為更好的開發(fā)者峻堰,你應(yīng)該尤其注意第 15 點(diǎn)和第 29 點(diǎn)讹开。
1.積極大膽地谷歌。你得知道如何有效地組織搜索關(guān)鍵字茧妒,查閱別人寫的代碼萧吠,然后合理地用在代碼里,從而解決問題桐筏。
2.擁抱變化纸型,堅(jiān)持不懈。老手程序員在接觸新技術(shù)時(shí)梅忌,能欣然接受像個(gè)初學(xué)者一樣處處受挫狰腌,并總能在完成工作的同時(shí)自學(xué)成才。
3.承認(rèn)細(xì)節(jié)的重要性牧氮。例如變量和函數(shù)的命名琼腔、CSS 屬性的命名、該用哈希還是用數(shù)組踱葛,以及其他看起來微不足道丹莲,但可能對(duì)項(xiàng)目有深遠(yuǎn)影響的事情光坝。
4.承認(rèn)大多數(shù)的“重要決定”其實(shí)并沒有那么重要。一般的開發(fā)者經(jīng)常在技術(shù)選型等“重大問題”上陷入唇槍舌戰(zhàn)甥材,而程序員老鳥們會(huì)避免浪費(fèi)時(shí)間在罵戰(zhàn)中盯另。這一點(diǎn)上,他們就像禪宗大師一樣(zen-like)洲赵。
5.選擇合適的工具解決問題鸳惯。網(wǎng)上有無數(shù)的開源庫、工具和框架叠萍,讓人眼花繚亂芝发。而老手們清楚地知道針對(duì)怎樣的問題,應(yīng)該用什么樣的工具苛谷。
6.明白代碼「不值錢」(該刪就刪)辅鲸。你必須習(xí)慣于刪掉幾百行代碼來重寫程序的某一部分,毫不留情抄腔。
7.在評(píng)估技術(shù)的時(shí)候要全面瓢湃。例如,我一直在鼓吹Elixir赫蛇。它語法優(yōu)美绵患,社區(qū)完善,有很大的潛力悟耘。但Elixir誕生的時(shí)間太短落蝙,所以如果要構(gòu)建復(fù)雜的功能,可能會(huì)難以找到能幫你提高效率的開源工具暂幼。因此筏勒,在評(píng)估要不要選擇使用一項(xiàng)技術(shù)時(shí),你得把所有這些因素都考慮在內(nèi)旺嬉。
8.學(xué)會(huì)說“我不知道”管行。沒有比拒絕承認(rèn)自己不知道更能浪費(fèi)一個(gè)開發(fā)者的時(shí)間了。
9.仔細(xì)分析錯(cuò)誤信息里的線索邪媳。傳統(tǒng)教育告訴我們:失敗是壞事捐顷。報(bào)錯(cuò)信息這種東西也經(jīng)常被跟失敗聯(lián)系起來,然而優(yōu)秀程序員明白雨效,這些錯(cuò)誤消息里其實(shí)隱藏著能將你指向最終正確解決方案的線索迅涮。
10.了解過早優(yōu)化和必要的“炫技式”優(yōu)化的區(qū)別。老手們清楚在什么時(shí)候需要寫一些看上去沒那么好懂徽龟,但會(huì)讓程序運(yùn)行更快的代碼叮姑。
11. 每個(gè)人都會(huì)犯錯(cuò),為自己的過失負(fù)責(zé)据悔。而尤其在團(tuán)隊(duì)里传透,把責(zé)任推來推去沒有任何意義耘沼,因?yàn)殄e(cuò)誤的發(fā)生往往不只是一方的因素造成的。
12. 成為你所用的開發(fā)工具的重度用戶旷祸。如果長期在某個(gè)開發(fā)環(huán)境下有相當(dāng)比例的開發(fā)工作耕拷,那你應(yīng)該去掌握使用它的細(xì)節(jié)。
13. 學(xué)會(huì)用Vim(至少會(huì)一點(diǎn))托享。 你至少應(yīng)該在這個(gè)編輯器里學(xué)會(huì)勉強(qiáng)地移動(dòng)和翻頁。
14. 不要接陌生技術(shù)領(lǐng)域的私活浸赫。個(gè)人做自由職業(yè)項(xiàng)目闰围,其中很大一部分挑戰(zhàn)就是評(píng)估項(xiàng)目時(shí)間。不要規(guī)劃自己未知領(lǐng)域的事情既峡,那會(huì)讓你處于想當(dāng)尷尬的境地羡榴。
15. 不要數(shù)你干活花了幾個(gè)小時(shí)。技術(shù)大牛會(huì)把時(shí)間花在有深度的工作上运敢,并且他們清楚花了多少時(shí)間完全不重要校仑。
16. 學(xué)會(huì)坦然接受批評(píng)。當(dāng)你的代碼因?yàn)楦鞣N原因四分五裂時(shí)传惠,你需要培養(yǎng)用理性和邏輯的方式來應(yīng)對(duì)(而不是情緒化處理)迄沫。
17. 同有更多經(jīng)驗(yàn)的人結(jié)對(duì)編程。沒有比這個(gè)更高效的編程學(xué)習(xí)方式了卦方。
18. 一定要先自己做一遍代碼審查羊瘩。當(dāng)你在GitHub上發(fā)起一個(gè)pull request之前,先把代碼當(dāng)成別人寫的盼砍,自己先審查一遍尘吗。
19. 認(rèn)識(shí)到做自由職業(yè)的難點(diǎn)不是寫代碼,而是其余的所有事情浇坐。銷售睬捶、推廣、客戶支持近刘,質(zhì)量保證以及產(chǎn)品管理擒贸,所有這些都會(huì)花費(fèi)大量時(shí)間。
20. 發(fā)現(xiàn)并解決更大的問題跌宛。優(yōu)秀的程序員不拘泥于眼前的問題酗宋,而是清楚如何用更長遠(yuǎn)的方式徹底的解決這一類問題。
21. 深入了解一些大型開源項(xiàng)目的核心能讓你開發(fā)時(shí)如虎添翼疆拘。如果你知道如何給你的項(xiàng)目打猴子補(bǔ)丁(Monkey Patch), 那么你將無所不能蜕猫。
22. 跳過多數(shù)的會(huì)議。你的公司雇你是來寫代碼的哎迄,而不是談代碼的回右。當(dāng)會(huì)議多到失控的時(shí)候隆圆,不去參加也沒有任何問題。而且一旦你開始這樣做翔烁,別人會(huì)更珍惜你的時(shí)間渺氧。
23.知道什么時(shí)候開始回饋。到了某個(gè)時(shí)候你需要將你的技能和經(jīng)驗(yàn)傳授給年輕的開發(fā)人員蹬屹,就像你的導(dǎo)師當(dāng)時(shí)教授你一樣侣背。
24. 能寫爛代碼。有時(shí)候可以當(dāng)一當(dāng)“膠帶式程序員”慨默。關(guān)鍵是隨著時(shí)間推移贩耐,你需要弄清楚什么時(shí)候可以走捷徑,什么時(shí)候必須走捷徑厦取。這其實(shí)是最難掌握的技能之一潮太。
25. 禮貌地告訴別人你工作到很晚。如果你是辦公室里最后一個(gè)虾攻,可以發(fā)一封簡短的匯報(bào)郵件铡买。別人一般會(huì)注意到郵件上的時(shí)間戳的。
26. 像一個(gè)領(lǐng)導(dǎo)者(Leader)一樣做事霎箍,而不是老板(Boss)奇钞。老板是讓別人為他工作的人,領(lǐng)導(dǎo)者是人們追隨的人朋沮。做個(gè)領(lǐng)導(dǎo)者蛇券。
27. 去打打桌上足球。從長期來看樊拓,同其他開發(fā)者(或不同崗位上的同事)建立聯(lián)系會(huì)比在緊巴巴的期限里交付一個(gè)功能更有價(jià)值纠亚。
28. 在壓力下學(xué)習(xí)。你需要知道如何應(yīng)對(duì)像系統(tǒng)宕機(jī)而你要負(fù)責(zé)將它復(fù)原的情況筋夏,即使一開始你完全沒有頭緒蒂胞。
29. “Move fast and break things” 別讓完美主義阻止你做事。錯(cuò)誤往往是最好的學(xué)習(xí)機(jī)會(huì)条篷。所以別把犯錯(cuò)當(dāng)作失敗骗随,而應(yīng)該把它們當(dāng)作值得學(xué)習(xí)的經(jīng)歷,并意識(shí)到:正是不斷克服和突破這些錯(cuò)誤赴叹,作為一個(gè)程序員鸿染,你才能不斷成長起來。
像生活中的很多事情一樣乞巧,編程也是你做的越多涨椒,了解的就越多。所以如果你是一個(gè)新手程序員,還是直接去編碼吧蚕冬。記得將這些最佳實(shí)踐應(yīng)用在日常工作中免猾,來不斷提升你的編程技藝。