【CSDN 編者按】要想快速編寫(xiě)程序,必須要認(rèn)真考慮技能、工具選擇、攤銷和回報(bào)。
原文鏈接:https://buttondown.emAIl/hillelwayne/archive/how-much-can-you-code/
作者 | HILLEL WAYNE 譯者 | 彎月
責(zé)編 | 王子彧
出品 | CSDN(ID:CSDNnews)
首先,我們來(lái)探討一下哪些任務(wù)適合自動(dòng)化。

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






