不只是適合程序員的數學思維書
每次讀結城浩的書都有一種很輕鬆的感覺,之前給大家推薦的《數學女孩》是這樣的,今在要給大家推薦的這本《程序員的數學》也是這樣,這是結城浩的另一代表作。
不只適合程序員的數學思維書
本書面向程序員介紹編程中常用的數學知識,藉以培養初級程序員的數學思維。讀者無需精通編程,也無需精通數學,只需要具備四則運算和乘方等基礎知識,就可以閱讀本書。所以這是一本面向初級程序員,重在培養數學思維的書,而不是教你如何編程的書。當然如果你懂點編程的知識將更加有助於理解本書內容。
既然是重在培養數學思維的書,那麼對於不是程序員的朋友來說,讀起來也一樣會有收穫。
如果你是學生家長,想從小培養孩子的編程能力,這是一本難得的書,初中及初中以上的學生可閱讀。
編程中的「數學思維」
通過本書,你將學習到編程中常用的「數學思維」,「數學思維」說起來太抽象,我們來舉幾個具體的例子:
1)條件分支和邏輯
在編程時,我們按照條件將處理方法分為多個「分支」。C 語言和Java 語言中使用的是if 語句。處理方法為: 當滿足條件時執行這條語句,不滿足條件時執行另一語句。這時,我們就使用了數學領域的「邏輯」來控制程序。因此,編程時必須熟練掌握「 與」「、或」「、非」、「蘊涵」等邏輯構成元素。
2)循環和數學歸納法
我們在處理大量的信息時,使用程序進行「循環」操作。比如使用for 語句可以循環處理大量數據。循環中使用的就是「數學歸納法」。
3)分類和計數方法
在將許多條件和數據「分類」時,程序員必須注意不能有遺漏。這時加法法則、乘法法則、排列、組合等「計數方法」將助你一臂之力。這是程序員應該熟記於心的數學工具。
通過本書,還可以學到遞歸、指數、對數、餘數等重要的基礎思維方式。
編程之外的「數學思維」
我很讚賞結城浩的書,因為他總能把數學思維的過程用通俗易懂的方式和盤托出,讀起來是一種享受。除了編程中的「數學思維」,我們還能向結城浩學習到哪些「數學思維」呢?
1)善用自己的語言總結數學
我們小學就學過餘數,但是如果別人問你餘數是什麼?餘數有什麼用?你能很快回答出來嗎?
也許你會搬出課本上的定義:在整數的除法中,只有能整除與不能整除兩種情況。當不能整除時,就產生餘數。
再來看結城浩是如何用自己的語言概括餘數的,他說:「餘數就是作除法運算時剩下的數。」並提出:「餘數就是分組。」道出了餘數的作用。
再來看,什麼是排列組合?排列組合是解決計數問題的方法。那什麼是遞歸呢?遞歸就是自己定義自己。數學歸納法有什麼作用?它是用來征服無窮數列的工具。而邏輯,他把它總結為真與假的二元世界。等等。
如果我們在學習數學的過程也能試著用這樣簡短的語言去概括、總結你所過的數學知識和方法,那麼就不會有學了之後不知道數學有什麼用的困惑了。
2)善用圖表展現數學思維的過程
在書中我們經常能夠看到類似於下面的有意思的圖表,它可以向讀者很好的展現數學思維的過程。
在餘數這一節的結尾處,作者用一個想像的「七角時鐘」和「六角時鐘」來直觀的表示「周期為7」和「周期為6」的規律。
有了這個圖,可以很直觀地看到,「100除以7的餘數為2」表示這個時鐘前進100個刻度後指針指向「2」這個頂點。而100除以7的商為14,表示時針轉了14圈。
在數學學習的過程中,如果我們能善用圖表,將有助於我們更好地理解數學。
3)從簡單到複雜的數學思維
以「漢諾塔」遊戲為例。數學家愛德華·盧卡斯(edouard Lucas)於1883年發明了一個叫「漢諾塔」的遊戲:有三根細柱(A、B、C),A柱上套著6個圓盤,這個圓盤大小各異,按從大到小的順序自下而上擺放。現在要把套在A柱上的6個圓盤全部移到B柱上,並且在移動圓盤時須遵守下述規則。
一次只能移動柱子最上端的一個圓盤。
小圓盤上不能放大圓盤。
將1個圓盤從一根柱子移到另一根柱子,算移動「1次」。那麼,將6個圓盤全部從A移到最少需要移動幾次?
解決這個問題的思維就是從簡單的問題著手——先找出「3層小漢諾塔」的解法,再找出解決「6層漢諾塔」問題的方法,最後再過度到「n層漢諾塔」問題的解法。
這就是一種從簡單到複雜的數學思維方法。當然書中你還將學到很多其他的思維方法,這裡僅舉幾例,絕對是掛一漏萬。
好玩的數學題
本書還有一個亮點是,書中為我們展示了許多有趣的數學問題的解法。比如上面說的漢諾塔問題,還有斐波那契的兔子繁殖問題、黑白棋通信問題、尋找戀人問題、鋪設草席問題、哥尼斯堡七橋問題(一筆畫問題)、高斯求和問題等。如果你對編程不感興趣,把它當作數學問題集來看也是不錯的。
點擊展開全文


※數學理論:在意想不到的地方與實際相遇
※數學是如何玩壞「懵逼」表情包的?
※方塊之謎,燒腦、益智的積木遊戲,六一好禮
※這個成語版「四則運算」很數學!
※陳詩峰:如何培養小學生的數學素養?
TAG:好玩的數學 |
※《程序員的數學》輕鬆掌握「數學思維」
※程序員的數學書單
※程序員的管理思維修鍊,看這篇就夠了
※不懂演算法的程序員不是好工程師!
※程序員的「數學修鍊手冊」,幫你快速惡補數學知識
※程序員究竟要不要學產品知識?
※卡莉·克勞斯簡單搭配魅力無限,不會穿搭的超模不是好的程序員!
※不要做一個只會面向搜索編程的程序員!
※程序員,不要急於學習編程語言,先學會如何解決問題
※編程測試,程序員過不去的坎?
※想轉行做程序員,學哪種編程語言比較好?
※程序員們的腦迴路真的不一樣
※不想當億萬富翁的程序員不是好老闆
※作為程序員,你在編程時吃了哪些數學的虧?
※求你了,編程面試問題太難真的招不到好程序員!
※不懂伺服器的程序猿不是好的架構師
※程序員的代碼為什麼永遠寫不完?
※不會被同齡人拋棄的程序員是什麼樣的?
※程序員不加班你還想幹嘛?
※程序員必備的數據結構與演算法書單