現在,99.9% 以上的程式碼都是從GitHub複製貼上毫無用處的垃圾

現在,99.9% 以上的程式碼都是從GitHub複製貼上毫無用處的垃圾

ADVERTISEMENT

作為一名從事獨立遊戲設計和程式業務的開發者,克里夫斯基(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和記憶體都有限的那個時代,才是程式設計的黃金時代;而現在,我們生活在一堆毫無效率的垃圾裡。 

嗚呼哀哉!

bigdatadigest
作者

大數據文摘(bigdatadigest)成立於2013年7月,專注數據領域資訊、案例、技術,在多家具有影響力的網站、雜誌設有專欄,致力於打造精準數據分析社群。

使用 Facebook 留言
Hawk Hawk
1.  Hawk Hawk (發表於 2022年7月25日 21:24)
是有些原因
因為要快速 要快速完成自己不熟的領域 最簡單就是複製別人現成的
所以裡面會包一堆沒用的東西 就算其中做一樣的事 邏輯複雜度也會不同
例如 引用一個副程式 當初他可能裡面算了10個值回傳 但複製的時候只需要用到其中1個 其他9個運算都是垃圾運算
但對開發而言是會加速XD
然後因為是複製的 常常使用者都沒有全盤了解或有誤解更 不知道哪邊有洞 跟使用條件 用下去也很容易導致bug
然後因為懶得了解裡面 外面再包一層解決bug的副程式 就變得更垃圾了XDDDD
在頻繁轉職的科技業更加嚴重 一直換人接手加新的東西 當然就越加越多垃圾

這種事 在產出速度為優先 人力頻繁流動 軟體系統分層分得更細 的軟體世代很正常
公司花時間去把東西最佳化 才是不符合經濟價值
使用者常常根本感覺不到 就算感覺得到 反正軟體商已經完成合約了 產品也能用
當然是繼續往前面產生更多垃圾賺錢 回去收拾垃圾是有賺頭嗎
在很少的特殊情況才需要把效能擠到最優化 一般消費性產品 一定隨便拉

這也是apple跟android效能耗電差很多的主要原因
一個人是為一台機器專門寫一份code不給你隨便改 一個人是為了上百台不同用途功能也不同的機器寫一份共用code 然後還會包至少一兩層不同開發商 當然會殘廢掉
發表回應
謹慎發言,尊重彼此。按此展開留言規則