1. 程式人生 > >5.4 塑造IT人的專業核心能力——《逆襲大學》連載

5.4 塑造IT人的專業核心能力——《逆襲大學》連載

返回到【全文目錄

目錄

5.4 塑造IT人的專業核心能力

讀大學,重在思維能力的提高

計算思維是看家本領

設計自己的專業能力


5.4 塑造IT人的專業核心能力

我們的高等教育的傳統是注重知識型的教育。在應試教育下成長起來的同學,其實很適應接受知識的學習方式。本書中一再提到的就是要改變這種以接受死板的知識為目的的學習,改變為接受生動的知識及目標為增長能力的學習,理論知識與實踐能力完美結合,是我們的追求。

在對理論知識傳授過份依賴的教育當中,造成了相當一部分同學對理論的輕視。這是理論知識教法、學法不當造成的後果,也存在著實踐的嚴重缺失。我們呼喚“用實踐開啟體驗的視窗”,其中包含著更高效地獲得更多“間接經驗”的期望。從深層次看,接受知識的學習也存在著畏難情緒,以及不自信的因素。不少同學在專業理論體系中稍一深入會嚇一跳:這麼多東西如何應付?理論體系似乎高深莫測,抽象能力似乎不可捉摸,設計能力提高上路途漫漫,何時才能到達西天取得真經?

實際上,不管我們的大學是什麼專業,要對一門學科進行深入地學習,這樣的問題都是不可避免的。但稍作安慰的是,作為階段性的學習,並不是將所有知識倒進腦子才叫學習。學習方法對頭,學習節奏穩住了,具備專業核心能力,並非想象中的那麼難。

讀大學,重在思維能力的提高

有人說,未來不需要學習了,百度一下不就全有了?覺得對大學略知一二的大學生說:“真不理解學校中開設的課程究竟是為了哪般?高等數學中講的是幾百年前已經有的內容,在專業課中,左演算法,右策略,都已經在產品中實現,何必費時費力去學習?”還有同學在專業學習中初試身手後遇到了疑惑:“各種演算法已經在軟體庫裡實現,需要時直接呼叫就行,為何還又是設計又是分析地學個沒完?”

面對這些問題,我想起了一百多年前說“人類該發明的東西已經全發明完了”的美國專利局局長大人。前人的成果已經是歷史,我們以此為基礎,面對的是更廣闊的未來。在未來,還有更多的問題等待我們去解決,前人的錯誤需要我們去糾正,新的方向還等待拓展。在終身學習的年代,要看到這一點。對已有知識的掌握,正是要將我們帶到能與前人對話的平臺上來。在有限的生命裡,而對無限的問題,我們需要站在前人的肩膀上,利用前人探索過程的啟示,獲得我們前行的方法指導。

面對無限的知識,通過具體知識的學習過程,最重要的是塑造出科學的思維方式。這是專業學習的終極意義。科學的思維方式能讓人藉助學習中的遷移性,“不學而知”更多的知識,還能得到前人未曾發現的知識。一位“見多識廣”的人,遇到一個新事物,他在頭腦中會馬上想到另一個事物,建立兩者之間的聯絡,從而也就部分地掌握了新的事物。這就是我們常說的“舉一反三”。能夠舉一反三,前提是要有“一”,還要有將“一”變為“三”的生成器。“一”是我們已經學到的知識,而思維方式就是那個生成器。一個人的專業學習過程,是“一”增加的過程。學習不能靠“一”上加“一”的積累,而要靠在思維方式的指導下,讓這些“一”進行化學反應,產生出更多的“三”。

學海無涯,我們已經完全沒有可能掌握全部無窮盡的知識,去做一個百科全書式的學者。在大學中,卻存在一種可能,當你把握住了一個核心,掌握了一種方法,未曾學過的可以不召自來,未曾見過的事物也並不會陌生。《讀大學,究竟讀什麼中》一書中指出,讀大學,讀的就是一種思維方式。有這樣的思維,在問題需要的情境下,知識自覺地來到你的腦中。

