軟體吃軟體,程式設計工作會越來越多嗎?

阮一峰發表於2020-05-27

最近,國外有一篇文章,標題很有趣,叫做《軟體吃掉軟體》

作者認為,大型軟體和通用軟體越來越強大,將會取代小軟體和專門軟體,相當於把後者都吃掉了。

他以自己的經歷舉例,雲服務就取代了很多小軟體。

框架的發展,也使得從頭編寫程式碼的需求越來越少。

他的結論就是,軟體自動化技術的發展,可能將會減少對軟體工程師的需求,未來的程式設計師可能會比現在少。

2、

我對這個話題很感興趣,因為這是在預測未來的重大變化,而且跟就業趨勢直接相關。如果未來軟體的規模化和自動化,會抑制對程式設計師的需求,那麼就不應該鼓勵年輕人都來當程式設計師。

Hacker News 論壇對這篇文章進行了熱烈的討論。大部分人(都是職業程式設計師)的看法是, 這種觀點已經說了幾十年了,根本是杞人憂天,實際情況恰恰相反,程式設計師變得越來越多。

但是,23年過去了,市場對程式設計師的需求不斷上升,並且似乎仍在上升。

我想說,我們離軟體自動解決大部分需求的這種抽象水平,還很遙遠。正如文章所說,k8s、docker、kafka、databricks、redshift 這些新工具,取代了很多程式設計師。但是,它們其實引發了更多對程式設計師的需求。

那些必須由程式設計師解決的問題,只是轉移到了新的地方。"

就像上面引文所說,現實情況是需要程式設計解決的問題不是越來越少,而是越來越多,導致了程式設計師的增加。原文提出的兩個論據,都站不住腳。

首先,雲服務確實使得企業免去了伺服器管理,但是你仍然需要有了解 docker、kubernetes、資料庫分片和索引、故障轉移、備份、訊息佇列等等技術的人員。即使這些東西現在更加整合,更易於組合,但要弄清楚它們如何相互作用,如何設定,仍然是很複雜的一件事。

其次,"無程式碼開發"只能解決一些通用的軟體問題,遲早會出現需要定製的情況。那時,就需要有程式設計師來修改程式碼,使用者才能繼續使用。

總之,世界正在變得越來越自動化,而自動化的本質是軟體,所以對程式設計師的需求只可能越來越多,不可能越來越少。

3、

不過,論壇上面也有少部分人贊同原作者的觀點,認為程式設計師越來越多隻是過去的情況,未來未必如此。現在可能是軟體開發"突變"的一個時間點,未來的發展可能不同於此前的情況。

市場需要更多瞭解 docker 和 kubernetes 這樣新工具的人,這個是沒錯。但是,主要是大公司才需要這樣的人,小公司用不到 kubernetes。小公司面對的複雜性是有限的,只要使用大公司提供的簡單解決方案即可,需要自己開發的部分幾乎沒有。

而且,如果公司的業務重點不在技術方面(你要知道大部分公司都不是網際網路公司),使用"無程式碼方案"是最有效的。因為無需在軟體工程上花費很多錢,就可以快速應用。

歷史上,每當一個領域出現大量需要程式設計解決的問題,就會誕生一個通用的解決方案,解決掉90%的場景。然後,這個領域對程式設計師的需求就會快速減少。

20年前,製作一個 Web 應用很困難,PHP 改變了這一點。

10年前,寫一個複雜的網頁佈局很困難,Bootstrap 改變了這一點。

現在,機器學習很困難,PyTorch 正在改變了這一點。

每個棘手的問題最終都會產生一個有效解決方案,解決掉90%的場景。對於大多數公司而言,這個解決方案已經足夠了。剩下的10%場景,其中一部分由某些公司付錢給程式設計師來解決,另一部分永遠不會解決。"

所以,如果新的領域層出不窮,那麼就會需要更多的程式設計師。但是,這些領域對程式設計師的需求都不會持久,一旦產生了解決方案,需求就會迅速降低。

4、

看完了上面的討論,我的想法是,市場對程式設計師的需求,未來怎麼變化,不能簡單地回答增加或減少,而是取決於兩個因素。

(1)人們需求增加的速度,能否超過軟體自動化的進化速度。

現有的場景最終都會有通用的解決方案,需要僱傭程式設計師的情況,確實將越來越少。程式設計師的就業,主要依靠新出現的場景。而且,新場景的增加速度,必須超過軟體自動化的進化速度,否則舊的解決方案也許會自己升級成新場景的解決方案。

(2)軟體開發的難度,必須超過機器學習的進化速度。

程式設計師的數量,還跟軟體開發的難度有關。難度越低,就會有越多的人從事這項工作。以前,你必須懂得計算機的底層硬體和組合語言,才能開發軟體,所以程式設計師很少。現在,軟體開發越來越容易,已經不需要了解底層,只需要懂得某個框架即可,所以越來越多普通人變成程式設計師。

未來的程式設計肯定會變得越來越容易,但是,越來越容易的程式設計,也意味著機器可以輕而易舉地代替人,來完成這些工作。所以,軟體開發的難度必須超過機器學習的水平,否則需求的增加只會導致更多的機器自動程式設計,而不會導致更多的程式設計師僱傭。

(完)

相關文章