在過去的十五年中,GitHub 已經成為編程領域中不可或缺的一部分。這個平臺于 2007 年推出,現在已經有超過 1 億名開發者使用它來進行協作、跟蹤代碼變更和存儲代碼。
在 2018 年被微軟以 75 億美元收購后,GitHub 正逐漸贏得另一個榮譽:徹底改變編程方式。推動這一變革的是一個名為 Copilot 的 AI 工具,它可以像 OpenAI 的 ChatGPT 生成十四行詩一樣輕松生成代碼。(實際上,Copilot 是由 OpenAI 的 Codex 驅動的,Codex 是一個基于從互聯網上獲取的代碼進行訓練的大語言模型。)
通過簡單地按下 Tab 鍵,使用 Copilot 的開發者可以自動完成一行代碼、生成代碼塊,甚至編寫整個程序。據 GitHub 表示,已經有超過 1 萬家公司(包括可口可樂、Airbnb 等公司)注冊了 Copilot 的企業版,而微軟自身有超過 3 萬名員工定期使用 Copilot 來輔助編程。
最近,Freethink 采訪了 GitHub CEO Thomas Dohmke,以詳細了解 Copilot 將如何改變編程,以及基于 AI 開發引發的關于創新的問題。還談到了為什么用 Copilot 編程是如此有趣,AI 將如何改變我們的學習方式,以及 Copilot 是否能解決那些仍在主機上運行 COBOL 的銀行的問題。
下面內容是采訪精簡版。
Freethink:你認為在編程的性質方面會出現哪些變化?軟件開發是否仍然會是專業的領域?或者你是否認為基于 AI 的無代碼開發將變得更加普遍,以至于作為軟件工程師的定義會有所不同?
Thomas Dohmke:我認為系統思維 —— 理解軟件的復雜性并將一個大問題、挑戰或新特性分解為小問題 —— 將起到越來越重要的作用。
我們從打孔卡發展到了幾百行、幾千行、甚至可能是數萬行乃至數十萬行代碼。因此,作為開發者,我們需要能夠管理這些解決大型復雜問題的龐大系統。你需要將它們拆分成小的構建模塊。
開發者的技能將在于找出 “我需要拆分到什么程度,才能利用 AI 為我合成代碼?” 至少在可預見的未來,我們仍然需要審查所有源代碼,了解其功能,并進行安全審查、合規審查,以查看是否存在代碼注入等問題,即有人試圖向代碼庫注入有害代碼。
開發者仍然是專家,他們了解代碼并判斷 AI 合成的代碼是否真正符合開發者的意圖。在未來的十年里,這可能會發生轉變 —— 我們自己編寫的代碼與合成代碼的比例會有多大。但我不認為我們離一切都是無代碼開發的階段已經很接近了。
Freethink:因為有了 Copilot,你觀察到程序員的日常工作方式發生了哪些變化?
Dohmke:如今,程序員實際上并不會花太多時間來編寫代碼 —— 他們每天編寫代碼的時間通常只有兩到四個小時。其余的時間他們會進行其他工作,比如參加站立會議、查看崩潰報告(或者也許是應用商店的評論中有用戶反饋最新版本出現了問題,而你甚至無法復現這個錯誤)。
有了 Copilot,如果你每天只有兩到四個小時用于寫代碼,你可以更好地利用這段時間。你可以將這段時間用于保持專注、完成工作并享受其中的樂趣。
雖然分心的事情并沒有減少 —— 無論是 Slack、Twitter、手機還是 WhatsApp 消息,這些都不會消失。但是你可以更好地利用創造性的時間,將注意力集中在問題上。因為如果你不需要頻繁地從編輯器切換到其他內容,你也會減少分心的觸發因素。因此,我們觀察到人們更能保持專注。
Freethink:你自己在寫代碼的過程中發生了什么變化?我不知道你現在能夠投入多少時間來寫代碼,但我非常想知道由于出現了 Copilot,你自己寫代碼過程有什么變化。
Dohmke:對我來說,大部分是一些業余項目。但我首先想到的是:Copilot 帶回了樂趣。通常情況下,會有很多干擾和其他事情需要處理。周末 —— 我們遠離工作的時間 —— 在某種程度上是一個關于注意力持續時間的競爭:你是想出去散步呢?還是想組裝一些樂高積木?還是想寫代碼?
當我有一個小時用于寫代碼時,Copilot 帶回了樂趣,帶回了創造力。它恢復了流暢感,因為你不必不斷在編輯器、瀏覽器、搜索引擎以及像 Stack Overflow 或 GitHub 這樣的工具之間切換,去尋找那三行代碼 —— 我不知道,可能是為了讓你正在構建的 iPhone 應用程序擁有圓角。
因此,我認為它帶回了那種 “我正在構建自己的重大創意” 的感覺,那種感覺會在我有一個小時或兩個小時的周日早晨時出現,此時其他事情還沒有優先權。
Freethink:如果你在創建你的第一家初創公司時有像 Copilot 這樣的工具可供使用,你認為你作為創始人的經驗會有何不同?
Dohmke:我認為這將讓我的生活變得更輕松。作為一家小型初創公司的創始人,你必須快速行動,因為這是生存的唯一途徑。因此,如果有一種工具可以幫助你保持工作流程,讓你快速創建原型、預覽產品,并最終找到產品市場適配點,那將極大地增強你的能力。
我與許多初創公司進行過交流,我也是幾個初創公司的天使投資人,他們都在使用 Copilot,因為他們明白,即使只是提高 20-25% 的生產力,也可能決定他們的生存。
Freethink:我很好奇你收集了哪些數據 —— 無論是軼事還是更正式的 —— 關于 Copilot 如何改變 GitHub 和微軟自己的程序員的工作方式。
Dohmke:我們在 2020 年 8 月開始研發 Copilot,然后在 2021 年初向約 250 名 GitHub 員工或 “Hubbers” 首次提供了內部預覽版本,得到的反饋令人震驚。人們非常興奮,他們告訴我們,他們再也無法在沒有 Copilot 的情況下寫代碼了。
我們測量了凈推薦值(Net Promoter Score,NPS)[注:用戶滿意度的一種衡量指標],范圍從 - 100 到 + 100。在我們的 250 名測試人員中,得到的結果是 + 73。我們從未在對開發環境進行的其他任何更改中看到過這樣的數字。通常情況下,開發人員會說:“別動我的系統,我知道自己在做什么,Thomas,為什么要引入新工具呢?”
我們團隊收到了極為積極的反饋,而且初期使用 Copilot 的人數保持得非常高,這個留存率比我們開發的其他任何產品都要高。通常情況下,當我們在公司內部推出一個新功能時,每個人在第一天都很興奮,但到了第三天,大家就又回到了之前的習慣。但對于 Copilot,無論是在 GitHub 內部、微軟內部還是我們的客戶中,我們都沒有看到這種情況發生。
Freethink:你是否有關于在 GitHub 上更廣泛的開發者社區如何使用 Copilot,以及它對他們的生產力產生了什么影響的具體數據或數字?
Dohmke:當用戶使用 Copilot 時,我們會追蹤他們按下 Tab 鍵的頻率以及在文件中由 Copilot 編寫的代碼量。目前這個數字的平均值是 46%—— 在啟用 Copilot 的文件中,平均約有一半的代碼是由 Copilot 編寫的。僅僅這一事實就令人難以置信。
我們三年前開始開發 Copilot,推出預覽版的時間已經接近兩年了。自從推出以來,這個數字一直穩步上升。很快,80% 的代碼將由 Copilot 編寫。但這并不意味著,正如我們之前討論的那樣,開發人員將被取代。這意味著開發人員有更多的時間來專注于他們自己編寫的那 20% 的代碼。
當你使用 Copilot 時,你的編程風格會發生變化,因為你會更加明確。你會編寫代碼注釋,可能還會提供一些示例。當你編寫一個帶有輸入和輸出的函數時,通過提供示例輸入和輸出,Copilot 會 “理解” 你想要做什么,并將其作為額外的上下文來生成代碼。
實際上,我們從對 2,000 名開發人員進行的定量調查中了解到了他們對使用 Copilot 的感受。其中 75% 的開發者表示他們感到更加滿足。他們告訴我們,使用 Copilot 在完成工作時需要的心智負擔更小。他們在編寫作為開發者常常必須完成的樣板代碼上花費的時間更少。
我們還進行了一項定性研究,其中我們讓 50 名開發者使用 Copilot,同時有大約 50 名沒有使用 Copilot 的開發者作為對照組,然后要求他們構建一個 Web 服務器。使用 Copilot 的組別比對照組快了 55%,這將改變整個行業。
不僅速度更快,他們還具有更高的成功率:78% 對比 70%。
Freethink:Copilot 對未來程序員的開發將產生什么影響?在學習編程的過程中存在一種緊張感,一方面我們對某些看似簡單的事情感到沮喪,但通過反復實踐,最終可以更深入地理解整個過程。我很好奇像 Copilot 這樣的工具對于正在學習冒泡排序的高中生會有什么影響,他們只需按下 Tab 鍵,代碼就會自動生成,而無需從頭開始編寫。
Dohmke:我認為我們的學習方式將發生徹底改變,學校教育方式也將發生巨大變革。
我們將更少關注記憶具體知識,如 1845 年的總統是誰,而更多關注學習方法。教師將扮演更像是教練的角色,幫助學生以自己的步調和方式利用技術探索各種主題。對于軟件開發方面的孩子們來說,這將帶來極大的便利。
在美國,我們很容易忽略一點,即編程中最常用的語言是英語。在美國成長的孩子可能比在巴西、中國或德國成長的孩子更容易理解英語。這對孩子們來說將是一種解放,因為他們可以用自己的母語向像 Copilot 這樣的 AI 助手提問。Copilot 能夠理解多種語言,并將代碼合成為學生正在學習的編程語言,這樣學生就能用自己的語言進行交流和提問。
我認為知識的重要性將減弱,而理解思維、探索內容的能力將變得更為關鍵。教師將與學生合作培養這些能力。學生們需要判斷 AI 提供的答案是否確實適用于他們解決的問題,而不是僅僅接受模型生成的結果。
Freethink:在我看來,無論你選擇的是醫學還是計算機科學,要進行高級推理,你都必須具備一定的內容知識。
Dohmke:如果你使用 Copilot,你會相對快速地發現你仍然需要具備這個基礎知識,無法繞過它。你可以向 ChatGPT 或 Copilot 提問 “如何構建 GitHub”,它會給出一個非常抽象的答案。
你必須具備能力去思考:“好的,現在我該如何將這個非常龐大的問題分解成小問題?” 而要做到這一點,你必須理解什么是數據庫、什么是虛擬機、什么是容器。你必須在計算機科學領域掌握這些概念,才能讓 AI 解答你的問題。
老師們,如果回到學校的例子,他們會立即發現這一點。如果學生試圖通過作弊來完成家庭作業,他們不僅需要提供答案,還需要展示他們的解題過程。就像數學課一樣:展示你使用 Copilot 構建項目的過程。
另外,每個軟件項目都是獨特的,構建超市的銷售系統與構建在每個個體設備上運行并可能有 1 億用戶的 iPhone 應用程序之間存在很大差異。你仍然需要學習這些概念以及如何解決這些問題。我認為這對我們作為人類來說是一項更有用的技能,而不僅僅是了解編程語言的所有細節。
Freethink:作為一個一直非常支持開源的人,你認為開源在這里扮演著什么樣的角色?
Dohmke:開源將在 Copilot 的發展中起到基礎性的作用。OpenAI 提供給 Copilot 的模型是基于互聯網上的開放數據進行訓練的。這些數據不僅包括源代碼,還包括各種其他文檔。這使得 Copilot 不僅能夠理解編程語言,還能理解人類語言。開源為這些模型的訓練提供了數據集。
我們現在已經看到了許多開源的大語言模型。其中很多實際上托管在 GitHub 上,這讓我們非常興奮!GitHub 在過去 15 年中一直支持開源生態系統。基本上,我們的所有功能都對開源項目免費開放,我們希望繼續支持這個生態系統。我們一直在為開源開發者的權益而奮斗,因為我們相信開源對于實現人類進步至關重要。
開源所帶來的協作模式可能是目前存在的最無國界、無障礙的協作模式:來自許多國家的開發者相互合作,不關心我們在這個地球上所面臨的各種沖突。
通常情況是,當你收到一個拉取請求時,你不知道對方是誰,他們的職位是什么,他們一直在做什么工作,是否接受過大學教育等等。這些并不重要。我認為,如果你想要向 Linux 內核貢獻代碼,沒人會問你:“你是否有適當的教育背景和五年的工作經驗?” 這不是開源協作的工作方式。
在 GitHub,這是我們所接納的,并將始終接納的一部分,作為我們授權和支持開源開發者的使命。我認為大語言模型將扮演重要角色,并有助于我們共同加速進步。
Freethink:你認為 Copilot 在開發新編程語言方面可能扮演何種角色?編程語言的受歡迎程度會有起伏,我很好奇 Copilot 可能對此產生何種影響。
Dohmke:你提到了編程語言的興起和消退,我認為說得對。但它們永遠不會完全過時。最常見的例子是銀行和金融服務機構,它們仍在主機上運行 COBOL 語言。而且不僅僅是某個地方的銀行,我在世界各地的任何一個國家與任何一家銀行交流,他們依然在主機上運行 COBOL。
這是一個問題,因為編寫 COBOL 語言的人們在 60 年代都已經退休了,他們不再需要為銀行維護那些代碼。Copilot 將在幫助公司現代化其代碼庫方面發揮作用,并且它將通過多種方式實現這一目標。
首先,Copilot 可以向現在需要負責維護遺留代碼的開發人員解釋代碼。你可以突出顯示代碼并詢問:“向我解釋一下這段代碼。” 一旦你獲得解釋,你實際上可以利用解釋和代碼生成針對該代碼的測試用例。下一個合乎邏輯的步驟是,在與 “飛行員”(開發人員)進行迭代過程中,利用 AI 將所有代碼重寫為 Python。因為你生成了測試和解釋 —— 這兩者在 60 年代可能都不存在,很多代碼也沒有文檔 —— 所以你能夠將那些老舊的代碼轉換為新的代碼庫。
我們都在努力解決技術債務,不僅是前一代開發者的,也包括我們自己六個月前的代碼庫。大多數開發人員,無論他們六個月前寫了什么代碼,當他們現在看到它時,會說:“現在我能比六個月前做得更好。” 我們將看到更多的迭代,希望我們背負的包袱更少。
我認為另一種方式是,學習編程會變得更容易,而編程語言本身可能會趨向更人性化。不再需要編寫大量的代碼,而是可以寫很多注釋,然后由模型合成其余的代碼。這些注釋可以是德語、巴西葡萄牙語,實際上幾乎任何語言都可以被這些模型理解,用于合成代碼。
最后,我們還有一個名為 Copilot Voice 的預覽產品,它可以幫助你用聲音寫代碼,而不是用手—— 這將使殘障人士也能夠參與,因為他們可能無法整天打字,例如由于重復性勞損傷害。
Freethink:當我教高中學生編程時,他們最難理解的是編程語言與自然語言的不同之處。讓他們感到沮喪的是計算機會完全按照你告訴它的方式行動,就像一個讓人討厭的兄弟姐妹,總是做明顯錯誤的事情,然后說:“技術上你說的就是這個。” 有了像 Copilot 這樣的工具,你認為編程會趨向融合,更類似我們人與人之間的交流嗎?
Dohmke:我認為你已經可以看到這種趨勢。當你使用這些聊天代理時,它們不僅知道你剛剛輸入的句子,還知道先前對話的上下文。對于 Copilot Chat 來說,它甚至知道你編輯器中的內容,不僅僅是你打開的文件,還包括相鄰的標簽頁和調試器。將來,它們可能會擁有整個代碼庫或文件夾的上下文作為參考。
現在,你已經可以編寫一個 HTML 文件 —— 一個網頁,當你寫代碼時,借助 Copilot 的幫助,你可以說:“讓這段文字變粗體。” 或者,“將這個區域居中顯示在頁面上。” 然后它會向你展示如何實現,并消除了我們過去對計算機是否能理解我們意圖的沮喪感覺。現在,它真的可以理解了。
就在最近的一次會議上,我通過 Copilot 演示構建了一個貪吃蛇游戲。我說:“讓游戲更漂亮”,它就輸出了樣式表。我從未提到要樣式表,甚至沒有給出 HTML 或 CSS 的概念。它通過理解我想要實現的目標上下文,自行找到了解決方案。
我認為與 Copilot 互動的最佳時刻之一是,你可以告訴它某個地方出錯了。你可以直接說:“這不是我要找的”,或者 “這個不起作用”。
然后它會說:“哦,抱歉了。這是另一個你可以嘗試的方法。” 它具有交互式模式,你不需要精確知道編程語言的語法,也不需要知道解決該問題所需的具體知識。你可以探索并自己找到解決方案。
Freethink:據我所知,Copilot 是建立在 OpenAI 的 Codex 之上的,Codex 可以看作是對過去代碼的一種快照,涵蓋了 2021 年之前的代碼。我不知道是否有計劃將 Copilot 連接到互聯網,以便進行更頻繁的更新,但我很好奇,不再頻繁編寫樣板代碼是否會導致一些潛在的損失。當你必須深入細節時,也許有 10 萬人中的一人最終會想出更好的解決方案。然后,這個解決方案就會在開發者社區中傳播開來。如果人們只是向 Copilot 詢問基于昨天的代碼的最佳解決方案,你認為創新本身會如何改變?
Dohmke:首先要考慮的是,大語言模型并不具備存儲代碼片段的庫。它們是由數十億個參數組成的神經網絡,用于預測某種概率。對于語言模型來說,這個概率是下一個單詞;而對于擴散模型來說,它是將噪聲轉化為圖像的方法。
以視覺模型為例,盡管它們只是在現有藝術作品上進行訓練,但它們可以生成全新的、以前不存在的藝術作品類別。比如,你可以要求它渲染以法國印象派的方式繪制的今天紐約的天際線。這樣,它就會根據你的提示生成一張以莫奈或其他法國印象派畫家的風格繪制的當代紐約天際線的圖像。
訓練集中并沒有真正看起來像這樣的圖像,而是根據你的提示和噪聲生成的。
我認為語言模型也是如此。它們可以生成全新的文本和代碼,這些以前從未存在過的內容。因此,它們可以與開發者合作,實際上推動創新并產生新的算法或代碼。但正如你從 “Copilot” 這個詞可以推斷出的,我們認為在這個創新過程中,人類 “飛行員”(開發人員)需要與 Copilot 進行迭代合作。
-
AI
+關注
關注
87文章
30172瀏覽量
268438 -
代碼
+關注
關注
30文章
4751瀏覽量
68359 -
GitHub
+關注
關注
3文章
466瀏覽量
16388
原文標題:GitHub CEO:未來80%的代碼將由Copilot編寫
文章出處:【微信號:玩轉VS Code,微信公眾號:玩轉VS Code】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論