【CSDN 編者按】要想快速編寫程序,必須要認真考慮技能、工具選擇、攤銷和回報。
原文鏈接:https://buttondown.emAIl/hillelwayne/archive/how-much-can-you-code/
作者 | HILLEL WAYNE 譯者 | 彎月
責編 | 王子彧
出品 | CSDN(ID:CSDNnews)
首先,我們來探討一下哪些任務適合自動化。
如上圖所示,如果你花費一天多的時間實現(xiàn)了每個月只能節(jié)省 5 分鐘的任務,那么純屬浪費時間。
當然,自動化除了節(jié)省時間之外,還有其他意義。例如, 花一天時間自動化每個月只能節(jié)省5分鐘的任務并不劃算,但如果你十分厭惡這項任務,那么仍然是值得的。
這個問題會引出另一個問題:為什么你需要花費一天時間?
為什么不能是一個小時?
如果你能快速寫出完整的程序,那么編寫程序就能成為解決更廣泛的問題、且節(jié)省時間的解決方案。一個小時是“快”的一個很好的衡量標準。一個小時就是一頓午飯的時間。
談及快速編寫程序,我認為我們必須考慮到下面這些因素。
技能
快速編程是與軟件工程截然不同的一項技能。軟件工程原則并不適用于快速編程。當然,良好的組織和清晰的意圖仍然很重要,但是很多 SE 理論都是圍繞如何作為團隊的一部分持續(xù)開發(fā)現(xiàn)有代碼庫。例如,我很少為自己的腳本編寫測試。設置測試需要時間,使用固定裝置設置集成測試需要更多時間。
同時,快速反饋非常重要,甚至比常規(guī)編程更重要。我通過一種方式來快速設置和執(zhí)行腳本。
代碼是否方便理解也無關緊要。這些程序都很小,如果你無法理解代碼,完全可以重寫。如果需要擴展,也可以“適當?shù)?rdquo;重寫。
對于腳本中應該使用多少第三方依賴項,我有點糾結。有時,第三方庫確實很有幫助,但是你需要花時間學習和了解,而且許多第三方庫的文檔都很糟糕。我認為,能夠彌補語言本身缺陷的依賴是好的,但是你為了逃避學習而選用某些庫就不太正確。我用 click 制作了一個 Python/ target=_blank class=infotextkey>Python 工具,很快就后悔了。
工具的選擇
關系到工具選擇的因素有下面幾個。如果我們想盡可能快速地寫出一個完整的程序,就應該選擇簡潔而富有表現(xiàn)力的語言。簡潔的語言更容易調(diào)整,因為你需要修改的字符更少。樣板代碼則是負面因素。
動態(tài)語言具有一定的優(yōu)勢。運行時錯誤比靜態(tài)錯誤更好。如果程序在執(zhí)行第 20 行代碼時出現(xiàn)類型錯誤,那么運行時故障仍會執(zhí)行第 1~19 行,這就可以為你提供這些代碼能否正常工作的信息。
一個同樣重要的因素:選擇適合的領域。這取決于需要自動化的任務。有些語言有很好的內(nèi)置函數(shù),有些語言恰好有很好的庫。有時,最好的工具不是編程語言。最近,我遇到了一個任務:抓取谷歌地圖上 100 個街道地址的 url,我采用了 Power Automate。PA 是一款有點糟糕的工具,但它有良好的瀏覽器自動化技術,非常適合這項任務。此外,它在 windows 11 中是免費提供的。所以,最終我們只用了半個小時就完成了任務。
此外,我還用正則表達式、shell(特別是 PowerShell)以及電子表格解決了很多問題。
其他注意事項:一個好的 CLI 庫是必須的。擁有一個良好的 GUI 框架固然很好,但不那么重要。你需要保證能夠運行單個文件,并且能夠使用調(diào)試器。如果條件允許,還可以考慮使用非常友好的 Copilot。
攤銷
攤銷指的是,算法有一些昂貴的操作和許多開銷低廉的操作,因此整體運行時間低于你的預期。例如,向數(shù)組追加元素的開銷是 O(1),即使有時你需要花費O(n) 來調(diào)整數(shù)組的大小,整體開銷依然是 O(1),因為這種情況很少發(fā)生。
對于此處討論的問題來說,攤銷指的是,為編寫腳本投入的時間可以加快將來編寫腳本的速度。這對于提高技能非常重要,因此我們應該詳細討論一下。首先,熟練之后能減少查找信息的時間。
通過搜索引擎查找信息需要花費很多時間。在軟件工程中,這點時間開銷并不重要,因為我們的大部分時間都花在閱讀上,但是現(xiàn)在你需要快速編寫程序。將信息移動到本地緩存(文本文件、注釋)很好,如果你已經(jīng)掌握了這些信息,那就更好了。
此外,編寫腳本會生成可供你復制粘貼的代碼片段。我制作第一款應用時花了很多時間,但后面的應用編寫速度明顯加快,因為我可以復制粘貼已有的代碼。至少,在不同的腳本中查找某些代碼的速度比上網(wǎng)搜索更快。
編寫腳本會讓你接觸到語言中極具表現(xiàn)力的黑魔法,例如宏和元編程。你知道將哪些代碼放入團隊維護的代碼庫中是很糟糕的?但是,這些黑魔法非常適合快速編寫腳本,一旦你學會了如何使用這些黑魔法就會事半功倍。
因此,真正掌握一門語言有很大的好處,同時了解許多不同的工具也有好處。