“Blog 的新位置在 http://mmdays.com,本Blog將在 12/22 號之後,不同步更新。還請網友轉往新站留言:)”
Posted By Mr. Saturday
最近 PTT 的八卦版有一些人在吵一個很有趣的問題:「寫程式究竟需不需要懂數學?」問題一出現之後,正反意見立刻於板上展開廝殺,有些跨入業界的人主張數學不是那麼 重要,最重要的是主管要你的 code,你能準時交出來就好了。也有的人主張數學很重要,寫程式一定要懂數學。我的想法是,數學對於程式設計的發展有著非常重要的角色,然而是不是每個學習程式的人都需要去學習數學,或著是學到某個程度,就是見仁見智。你不懂數學,但是把工具和程式語言用得好,並且能夠展現出軟體工程的素養,你是一個軟 體業界需要的重要人才。你懂了數學,可以打造出更有效率的演算法,對於 Google 這種愛計較搜尋效率和結果的公司,你還是一個重要的人才。
學習,本身就是一件關乎深度以及廣度的事情,每個人從垂直面和水平面去延伸,修養到了何處,就決定了你自己的可替代性是如何。反映在寫程式這件事情 上,如果你只是會照著別人寫好的 API 去照著 call,除此之外什麼也不懂,連你自己也認為我只要把東西拼拼湊湊,能夠交代給上面主管就好,那你的可替代性就非常高,我可以找個工讀生輕易取代你的角色,這對於你個人來說是很危險的事情,因為你做的事情和心態太像生產線上面的事情,不需要太多的知識和學歷,任何人經過適當的訓練就可以勝任。我不主張每個要學程式的人都該去學數學,但是數學的確會讓你跟其他 coder 有些差異化,這種差異化會是這個競爭的知識時代中生存的關鍵。
所以,最重要的還是你在學習程式設計前,搞清楚自己對於自己想要的定位,如果你只是那種拿時新的工讀生,那麼艱深的數學真的可以免了。如果你想要當個與眾不同的工程師,那麼懂些數學,是絕對不會讓你吃虧的。
什麼?本文沒有八卦?那補上些小漫畫好了,相信寫程式的人絕對會會心一笑 (請點進去看全圖):
















