作為一名從事獨立遊戲設計和程式業務的開發者,克里夫斯基(Cliffski)在一篇文章中吐槽道 —— 這年頭的「程式碼膨脹」,已經到了令人髮指的地步。以下為他吐槽的全文:
偶然的一次,我需要使用網路硬碟服務,就是把檔案上傳到某個地方(具體是哪家廠商就不說了,反正都一樣)。這只一個非常簡單的操作,首先將硬碟上某個資料夾裡的檔案複製到遠端伺服器,然後再執行一些資料庫操作,為檔案起個名字,然後提供給下載,僅此而已。
提供網路硬碟空間的是一家大公司,規模很大,每天應該有不少駭客攻擊,所以他們需要一些安全措施,上傳和下載的時候還得驗證檔案是否被篡改等等,這都沒問題。
但是,最基本的功能只不過是列出檔案、讀取檔案、上傳檔案,然後關閉連接,在日誌裡寫上成功,或者出錯的話在日誌裡寫出錯誤原因。這又不是火箭科技,實際上我自己用wininet API寫這段程式碼 ,伺服器用PHP和MySQL,儘管達不到企業級,但也能支持幾十萬檔案的上傳、下載和日誌記錄——一個人寫程式碼 大概也就是兩三周的工作量?
然而,我用的那個專用上傳工具的用戶端軟體總共有230MB,包含2700多個檔案。
是的,你沒看錯,2700多個檔案,237MB的可執行檔和各種垃圾,僅僅是為了把檔案拷貝到伺服器而已。這已經不能叫膨脹了,更不是過度設計,這完完全全到了不可理喻的地步。
實際上,不光是這個上傳工具,如今任何大型軟體公司的任何軟體都一樣。
電腦裡 99.9% 以上的程式碼 都是毫無用處的垃圾
我知道怎麼回事,我也見過其他程式設計師的做法。根本原因在於,程式設計師根本不懂怎樣透過高效率的底層程式碼 來實現目標,他們甚至從來沒見過底層的高效程式碼 。沒見過的東西怎麼可能做得出來,還要做得更好呢?
編寫一個安全、快速上傳檔案到伺服器的軟體,最多需要二十分之一的程式量。只需要一個檔案,一個exe檔就夠了,根本不需要好幾百個DLL。這是完全可能的,而且會更容易、更可靠、效率更高,還很容易調試,甚至能更穩定地工作。
程式碼膨脹似乎是像我這種老傢伙的碎碎念,畢竟我已經上年紀了。但我們這幫老傢伙們碎碎念的可不是程式碼執行減慢了50%、規模增大了50%。實際情況遠不止於此。
我相信你電腦裡99.9%以上的程式碼都是毫無用處的垃圾,永遠不會被運行。但這些程式碼都堆在那兒,堆在65個DLL裡,這都是因為程式設計師想做一些不太重要的事情,比如保存一張圖片,但他們完全不懂得該怎麼做,就乾脆導入一大堆垃圾來完成。
我說過,看著年輕程式設計師這樣做我真不應該生氣,畢竟他們學到的實現方式就是這樣的。他們根本不知道高性能開發是什麼樣子,也沒見過條件有限的軟體是什麼樣子。你要是告訴他們,最初的Elite遊戲能產生整個銀河系,有3D狗鬥,有職業系統,交易系統,還能探索上千個星球,而這一切只有64KB,他們也能接受,但完全沒辦法理解這與現在的軟體之間有什麼差距。
CPU和記憶體都有限才是程式設計的黃金時代
為什麼我關心這件事?原因有很多,最簡單的就是當你花費兩千倍的時間來做一個東西,它就應該能用。但更重要的是,我知道99.9%的CPU時間都浪費在這些垃圾上。每秒執行幾十萬指令,結果毫無用處。本來我的電腦應該處於極低功耗,風扇都不應該轉,因為我現在幹的只不過是在wordpress裡寫字而已。
現在的電腦速度飛快,確實是魔法。你能想到的一切,都能在螢幕更新一次的1/60秒內完成。但是!當我在Surface筆記型電腦(幾乎是新的!)上點選硬碟圖示時,我能看到明顯的延遲,電腦在一點點畫出使用者介面。這需要很久,我估計至少有半秒鐘,對於CPU來說這就像幾十億年那麼長。
如果我沒猜錯,因為電腦裡有99%的垃圾,99%的電力都被浪費了,這已經不能用犯罪來形容了。這些浪費的電力都幹什麼了?我不知道,但看看工作管理員就知道了:一大堆不知道是什麼也不知道在幹什麼的東西。
我現在只不過寫篇文章,Windows就要運行102個後台行程。NVidia顯示卡有6個行程,一些甚至還有子行程。幹嘛呢?我又沒玩遊戲,對於顯示卡來說我現在幹的事兒跟20年前沒什麼差別,但就是要6個行程。
微軟的Edge瀏覽器也有6個行程,它的Web View還有6個。我甚至都沒打開Edge。可能是我昨天開了一張SVG圖,這就出現了12個毫無用處的行程在那兒浪費記憶體和CPU?這簡直不可理喻。
這就是為什麼一切都不能正常工作,為什麼一切都很慢,為什麼你每年都要買新手機和新電視,買新的只不過是為了執行更多垃圾程式而已。
我悲觀地認為,事情只會越來越糟,因為像Facebook、Twitter、Reddit這些笨頭笨腦的巨無霸公司正是現在的趨勢。每個公司都有好幾千位「程式設計師」,使用機器學習從GitHub複製貼上這些毫無用處的垃圾程式碼 。兩個數相加就要使用32個DLL和16個Windows服務還有幾億行程式碼 。
Twitter有兩千個程式設計師。但Tweetdeck偶爾還是無法載入某個使用者的時間線。這個bug已經有四年多了,我猜沒人知道為什麼,背後的程式碼只不過是一堆複製貼上的垃圾。
再說Reddit,從連結讀取標題的功能無法正確處理&和分號,這都2022年了。他們大概也有2000多個程式設計師,但甚至沒人會寫文本分析器,所以他們拿錢是幹什麼的?
曾經CPU和記憶體都有限的那個時代,才是程式設計的黃金時代;而現在,我們生活在一堆毫無效率的垃圾裡。
嗚呼哀哉!
加入電腦王Facebook粉絲團