看懂别人的代码,只是成为高效程序员的第一步!
作者 |?SeattleDataGuy
譯者 | 彎月,責(zé)編 | 屠敏
出品 | CSDN(ID:CSDNnews)
在為面試做準(zhǔn)備的時候,很多軟件工程師都花費了大量時間做編程題和完善簡歷。
最終在找到一份工作后,無論是在創(chuàng)業(yè)公司、Google、亞馬遜或是其他地方工作,他們會發(fā)現(xiàn)之前為這份工作而學(xué)習(xí)的技能其實在日常工作中根本用不上。
在本文中,我們將根據(jù)自身的心得呈上高效程序員的七大技能。
學(xué)習(xí)如何閱讀他人的代碼?
只要不是自己編寫的代碼看起來都不順眼。
所以說,能夠理解他人的代碼是一項偉大的技能,而且你可以從中受益良多。?
不論前一位工程師的代碼多么雜亂或思慮不夠周全,你仍然需要仔細(xì)閱讀所有的代碼。畢竟,這是你的工作。何況那位工程師可能就是一年前的你。
這項技能有兩種好處。第一,能夠閱讀別人的代碼,這是了解什么是不良設(shè)計的絕佳機(jī)會。在瀏覽其他人的代碼時,你可以了解哪些代碼有效,而哪些無效。更重要的是,你將了解哪類的代碼方便其他工程師理解,而哪類的代碼很難理解。
你需要盡可能多地閱讀別人的代碼。如此一來,其他工程師就會知曉你是一名高級工程師。
同時在閱讀時,你需要指出有關(guān)代碼可維護(hù)性以及良好注釋的重要性。這可以進(jìn)一步彰顯你在編程領(lǐng)域的主導(dǎo)地位。
你的代碼應(yīng)該設(shè)計得井井有條,不需要任何文檔。實際上,如果你是一名優(yōu)秀的程序員,則應(yīng)該不需要編寫有關(guān)代碼的任何文檔。編寫文檔很浪費時間,你應(yīng)該把時間花在編程和參加會議上。
能夠讀懂他人凌亂的代碼也可以方便你在必要的時候進(jìn)行修改。有時這意味著你需要修改并不熟悉的代碼。例如,我們曾將腳本從Powershell轉(zhuǎn)換到Python,再轉(zhuǎn)換到Perl。我們的Perl經(jīng)驗很有限,但是我們?nèi)匀挥凶銐虻谋尘靶畔砼宄撊绾尉帉懩_本并進(jìn)行必要的改動。
這是因為我們很了解現(xiàn)有的代碼,而且還能夠閱讀Perl腳本。
閱讀他人的代碼能夠提升自身的價值,因為你遵循的都是精心設(shè)計的系統(tǒng),而其他人可能不太理解。
感知不良項目
?
有很多技能需要付出大量的時間才能學(xué)會。我們認(rèn)為值得學(xué)習(xí)的技能之一就是了解哪些項目不值得做,以及哪些項目顯然是死路一條。
大公司的項目往往更有可能順利完成,而且影響力也更大。有些項目可能沒有任何業(yè)務(wù)意義(至少對你而言沒有意義),有些項目則管理不善。但并不是說如果你不同意就可以否認(rèn)項目。然而,如果利益相關(guān)者自己都解釋不了項目的最終結(jié)果,那么該項目可能就不值得做。
此外,有些項目可能過于關(guān)注技術(shù)而不是解決方案,因此從一開始就很明顯不會產(chǎn)生太大影響。在真正能夠理解什么是不良項目之前,你需要經(jīng)歷很多不良項目,才能培養(yǎng)起這種技能。因此,不要花費太多時間在甄別每個項目上。
等到職業(yè)生涯達(dá)到某個點時,你自然而然就能擁有良好的直覺。
?
避免會議
無論你是軟件工程師還是數(shù)據(jù)科學(xué)家,會議都是不可避免的,因為你需要與項目經(jīng)理、最終用戶和客戶互通有無。但是,會議常常會塞滿你的整個日程。因此我們要學(xué)會如何避免不必要的會議。或許這里使用“管理”比“避免”更為妥帖。目標(biāo)是確保你花在會議上的時間能夠推動決策并幫助團(tuán)隊前進(jìn)。
最常見的方法是,在每天的日程安排上留出兩小時的固定會議。很多人都會在他們認(rèn)為合適的時間段設(shè)置例會,然后利用這段時間來抓緊時間趕開發(fā)工作。
還有一種避免會議的方法是提前到公司。就個人而言,我們喜歡早到公司,因為通常這個時段辦公室比較安靜。大多數(shù)早到的人都和你一樣,只想完成工作,所以沒有人會打擾你。
對于獨立工作的人來說這很重要,因為我們的工作需要專注,而且不需要與其他人交談。雖然有時候你需要與他人合作來解決問題,但一旦問題得到解決后,你只需要編寫代碼。在精神高度集中的時候,你的大腦高速運轉(zhuǎn),處理當(dāng)前工作的各種復(fù)雜想法。如果你經(jīng)常被打斷,那么就很難拾取被打斷的記憶重新開始。
?
Github…說起Git就頭疼?
有些計算機(jī)科學(xué)專業(yè)的學(xué)生一生下來就開始使用Git。他們了解每一個命令和參數(shù),甚至超越了一些專業(yè)人士。
而有些人則在第一份工作中才開始嘗試Git。對于他們來說,Git是一堆非常費解的命令和進(jìn)程。他們從未百分百確定自己的做法是否正確(因此Git命令大全非常受歡迎)。?
無論你的公司使用哪種代碼存儲系統(tǒng),只要使用正確都會很有幫助,但如果使用不當(dāng)則會成為阻礙。看似只是一次簡單的推送或提交,但不經(jīng)意期間就很有可能會演變成一場多個分支和分叉的混戰(zhàn)。此外,如果你經(jīng)常忘記拉取最新的版本,那么還需要為處理合并沖突而頭痛不已。
如果有必要的話,還是保留一份Git命令大全吧,或者其他能夠減輕你負(fù)擔(dān)的資源。
編寫易于維護(hù)的代碼
https://xkcd.com/974/
年輕的工程師常常希望在一個解決方案中實現(xiàn)他們所學(xué)的一切。在這種愿望的驅(qū)使下,你學(xué)習(xí)了面向?qū)ο缶幊獭?shù)據(jù)結(jié)構(gòu)、設(shè)計模式以及所有新技術(shù),并希望在你編寫的每一段代碼中使用所有這些技術(shù)。這種思想會導(dǎo)致不必要的復(fù)雜性,因為這很容易在過去使用的解決方案或設(shè)計模式之上畫蛇添足。
你需要尋求復(fù)雜的設(shè)計概念和簡單的代碼之間的平衡。設(shè)計模式和面向?qū)ο蟮脑O(shè)計理應(yīng)簡化總體方案中的代碼。但是,隨著越來越多的流程被抽象化、封裝和黑盒化,調(diào)試的難度則越來越加劇。
學(xué)會說不和排列優(yōu)先順序
?
無論你是財務(wù)分析師還是軟件工程師,所有工作崗位的人員都需要學(xué)會說“不”和排列優(yōu)先順序。尤其是技術(shù)崗位,因為似乎每個人都需要他們提供幫助。如果你是一名數(shù)據(jù)工程師,則可能需要承擔(dān)開發(fā)數(shù)據(jù)流水線之外的工作。有些團(tuán)隊需要數(shù)據(jù)提取,有些需要負(fù)責(zé)儀表板,而有些則需要為數(shù)據(jù)科學(xué)家提供新的流水線。
雖說排列優(yōu)先順序和說“不”可能是兩種不同的技能,但是二者緊密地交織在一起。排列優(yōu)先順序意味著你需要將時間花費在對公司有重大影響的工作上,而說“不”則意味著避免應(yīng)該由其他團(tuán)隊處理的工作。對于所有崗位而言,二者都是同時發(fā)生的。
做到這一點很難,因為我們都希望處理好每個請求。尤其是剛剛畢業(yè)的大學(xué)生。你不希望讓任何人失望,而且希望手頭有大量的工作。
在大公司,工作似乎沒有盡頭。關(guān)鍵在于只接受能夠完成的工作。
很多技能在實際的面試中根本不會被問及,甚至大學(xué)也不會教。大學(xué)生未能接觸實際開發(fā)環(huán)境中的問題往往是因為受到了環(huán)境的限制,而不是說他們沒有這種欲望。
運營設(shè)計思維
在大學(xué)學(xué)習(xí)期間,有一項技能很難在面試中體現(xiàn)和復(fù)制成功,那就是思考最終用戶會如何錯誤地使用你的軟件。通常我們稱之為運營設(shè)計思維。
然而,這個詞的背后含義是你要編寫怎么用都不會出問題的代碼。
例如,由于許多編程都屬于維護(hù)工作,因此常常需要修改與其他代碼高度糾纏的代碼。即使是簡單的更改也需要調(diào)查對象、方法和/或API可能會被引用到的所有地方。否則,就很容易導(dǎo)致意外的模塊被破壞。即使你只是修改了數(shù)據(jù)庫中的某個數(shù)據(jù)類型也是如此。
此外,你還需要在開發(fā)之前仔細(xì)考慮邊緣情況,以及整個高層設(shè)計。
在開發(fā)新模塊或微服務(wù)時,情況就更復(fù)雜了,重要的是你需要花時間仔細(xì)考慮所構(gòu)建內(nèi)容的運營場景。考慮一下將來用戶可能會如何使用新模塊,他們可能會通過哪些錯誤的方式使用新模塊,可能需要哪些參數(shù),以及將來程序員是否可能通過其他方式使用你的代碼。
保持代碼的簡單性只是問題的一部分。創(chuàng)建能夠在你自己的計算機(jī)上良好運行的軟件很容易。但是部署代碼會出現(xiàn)各種錯誤。一旦投入生產(chǎn),就很難確保代碼的使用方式以及原始的代碼中會添加哪些代碼。從現(xiàn)在開始的五年后,程序員可能會對這段代碼的局限感到失望。
原文:https://medium.com/better-programming/7-habits-of-highly-effective-programmers-563ee3b63f33
本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。
推薦閱讀淺談分布式存儲中的網(wǎng)絡(luò)通信
138 張圖帶你 MySQL 入門!
如何在 Kubernetes 上配置 Jenkins?
突發(fā)!印度封禁抖音、微信、快手等 59 款中國 App
厲害!國內(nèi)大學(xué)生計算機(jī)編程第一人,一人挑戰(zhàn)一個隊,百度最年輕 T10,現(xiàn)創(chuàng)業(yè)自動駕駛
Balancer因通縮代幣STA遭遇閃電貸攻擊,價值50萬美元資產(chǎn)被黑
淺談分布式存儲中的網(wǎng)絡(luò)通信
真香,朕在看了!
總結(jié)
以上是生活随笔為你收集整理的看懂别人的代码,只是成为高效程序员的第一步!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mendix入局中国低代码,开发者们你准
- 下一篇: 超 8 成软件存已知高危开源漏洞,奇安信