【CSDN 編者按】有人說,AI 編程普遍提高了程序員的編碼效率,也有人說,AI 智能編程增加了程序員改 Bug 時長,而本文作者卻說:編程真的很難,你們覺得編程難嗎?不妨一起看看。面分析難處
原文鏈接:https://myme.no/posts/2023-09-19-programming-is-hard.html
作者 | Martin Myrseth譯者| 彎月
責編 | 夏萌
出品 | CSDN(ID:CSDNnews)
軟件很奇妙。從基本形式來看,軟件非常抽象,似乎和真實世界沒有任何關系。但現代手機等硬件設備之上運行的圖形應用卻感覺非常真實,人們甚至完全不需要理解“黑盒子”內發生了什么。一些軟件甚至能夠控制硬件,在真實世界中執行真正的動作。
作為程序員,我們編寫的一些代碼是對真實世界概念的建模,所以這些代碼的結構和形式通常都反映了真實世界。而有些代碼則是完全抽象的,負責解決只有計算機領域才會出現的“元物理”問題。負責解決抽象問題的代碼也是必不可少的組成部分,真正看得見摸得著的“真實世界的建模”正是構建在其上。
然而,代碼并沒有被要求必須反映它要解決的問題,有時代碼解決的問題甚至不是“真實存在”的問題。當然,能夠通過某種方式來表現關系的代碼更“容易閱讀”且“容易維護”,因為人們更熟悉這樣的代碼。但我們構建系統的目的是“建模”,而不是“模仿”。
我認為:
“只要模型的行為能夠解決問題并讓用戶滿意,軟件就完成了使命。”
姑且不考慮性能問題,計算機并不關心程序的結構。遺留的意大利面式的代碼解決問題的能力并不遜色于精心打造的系統。只有在考慮人們需要修改系統的時候,糟糕的解決方案的代價才會體現出來。
這就引出了程序員需要面對的另一個更隱蔽、更困難的問題:將真實世界的需求轉換成抽象的結構,該結構在計算機上執行時,需要對問題域建模,并達到一定的滿意程度。而在建模的過程中,我們還需要考慮怎樣才能更好地對抽象進行建模,以保證其他人和自己將來依然能理解。
網上的許多關于編程復雜性的討論都集中在編程語言本身、工具以及技術棧的復雜性上,而忽視了怎樣才能更有效地理解需求并將其轉換成代碼。而對于系統不斷發展時,如何去溝通并維護這些需求更是只字不提。這并不意味著這些事情不需要做。
學習編程語言的語法和語義需要花費很多時間和精力。構建現代應用程序和服務所需的工具、服務和基礎設施也是如此。但這并非全部!許多技術都在快速發展,努力跟上時代的腳步已經令我們感覺力不從心。但不要忘記或忽視我們的任務是理解他人,理解周圍的世界,而這才是保證代碼質量和目標的關鍵。
沒錯,編程很難,真的很難!