真的需要一個人人都會編程的未來么?
近幾年來,科技行業(yè)有強烈的愿景去教會所有人編程。
“所有學校的每一個學生都應該有機會學習計算機科學”——CODE.ORG
每個人都應該有學習計算機科學的機會。對計算的理解,可以改變你的思考方式,并且它直接給你驚人力量去實現(xiàn)自己的創(chuàng)意。理解一些概念比如抽象、耦合、普適、復雜度以及伸縮,能夠改變你思考以及定位問題的方式。運用通用性的編程工具改變你解決問題的方式。
自農(nóng)業(yè)之后,現(xiàn)在軟件比任何其它技術都更劇烈,更快地改變著世界。不管是在科技行業(yè)還是其他行業(yè),現(xiàn)在它都是業(yè)務增長和創(chuàng)新的核心,并且快速改變著 人們的生活方式。軟件已經(jīng)主導了我們獲取知識,存儲及處理信息,發(fā)布及接收多媒體,處理商業(yè)事務,和朋友、同事、社區(qū)溝通的方式。世界上最大的圖書銷售商 和最大的視頻服務商都是軟件公司;主要的幾家音樂公司也是軟件公司;增長最快的娛樂公司和電信公司還是軟件公司。那些非軟件公司正越來越多的依賴軟件來優(yōu) 化物流、供應鏈、生產(chǎn)流程,和廣告,亦或提供工具給員工去創(chuàng)造更多的價值。軟件來到了這樣的一個臨界點,改變我們教授和學習知識,借款和貸款,了解和關心 健康,搜索和消費各種服務的方式。
盡管軟件給我們的生活帶來了空前的變革,但總有一天,編程將會變少。對編程的狂熱以及編程的增長都是暫時的,編程是眾多工具的產(chǎn)物?,F(xiàn)在編程是實現(xiàn) 計算最好的技術,但是編程自身并不是計算機科學的必要部分。計算就是處理數(shù)據(jù)并通過一些算法來解決問題。當前編程是我們不二的選擇,但是我們必須創(chuàng)造更好 的工具。將來一天,不需要寫一行代碼就可以處理數(shù)據(jù)以及驅(qū)動算法將變得習以為常。我已經(jīng)迫不及待了。
編程是一項非常專業(yè)化的技能。處理復雜問題自然地是困難的,作為一個程序員,我經(jīng)常寫程序解決各種復雜度的問題。我對那些非程序員用來處理簡單自動 化任務的技術懷有敬畏之心。我有幸接觸過一個邏輯及語言工具,在我腦中模擬一臺電腦并通過有著怪異規(guī)則的不常見的語言和它溝通(我不太善于模擬人)。很多 人并不適合編程,但大多數(shù)人還是需要解決復雜問題所帶來的好處。編程相關的工具及方法使得通過編程解決問題復雜化,會把我們大多數(shù)人擋在通過計算解決問題 的大門之外。編程并不容易學習,并且和人們所希望解決的問題也無多大關系。人們不應該非得通過編程才能運用軟件來解決問題。有那么幾個工具,我認為能夠給非程序員帶來像編程一樣解決問題的能力。
計算器
自上世紀70年代推出便攜式計算器以來,計算器已經(jīng)發(fā)展了很多??删幊痰挠嬎闫髯尶茖W家和工程師能夠解決一些比 普通算術更復雜的問題(盡管他們可能使用了一些代碼)。圖形化的計算器幫助他們直觀的理解計算結(jié)果。自從個人電腦和筆記本電腦流行以來,軟件化的計算器界 面已經(jīng)朝著展示用戶所處理問題的方向發(fā)展著,而不是不合潮流的累加風格實現(xiàn)方式(一次性從左到右敲一整行的表達式,而不是每次一個數(shù)據(jù)項目,一個操作符, 來來回回多次)。創(chuàng)新的設計(如Soulver和 Calca)把計算器內(nèi)嵌其中,并在界面顯示工作狀態(tài),提供改變輸入?yún)?shù)及實時查看結(jié)果的能力。
電子表格
電子表格有30來年的歷史了,但是依然像受書啟發(fā)而發(fā)明的老祖先一樣基礎和重要。它依然最重要的輕量級記賬工 具,并且證明是一個通用的計算和建模工具,同樣也善于展示表格式的數(shù)據(jù)。表格格式如今依然足夠通用,并可分飾多角,實時重算功能有助于問題的拆分處理。許 多和數(shù)據(jù)打交道的人有高超的電子表格技術,他們能夠做一些非常非常瘋狂的作品。 更復雜的,電子表格可以用來存儲和研究數(shù)據(jù)(特別是數(shù)據(jù)透視表出現(xiàn)之后),幫助人們開發(fā)和計算復雜的多變量的表達式,探索模擬和假設的場景,并實時呈現(xiàn)結(jié) 果。電子表格是一個通用的工具,能做遠超當初電子表格作者能夠想象的事情。從某種程度上來說,它非常接近于人們使用的編程工具。
不過電子表格也有不足之處,特別是以今天對用戶界面以及處理能力的標準來看。它在處理多維數(shù)據(jù)的時候就會顯得力有不及,你得提前決定維度,否則需要 從頭開始??梢酝ㄟ^使用多個連續(xù)的單元格以及重復交叉計算,來粗略模擬矢量和并行計算,但是它們并不能理解你的數(shù)據(jù)模型,也就沒有能力提供更多的幫助。電 子表格把扁平化二維表格數(shù)據(jù)視圖界面與數(shù)據(jù)本身和計算數(shù)據(jù)的公式合在一起。字母數(shù)字單元格的地址是不透明且易變動的,移動數(shù)據(jù)或者改變布局都有可能破壞其 他的單元格或者影響計算結(jié)果。公式是隱藏起來的且難以驗證其正確性,如果你不是原作者,甚至理解其功能也很困難。
80年代中期有幾個電子表格項目嘗試解決其中的一些缺點,特別是把數(shù)據(jù)與表格化顯示剝離開來。比如 Javelin、Trapeze 以及Lotus Improv,不過它們已經(jīng)消失在我們的視線中很久了,遺憾的是在軟件市場上并沒有再看到類似的軟件。
個人數(shù)據(jù)庫
當你在處理復雜或者多維的數(shù)據(jù)時,有時候電子表格解決不了問題。對于大部分人們想解決的問題,對數(shù)據(jù)的操作、查 詢和統(tǒng)計都是必要的。但是不像電子表格,令我印象深刻的是過去幾十年間個人數(shù)據(jù)庫的受歡迎程度大大降低。個人數(shù)據(jù)庫不再流行了嗎?還是說現(xiàn)在的我和大家不 在同一個圈子里面?可能是由于程序員不鼓勵大家使用個人數(shù)據(jù)庫吧,依”專家”的意見。還記得大學時候討厭MS Access,實在是不屑于鼠標點點就能構(gòu)建查詢那些小技能,我是幼稚的,癡迷于SQL的強大能力。我們應該把個人數(shù)據(jù)庫的功能都教給大家,而不是教大家 編程,至少也應該排到編程之前。
我最近發(fā)現(xiàn)MS Access可以很好的用來開發(fā)增刪改查的應用,F(xiàn)ilemaker也類似。等下次我想構(gòu)建一個大數(shù)據(jù)量的應用的時候我倒是非常有興趣試試Zoho Creator。盡管這些軟件都發(fā)展了很多,但是如要構(gòu)建真正的應用它們還是顯得不夠靈活,僅僅能處理一些簡單的表單和視圖。
還有好幾個特定的領域,非程序員也有工具來處理類似編程能夠處理的事情,但只需很少的代碼。游戲開發(fā)就是一個很好的例子,游戲是提供特殊交互的計算 機程序。游戲通常是復雜的程序,由用戶界面主導,但是游戲開發(fā)項目組卻由美工和設計師主導,而不是程序員(視游戲需求而定)。美工和設計師使用程序員開發(fā) 出來的工具實現(xiàn)很大部分游戲包含的內(nèi)容,如美術,結(jié)構(gòu),地圖,模型,動畫,情節(jié),關卡設計,迷宮,對話,故事。假設這樣的一個流程,關卡設計師提供圖紙和 寫好的規(guī)則讓程序員用代碼來實現(xiàn),一遍遍的重復相同的流程直到關卡設計師滿意為止,看起來很冗繁(當前大部分的應用用戶界面都是這樣實現(xiàn)的)。游戲領域不 是這樣的,程序員先開發(fā)游戲引擎和關卡設計工具,然后設計師就可以在一個非常接近真實游戲的環(huán)境里面設計,并能夠?qū)崟r地把設計裝載到游戲引擎中運行起來。
遺憾的是現(xiàn)在的界面設計工具不適合非編程人員使用,甚至是很多程序員。自鼠標發(fā)明以來,鼠標點來點去這樣的小伎倆是被“真正的”程序員輕視的,就像 匯編程序員看不起早期的Fortran擁護者,C程序員看不起Java程序員,Vi/Emacs用戶看不起依賴IDE開發(fā)的程序員一樣。那些已經(jīng)掌握高難 度工具或者流程的人總是很難接受新的更強大的事物。
長時間以來,GUI的構(gòu)建工具就是一坨屎,現(xiàn)在依然是。它們通常只是簡單的顯示將要實現(xiàn)的界面效果,一方面不足夠強大使得程序員可以用它實現(xiàn)他們所 想要實現(xiàn)的功能,另外一方面又復雜且充斥著各種編程概念,使得非程序員難以使用。程序員自然而然地回歸到編寫代碼實現(xiàn)界面的方式,因為他們需要做一些工具 做不到的事情。這樣做是錯誤的,雖然可以理解。代碼帶來一個視覺概念與思維方式的不一致的嚴重問題,特別是代碼是過程式的,如果是申明式的還好些,你構(gòu)建 你正設計的界面。重新編譯、發(fā)布并檢查界面變動實在是一個漫長的開發(fā)過程。我完全理解這種做法,但是設計師在Photoshop設計好作品,然后讓程序員 用代碼再次從頭開始實現(xiàn)作品實在是一個人力的極大浪費。我們的GUI工具必須得提高,使得設計師設計GUI界面,隨后程序員來接管界面與后臺的交互(Spark Inspector和Reveal預示未來)。
其它一些提供給非程序員類編程能力的有批處理器(如Photoshop),多節(jié)點且分層的合成工具(如Shake、 Blender),蘋果公司多節(jié)點圖片處理以及顯示工具Quartz Composer,為Mac OS錄制腳本的Automator,用于科學和工程設計分析的Mathematica、Matlab、和LabVIEW,收集聚合互聯(lián)網(wǎng)內(nèi)容及API數(shù)據(jù)的Yahoo! Pipes和IFTTT,內(nèi)容管理和展示工具wikis。特別值得一提的是HyperCard(1987-2000),迄今為止最有影響力的應用設計環(huán)境。我依然清晰的記得遠在掌握編程的基礎概念之前就能夠構(gòu)建棧及寫HyperTalk代碼。我做了一些自己覺得驕傲的事情,看到我們和父輩(在計算機出現(xiàn)之前接受的教育)做相同的事情。如果你錯過了,請讀一讀reminiscence。超鏈接、互聯(lián)網(wǎng)、wikis,都繼承于HyperCard,LiveCode也是其中一個分支。
因此我們有應用于數(shù)學的分析及計算工具,糟糕的用戶界面設計器,以及用于游戲、圖形、黑客的特定領域工具。下一代能夠讓程序員和非程序員都不用寫代 碼就能完成應用功能的產(chǎn)品應該快速的增長,他們不幫你寫代碼,只是使得寫代碼不再必要。我希望這樣的工具趕快出現(xiàn),完成那些現(xiàn)在用編寫代碼方式實現(xiàn)的功 能,讓大家都能夠構(gòu)建各種有用、高質(zhì)量的應用。特別地,我們將達到一個更高的境界,這些工具有自我改進功能,非程序員可以用工具構(gòu)建出新的工具,從而構(gòu)建 更多的應用,包括更出色的工具。
那些六位數(shù)的工程師并不認為把Photoshop作品與一些指令合起來構(gòu)建一個可用的用戶界面是一件浪費時間的事情,從這可以看出解決此類問題有很重要的意義。如果你碰巧是一個程序員且我的言論讓你感覺不快,請想想如果你不再需要花一半的時間去把PSD轉(zhuǎn)化為HTML, 你將能夠創(chuàng)造多少更多的價值。是的,我知道前端開發(fā)并不容易,它確實很復雜。但是絕大多數(shù)的復雜性都是由我們所使用的工具引起的,而這些工具并不是解決問 題所必需的。高深的軟件工程技能和晦澀難懂的業(yè)務知識顯得如此重要,那是因為構(gòu)建一個用戶界面需要幾千行的代碼。如果有一天不再需要那么麻煩,你就可以把 你的聰明才智用到更有意義的事情上面。
以前那些嘗試幫助非程序員寫代碼的項目大多都不成功,尤其是通用型的那種。感謝現(xiàn)在正使用我們的界面并提出改進建議的數(shù)十億的用戶,最近從他們那里 我們學習到了很多關于用戶界面的東西。開發(fā)創(chuàng)建型工具的挑戰(zhàn)在于提供用戶一個功能強大的界面但又不能復雜得讓用戶不知所措。然而在任何領域都有那么一些專 家在攻克不可能與簡單之間的壁壘,就像工具能夠讓曾經(jīng)要求專業(yè)知識和技能的人才能完成的事情變得普通人也能夠處理一樣。我們見證了業(yè)余的音樂和視頻在數(shù)量 和質(zhì)量上的爆發(fā)式增長,這都得益于生產(chǎn)音樂和視頻的工具變得如此的好,如此的簡單,如此的便宜。隨著我們設計復雜業(yè)務界面的能力提高,我們將構(gòu)建出更好更 簡單的可以讓非程序員也能設計和實現(xiàn)更多軟件的工具,我對此表示樂觀。在這個過程中,有些人可能成為發(fā)展的奠基者,但更多的人只需要使用工具來幫他們完成 工作。
程序員總是傾向于為程序員開發(fā)工具。為擁有較高專業(yè)技能的用戶開發(fā)工具確實是件更容易的事情。但是非程序員能夠使用的工具也能夠為程序員提供幫助。 減少對駕馭計算的認知壓力,將有利于程序員騰出更多的時間和精力去更快地解決更多的復雜問題。像虛擬世界里的成功員工一樣,能夠處理一些份外之事。我們依 然需要程序員,經(jīng)驗豐富的工程師以及充滿創(chuàng)造力的問題建模、算法和數(shù)據(jù)結(jié)構(gòu)設計、難關攻克、流程管理相關的實踐者。但他們會像今天的農(nóng)民一樣,只占總?cè)丝?的一小部分,足以支撐全民的食物供給。
一個人人會編程的未來固然是好的,但現(xiàn)在代碼只是駕馭計算的一個方法而已。當我們的技術達到每個人都擁有用來思考和創(chuàng)造的工具并且很少需要編碼的時候,我們將能更好去攻克一些社會性的難題。程序員們現(xiàn)在就可以去構(gòu)建那個技術了。
教會更多的人寫代碼是偉大的進步,但一個很少需要寫代碼的未來會更好。