提高新老碼農(nóng)生產(chǎn)率的6點可行性建議
譯文【51CTO.com快譯】有人認為:無論是新手程序員、還是編程老司機,說到底并非代碼的創(chuàng)造者,而是程序的“搬運工”。在項目開發(fā)中,他們希望自己能夠高效、且頗有成就感地交付出完美的代碼,但是現(xiàn)實卻往往事與愿違。本文將從一名深耕編程領(lǐng)域多年的資深碼農(nóng)的角度出發(fā),和您分享六個方面的經(jīng)驗總結(jié),希望能夠幫助您最大限度地提高生產(chǎn)率、并加快產(chǎn)品的交付速度。
1.使用恰當(dāng)?shù)木幊陶Z言
俗話說:“工欲善其事,必先利其器。”如果您的團隊能夠為應(yīng)用程序選用合適的編碼語言,勢必會對開發(fā)任務(wù)的高效完成產(chǎn)生積極的正面影響。例如:
- Python能夠“扎根”于科學(xué)計算,因此那些重視程序穩(wěn)定性、以及問題解決一致性的開發(fā)人員,會時常選擇Python。
- Ruby非常適合網(wǎng)站的表達性代碼,并且Ruby社區(qū)可以為同一問題提供多種解決方法。
- PHP是針對快速服務(wù)器端應(yīng)用的絕佳選擇。它幾乎可以在任何地方被部署。由于社區(qū)中擁有大量的PHP開發(fā)人員,因此它形成了一套生態(tài)系統(tǒng),并能夠?qū)δ诸^的項目及時提供幫助。
- Node.js雖然稍許復(fù)雜,但是它允許Web開發(fā)人員在服務(wù)器端使用與客戶端相同的語言。如果您需要提供高度交互性的客戶端體驗,那么就可以選擇Node.js來進行優(yōu)化。
不過,無論如何,請盡量不要讓最新的編程時尚影響您的語言選擇。最新的不一定是最適合您手頭項目的語言。就我個人而言:十年前,我們會用一些JavaScript在服務(wù)器端呈現(xiàn)頁面。五年前,我們會用REST或GraphQL API進行客戶端的數(shù)據(jù)渲染。而在2020年初,我們在應(yīng)用程序中使用了TypeScript,來呈現(xiàn)服務(wù)器端數(shù)據(jù)。
2.不要自行實施身份驗證
我參與過多個項目,其中有些是在應(yīng)用程序中實現(xiàn)了自定義的身份驗證,并且將加鹽(salted)的密碼哈希值保存到數(shù)據(jù)庫中。實際上,這完全沒有需要。由于我們擁有將身份驗證委派給活動目錄(Active Directory)的基礎(chǔ)架構(gòu),因此用戶完全可以使用與Windows登錄名相同的密碼。如今,我們已經(jīng)擁有了Auth0及其類似產(chǎn)品,完全可以將身份驗證委托給Auth0。據(jù)此,我們不但可以降低自行設(shè)計與實現(xiàn)身份驗證所帶來的潛在風(fēng)險,而且能夠為應(yīng)用程序提供更好的安全性。
3.首先編寫單元測試
沒有測試驅(qū)動的設(shè)計,就像只知道編寫代碼,而不開展測試一樣,您最終會發(fā)現(xiàn)各種無法解決的長方法、長參數(shù)列表等問題,而且這些代碼也會變得難以維護和改進。有時候,您需要手動去執(zhí)行“git reset”,或直接轉(zhuǎn)入代碼重構(gòu)(https://www.refactoring.com/)。
為了成功地進行單元測試,我們可以將某些功能分解為如上圖所示的“紅色、綠色、重構(gòu)”,這樣的微循環(huán)。其中:
- 紅色 - 直接從那些失敗的單元處開始編寫測試,通過排除真實運行環(huán)境中的干擾因素,以便隨時運行單元測試。
- 綠色 - 編寫使該單元能夠測試通過的代碼。
- 重構(gòu) — 清理代碼,重構(gòu)并再次運行單元測試。
如此往復(fù)循環(huán)下去,以提高代碼的質(zhì)量,并增強團隊對于軟件產(chǎn)品的交付信心。
4.利用SaaS、IaaS和PaaS
如今,開發(fā)人員需要將更多的時間投入到那些非代碼性的任務(wù)上,其中包括:基礎(chǔ)架構(gòu)、DevOps、以及集成等方面。實際上,您完全可以通過簡單的git push,這類SaaS服務(wù)與工具,來部署應(yīng)用的新版本,且無需與DBA、系統(tǒng)管理員等搶奪內(nèi)網(wǎng)資源。SaaS、IaaS和PaaS等服務(wù)供應(yīng)商可以幫助我們打理各種有關(guān)軟件項目開發(fā)的基本瑣事。例如,您不需要自行配置Logstash和ElasticSearch的復(fù)制,第三方服務(wù)公司會從您的應(yīng)用中檢索并提取相關(guān)日志,同時在保存了90天后再刪除掉,以滿足GDPR(歐洲《通用數(shù)據(jù)保護條例》,https://www.ctrl.blog/entry/gdpr-web-server-logs.html)的要求。當(dāng)然,您既需要花時間去找到能夠提供此類服務(wù)的可靠提供商,又要充分衡量將客戶的信用卡、短信、郵件等信息,存放到第三方平臺所帶來的安全性問題。
此外,像Heroku之類的平臺即服務(wù)(PaaS)提供商,不僅能夠?qū)崿F(xiàn)應(yīng)用程序的外包托管,而且可以通過各種技術(shù)棧的預(yù)配置安裝,提供基礎(chǔ)架構(gòu)和平臺的日常運維。據(jù)此,您可以更加專注于軟件產(chǎn)品的交付時間。
5.使用IDE來分析代碼
一些常用的、廣受歡迎的IDE(集成開發(fā)環(huán)境,如:Eclipse、IntelliJ、Visual Studio、以及VS Code等),要么過于復(fù)雜,要么只能發(fā)現(xiàn)case塊中沒有最終默認子句之類的問題。我們在實際項目中使用到了linter這一套開發(fā)工具(生態(tài)系統(tǒng))。它能夠集成IDE或編輯器的各種內(nèi)置功能,方便我們開展各種調(diào)試。其中,SonarLint不但能夠支持前面提到的各種IDE,還可以提供針對程序中安全問題、細微錯誤、以及不規(guī)范編碼的各種建議。此外,您還可以使用SonarQube來衡量代碼的質(zhì)量,修正IDE中的錯誤建議,最終交付安全且易于維護的代碼。
6.快速構(gòu)建
作為獨立的開發(fā)人員,您可能會選擇在本地的開發(fā)環(huán)境中,運行測試和部署代碼,并據(jù)此得到快速的反饋。但是,當(dāng)您在進行團隊協(xié)作時,程序代碼就可能需要在CI/CD管道中運行了。為了按時完成任務(wù),我們往往會用到Makefile、Gradle、或其他適合編程語言與運行時環(huán)境的構(gòu)建工具,以便實現(xiàn)數(shù)據(jù)庫的遷移、打包、部署、以及分發(fā)等過程自動化,并保證代碼能夠順利地運行在生產(chǎn)環(huán)境中。
在任何新的項目開啟時,我們都需要對其進行一些基礎(chǔ)性的探索與研究。而在開發(fā)的生命周期中,我們的重點除了編寫代碼,還應(yīng)當(dāng)兼顧實施構(gòu)建,搭建IDE,配置運行環(huán)境,部署生產(chǎn)環(huán)境,以及順暢地與外部進行各種調(diào)用和交互。
小結(jié)
當(dāng)然,在實際開發(fā)程序的過程中,我們可能會碰到許多影響到生產(chǎn)率和交貨時間的因素。希望上面介紹的六種提高生產(chǎn)率的可行性技術(shù)建議,能夠?qū)δ捻椖繉嵺`提供幫助,讓您事半功倍。
原標(biāo)題:6 Productivity Practices for New (or Old) Developers ,作者: Michael Bogan
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】