建立軟體最困難的部分不是撰寫程式碼,而是定義需求
許多人對於人工智慧的發展感到擔憂,擔心軟體開發者將被取代。然而,寫程式碼可能是一個挑戰,但確定需求才是真正困難的部分。人工智慧能夠在某些領域取得成功,例如下棋,因為下棋具有明確的規則和目標,且參數有限。然而,當涉及到軟體需求不明確、不一致或錯誤時,問題變得更加困難且成本更高。
最近關於人工智慧發展的文章不少,有很多人對於我們作為軟體開發者,可能很快就會失業,被人工智慧取代,感到擔憂,你可以觀賞這段影片「ChatGPT 能夠取代軟體工程師建立自動化系統嗎?」,了解實際使用人工智慧開發系統的挑戰。擔憂AI 會取代工程師的想像是,商業高管和產品研究者將直接繞過大部分或全部的軟體開發者,直接要求人工智慧來創建他們認為所需要的東西。作為一個軟體開發人員,我覺得有些事情被忽略了。撰寫程式碼可能是一個挑戰,但我從來沒有花超過兩個星期來找出程式碼的錯誤所在。一旦掌握了語法、邏輯和技巧,這個過程就變得相當直觀,大多時候都是如此。真正的問題通常集中在軟體應該做什麼上。建立軟體最困難的部分不是寫程式碼,而是確定需求,而這些軟體需求仍然由人類定義。本文將討論需求和軟體之間的關係,以及人工智慧需要產生好的結果所需的條件。
問題變得更加嚴重、更難修復,而且成本更高,但問題的根源通常都是相同的:需求不明確、不一致或錯誤
我用下棋與自駕車對比現在的人工智慧,人工智慧的概念已經存在了很長時間,儘管高調的進展引起了媒體和國會的關注。人工智慧在某些領域已經取得了很大的成功。首先想到的就是下棋。人工智慧早在1980年代就被應用於下棋。人們普遍認為,人工智慧已經超過了人類在下棋方面的能力。這一點也不令人驚訝,因為下棋的參數是有限的。下棋始終是在64個方格上放置32個棋子,擁有明確的官方規則,最重要的是有一個明確定義的目標。每一輪下棋都有有限數量的可能動作。下棋只是遵循著規則引擎。人工智慧系統可以計算每一步的後果,選擇最有可能捕獲對手棋子、佔據優勢並最終取勝的步驟。還有另一個領域,人工智慧在這方面非常活躍—自駕車。製造商已經承諾自駕車很久了。有些車可以自動駕駛,但有一些限制。在許多情況下,車輛需要主動監督;駕駛員需要雙手握住方向盤,自駕功能並不是完全自主的。這與下棋的人工智慧程式不同的是,如何應對每一種可能情況的規則並不明確。
在一次行程中,司機需要做出數千次微小判斷,例如避開行人,繞過雙黃線停車車輛,以及在繁忙的十字路口轉彎。做出正確的判斷意味著能夠安全到達購物中心,而不是被送往醫院。不管AI有多接近足夠好,事故和死亡的風險始終存在。這些風險和後果每天都發生在人類駕駛的情況下。我不知道政府會接受怎樣的事故和死亡率,但你必須考慮它至少需要和人類一樣好。之所以要達到這個可接受的安全水平如此困難,是因為駕駛一輛汽車涉及的變數比下棋要多得多,而且這些變數是無限的。大部分事件中的95%或99%是可預測和容易考慮的。然而,超過99%之後,剩下的1%,有很多特殊情況,每一種情況可能有些相似,但又各自獨特;道路上的其他車輛由其他人駕駛,道路封鎖、施工、事故、天氣變化...你開車上過新鋪好的路卻發現沒有標線,這真的讓AI模型難以適應和識別這些異常和特殊情況,更重要的是要做出適當的反應而不會發生事故。每一種特殊情況可能有些相似,但很少完全相同,這讓AI更難確定應該如何適當地回應。AI無法創建軟體,只能編寫程式碼。
軟體工程與開車有很多共同之處,比如下棋。牽涉到更多變數,規則基於判斷。開發系統時可能有一個期望的結果,很少像下棋那樣單純。軟體很少是完成的,會添加功能和修復錯誤,這是一個持續的過程。與下棋不同的是,一場下棋比賽贏了或輸了就結束了。在軟體開發中,我們有一個工具可以使軟體設計更接近控制嚴格的下棋規則:技術規格。好的規格能夠指導預期的使用者行為和程序流程。這就是用戶在電子商務網站購買商品的步驟:點擊這個按鈕,建立這個數據結構,執行這個服務。然而,我們通常得到的情況並非如此。我們經常被交付願望清單作為功能規格,不清晰的需求文件,然後被告知做出最好的判斷。更糟糕的是,需求可能會變化或被忽視。
為了從人工智慧中獲得一個功能完善的軟體,你需要知道你想要什麼,並且能夠清晰而精確地定義它。有時候,當我為自己開發系統時,直到我真正開始寫程式,我才意識到一些困難和挑戰。在過去的十年中,軟體業已從瀑布式方法轉向敏捷開發。瀑布模式在寫任何程式碼之前確定你想要的確切內容,而敏捷開發則提供足夠的靈活性,讓你能夠在過程中進行調整。許多使用瀑布模式的軟體項目都失敗了,因為利害關係人認為自己知道他們想要什麼,並且認為他們可以準確地描述和記錄下來,結果在交付最終產品時感到非常失望。敏捷軟體開發被認為是解決這個問題的良方。人工智慧可能最適合重新編寫我們已經有的軟體,將系統改寫成現代的程式語言。仍然有許多機構使用COBOL編寫的軟體,但學習如何使用它的程式設計師越來越少。如果你確切知道你想要什麼,也許你可以請AI用更快更便宜地方式開發出新的系統。我相信AI可以比人類程式設計師更快地建立出已經存在的軟體,但這是因為在進行過程中,它已經明確的被定義出這套軟體應該做些什麼。你可以透過Code Gym 的另一篇文章「AI 人工智慧對工程師的工作真的有帶來改變嗎?」,了解目前人工智慧對於開發人員的影響有多深。
Code Gym 致力於創造實用的高品質線上課程,幫助想要學習程式語言和IT技術的朋友,能透過我的課程,學習知識,發揮熱情,創造出屬於你自己的作品