1、編程中的數學於是我馬上回顧了下編程中用到的數學知識,好像少的可憐。
計數的能力:for循環中經常用,小學生都會。
數字的加減乘除:每種編程語言都會內置支持,都不需要你自己算余數和模:偶爾會用得到集合運算:交集、並集、差集,編程中用的不多。
布爾運算:AND,OR,非各種進制:二進制、十進制、十六進制還有哪些?我想不起來了。
當然這和我從事的編程領域有極大關系,遼寧北大青鳥http://www.kmbdqn.cn/認為如果我做的不是Web開發,而是搜索,游戲,安全,演算法,人工智慧等,那對數學的要求估計就開始飆升了。
其實計算機的基礎是數學,只是我們一直在應用層編程,體會不到罷了。
比如說我們日常使用的計算機,絕大部分都是所謂馮諾依曼結構,這個結構可以說是圖靈機這個概念機器的具體實現,而圖靈機就是一個純數學的東西啊,沒有圖靈機這么偉大的抽象作為數學基礎,現代的計算機是製造不出來的。
再比如說密碼領域需要很多數論的知識,RSA演算法就涉及到大素數的分解;我們常用的Mysql,Oracle等關系資料庫的底層基礎是離散數學的笛卡爾乘積;通信系統中很重要的一個原理就是傅里葉變換。
編譯器會用到有限狀態機;數據的壓縮會用到各種數學的演算法;項目管理中的進度管理,甘特圖數學基礎就是圖論。
.....總之,數學在計算機科學扮演著非常重要的角色,是整個學科的基礎。
2、不拼數學拼什麼?具體到應用層編程,尤其Web開發、企業信息化開發,整天折騰的是框架和類庫,用不到這么多高大上的數學知識,那到底拼的是什麼?想想編程中常用的數組,如果是一維數組,做個循環和遍歷,每個人都能輕松應對。
如果要用數組來表示二叉樹,就需要把一個樹形結構對應到線性結構,那難度立刻上升。
如果在編程中需要自己實現鏈表,就會發現把各個節點的鏈接關系維護好,需要把指針調來調去,挪來挪去,實在不是一件容易的事情。
這樣的能力就是邏輯思維的一種體現。
我們在做系統設計的時候,經常需要總結、分析現實需求,找到容易變化的部分和相對穩定的部分,把他們封裝起來,形成核心的概念,支撐起整個系統,這是一個抽象的過程,雖然用不到多少數學知識,但是思維的過程也極不容易。
邏輯思維能力和抽象能力的差別,能夠區分出程序員的優秀和平庸。
一個優秀程序員寫出的代碼,介面清晰,容易擴展,易於維護;一個差程序員寫出的代碼,思路混亂,完全是一些計算機語句的堆砌,別人看不明白,過一段時間自己都看不明白了。
數學系的同學在這兩方面恰恰是長項,想想看,數學系同學們整天折騰這么多「枯燥的」抽象概念,再去看編程這樣大部分都是具體化的實現,簡直是分分鍾搞定!這可能是數學系的轉到編程領域很厲害的原因吧。
邏輯思維能力通過學習數據結構和演算法,做數據結構的習題可以得到有效的提高,抽象能力需要在實踐中不斷的練習、積累經驗。
對於初學編程的同學,從現在就開始努力提升吧!