第二回 愛因斯坦板凳語驚四座,從陋就簡起步程式設計
第二回 愛因斯坦板凳語驚四座,從陋就簡起步程式設計
上一節講到哥倫布對程式的發現起了重大影響,而對於程式起到奠基性作用的人物,還不能不提到一位科學巨人,他就是愛因斯坦。他的奠基性作用和他偉大的相對論和其他物理學原理關係不大,而和一種小傢俱很有關係——板凳。板凳是我們家中常用的小玩意,四條腿一個面,根本沒什麼創意,但是,誰的板凳最有名呢?還是大科學家愛因斯坦。
下面的故事沒什麼深意,簡單得不能再簡單了,任何事的開始可能就是如此吧,程式設計亦然。程式設計就這麼簡單,象哥倫布發現新大陸之後,人們再去議論這種發現,更會發現他太簡單了。甚至比這還可能簡單。擺在我們面前這樣一個簡單問題,如何走出解題的第一步呢?下面看一個故事,就是發生在大科學家愛因斯坦身上的,一個方凳的故事。
本回的目的是做出第一個全毛全翅的程式,哪怕從外表上看它是這樣的醜陋難看,但這是我們的第一個,有了它對比,後面我們的每一個進步都會顯得更明顯。其實,這是向偉大的科學家愛因斯坦學著這麼做的。
2.2.1 P2愛因斯坦的方凳:
圖2.2.1:老愛因斯坦和小愛因斯坦超時空論板凳
愛因斯坦(Albert Einstein,1879-1955),舉世聞名的德裔美籍科學家,現代物理學的開創者和奠基人,他是當代最偉大的物理學家。人們稱他為20世紀的哥白尼、20世紀的牛頓。愛因斯坦生長在物理學急劇變革的時期,通過以他為代表的一代物理學家的努力,物理學的發展進入了一個新的歷史時期,年輕的愛因斯坦則不為舊傳統束縛,對空間和時間這樣一些基本概念作了本質上的變革,這一理論上的根本性突破,開闢了物理學的新紀元。
但是,相傳,愛因斯坦的童年遠沒有上面那麼光輝,甚至可以說有些陰暗。愛因斯坦小時候顯得非常愚鈍。在學校裡,經常受到老師和同學的嘲笑,大家都稱他為“笨傢伙”。一次工藝課上,老師從學生的作品中挑出一張做得很不像樣的方凳對大家說:“我想,世界上也許不會有比這更糟糕的凳子了!”全班同學鬨堂大笑,在笑聲中,愛因斯坦紅著臉站起來說:“我想,這種凳子是有的!”說著,他從課桌裡拿出兩個更不像樣的凳子,說:“這是我前兩次做的,交給您的是第三次做的,雖然還不行,卻比這兩個強得多!”一口氣講了這麼多話,愛因斯坦自己也感到吃驚。老師更是目瞪口呆,坐在那裡不知說什麼好。
我們的問題是,你能不能告訴他,做方凳需要多大面積的木板?需要多長的皮條包著板凳邊?
愛因斯坦的板凳問題需要我們做的,就是求一個正方形的面積,外加周長。如何走出第一步呢?象愛因斯坦做板凳那樣,先做出一個地球上最簡陋的板凳。問題成了?有沒有比愛因斯坦的第一個小板凳還糟糕的板凳呢? 有!下面我們就用它來幫助我們程式設計。這種方法叫做:五步積木法。
2.2.2 五步積木法解題:
圖1
第一步:三積木 這是最簡陋的一個各木框框(如圖1),但卻是我們開始的第一步,由圖我們可以看出,一個大問題分成了三部分,你什麼都可以不考慮,但這步卻不可能不會:)為什麼選擇這麼個圖呢?因為再簡單的小問題,都可以分為三部分,已知條件(第一框),想得到的結果(第三框)和將已知和結果結合起來的中間部分(第二部分)。要通過電腦解題,有一個大致的前後關係。
圖2 第二步:做頭尾 上面的三部分,先分析開頭和結尾部分,開頭是什麼呢?題中的輸入條件,也就是需要輸入電腦的原始資料。結尾是什麼呢?處理完成後的結果。具體到我們的題目中,開頭是輸入板凳的邊長a,輸出則有兩個,一個是板凳的面積,一個是板凳的周長,即皮條長度,分別用s和l來表示。
圖3
圖4
第三步:連頭尾 如何將開頭和結尾連線起來呢?這就是下面的很重要的問題,問題又可分成兩個小問題(圖3),要麼先求周長後求面積,要麼先求面積後求周長。我們選擇第一個辦法,這一部分又分成了兩部分。怎樣求呢?一部分一部分地通過公式解決(如圖4)。
第四步:貼語法 各個語句和具體語言的語法還有一定的差距,根據相應語言,還要再行將相應語句轉化(如圖5示)重點是轉化s=a2。即s=a*a,在具體應用中,還要與相應的積木塊吻合,在積木塊中,將a*a之積得到後給予變數s。
圖5
第五步:壘程式碼 下面可以寫程式碼了。
圖2.2.2 scratch積木程式碼 我們上面啟用的方法是對N—S圖與積木的二者的綜合。為什麼要畫圖呢?通過圖形化的方式,可以有效地控制我們的思路,找出當前問題處理的關鍵點,通過對關鍵點的突破,實現問題的最終解決。N-S圖正可以起到一個作用,讓我們象愛因斯坦那樣,看到我們前進路上的前一個小板凳。
2.2.3 阿蘭開講:
有人會問,也有人會笑,這樣簡單的題目,編出來有什麼意義嗎?有愛因斯坦的前兩個板凳就是很好的回答。程式需要步驟,學習程式設計序更需要步驟。需要說明的是,世界上小板凳做得比愛因斯坦好的大有人在,為什麼成就的卻是做得最差的愛因斯坦呢? 板凳給我們的第一點,是一定要找出個實物才能讓人信服,愛因斯坦將老師驚倒在地差點吐血的就是他前面的兩個小板凳,這是個信服的證據。而我們不論學習什麼,一種承前或啟後的實物證據,通過比較,對於我們自己提高自己的信心會是很大的幫助。 這是很明顯的道理:要解決問題,先看清問題。程式設計亦然,看清要程式設計的問題是程式設計的第一步,也是基礎,還要通過程式設計的方式來閱讀問題,難怪以前老師教我們做題時說:原題至少要讀三遍。我們上面的圖正象愛因斯坦的三個小板凳。 愛因斯坦的小板凳告訴我們的最重要的是:大膽走出最簡陋的第一步,只有走出這第一步,後面才會越來越光明。拿出筆來,動起手來,大膽地走出第一步! 另外,思考的過程中要學會通過圖形的方式來轉移解題的重點。而豎梯形的積木的作用正在於此,先看問題的原始條件和要求的最終結果,這是梯子的最上一格和最下一格,然後再研究中間如何處理,即用原始條件塑造出最終的結果來。 但往往我們面對最簡單的問題時不願意遵守規則,有時候,規則也是可以打破的,後面我們將研究不守規則的情況。但我們的不守規則,其實又必須以原有的規則為依據,這象個悖論,但卻是事實,欲知後事如何,且聽下節分解。
2.2.4 小測驗: 熊的顏色
一隻熊,向南走一里,又向東走一里,然後又向北走一里,結果回到了起點。問這隻熊是什麼顏色?
小測驗參考答案: 問題的關鍵是:地球上哪個地方能夠轉兩個90度角就可以回到原地呢;另外一個就是以顏色出名的熊。兩個問題混合到一起猜想,必定是北極點了。所以一定是北極熊,當然是白色的了:)
相關文章
- 【程式設計題】 醜陋的字串程式設計字串
- PHP程式設計師的40點陋習PHP程式設計師
- J2EE程式設計起步程式設計
- 驚了!修仙=程式設計??程式設計
- 刪繁就簡,jquery的快捷程式設計jQuery程式設計
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- 函數語言程式設計簡介函數程式設計
- 從程式語言排行看程式設計師信仰程式設計師
- 從函數語言程式設計說起函數程式設計
- 01 Python3程式設計之程式設計語法簡介Python程式設計
- 物件-函數語言程式設計簡史物件函數程式設計
- 簡陋至極:微信小程式日曆元件(思路)微信小程式元件
- POSIX執行緒程式設計起步(1)-Hello World (轉)執行緒程式設計
- Go 語言的網路程式設計簡介Go程式設計
- Laravel API 文件太簡陋了LaravelAPI
- 簡陋版 MVVM 原理實現MVVM
- 想學軟體設計如何起步
- 從事UI設計就業前景好嗎?UI就業
- 從程式設計到養生程式設計程式設計
- Go語言併發程式設計簡單入門Go程式設計
- javascript函數語言程式設計簡單介紹JavaScript函數程式設計
- Linux下C語言程式設計簡介(轉)LinuxC語言程式設計
- 丘成桐談幾何:從黎曼、愛因斯坦到弦論
- 程式語言設計,程式設計哲學程式設計
- 從程式設計語言和程式設計範型的演化思考物件導向技術 (轉)程式設計物件
- 跟著阿里學JavaDay02——Java程式設計起步阿里Java程式設計
- Nokia Series60智慧手機程式設計 - 開發起步 (轉)程式設計
- POSIX執行緒程式設計起步(2)-執行緒同步 (轉)執行緒程式設計
- 從問題到程式 程式設計與C語言引論pdf程式設計C語言
- 一次簡陋的爬蟲爬蟲
- 學習感想——自己簡陋的作品
- 從 Redux 原始碼談談函數語言程式設計Redux原始碼函數程式設計
- C++程式設計從零開始之語句(轉)C++程式設計
- IO程式設計和NIO程式設計簡介程式設計
- Rust語言非同步程式設計簡介 - ShakaibRust非同步程式設計AI
- 程式設計師簡歷探秘,java語言發展前景程式設計師Java
- 多語言版vfp程式設計簡單實現 (轉)程式設計
- 讀愛因斯坦流形