軟件開發(fā)越來越糟?
發(fā)布時間:2020-03-03閱讀次數(shù):1810
最近,我偶然間讀到Nikita Propokov的一篇文章《軟件幻滅》(https://tonsky.me/blog/disenchantment/)。這不禁讓我想起了Maciej Ceg?owski的帖子《網(wǎng)站臃腫危機》(https://idlewords.com/talks/website_obesity.htm),以及其他幾篇類似的帖子。
越來越多的軟件開發(fā)人員認為,如今的應(yīng)用程序規(guī)模越來越大,速度越來越慢,問題越來越多。然而,以這個時代的硬件水平,我們理應(yīng)能夠編寫出更快、更小、更健壯的應(yīng)用程序。DOOM,于1996年問世,就能在懷孕測試儀(https://www.cnet.com/culture/programmer-makes-original-doom-playable-on-pregnancy-test/)以及其他上百種意想不到的設(shè)備上運行。而另一方面,時至2022年,聊天應(yīng)用程序在后臺運行時居然會占用0.5GB(甚至更多)的內(nèi)存,有時甚至?xí)屧O(shè)備完全失去反應(yīng),即使在高端硬件上也是如此。
對于這個主題的帖子,人們普遍認為80%的批評是公平合理的,還有20%只不過是沒病空呻吟。
大多數(shù)開發(fā)人員都知道,千萬不要說“這只是一個智能手機操作系統(tǒng),能有多難?”之類的話。或者,“90年代的電子表格應(yīng)用程序只需要10 KB,為什么這款應(yīng)用需要一個G?”若非親手構(gòu)建應(yīng)用程序,你永遠無法想象其復(fù)雜性和困難程度。
但這并不意味著,我們不能進行客觀的批評。如今的應(yīng)用程序的的確確比以前更慢了,而且還在沒有相應(yīng)增加價值的情況下呈指數(shù)增長。其實,幾乎所有現(xiàn)代應(yīng)用程序都可以被優(yōu)化。我們可以提高它們的速度,甚至可能提高幾個數(shù)量級。我們可以刪除代碼。我們可以編寫微型的、專門構(gòu)建的庫。我們可以找到壓縮文件的新方法。
但為什么我們沒有這么做呢?
Propokov的答案是“軟件工程師并沒有為自己的工作而感到自豪”。這句話雖有一定的道理,但我堅信,努力工作并出色地完成任務(wù)是人類的自然天性,只有當(dāng)某些事情反復(fù)阻礙時,我們才會失敗。因此,與其抱怨人類的懶惰,并以此來解釋為什么如今的軟件如此緩慢且有缺陷,我們更加應(yīng)該思考:“什么樣的力量和驅(qū)動力創(chuàng)造的環(huán)境導(dǎo)致軟件工程師很難全力以赴做好自己的工作?”
對此,我有幾個答案。
速度、可靠性以及磁盤占用空間并不能吸引客戶
在工程師眼中,軟件是由交互組件、輸入和輸出構(gòu)成的網(wǎng)絡(luò)。這個模型既準(zhǔn)確又實用。然而,這并不是打包、營銷或銷售軟件的方式。對于商人和客戶來說,軟件就是一系列功能。
以庫存管理應(yīng)用程序為例。營銷會大肆展示高分辨率的庫存照片、大膽的色調(diào),以及各種功能亮點:
跨多個倉庫跟蹤庫存;
與物流、供應(yīng)鏈以及銷售系統(tǒng)集成;
多層次的周次以及月度報告;
細粒度的訪問和安全控制;
所有終端的即時更新;
可在Windows、MacOS和Linux上運行。
這些陳述都是可證偽的,也就是說,我們只需要一個小時的演示,就可以證明軟件能否做到這些。但只有一條與速度有關(guān)。軟件實際上可能非常慢,需要幾秒鐘才能響應(yīng)按鈕點擊,但依然可以保證“即時更新”。
速度會影響用戶對應(yīng)用程序的整體體驗。速度是質(zhì)量的重要標(biāo)志,但這個特性很難吸引人。如果你花大量時間優(yōu)化核心流程,而競爭對手正在開發(fā)一種新型報告,那么有可能接下來你會因此而損失大量客戶。針對現(xiàn)有客戶調(diào)查一下,你就會發(fā)現(xiàn),當(dāng)問及下一步應(yīng)該開發(fā)什么時,他們大多會要求功能,而不是速度,除非軟件太慢以至于無法使用。再者,董事會根本不可能允許公司暫?,F(xiàn)有的產(chǎn)品開發(fā)計劃,抽出六個月的時間來處理技術(shù)債務(wù)。功能、功能、還是功能,我們身上的這些壓力從未減輕。
程序員希望編寫快速的應(yīng)用程序。但市場根本不在乎。
你可能注意到,上述我們沒有提及可靠性。有誰敢說自己的應(yīng)用程序沒有bug?我們根本沒有辦法確保這一點,更不用說通過產(chǎn)品演示證明了。難道我們要說“90%的單元測試覆蓋率和全套集成測試?”誰能明白這意味著什么,而且如果你向他們解釋,他們會感到無聊。我們無法向客戶解釋可靠性,讓他們相信你的說辭,同時又對這個話題感興趣。敏捷時代告訴他們,bug是不可避免的,你只能努力修復(fù)。由于沒有全面的方法來衡量軟件中的缺陷,因此不能將其作為比較產(chǎn)品的特性。我們投入時間來測試、重構(gòu)和改進,但可能完全不會有人注意到。
程序員希望編寫沒有bug的應(yīng)用程序。但市場根本不在乎。
另外,上述我們也沒有提到磁盤使用情況,盡管有時我們會在“下載”按鈕下方用一行小字顯示下載文件的大小。與上述功能亮點相比,磁盤使用情況在客戶心目中的影響力太小。上一次,你因磁盤空間不足而責(zé)怪開發(fā)人員(而不是自己的計算機)是什么時候?你是否會根據(jù)下載文件的大小選擇視頻游戲?可能永遠不會。你會發(fā)現(xiàn)有人抱怨最新的《使命召喚》太大,但新版發(fā)布的那一周仍然賺了10億美元。
減小可執(zhí)行文件或輸出包的大小是吃力不討好的工作。但這通常是一項技術(shù)含量很高的工作,不僅需要了解正在構(gòu)建的應(yīng)用程序,還需要了解其依賴的數(shù)百個較低級別的庫。此外,通常我們并不鼓勵這項工作,部分原因是這是一個雷區(qū)。你也許并不了解某一行代碼的作用,但這并不意味著它沒有用。也許這樣做只會造成在智能手機上運行Ubuntu的那0.01%的用戶出問題。但也許你付出了大量努力,最后不過是防止應(yīng)用程序在每四年一次的閏日崩潰。即使是最小的工具函數(shù)最終也會發(fā)展成公司智慧的產(chǎn)物。我們沒必要惹這種麻煩。
一些程序員希望編寫更小的應(yīng)用程序。但對市場或我們來說,這樣做并沒有好處。
消費類軟件被低估
分發(fā)應(yīng)用程序并不難?;ヂ?lián)網(wǎng)的誕生或多或少正源于此。但銷售應(yīng)用就像拔牙。大眾愿意花15美元買一個三明治或一張電影票,即便碰到爛片也只能一聲嘆息,但面對感興趣的應(yīng)用,即便只需要1美元,他們也會猶豫不決。只有兩種人群愿意為優(yōu)質(zhì)的軟件付費:企業(yè)和游戲玩家。不知為何,我們所在的世界其他人都希望軟件免費。
這種期望對消費應(yīng)用的質(zhì)量造成了破壞。構(gòu)建一款應(yīng)用所需的成本大約為5萬~50萬美元。如果你無法讓用戶付費,那么就必須通過其他方式收回成本。以下這些因素是導(dǎo)致Web和原生應(yīng)用膨脹和緩慢的最主要原因:用戶跟蹤、廣告、營銷漏斗、捆綁銷售、付費訂閱、針對上述所有內(nèi)容的反制措施,以及其他上百個不太體面的收入來源。人們往往以為這些都是因為商家的貪婪,但其實大多數(shù)時候都是因為他們很絕望,沒有更好的方式?;ヂ?lián)網(wǎng)上的一些流行網(wǎng)站,大多只能勉強維持。
我并沒有夸大這樣的系統(tǒng)造成的浪費和低效率。如果按照合理的價格發(fā)布一款獨特、高質(zhì)量的應(yīng)用,結(jié)果往往是無人問津,下載量為0。于是,你只能以免費試用/訂閱模式重建。然而如此一來,即便下載此次達到數(shù)百次,也只有少數(shù)用戶愿意轉(zhuǎn)為付費,這些收入不足以支撐你的開銷。那么,接下來,你只能在免費版本中投放廣告,雖然UI設(shè)計師可能會極力反對。然而,即便這樣,你也會發(fā)現(xiàn)廣告瀏覽獲取的收入僅為幾分錢。于是,你只能投放更多的廣告。然后,用戶就會抱怨廣告太多,因為在他們看來,你應(yīng)該讓他們繼續(xù)免費使用應(yīng)用。你嘗試將一些廣告換成應(yīng)用內(nèi)購買。而用戶會繼續(xù)抱怨。無奈之下,你添加了一些“行動呼吁”,鼓勵用戶付費使用無廣告體驗版。結(jié)果發(fā)現(xiàn),很多人很快就刪除了應(yīng)用。為此,你添加了分析和遙測,這樣就可以弄清楚如何保留住客戶。然而,你發(fā)現(xiàn)“保留”可能就是“成癮”的代名詞。如此循環(huán)往復(fù),不久之后你的應(yīng)用就徹底“面目全非”,成為一個毫無樂趣的收入機器,各種濫用用戶的注意力和隱私。但你依然無法賺到很多錢。
如果人們愿意付費購買應(yīng)用,我們就可以避免這一切。但不幸的是,他們不愿意,所以應(yīng)用都變成得臃腫、緩慢、bug累累。
開發(fā)人員沒有意識到自己的力量
看到這里,有人肯定會說,你就知道指責(zé)他人,難道軟件開發(fā)人員就沒有責(zé)任了嗎?我認為,確實有些方面我們可以做得更好。
即使在經(jīng)濟衰退期間,開發(fā)人員也擁有非凡的影響力。我們可以堅持使用(或不使用)特定技術(shù)。我們依然有高薪、福利和股權(quán)。我們可以團結(jié)一致來改變整個公司的文化和工作環(huán)境,雖然這種力量非常微弱。優(yōu)秀的程序員很難找,每個人都知道,而我們知道他們知道。
這就是我們的力量,我們可以更好地利用這種力量。
我們應(yīng)該在每次沖刺中預(yù)留一些時間出來解決技術(shù)債務(wù)。當(dāng)有優(yōu)化和改進代碼的機會時,我們應(yīng)該設(shè)法延遲功能開發(fā)。我們應(yīng)該說服老板支持開源項目。我們應(yīng)該建立一種期望,讓所有人明白我們不一定要投入所有工作時間開發(fā)新功能,我們的準(zhǔn)則和行業(yè)對我們有更高的期望。
大多數(shù)時候,這些做法都不會產(chǎn)生任何負面影響。我們并沒有過分要求。每個行業(yè)都有專業(yè)標(biāo)準(zhǔn)和要求。為什么我們認為軟件開發(fā)就不能建立類似的標(biāo)準(zhǔn)和要求?
唯一需要注意的是,這些激勵措施對我們沒有好處。這是一場艱苦的戰(zhàn)斗。有些經(jīng)理不愿意我們花時間解決技術(shù)債務(wù),僅僅是因為他們不理解。有些銷售人員會擔(dān)心我們的軟件沒有競爭力。投資者可能會威脅將我們的工作外包給更靈活的開發(fā)人員??蛻舻膽B(tài)度和市場力量的轉(zhuǎn)變還需要一段時間。但是,如果改變現(xiàn)代軟件的狀態(tài)是一個有價值的目標(biāo),那么就值得付出努力。
未來軟件開發(fā)能得到改善嗎?
我對軟件的未來并不樂觀。90年代,程序員可以構(gòu)建微型、高度優(yōu)化的應(yīng)用程序,因為當(dāng)時他們別無選擇。客戶的計算機只有32MB內(nèi)存和200兆赫茲的單核處理器。如果應(yīng)用做不到極簡,就無法運行。如今,兩年前購買的基本型號Macbook Air的內(nèi)存是原來的250倍,而且四核處理器的速度是單核的數(shù)倍。我們有更多選擇了,但我們交付的應(yīng)用90%是垃圾。除非有人抱怨,否則我們不會做優(yōu)化。我們會把整個Web瀏覽器打包到發(fā)消息的應(yīng)用、做筆記的應(yīng)用中,甚至連我們寫代碼用的工具都是如此。
在過去的二十年里,我們一直在努力提高軟件開發(fā)的速度,降低軟件開發(fā)的難度,讓軟件越來越易于使用。誠然,如今我們正在以前所未有的速度創(chuàng)建應(yīng)用,應(yīng)用擁有的功能數(shù)量也超出了以往,而軟件開發(fā)人員的經(jīng)驗也比以往任何時候都匱乏。從商業(yè)的角度,我們不難看出這其中的吸引力。但我們也為此付出了代價,我們的客戶、電力能源乃至整個地球都為此付出了沉重的代價。
這種狀況不會在一夜之間發(fā)生變化,甚至可能在未來五年內(nèi)都不會變化。但我依然對此充滿了希望。
最新一波Web編程語言和技術(shù)(如WebAssembly、ESBuild、SWC、Bun和Yew)正在努力讓編譯時和運行時的速度和可靠性達到新的水平。Rust不僅能夠提供與C看媲美的性能,而且對開發(fā)人員非常友好,這種高級語言在Web服務(wù)器上越來越受歡迎。此外,還有Tauri等輕量級Electron的替代品有望成為Web開發(fā)人員的首選跨平臺框架。Tree-shaking也將為編譯器和打包器帶來新的希望。
就市場而言,幾款流行的游戲(比如《死亡細胞》和《以撒的結(jié)合》)已經(jīng)以付費下載的方式進入移動平臺。雖然革命尚未成功,我們?nèi)孕枧?,但這是對全球最大的技術(shù)消費者群體智能手機用戶進行軟件成本再教育的一次突破。
如果在過去的二十年里,我們一直致力于提高生產(chǎn)力(雖然此過程會犧牲掉效率和財務(wù)可持續(xù)性),也許接下來的二十年里,我們可以解決集體技術(shù)債務(wù),找回失去的效率,并改善經(jīng)濟交流,同時還不會失去軟件為我們的生活帶來的生產(chǎn)力提升。
作者|Isaac Lyman
靈集科技打造本地生活類小程序
十種軟件開發(fā)模型整理
軟件開發(fā)公司的UI/UX設(shè)計師是什么?有啥區(qū)別?
云醫(yī)互聯(lián)SASS解決方案
九大類企業(yè)管理軟件助力企業(yè)數(shù)字化轉(zhuǎn)型
智慧醫(yī)療:創(chuàng)新驅(qū)動,引領(lǐng)醫(yī)療健康未來
企業(yè)為什么要做定制化的軟件,找哪家公司好?
內(nèi)蒙古網(wǎng)站建設(shè),打開大眾對您的“第一印象”
開發(fā)企業(yè)官網(wǎng)有什么作用?內(nèi)蒙古網(wǎng)站建設(shè)總結(jié)了兩點
全面分析小程序商城