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