計算思維是看家本領

到目前為止,可以稱得上是科學的思維方式大體上可以分為三種:

  • 第一種是以觀察和歸納自然(包括人類社會活動)規律為特徵的實證思維。實證思維的結論必須經得起實驗的驗證,以物理學的方法為代表,經過觀察、假設、驗證形成在邏輯上自洽(即不能自相矛盾)的結論,既可以解釋以往的實驗現象,又能夠預見新的現象。
  • 第二種是以推理和演繹為特徵的邏輯思維,以數學的方法為代表,藉助於作為推理基礎的公理集合和一個可靠、協調的推演系統(推演規則),要求任何結論都要從公理集合出發,經過推演系統的合法推理,得出結論。
  • 第三種就是以抽象化和自動化為特徵的計算思維。計算思維中的抽象化與邏輯思維中的抽象化不同,不僅表現為研究物件的形式化表示,也隱含這種表示應該具備有限性、程式性和機械性。這三種思維模式各有特點,相輔相成,共同組成了人類認識世界和改造世界的基本科學思維內容。

計算思維概念的提出者,美國卡內基•梅隆大學周以真(Jeannette M. Wing)教授認為:計算思維是運用電腦科學的基礎概念進行問題求解、系統設計,以及人類行為理解等涵蓋電腦科學之廣度的一系列思維活動。當我們必須求解一個特定的問題時,首先會問:解決這個問題有多麼困難?怎樣才是最佳的解決方法?電腦科學憑藉其堅實的理論基礎來準確地回答這些問題。

有人說過,“計算機革命是思維方法和思維表達方法的革命。”我們有幸為我們從事的學科代表著的一種最有生命力的思維方式而感到自豪。計算思維是一種遞迴思維,是一種並行處理。計算思維運用抽象和分解來處理龐雜的任務或者設計巨大複雜的系統,藉此能選擇合適的方式去陳述一個問題,能選擇合適的方式對一個問題建模並使其易於處理。利用計算思維,可以按照預防、保護及通過冗餘、容錯、糾錯的方式,從最壞情形恢復。計算思維利用啟發式推理來尋求解答,在不確定情況下進行規劃、學習和排程。計算思維利用海量資料來加快計算,在時間和空間之間,在處理能力和儲存容量之間進行權衡。

計算思維在其他學科中已經產生影響。例如,機器學習已經改變了統計學,像自然語言處理之類傳統上用形式語言處理的領域當前也變成了統計學家的地盤。網際網路的發展造就了大資料的時代,各種組織機構需要精通計算機和數學的人才。類似地,計算生物學正在改變著生物學家的思考方式,計算博弈理論正改變著經濟學家的思考方式,納米計算改變著化學家的思考方式,量子計算改變著物理學家的思考方式。計算思維將不僅僅限於科學家,而會成為每一個人所擁有的思維技能中的一部分。

作為IT學子,由此也要看到,計算思維除了有支撐我們專業學習的功效之外,也將能夠用於指導我們做好其他方面的工作。例如,在面對一個複雜問題時,我們採用分解的方法進行處理。整個的問題就是一個由“輸入—處理—輸出”構成的系統,又可以分解為多個小的“輸入—處理—輸出”子系統。這種分解的方法在軟體設計中適用,其實也是我們在處理很多問題的時候採取的策略。遞迴描述、並行處理、分治演算法、分離、冗餘設計、容錯糾錯等,在電腦科學中常見的方法,也成為了處理其他問題的一般性思維方式。我在前文中談到計算機類專業學生的適應性時,只講到了行業以及行業的輻射面之大,再加上這裡所講的計算思維的指導,更顯出了計算機類專業萬金油的特徵了。

設計自己的專業能力

在大學裡,專業知識要通過課程傳達,從事專業工作所需要的能力,也體現在課程裡。我們關注能力的養成,具體地,作為一個計算機專業人士,應該具備計算思維能力、演算法設計與分析能力、程式設計和實現能力、系統能力等專業能力。除此之外,還需要具備可以概括為職業素養的各種一般性的能力

