近期創事記的一篇報道建議將編程納入高考范圍。實際上,關于“編程應當從娃娃抓起”這一問題,過去幾年已在歐美得到廣泛討論。不支持這一做法的人常常會提出的一個論據是:喬布斯也不會寫代碼,甚至沒有獲得過工程類學位,但他仍取得了巨大成功。
這一問題的重點在于,如果想成為喬布斯式的人物,你能否找到“自己的史蒂夫·沃茲尼亞克”?喬布斯擁有提出概念和硬件設計方面的天才,因此可以完美地與沃茲尼亞克這樣的軟件工程師合作開發出想要的產品。此外,盡管不是傳統意義上的“骨灰級程序員”,但喬布斯的技術能力也很強,僅僅只是被沃茲尼亞克這一方面的光芒所掩蓋。喬布斯只有一個。如果會編程,那么可以從事與甲骨文CEO拉里·埃里森和Facebook CEO馬克·扎克伯格一樣的創業活動;如果不會編程,也不具備喬布斯的才能,那么如何在科技行業立足? 不僅僅是工程專業,關于文科、理科、工程和藝術等專業的學生是否應當學習編程,大部分人的看法是肯定的。以下為主要原因: 1.學習編程有助于理解原則,同時分步驟解決問題 我們如何利用技術去解決能源、環境、城市、[url=]健康[/url]和教育等方面的問題?學習編程是一個好方式。這里以藝術專業為例。藝術專業學生通常傾向于從宏觀角度來看問題。例如在城市規劃中,規劃人員需要思考如何在建筑、環境和交通等方面實現可持續發展,相關工作非常繁瑣。在這一過程中,許多編程工具可以帶來幫助,包括用于數據可視化的JavaScript框架D3。 規劃人員可以收集有關多少土地可被用于城市綠地的數據,并基于D3框架進行可視化處理。實現這一目標需要完成許多后端工作,包括從哪里收集數據,如何以符合統計學原理的方式來組織數據,在可視化的過程中如何配色,如何基于公式來簡化數據。與此同時,規劃人員還需要兼顧可視化工作是否符合總體項目。簡單來說,這一工作實際上是一個包含分析問題和解決問題在內的邏輯思維過程,而編程是思維過程的具體體現。 從更高的層次來看,在編程時規劃人員所做的主要是為了獲得更直觀的信息,以幫助決策。程序有助于更好地“講故事”。一個故事的要素通常包括概要、循序漸進的敘事方式以及人物。而編程語言的一系列組成部分,包括指令、if語句、變量屬性及循環,可以扮演故事要素的角色。如果能更好地講故事,那么就能更好地決策。 2.未來一個世紀,超過40%工作可被機器取代。成為機器的主人,否則就被淘汰。 社會發展速度很快。在新經濟環境下,除非掌握新的計算技術,否則很難適應社會。設計大師唐·諾曼(Don Norman)曾寫過《設計心理學》和《未來產品設計》兩本書,其中一個主要觀點是:最優秀的機器不會幫你完成一切,而是幫你更好地決策,人類應當利用這些機器使自己更聰明。那么具體方式是什么?還是編程。如果需要與這些機器互動,或是進入一個極度依賴機器(包括智能手機和計算機)的經濟環境,我們需要知道如何操縱這些機器。 實際上,這些機器能完成的工作遠超出科技行業的范疇。《哈佛商業評論》曾在一篇文章中指出,科技能與許多行業形成互動。文章稱:“我們開發的軟件可用于多個垂直行業,例如[url=]汽車[/url]、醫療以及公共服務。這些行業都有不同的需求和目標。因此在討論多樣性時,主要是指客戶、工作及背景的多樣性。在曼哈頓街頭,你能遇到許多專業人士。將他們集合在一起,你將發現一個擁有豐富技能和經驗的人才庫,這是硅谷難以匹敵的。當這種專業的多樣性遭遇軟件工程天才時,才能推動突破性的創新。” 舉一個簡單的例子。在許多公司,人們都會花很多時間向Excel表格輸入數據,某些時候數據源為客戶文件。在這種情況下,文件中的數據往往是可分析的,例如.csv文件。如果不懂編程,那么即使是名校畢業生也需要把大量時間浪費在復制粘貼數據的操作上。而如果掌握了VB這樣的簡單語言,整個工作就可以自動化。無論何時獲得多大的數據文件,只要運行一遍代碼,所有數據就可以被導入Excel表格中。 而另一個例子是許多大學課程設置中的數值計算。大學之所以開設這樣的課程是為了告訴學生,如何使用程序重復處理大批量數據。回顧在大學研究室中的生活,我們可以發現最具效率的同學往往編程能力都很強,他們可以使用Perl或VB等語言來分析文件或處理數據,并輸出一個可被其他程序識別的結果。盡管這些腳本程序并不復雜,但這有助于完成許多日常工作,節約大量時間用于思考問題或從事其他方面的學習。 簡而言之,如果希望脫穎而出給世界帶來不同,那么編程是一項必要技能。 不過,仍有許多業內人士反對將編程作為一種通識教育。其主要理由包括: 1.編程不是目的。軟件開發者的終極目標并非寫代碼,而是開發解決方案。強調編程是一種舍本逐末的行為。 2.編程是一類方法。強調方法而弱化問題解決將帶來困擾。一方面,在解決問題時,作為方法的具體代碼并不是唯一的,因此如果不考慮代碼效率很難對優劣進行判斷,而代碼效率問題已可以被硬件的快速發展所解決。另一方面,由于解決問題的方法眾多,代碼的可閱讀性一直是困擾程序員的一大問題。對于Perl等腳本語言的開發者,這樣的問題尤為明顯。此外,強調方法往往導致人們忽略對問題的深入研究,你是否能保證程序在任何情況下都真正解決了問題? 3.泛泛學習編程無助于事。一些科技公司的人士反映,盡管許多人自稱從事軟件開發工作,但實際上編程能力很弱,因此對團隊的幫助很有限,甚至帶來負面作用。此外,盡管可以通過短平快的方式了解一些語言,例如Perl,但真正運用好這些語言需要花很長時間。而達到這樣的水平是無法通過短期培訓或通識教育實現的。 在以上討論中,支持編程學習的人士大多從思維訓練和時代發展的角度來看待問題,而反對者通常著眼于編程本身是否有意義。毫無疑問,編程并非所有人都會每天去做的工作,但掌握這一技能也可以滿足不時之需,提升工作效率。如果不考慮是否有利于眼前工作這樣的短期功利性因素,那么學習編程不失為一種培育學生綜合素質的好方式。 |