武健



計算生活
生活能夠“計算”嗎?這個問題如果能夠展開,會出現很多類似的困惑。例如,人的感情能計算嗎?人際關系能計算嗎?直覺能計算嗎?人生能計算嗎?……
計算:如果是指以狹義的數字的方法來運算生活中的每一件事情。以現狀看,這會比較困難的。不過“計算”的含義不僅是數學概念,在字典中列出的有:①通過數學方法根據已知數求得未知數。②考慮;籌劃。③暗中謀劃。后兩種意思更廣泛一些。
面對生活、面對問題的思考與籌劃是每個人都會有的。在許多簡單問題面前,我們可能會占用的思維很少,揮手之間就能拿定主意;面對復雜的問題,可能需要反復斟酌,思考再思考,在深思熟慮后才能拿定主意……問題解決,需要人的思維,需要有一定的思考。
每個人在思考時,都是在盡力發掘事物背后的規律,尋求相應的行動規則和準則,提出可行的解決方法與步驟。人們會根據自己的理解、規定和認識,把握與描述事物的規律,以事物的結構、關系、程序為主要目標,得到最終的方法。面對問題時,很多人習慣從解決問題的具體方法與手段入手,首先考慮如何把問題解決了。第一位想的是方法與手段,尤其是以前不曾遇到過的新問題時,更加關心自己的解決方法。當我們在積累了若干經驗后,再遇到類似的問題時,會逐步升級,關注到方法、步驟背后存在的一般性的規律和規則了。在生活中,如果我們超越了解決方法與步驟,就開始進入到熟練狀態,從茫然無知的新手狀態逐步過渡到輕車熟路的熟練狀態。如何縮短這個過程,是人生中的大問題。
將諸多小事中的行動規則明確出來,有助于以后的活動。縮短從生手到精通的過程,這也是生活算法的作用與意義。
形式
生活算法是一種形式的行動規則。
人們發現任何復雜的算法都可以由順序結構、分支(選擇)結構和循環結構這三種基本結構組成。因此,我們構造一個算法的時候,也僅以這三種基本結構作為“建筑單元”。用這樣的“建筑單元”就可以把復雜的問題變得簡單化。
正因為整個算法都是由三種基本結構組成的,就像用模塊構建的一樣。所以結構清晰,易于正確性驗證,易于糾錯,這種方法就是結構化的設計方法。
1.算法的順序結構
順序就是按照一定的次序,一步步地解決問題。例如,每天早晨起床前后的活動是:起床→刷牙→洗臉→吃飯→上學。在順序結構中,有些環節是可以改變前后次序的,而有些環節則必須按次序執行。例如,“刷牙”和“洗臉”兩個環節是可以改變先后次序的,但是“起床”、“上學”兩個環節中必然是先“起床”后“上學”,生活中是不會出現先“上學”后“起床”的。
順序是最基本的算法形式。
2.分支結構
一部分問題在不同的條件下會有著不同的解決步驟和方法,這就是分支結構。在生活中的“選擇”、“判斷”都是典型的分支結構。
例如,打算明天去公園玩,但如果天氣不好,那只好在家中看電視。這個過程可以表示成為下頁圖1。
分支是人重要的思維模式之一。
3.循環結構
由于沒有達到條件而不停地重復做同一事情,這樣的過程就是一種循環結構。在現實生活中,我們也經常會碰到這樣的事情。例如,在跳繩測試中,會以時間為限。還沒有到時間之前,需要不停地跳下去(如圖2)。
在算法中,順序結構、條件分支結構、循環結構并不彼此孤立。三種基本結構既可以并列,也可以相互包含,在循環中常常伴有條件分支和順序結構,條件分支結構中也常常伴有循環和順序結構。正是這三種基本結構按照不同的結構組成了不同的算法。
4.模塊化的基本思路
算法經常是環環相扣的模塊化的結構。模塊化其實就是把一個大的問題按一定的分類方式分成若干個小問題,直到問題被分解到最簡單、最單一的結構,就好像是搭積木一樣。
例如,前面所說的起床后的活動,可以分為起床、刷牙、洗臉、吃飯、上學幾個順序,這樣就把一個復雜的程序分解成為若干個相對簡單一些的部分了。如果需要再進一步的細化,那么我們就要把這些列舉出來的部分再進一步細分,如可將洗臉這一個部分再分解為下列幾個動作序列:①拿毛巾;②洗毛巾;③擰干毛巾;④擦臉;⑤洗毛巾;⑥擰干毛巾;⑦放毛巾。
有了生活算法的順序、分支、循環三種基本結構,根據從頂及底的設計思路,利用模塊化的設計方法就可以分析與設計生活中的算法。這樣設計出來的解決方案將會是從全局的角度來思考的、整體的解決方案。
關系
生活算法是以算法的視角來反思生活中的問題解決,它直接面對生活中的諸多大、小事宜,與程序設計中的算法既有相似也有不同。
與計算機的“程序—算法“的過程類似,生活算法強調“過程—算法”。一般需要從程序、過程中歸納、總結算法,再用算法來指導計算機程序、問題解決過程。它們共同具備算法的五個重要特征:①有窮性:都必須保證執行有限步聚之后結束。②確切性:每一步驟必須有確切的定義,不能有無法操作的二義性。③輸入:有0個或多個輸入。④輸出:對計算機來說會有一個或多個輸出,對于生活算法來說會有一個或多個結果。⑤可行性:原則上能夠精確地運行。
同時,生活算法與程序設計算法也有很多不同:①呈現形式不同。計算機算法是以計算機程序、偽代碼、流程圖等為主要表現形式;生活算法因其面向生活,因此以自然語言、圖表、流程圖等為主要表現形式。②面對的范疇不同。計算機算法是面對利用計算機解決問題;生活算法面對生活,是人在生活中解決問題的。③實施對象不同。程序設計算法的主體是計算機,最終編寫的程序將在計算機得以運行;生活算法的實施主體是人,生活算法所表現的方法與步驟將在生活中一步步地落實。
對于信息技術課來說,如果能從“生活算法”的角度來審視現行課程的內容。在中小學是以發現計算機的操作、使用計算機解決問題為主的,如畫圖軟件、Word、PowerPoint等。這些計算機操作、技術應用型的課程都能以算法的思路來重新整理其教學目標。工具軟件的操作、應用強調其問題解決的方法與步驟,其背后的生活算法是程序算法的具體映射。計算機課中的編程部分與軟件操作部分實際上成為了一個整體關系。
從這個角度看,信息技術課程現有的內容實際上是一個有結構的整體(如圖3)。
其中畫圖、Word、PowerPoint、Flash,甚至包括Excel等軟件的操作均有過程—算法的含義,而應用軟件的問題解決背后也有生活算法,也是算法思想的具體落實。其中程序設計的算法是更抽象的,而生活算法相對更具體、更情境化。endprint