計算思維能力主要包括形式化、模型化描述,抽象思維與邏輯思維能力。計算機是按照儲存程式的方式工作的,計算機工作的過程就是執行程式的過程。要利用計算機解決問題,前提是要將解決問題的方法編製成程式。需要人分析問題,由人確定解決問題的方案,在此基礎上才能用計算機的指令描述求解步驟,最終獲得問題的解,這就是寫出程式、執行程式的過程。由此可以看出,問題求解最關鍵的步驟不是最後的寫出程式,而是最初的分析,以及中間的設計,這是計算思維能力發揮作用的地盤。形式化方法來源於數學,直觀地講就是要用數學符號去描述問題,並且匯出問題解的結構,稱為是建立了問題的模型。形式化去除了問題的表象,而專注於問題的實質,使問題的著眼點進入抽象世界。藉助於數學可以進行嚴格、嚴密的變換、推理,得到的解決方案是可靠的。舉一個非常簡單的例子,要程式設計序解決一個“百雞百錢”問題。我們可以列出一個方程組來,在方程中用xyz之類的符號代替了公雞、母雞和小雞的數量,這是一個符號化的過程,將有形的實體替換成了抽象的符號,之後求解過程的設計就可以建立在這組方程上了,這組方程就是問題的模型。脫離了具體的形態,不用再想著公雞寂寞了得找母雞玩之類的,與問題實質無關的雞零狗碎,在嚴格的邏輯思維基礎上,既能方便地編寫出程式,也能保證其求解質量。

解決更復雜的問題,例如讓機器人下棋、自然語言處理、大規模積體電路設計等等問題,必須以形式化作為開端,依靠邏輯思維去設計解決問題的方案。時至今日,將形式化方法用於軟體和硬體系統的描述、開發和驗證,已經成為解決電腦科學和軟體工程領域中核心問題的關鍵。由於計算機系統在工作中不能夠直觀地看到其內部的執行形態,無法通過直接觀察獲得感性認識,習慣形式化、符號化成了計算機類學生在入門學習中必須跨越的一步。

演算法的概念在電腦科學領域幾乎無處不在,在各種計算機軟、硬體系統的構造中,演算法設計往往處於核心地位。要想成為一名優秀的計算機專業人士,其關鍵之一就是建立演算法的概念,具備演算法設計和分析能力。演算法的優劣通過其“複雜性”來衡量,包括了時間複雜性和空間複雜性兩個方面,指的是計算機執行演算法需要的時間和佔用的記憶體空間大小的度量,這樣的度量要用數學的方法給出。對於同一個問題,精妙的演算法可能能在幾秒鐘之內得到解,而蹩腳的演算法,理論上有解出的可能,但等到解出之時,地球末日已經到了;有的演算法可以在手機之類的記憶體和主頻都受限的移動計算裝置上順暢執行,而解決同樣問題的有些演算法在伺服器上執行也很吃力。用好演算法解題勝過買更好更快的計算機,這是其經濟性所在;好的演算法能更快地完成任務,在很多領域,搶得先機比金錢更重要;使用者每Google一次,耗能相當於燒開半壺水,IT界興起了“綠色計算”的浪潮,好演算法可以節約執行時間、減少耗電,有助於我們保護好人類共同的唯一家園。好演算法還應該是簡單和可讀性強的,這也給系統的可靠性提供保障。對於計算機類專業的學生,能讀懂演算法,會利用已有的演算法解決問題,能根據問題設計演算法甚至發明出新的演算法,是演算法能力進階的幾個步驟。演算法強,是一項具有核心競爭力的優勢。

