1. 程式人生 > >Learn a Little Bit Math Again

Learn a Little Bit Math Again

工作以後,做Web開發,做DBA,數學似乎沒有太多的用武之地,其他的學科如物理、化學、 生物就更不用說了,時間一長,它們就會很快被遺忘;若不是需要解決一些實際問題,恐怕很難再撿起來。當然,若是對此有興趣就另當別論,比如這位Matrix67,北大中文系應用學專業,卻是一位數學宅,認為生活中的數學無處不在,無時不影響著我們的生活。

計算機領域同樣如此,所以有人說,計算機是數學家一次失敗思考的產物,這涉及到計算機的理論基礎、發展歷史,是一個很巨集大的主題,以我的水平很難說出一二來。不過,倒是斷斷續續看過一點相關的東西,如《編碼:隱匿在計算機軟硬體背後的語言》 (英文版《Code: The Hidden Language of Computer Hardware and Software》

),以及阮一峰:四位計算機的原理及其實現。 看完這些,可以明白計算機的基本原理,若是手腳勤快點,也可以動手做一個雛形。

但實際情況是,我們往往會認為知易行難。這有點兒類似於理論與實踐的關係了,結果是,道理人人都懂,但並不是每個人都懂得如何運用。面對這種情況,有可能會導致另外一個極端,那就是隻重實踐而忽視理論。

對我們程式猿而言,似乎更容易這樣,因為”Talk is cheap, show me the code!”,所有的關注點都放在瞭如何實現上面;即使有設計,那時的設計也會輕易的深陷於某些語言或框架。我所接觸的Web專案大抵如此,這裡建議程式猿們不妨讀一讀劉未鵬的這篇方法論、方法論——程式設計師的阿喀琉斯之踵

以及文中的延伸連結;至於專案經理這類決策者、管理者請慎入,基於我的經歷和偏見,稍後另寫一篇部落格以作總結。最近的一年多我在做DBA,雖然入行不久,但這方面的體會還有一些。開始的一年,一個人單挑近十臺生產環境的伺服器,因為從小白入門頓覺各種不會和壓力山大,為了存活下來,資料庫、應用、主機、網路、儲存甚至硬體都要懂一點,但DBA又作為IT部門的打雜工、客服人員,經常會被打斷、圍繞著一個一個問題做Solution或Workaround,可以自由自配的時間少之又少,甚至連總結反省的時間只能通過加班來彌補,結果是看完一本Oracle Online Document就需要一年多的時間。這還不算什麼,其中還有很多有趣的故事,為避免追捕我就不一一提及;概括起來,就是入門的 DBA(包括系統管理員)往往會被一些”奇技淫巧”所累:相比理解那些基礎的概念,掌握一個個工具、一個個命令、一個個操作解決問題才會讓人覺得你有多麼牛,至於為什麼要這樣做、基本原理是什麼、如何有效避免等往往從不過問和思考,所以同樣的問題和操作會以一種令人噁心的頻率重現,當然這樣的人自然會經驗豐富:-D。還有另外一個十分重要的話題,效能問題:堆疊硬體、搭建叢集似乎成了
銀彈
;而下此結論往往有太充足的理由:立項和購置伺服器時沒有料到有這麼大的併發量;效能監控和測試報告顯示CPU、記憶體不足,偶爾還有大規模的網路延時。對此,我也可以說是手足無措,再者機器似乎往往比程式猿便宜,而且還很靠譜;但你不覺得結論和補救措施來得太匆忙了嗎?從一個低水平DBA團隊裡得出這樣的結論,我又會認為這是一件很正常的事兒,只可惜有了”大膽假設”卻缺乏小心求證”的鑽研精神。說到這兒,順手推薦幾篇文章:陳皓:效能調優攻略The C10K Problem;使用Oracle資料庫的程式猿請看看葉老的一篇老文面向程式設計師的資料庫訪問效能優化法則;把Tomcat用到生產環境或用Tomcat搭建叢集的同學可以看看FAQ/Performance and Monitoring - Tomcat WikiTuning Tomcat Performance For Optimum Speed - A Step By Step Guide,以及Fronting Tomcat with Apache or IIS - Best practices,說不定可以打打雞血,補充一些理論知識和解決方法。

(以上有點扯遠了,雖然提到的是效能問題,但歸結起來,也可以說是理論不足所致)後來的情況似乎會好轉一些,因為陸續新增了一些DBA,人手一多,每個人的責任範圍會縮小,投入的時間和精力會更加集中,經過反覆的瞎折騰,總能找到適合自己的一條路慢慢探索下去,只是不要成為另一種意義上的堆疊和叢集就好。作為一個打不死的小強,自認為還保留了一些”知其所以然” 的”超能力”,所以還不忘刨根問底,不忘多問一個為什麼,也不忘多看看基本原理和概念,只是眼下已經不做DBA了。

還是回到數學上來,這也是一種理論,但似乎比人盡皆知的道理更加難以運用。

大學學到的高等數學、線性代數、數理統計與概率論等等數學知識差不多已經忘光了,現在對數學再次產生學習的動力和興趣始於工作期間看過的關於貝葉斯推斷的一系列部落格以及由此擴散開來的一些閱讀:

  • 最先看的一篇是 Peter的How to Write a Spelling Corrector,中文翻譯見徐宥:怎樣寫一個拼寫檢查器。初看到這個題目,有點無從下手,但只要你認真看看Peter在乘飛機途中娓娓道來的講解,你會驚訝於他是怎麼樣一步一步化猜測為理論模型並和貝葉斯扯上關係的;當你試著敲完程式碼 進行拼寫檢測時,會發現這個程式還真的會讀懂你的心思;但回過頭來看看,裡面運用的只是大夥兒所熟知的全概率公式,可是為什麼我就想不到呢。
  • 再接著直接買了吳軍的《數學之美》,利用每天中午休息的時間看一點點,這時的情緒體驗會更加愉悅:初窺數學之美,瞭解了一些隱 藏在複雜問題背後的數學模型和原理。
  • 直到最近看CS61A:SICP with Python,在講Functions的小節中遇到怎樣使用加減乘除運算來求一個數的平方根的問題,這時Newton’s method出現了(如果初小教育靠譜的話,應該有老師講過)。

以上部落格或書中提到的問題,沒有一些數學基礎,單從理論上就很難解決,直接程式設計實現就有點像無頭蒼蠅,若真碰巧解決了,我能說是瞎貓碰上死耗子嗎。近來掀起的Data science熱、Machine learning熱等等離開了數學根本就沒法玩。

鑑於以上原因,我需要再學習一點數學知識,打打理論基礎,並重理論和實踐,不玩瞎貓捉死耗子的遊戲。

發一張勵志的圖:

math

延伸閱讀

關於工作

相關書籍

部落格專欄

資源索引

Wiki條目

blog comments powered by Disqus