幽默:程式設計師耍小聰明導致認知負擔 - tef

banq發表於2021-05-30

有一種觀點:未來程式設計系統發展應該以減少認知負擔為主要目標,這個觀點是好的,例如低程式碼開發工具等,更簡單的程式語言等,但是必須認識到:解決認知負擔是社會性的、是自然性的系統工程,或者說,我們創造的混亂源自我們自己的傑作。
我們建立的工具(如編譯器)已經確實減少了認知負擔(就像我們可以編寫一個快速的 bash 指令碼來完成一項平凡的任務),但它們也讓我們可以建立一個更大的混亂(就像bash指令碼一樣)。
你可以構建一種語言,它獎勵一些簡單的概念並懲罰一些複雜的概念,但我們已經擁有有這些,它們被稱為函數語言程式設計語言,程式設計師不遺餘力地在上面實現最多的魯布·戈德堡機械(rube-goldberg) 裝置來顯示自己的聰明。

魯布·戈德堡機械(Rube Goldberg machine)是一種被設計得過度複雜的機械組合,以迂迴曲折的方法去完成一些其實是非常簡單的工作,例如倒一杯茶,或打一顆蛋等等。設計者必須計算精確,令機械的每個部件都能夠準確發揮功用,因為任何一個環節出錯,都極有可能令原定的任務不能達成。由於魯布·戈德堡機械運作繁複而費時,而且以簡陋的零件組合而成,所以整個過程往往會給人荒謬、滑稽的感覺。美國漫畫家魯布·戈德堡在他的作品中創作出這種機械,故人們就以“魯布·戈德堡機械”命名這種裝置。 - 百度百科


股票交易者經常使用一個糟糕的軟體並拒絕改變(banq注:這是股票交易系統非常弱智表現之一,每天打新都需要每天進去點選一下按鈕,無法使自動設定進行),因為人為的挑戰讓他們感覺聰明和強大,我還想起了程式設計師如何經常使用 git 並分享咒語,就像我們正在努力施法一樣。
換句話說,您可以建立工具和實踐來減少程式設計的認知開銷,但在實踐中,程式設計師現在會更容易給其他人建立符合他們美學要求的認知負擔的系統。
許多減少程式碼庫中認知負擔的東西似乎不為現代開發人員所歡迎,例如有一點冗餘或重複,或將內容儲存在一個檔案中,這樣您不必跳過整個程式碼庫來修復問題。
程式設計工具更難使用,使得編寫複雜程式碼的過程變得更加困難和昂貴,但這只是意味著人們就是為了弄得一團糟才感覺更聰明,這就無法使用技術手段解決這個問題了。
如果你讓事情變得困難,就只能吸引最差的程式設計師(與你合作),或者你讓事情變得更容易,而另一種最差型別的程式設計師是在建立困難時沒有任何剋制,這樣他們就會覺得自己很聰明。
 
認知負擔是有上下文的:sql 不容易使用,資料庫是難以維護的產品,但它們在操作中確實有一些相對的一致性,並且用數千行程式碼替換更便宜的sql查詢並不是很有幫助。
與此同時,Rails要求你從一個反恐精英玩家/賽車手角度看webapps應該如何工作,但這確實意味著你可以在開始之處能夠大量生產應用程式,儘管替換 rails 應用程式通常比重寫它更容易,因為隱含太多了邏輯。
另一個例子是 mvc:保持你的 db 和 html 程式碼不同的概念讓生活更輕鬆,但最終我們將所有的 db 程式碼和所有的 html 程式碼收集在一起,每個功能更改都橫切了 20 個不同的檔案。
在某種程度上,在別人的大泥球下受苦確實會激勵一些程式設計師發誓他們下次會做得更好,但在實踐中,程式設計師會創造一個他們可以理解的大泥球,並假設其他人會發現它同樣容易正如他們所做的那樣。
我們不需要讓程式設計變得更容易的開發工具,我們需要這樣的程式設計師:不要從感覺聰明中獲得價值;我們需要不想炫耀的程式設計師,需要關心讓事情變得容易的人。
 具有諷刺意味的是,即使您確實以較低的認知開銷製作了一個不錯的程式碼庫,也會在最簡單的地方進行更改,直到人們用完易於更改的內容,然後您又回到了一個大泥球減少認知開銷是一項持續的任務。
 
歸根結底,“乾淨與骯髒”或“複雜與簡單”或“好與壞”只是程式設計師用來描述他們自己的程式碼庫體驗的詞,並斷言它們是客觀真理,而不是自己與事實博弈後的一種權衡選擇。





 

相關文章