程式設計與實現能力是計算機類專業學生必備的基本能力,也是衡量一個計算機類專業學生是否合格的最基本的標準。大學的專業學習從程式設計開始,而實際上,絕大部分的畢業生的工作也從程式設計開始,會不會程式設計成了是否能進入這個行業的門檻。學會程式設計的過程,也是理解計算機系統內部工作機理的過程,對未來與計算機相關的任何工作,都不失其意義。軟體和硬體從計算機體系結構的角度講並未嚴格分離,即使從事以硬體開發為主的計算機工程領域的人員,也離不開程式設計。諸如系統執行維護等工作,可能並不要求利用某種語言編制程式解決問題,但也會常常用作業系統提供的外殼(shell)指令編制一種特殊的指令序列去完成批處理任務。除了程式設計師,IT行業中的大多數崗位,如測試員、專案經理、系統架構師、系統分析師等,要勝任這些工作,程式設計功底也是必需的,這些崗位也常由程式設計師崗位轉型而來。程式設計是在整個行業中處於最外層的活動,但不少大學生在提高程式設計能力方面一味地強調了程式設計語言的學習,過分追求並止步於語言使用的技巧和學習過的語言的數量。這並不是一種有效的學習方法,提高程式設計的能力是根本的途徑。程式設計能力的提高建立在實踐基礎之上,培養方案中的各門課程,抽象的如離散數學,更直接的如演算法與資料結構、作業系統、編譯原理及其他如數值分析、計算機圖形學等等,實際上都是為程式設計服務的,是程式設計的“內功”的來源。使用計算機語言寫出程式的“一招一式”要會,更要練好內功,一出手寫出來的就是好程式。

計算機學科發展到今天,早已經從對單一問題的求解發展到對一類問題的求解,從軟、硬體分離發展到兩者界限模糊相互融合,從一機多終端發展到主從式結構,從獨立微機的普及發展到網路系統,再到建立機群形成強大計算能力的年代。專業人員需要具備系統分析、開發和應用的能力,這樣的能力概括為系統能力。所謂系統能力,包括用系統的眼光、系統的觀念、系統的結構看待由人、軟體、硬體形成的整個計算機系統,要能在整體與部分之間,在不同的抽象級別上切換自己的視角,解決不同的問題。具備系統的觀點並不容易,這更加顯示了其寶貴。如何培養和提高學生的系統能力,也成了目前國內最新的教學改革熱點。

列舉出這麼多專業能力,會給學習者生出諸多的不適應來。能嚇得初學者不敢入門,唬得在學者後背發涼:具備這樣的能力,豈不要了小命?這樣的能力,並不是一朝一夕就可以具備的,並不是上了四年的大學就可以學到的。再強的學習能力,也得給自己留有時間去學習、實踐,讓二者相互促進,相互融合。再為讀者寬心的是,並不是每個人都要具備所有的這些能力,而是與自己的職業定位有關。例如,志在做核心技術創新工作的人,應當在計算思維、演算法分析與設計能力方面奠定好的基礎,甚至大學畢業後可以選擇深造,獲得深入學習和實踐的更好的機會;而志在工程性質的工作,尤其是以應用專案開發為目標的大學生,前述的能力並不必追求有多深入,首要的是有能寫出良好程式碼的程式設計能力,以及可以概括到系統能力中的,熟悉軟體開發規範、質量保證方法等知識和能力。

大學生要具備這些能力,載體就是大學要修讀的各門課程。各專業的培養方案對應培養目標,有針對性地開設了相應的課程。例如電腦科學與技術專業開設的演算法方面的課程要深一些,而軟體工程,則在軟體體系結構、軟體工程組織方面多加考慮。簡單的辦法,當學生的,照單全收。對於能夠儘早明確未來發展方向的學生,則可以在培養方案基礎上結合自己的實際有所發揮,在專業選修課,及課外學習中塑造自己的特有能力結構。

只強調專業能力容易將人匯入誤區。一個人真正的成功,以及是否能夠有機會過上幸福的生活,其他的基本能力不可或缺,比如健康的體魄,熟練地運用英語等。團隊合作、溝通、誠信、敬業、自信等屬於職業素養一類的能力和品質,更是決定一個人事業成敗的關鍵。只是這樣的話題不在此處深入了。

返回到【全文目錄