


最近,一位朋友問了我一個在各大董事會和商學院流傳的問題:「既然 AI 能寫程式,程式設計還重要嗎?」
這個問題很合理。生成式 AI 能在幾秒內產出 Python 腳本、自動補完整個函數,甚至設計小型應用程式。對許多人來說,這感覺像是人類程式設計師的末日,就像計算機終結了長除法,或是電子表格終結了傳統帳簿一樣。
然而,最令我憂心的是:缺乏計算思維的領導者將無從評判 AI 的產出。他們會像盲目的飛行員,無法判斷解決方案是否高效、可擴展,甚至是否正確。當機器出錯時(這在所難免),這些領導者將不知如何修正方向、迭代改進或修復錯誤。
自幼年起,我便深深愛上程式設計。當我鍵入那道許多程式新手都熟悉的神奇 BASIC 指令——「10 PRINT “AMIR.”」時,我的人生就此與程式碼密不可分。這些年來,我用程式碼建構萬物、將想法轉化為程式、以程式解決問題。浸淫其中愈深,我愈確信人類程式設計師的道路遠未走到盡頭。且聽我娓娓道來。
程式設計不僅關乎程式碼,更是一種完整的思維方式——計算思維。在這極度複雜且充滿不確定性的世界裡,它賦予我們解決問題、執行策略和建構系統的框架。若想更清晰地思考、架構更宏大的系統與解決方案,並成為稱職的執行者,程式設計的重要性可謂前所未見。
程式設計是一門藝術,也是一種行動,它是以最精確且明確的方式來表達一種方法(往往是一個解決方案)。在最基礎的層面上,機器無法容忍模糊。如果你說「排序這個列表」,你還必須指定如何排序、以什麼順序、在什麼限制下,以及在兩個值相同時該怎麼做。
這種紀律性迫使我們清晰思考。它也迫使我們深刻理解「執行」的意義。在商業中,我們把「執行」當作流行語。但它究竟意味著什麼?在計算機科學中,執行是字面上的意思:採納一個計劃,將其分解為指令,安排每條指令的執行時機,確保每條指令的必要前提條件得到滿足,然後以無情的連貫性執行指令,並注意設計好的冗餘和容錯能力。沒有藉口,沒有政治操作,沒有抱怨,沒有捷徑。只管完成它。
這種思維模式極具價值。如果我們不僅將程式設計視為技術行為,更將其視為結構化思維的隱喻和確保執行的框架,它就能提供一套在各處適用的工具:董事會議室、供應鏈、個人生產力,甚至外交領域。事實上,我曾撰寫大量文章探討如何將計算思維應用於通常不被認為與科學或工程相關的領域,例如戰爭與外交及地緣政治 。
但程式設計究竟以如此實際且直接的方式教會了我們哪些思維工具呢?讓我們來看看幾個例子。
在程式設計中,抽象化是一門隱藏細節的藝術,讓我們能專注於任務的本質——那些真正需要解決的最小核心問題。讓我們延續先前提到的排序範例。與其指定低階操作來移動電腦記憶體中的數值,多數程式設計師會直接呼叫「排序」函式,並相信它能正確運作。前人早已確保這些底層操作運作良好,這不再是需要重複解決的問題。因此,我們將排序的底層細節從程式設計師的視野中「抽象化」——這些設計師正面臨更大規模的問題,而排序只是其中一環。
這樣的抽象層次讓我們能夠建造複雜度如摩天大樓般的系統,而不必因每根樑柱與螺栓的重量而崩塌。
在商業領域,委派的本質就是抽象化的概念。一位執行長不會、也不應該審核每一張採購單;她設定預算並信任經理人採取行動。在軍隊中,將軍不會規劃每個戰術動作;他提供指揮官意圖,將細節留給現場指揮官處理。
道理很簡單:抽象化就是力量。沒有它,複雜性將限制你能承擔的範圍。有了它,你就能擴展應對更大的挑戰。
電腦不斷解決排程問題。事實上,這是每個作業系統都必須處理的重要任務。無論你使用的是 Mac OS/X、Linux 還是 Windows,你的作業系統都必須決定哪些任務何時執行、如何為每個任務分配記憶體和資源、如何確保 CPU(實際執行任務的引擎)不會在等待(例如)使用者輸入下一句話或指令時閒置。
我們在商業和生活中面臨相同的挑戰。我們的組織、部門或團隊就像 CPU。資金是一種資源,類似記憶體。排程效率不彰可能導致錯過截止期限、團隊間發生死結、預算爆表以及各種形式的組織災難。
理想中的專案管理,應該真正成為組織運作的作業系統。光是繪製甘特圖和看板並不足夠,還需要明確的流程來決定任務如何被安排、工時如何估算、採用哪些統計與邏輯分析來驗證成本。你們公司的排程演算法——也就是決定優先順序與執行方式的系統,團隊成員是否都能理解?他們能否獨立運作而不陷入「死結」狀態,避免在無需核准的環節等待批示?或是與本該平行作業的團隊互相牽制?一家學會像電腦般分配資源的公司,將能獲得極大的效率提升。
但效率不只關乎做事更快,更在於懂得判斷哪些事根本不該做。
在計算機科學中,「惰性執行」意指將工作推遲到絕對必要時才進行。何必計算沒人會看的報表?何必在用戶滾動到頁面特定位置前,就預先載入所有需要顯示的圖片與影片?
在商業領域,懶惰被嚴重低估了。我們經常過早地投入招聘、專案、分析或採購,結果往往導致精力浪費和沉沒成本。更糟的是,在人力組織中,維持多餘的人力會產生額外成本。就像用超級電腦計算 2+2 意味著這項運算會消耗數千瓦電力,進而產生不必要的開支一樣,人員過剩的組織也會讓你付出金錢、效率和員工滿意度的代價。何必為了發生機率極低的事情,付出巨大代價過早準備呢?
亞馬遜就是一個將啟發式方法或經驗法則付諸實踐的組織範例,這些方法有效避免了無效工作的氾濫。多年來,他們採用的「兩張披薩團隊」模式體現了一個原則:團隊應保持精簡,在資源受限的情況下,只建構必要的事物,並在適當的時機進行建構。
別在這個脈絡下把「懶惰」當成貶義詞。它蘊含了機會成本的概念。在這些事情上偷個懶,才能在那更重要的事情上全力衝刺……這種懶惰並非拖延,而是掌握正確時機行動的紀律。
「貪婪」演算法是一種在每個當下都採取最佳可行步驟來解決問題的方法,它不考慮長遠後果或未來多步之後的情況。這種方法雖然不一定能帶來全局最優解,但速度快、簡單且出奇地有效。
在生活中,我們時常運用貪婪演算法進行最佳化決策。業務團隊會優先追蹤最容易成交的潛在客戶;旅行者總選擇 Google 地圖上最快捷的路徑;投資人則在等待更大機會時,寧可選擇報酬率雖低但最穩健的收益方案。
在沒有更好選擇的情況下,採取貪婪策略應該成為一種習慣。但它們不能取代真正的戰略。當速度比完美更重要時(這在日常戰術層面很常見),採取貪婪策略通常沒問題。例如,一家試圖贏得早期客戶的新創公司,或是在快速變化的戰場上的軍事單位。這些情況需要的是在短時間內評估出最佳行動,而不是被對遙遠未來的分析所癱瘓。但一旦這種貪婪優化贏得了時間和空間,組織內負責優化非戰術性結果的成員就應該專注於更長期的優化。
即使有意識地瞭解差異,並制定協議以確保組織中不需要深入思考的部分不會浪費時間這樣做,也能帶來巨大好處。
那麼,讓我們回到文章一開始提出的問題。如果人工智慧會寫程式,人類為什麼還需要學習程式設計?
原因有很多,但一個強有力的理由是:程式設計提供了精確的詞彙和具體的方法論,來處理現實世界中的執行問題。它規範了某件事該如何完成、衡量、評估、複製與終止。
人工智慧能產出程式碼,但透過 AI 寫程式無法讓人類獲得這個審視世界最寶貴的視角。若缺乏運算思維,我們將難以在認知層面應對這個充滿控制論設計的複雜世界。
被動接受機器產出結果的人,永遠無法判斷解決方案是否高效、可擴展,甚至是否正確。而以程式碼呈現的機器發現,也無法為那些茫然觀察這些「發現時刻」的人類帶來任何進步或學習。
AI 能為一項合併案提出十種策略,但運算思維者懂得如何建立取捨模型、辨識限制條件,並針對每項策略測試邊際案例,運用思考能力來優化結果。AI 能除錯一段程式碼,但運算思維者知道如何引導這種解題能力來為抽象概念除錯。
在 AI 時代的程式設計,或許不再著重於敲擊鍵盤的次數,而是更關乎思維模式。這種能力讓我們得以培養一種素養,確保人類不僅作為使用者,更能成為未來形塑者的關鍵存在。
每間公司都在談論執行力,但鮮少有人給予嚴謹的定義。正如本文各處範例所示,運算思維與程式設計師般的精確表達,恰恰能為我們提供這種嚴謹性。它教導我們:執行力並非意味著採取某種模糊行動的高層次概念,而是一個涉及依賴關係、資源配置、結構設計、效率優化、容錯機制、效能調校與迭代改進的系統性過程。
在人工智慧加速一切的時代,致勝企業不會只是工具採用者,而是那些領導者能以程式設計師思維運作的組織——精準、有系統、敢於運用抽象化與遞迴等超能力來應對龐大挑戰與極端複雜性。
這個法則同樣適用於國家、軍隊,以及任何必須在不確定世界中大規模執行的機構。
毫無疑問,程式設計依然重要。它永遠都重要。不僅僅是作為代碼,更是作為一種執行哲學與科學,作為分析工具。語言可能會改變,編譯器或許會演化成神經網絡,但思維方式卻是永恆的。
這個世界已經變成一個活生生的、由系統組成的控制論體系 ;一場在人文明基底上運行的程式。無法用計算思維思考的人們,將成為無法掌控方向盤的乘客。而那些能夠的人,將會成為未來的建築師。
| Cookie | Duration | Description |
|---|---|---|
| cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
| cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
| cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
| cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
| cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
| viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |