作為程序員,你在編程時吃了哪些數學的虧?
作為程序員,你在編程時享受過哪些數學帶來的好處? - 互聯網
看論文時候一個"顯然"推了我一下午
因為不懂數學蠢事兒沒少干啊,說幾件刻骨銘心的!
1. 用正則表達式驗證 XML 文件:經常用正則表達式驗證字元串格式,遇到 XML 自然也是照方抓藥(由於年少無知,不知道有 DTD 這類東西),可是正則表達無論怎麼寫都會出現合法的 XML 無法通過驗證的情況。理解了自動機理論和形式語言後才知道這樣的正則表達式是寫不出來的!!!,後來面試程序員的時候凡是簡歷寫著「精通正則表達式」的人我就會問這個問題^_^
2. 不懂線性代數就開發 3D 應用:第一次接觸 3D 圖形開發,需求很簡單,用戶打開一 3D 模型,然後用滑鼠可以拖動旋轉。先看 Direct3D 文檔,矩陣?還相乘?好像上學學過,坐標怎麼都是四維的?完全不懂,最後用官方示例連改帶猜勉強過關。看書惡補知識,最後理解了線性空間、仿射空間才理解了 3D 圖形的原理。附帶著把傅里葉變換一類的東西也理解了,都是在線性空間里折騰嘛。
3. 亂用操作符重載:折騰 3D 圖形開發的時候見到有人在 C++ 里用操作符重載計算矩陣、向量,覺得很高大上,原來一大堆代碼現在變成了一個數學表達式。自己也照葫蘆畫瓢,結果是一大堆代碼變成了一大堆難以理解的代碼。現在知道了代數結構的概念,想想當時操作符重載不考慮公理和定律是多麽蠢的一件事。下圖來自 Apple WWDC 的軟體開發課程,我當年就是這樣乾的-_-!
順便說,我不認同「上學學好數學會對以後編程有幫助」這樣的觀點,因為沒有被問題折磨過,直接去學解決問題的方法是不會有久旱逢甘霖的感覺的。
因為不懂數學,所以不知道我遇到的問題是不是數學問題引起的。。。所以不知道吃了啥數學的虧
因為微積分/線性代數/概統水平捉雞所以中途退過幾門本來挺有趣的專業課。。
最刻骨銘心的一次是多媒體技術基礎課,期末大作業有一項是實現圖像壓縮,探討不同量化矩陣的效果。。需要用到離散餘弦變換。。然後我作為一個既沒上過信號與系統,又不會手打快速傅立葉變換的小弱,從書上扒了離散餘弦變換的公式直接用python實現,速度自然呵呵,然後為了提速短時間內嘗試和評估了好多python高性能計算的方案。。最後,還是scipy里現成的函數拯救了我。。還有一項作業是實現變聲器,助教很厚道地給了matlab參考實現。然後中二如我,ddl之前幾天立志要自己看paper然後實現一遍state-of-the-art的變聲演算法。恩,下場你們都能想到了,半夜哭著下盜版matlab想辦法讓助教給的示例跑起來交差。。雖然最後總評分不低但一點都不開心。。
不會數學的感覺,就是繽紛多彩的技術世界裡有許多窗口對你砰地關上了。。0x5f3759df 只聽說過直接用,怎麼來的?算不出
小學四年級學編程,剛上初中的時候,我想我大概可以自己做個自己想要的小遊戲了。畢竟小學生學編程的主體想法無非是有一天可以做自己的遊戲而已。當時已經做過貪吃蛇什麼的,自己感覺可以做點更高大上的玩意…於是開始構思,寫了將近半年的故事腳本,畫了很久資源圖,想做個rpg…然後開始編程。當時用的pascal/delphi,大概是沒有什麼靠譜的2D引擎的,於是開始寫寫寫…最開始的問題就是動畫了,角色移動什麼的攻擊時跳躍什麼的我都做不好,因為畫圖技能low,畫圖做全套動作的話會很僵硬,瞄點什麼的角色跳到的位置都是固定的…也就只能這樣了。最后角色都是直線撞的…勻速…
於是乎我最終做出來個畫面不及fc的遊戲…我記得當時是2002年…至於遊戲性…嗯有個屁的遊戲性…
後來學到拋物線,原來當時我糾結了好久的東西只要寫個二次曲線方程就妥妥的了…再後來,我就專心學習,不再異想天開做遊戲。特別是數學和物理成績一路飆升。後來進了重點高中理科實驗班…最大的虧就是小學5、6年級的時候借了本C語言的書,看x = x + 1這種死活也法理解!!!嚴重打擊了我的信心!!!一直到初中跟老師學QBasic和明白。
自曝恥辱史……
當年NOIP時因為沒有特判1不是質數,掛了兩個點,錯失了一等獎,也錯失了FDU的保送資格。
(群眾反應:咦原來NOIP還能保送?暴露年齡了……)現在在學機器學習和量化交易,也是吃了數學不夠好的虧,人家書上隨隨便便構造一個矩陣就算出來了,我可能得折騰好久……不說了,都是淚。
但至今我還是相信我能在演算法這條路上給自己創造財富,願與君共勉。企圖解決 NP-hard 的問題.
真正會吃數學虧的編程工作核心就不是編程。機器學習,計算機視覺,計算流體力學,你熬一晚上對著電腦還不如刷一晚上數學,統計,流體的書。
四元數特么不是SO3對稱群的。。是SU2對稱群的啊!!!!!
所以用四元數紀錄姿態算姿態差的話。。兩個數不能直接減啊。。。得歸一化了才能算啊。。。
當年搞相關項目的時候,最早的姿態是用歐拉角存的,為了計算所以用了旋轉矩陣,可是忒不方便了。於是就改為了四元數。
姿態總共只有三個自由度,旋轉矩陣則有9個數,丟了精度想拉回來都不知道該拉哪個,四元數多好,總共四個數,丟了精度normalize一下就好了。哈。
後來出了個BUG,怎麼算怎麼不對,代碼完全解耦,每個函數都有單元測試,完美無瑕。TMD沒日沒夜的調了36個小時之後(連語言基礎語句運行都寫了test,因為之前吃過虧,PYTHON2.3之前的string超過2048個位元組會出錯,當年也被坑得半死)。整個人都崩潰了。。。後來發現居然BUG是出現在數學結構上。
四元數是SU2對稱群,特么不是SO3對稱群,對於描述旋轉來說,它特么的實際上是把每個姿態描述了「兩遍」。SU2對稱群所描述的世界裡。旋轉一圈並不能回到原來的位置,而是回到了原來位置的「背面」。而想要回到原來的位置,你特么需要旋轉兩圈!!!!!!
難以理解嗎?來,再舉個例子。費米子的自旋大多數是1/2,3/2這樣子的。也就是說,對於這種粒子,旋轉一圈不能轉回原來的位置,想要轉回去,你得旋轉兩圈。
你說這不科學???NO,NO,NO。。。這特么的就是科學。。。不說複雜的,是&>還是&>=的時候永遠想不清楚,只能多跑幾遍單元測試,對了就算,錯了就改,改對為止~
0.1+0.2=0.2999999
」一個單子(Monad)說白了不過就是自函子範疇上的一個幺半群而已,這有什麼難以理解的?「
學 Haskell 的人有幾個沒看過這個哏的…… 後悔當年學完物理系的群論就沒再學代數了……我特么費勁半天做個演算法,大哥看了一眼,寫了個矩陣,讓我直接拿源數據去卷積就行了。。。
Java的Math.log是e為底,不是10為底。
寫個矩陣求逆把我給折騰的
搞競賽的時候一直覺得數學就是神的領域。
女朋友被學數學的搶走了算不算???
你問的是數學的虧,數學沒學好的虧應該也算……前陣子給人家寫個小工具,有一個問題是連續點求二階導,死活沒有思路。
推薦閱讀:
※wireshark能否嗅探https鏈接中的用戶名和口令?
※存在哪些「公認」「智商高」的粉絲群體?
※計算機專業,名校畢業和普通學校畢業有什麼區別?
※大學畢業做前端工作感覺最近遇到了瓶頸,不知道該如何提升自己?
※20世紀90年代末發明的sloot數字編碼可以將一部電影壓縮到8KB 是否符合香農第一定理?