寫的真好@@
寫程式如果說不用數學,是在很少數的情況下你才不需要考慮到,像是建置網頁這種Case。然而在大部分的情況下你的程式需要考慮到效率,一但需要考慮到效率,也就牽扯到數學了。如果你的程式效率好,這就意味著吃的資源少,程式跑的快。如果你以為這件事情很不重要,那就大錯特錯了。你能夠忍受一個軟體,跑一跑就停在那邊喘息個好幾秒的軟體嗎? 我就看過好幾個這樣子的軟體,真是糟糕到不行,這完全是不尊重你的使用者,這樣子的程式如果可以拿來賣錢的話,那也只有一種可能,就是你的競爭對手太差。即使你的軟體在終端呈現上面不用直接面對使用者,像是server上的程式,如果你能夠注重一些效率的話,那可以為你省下不少錢,別人需要用10台Server來跑的程式,你用不同的方式實做,結果只需要用1台,這就是你的競爭優勢。
總而言之,軟體產業是一個完全考腦袋的產業,就像Mr. Saturday說的一樣,如果你不提升自己的腦袋,那真不知道該怎麼去競爭了。
數學有許多不同面向,往往讓使用者深入其中而不自知。:D
個人覺得說懂”數學”太過於籠統,就如toni所說的一樣,數學包含的領域非常的廣泛,若為了寫個好的系統去學”數學”,那花費的成本就太太太高昂了!!
所以,與其說學好”數學”,不如說學好”資料結構”及”演算法”, 資訊領域有非常多的演算法可以研究,有非常多的經典可以拿來使用學習,而且這些東西都是針對各種需求所發展出來的,雖然也是離不開數學,但至少比起”數學”,”演算法”學起來有方向多了。
需不需要會數學,這得看你在哪個屬性的軟體產業,就開發大部分的ERP或單機專案的軟體,最注重的是能不如期完成專案,開發的速度夠不夠快,bug產生的數目在合理的範圍,或是產生非高度影響的bug,產品高維護性,效能通常是最後的考量,而且通常是高到不可忍受的範圍,才會想辦法去調整。就我們公司而言,Time to Market是最重要的事,趕快寫出一個可上市場的產品,少吃一點記憶體,讀取速度調快一點下版本有空再做。
在台灣的軟體產業大多是驅動程式,或許是因為遷就硬體,所以寫起程式比較沒彈性。但是如果今天是要寫一個搜尋軟體或是編解碼器,所使用的演算法的效率跟背後使用的數學理論誰敢說不重要。
如果想要讓自己不是淪為程式撰寫員而是名符其實的工程師,其中的差異我想各位可以衡量。
不過就是寫程式嘛
views: 3 times 寫程式到底需不需要懂數學?筆者曾在幾年前和網友討論過有關這類問題. 恰巧今天在 Mr. & Ms. Days 那裡看到這篇: 寫程式到底需不需要懂數學? 其實正反兩方應該都可以舉出不…
你問我要不要學數學喔?
想學就學不想學就不用學
如果硬要我說我會講學會解問題的方法最重要
會數學又怎樣不會又怎樣, 問題無法解出來通通沒則
但以上都是廢話, 最重要的還是要學會做人
因為解不出來就要靠嘴巴來做事了
當然你不想用嘴巴就要解出來.
邏輯、演算法,這算是數學吧!
沒有漂亮的演算法,程式是沒有效率的。
可以打造出更有”效”率的演算法
THX
Need to know basic math.
Anything above calculus is not necessary. (Discrete math may be helpful.)
If you are working on some very technical-specific areas, that would be different.
After writing programs for years, I forgot all the “advanced math”, such as calculus, compex variables, linear algebra, engineering math. This probably proves that I never use them anymore.
之前 ptt tech_job 還有個討論串是 “寫程式要不要天份”…
文章標題是”[問題] 寫程式真的是資管畢業後唯一的路嗎?
” 但因為某位網友的推文 “寫程式是需要天份的~” 而引發不少討論…
[...] 寫程式到底需不需要懂數學? Posted By Mr. Saturday 最近 PTT 的八卦版有一些人在吵一個很有趣的問 […] [...]
不一定要阿! 如果你只想當個code作業員,甚麼都不懂那也沒關係阿.. 反正混個幾年你不小心當了主管,寫程式就不是你的事啦!
但如果你有點骨氣 或不小心唸了CS, 那algorithm / math 就跟你有關係了… 至少你不會寫出 O(n^2) 的東西, 不過看到別人寫這種程式交給你, 也就認了.. 反正他們覺得數學不重要阿..
我寫程式寫了超過十年,一直很高興我自己是數學系出來的,而不是資工本科系出來的。為什麼?
每當我要寫程式時,我腦中自然就會浮現出能簡化步驟,加快效率的方法和定理。有些人說寫程式不用數學,我倒不這樣認為。只要你的程式中含有「邏輯和演算法」的話,那基本上就已經牽涉到數學了。我認為大家在爭論的,是「到底要用數學用得深還是用得淺」、「只需要基本用法,還是要儘量多用進階技巧」。
寫程式,多多少少都會用到數學,除非你的程式是只在螢幕上印出 “Hello world!” 之類的簡易程式,沒有「邏輯和演算法」可言。不過只要一碰到演算法,效率好的演算法和效率不好的馬上就可以區分出來。之前很紅的「The art of programming」、「The pearl of programming」、「C 精選名題100題」等等的書,仔細翻開來看,裡面在說的,不就都是數學嗎?問題只在於,你想要用在程式裡的,是那一種演算法?是快的那一種,還是慢的那一種?
一個從 1 累加到 n (n>1) 的整數運算式,用 for 迴圈累加起來求解,其實就已經是數學,是一種演算法了,只是顯得毫無效率,直接改用梯形公式就可在 O(1) 解決。跑一個 20^1, 20^2, …, 20^n (n>1,n為正整數)各除以 p (p為正整數)之後,所餘下的各個餘數為何,你可以用 for 迴圈來把每個 20^k 的項次展開 (pow()) 後再去除以 p 求解,當然得花上你 O(n^n) 的時間,並且還要處理長整數數值溢位的可能,但若直接改用模數運算來跑全部,可在 O(n) 內解決,並且不會有長整數溢位的困擾。平平一樣都可以求出解法,但是在效率上自然有差別。
想用到那一種程度的數學,端看需求而已。一千筆資料的「找出某筆資料修改後重新排序」、「每頁任意n筆的動態有序分頁」、「相互交叉比對求得最符合查詢條件的資料之排行榜」、「分析並建立語詞、語義索引資料庫」…等等,有一千筆時的做法,一千萬筆則有一千萬時的做法。需求不同、時程不同,條件不同,硬體不同,而所用的演算法也不一定相同。在不同的地方,選擇適合的方式下去做。
另外,有關於邏輯的部份。數學系在 1+1=2 都得先證明它是正確的以後 (需要用到三十多個代數定理),我們才敢去用它來計算,也因此我們才敢說:「是的,九九乘法表是正確無誤的,因為我們可以證明 3*2 = 3+3 的確會等於 6」。每一個運算子,每一次計算,我們都必需要小心地去用邏輯推理。a*b 並不恆等於 b*a (你必須先知道 a, b 元素和其 * 運算子的定義,才能證明),c 也不一定等於 c+0 (同樣,你得先知道 c 元素, 零元素 和 + 運算子的定義)。我們用嚴謹的邏輯去推理,去思考,我們才能真正的說:梯形公式的確比for迴圈累加快、模數運算的演算法的確比各項各自展開後再求來得快。
邏輯論、數論、集合論、圖論、離散數學、演算法、資料結構、網路架構,其實骨子不都有數學嗎?Google 或其他知名大公司的面試考題,不是也有很多題目是和邏輯及演算法相關的?如果寫程式不需要較深、較進階的數學的話,那麼何必要用這些題目做為考題呢?
多學會一種技巧,並不會讓你的刀劍變鈍,反而會讓它更加鋒利和光亮。你的程式裡可以不需要用到複雜的數學,而使用簡易的方法,完全取決於你想要你的程式如何運作。但是要注意,在程式的撰寫從 DOS 的單工、其他作業系統的多工、多執行緒、多核心平行處理,一直演化到後來的網路分散式架構時,或許用更宏觀的角度來對待程式撰寫,可以讓我們的程式更具有競爭力和效率,也可以讓我們程式設計人員本身有更寬廣的心,以及具有更高的專業價值。
至今我仍然很慶幸,當初毅然在資工大二時轉唸數學時的決定。
沒想到我一篇如磚頭似的雜感文, 會引來這麼多的好玉 (尤其是看到CyberJos的文章, 我真是嚇到了), 感謝各方高手的意見, 讓我獲益良多, 這幾天我會參考大家的意見, 再寫一篇完整的文章跟大家分享
數學太廣義了,倒不如說寫程式跟寫作文
差不多。要寫的通順達理,人人可讀懂的
程式,跟數學倒是沒多大牽扯。而且現在的
網頁工程師,可能不太會用到深層的數學吧;
美工設計要比搜尋演算法的效率更重要。
這根本不是問題–有的程式需要數學,有的程式不要數學,看程式的目的而定.
[...] 今天看到這篇「寫程式到底需不需要懂數學?」,這果然是個很容易引起爭辯的話題。認為需要的人幾乎都是從效率、演算法等觀點去論證,其實一點也沒錯,但是你會感覺愈是數學本科的人愈容易支持此一觀點,但這豈不是會偏頗掉他們的想法嗎?基本上我是站在不需要這一方,不過我是有點不同的看法。 [...]
如果寫程式的人一定要懂數學,那數學系的人就一定會寫程式了,應該是寫程式的人也要有一點數學的邏輯概念,本身求知慾要相當強,如果有個程式設計師,說他寫了一個dos10.0,我想任一個人也是興趣缺缺,寫出好程式應用的上才是重要,至於懂不懂數學不大相關吧!
想寫一手好程式,把基本數學顧好是必要的,更深入或更廣範的數學,即使跟要解決的問題無關,但是多少還是有些幫助,從某些角度來說,就是一種跨領域組合,雖然剛轉到資訊界,寫程式也略有小成,但還是稍嫌數學底子不好,有些問題沒辦法解得很好。
數學對寫程式一定有幫助,但要發揮到多高的程度要看專案的性質,一般專案其實應該不需把效率看為最高目標,彈性、架構、平衡、清晰我認為更重要。
[...] July 6th, 2007 前一陣子看到一篇文章–寫程式到底需不需要懂數學。造成網路上的回響,下面是幾個連結 [...]
[...] 寫程式到底需不需要懂數學? http://mmdays.wordpress.com/2007/05/27/math-and-programming/ [...]
[...] 這題目好像之前的“寫程式需不需要懂數學?” 聽起來又是個見仁見智的題目. 理想中的政治人物, 重心應該放在管理政務, 治理國家, 領導統率…有沒有幽默感, 似乎是其次吧? [...]