2010-09-05 113 views
16

開發人員瞭解離散數學很重要嗎?關於算法和分析的大部分書籍至少有一些對數學的參考。我可以很容易地理解這些算法,並可以毫無問題地實現它們,但是當涉及到數學部分時,我會陷入困境。一般認爲開發人員對數學有深入的瞭解,以理解算法和方法嗎?開發人員應該知道離散數學嗎?

+9

我相信開發者應該知道一切。那會比不了解一切都好。 – 2010-09-05 23:05:51

回答

3

取決於開發人員在做什麼。如果你正在做網絡,可能不是,也許有點安全。就像蠻力攻擊在某個散列下解碼某個位數的密鑰所需的時間一樣。如果你正在爲高端遊戲製作圖形,你可能需要了解相當多的數學和方法的優缺點。作爲數據庫管理員或網絡,您不應該這樣做。

+2

數據庫管理員可以從瞭解一些排隊理論中獲益。 – 2010-09-05 21:27:06

+2

@彼得G:網絡基本上非常專門排隊理論。電信網絡的主要編程語言是以排隊論的發明者命名的,這並非偶然。 – 2010-09-06 00:46:48

0

如果你的工作是純粹的CS,就像你發明新算法的Google搜索一樣,那麼你就需要能夠很好地分析運行時間,以及任何像物理模擬的效率。 如果您是'普通'開發人員,那麼您需要了解運行時間及其對您的應用程序的影響。

+0

是的,當然我可以計算出運行時間和影響......至少對於標準算法。但這不是唯一的要求。 – NixDev 2010-09-05 21:05:55

19

這取決於您所談論的開發人員的種類以及您所談論的數學種類。我很確定大部分「普通」開發人員不需要知道多少數學知識。但是,你想成爲「普通」開發者嗎?

  • 如果您正在開發的Web應用程序只顯示並允許編輯數據庫中的數據,那麼您可能永遠不需要任何數學。另一方面,如果你正在開發一個顯示目標路徑的GPS系統(或其他一些執行更復雜計算的應用程序),那麼離散數學將是有用的。
  • 儘管它不一定是離散數學,例如在金融行業,人們更需要更多的概率和統計數據。

這就是說,知道數學一定會使你成爲一個更好的開發者,因爲它訓練你的思維方式不僅有助於解決特定的(數學)問題,還教你如何思考問題更正式的方式(我相信這對於編寫正確的代碼非常重要)。

+0

GPS系統何時將不涉及連續數學? – Gian 2010-09-05 20:53:04

+0

那麼...什麼是學習路徑? – NixDev 2010-09-05 21:04:03

+0

@Gian:我不清楚 - 我正在考慮在圖中尋找路徑(或基於離散數學問題的類似圖) – 2010-09-05 21:33:56

0

我的經驗是這樣的:

知道一些關於離散數學的東西,你永遠不會後悔。在許多情況下,即使在平凡的任務中,它都會使你的工作變得更加輕鬆,因爲你將熟悉各種概念,至少可以讓你構建更智能的谷歌查詢。對於大多數程序員來說,深度熟悉和能力去做這些事情對於大多數程序員來說可能是沒有幫助的,但是絕對是熟悉的。也就是說,我遇到過的大多數行業程序員(甚至一些學者!)對這些東西幾乎一無所知,所以不知道它不太可能讓你處於一些專業編程之外的顯着劣勢分學科。

0

除非應用程序需要,否則您通常不會對數學有深入的瞭解 - 例如,你正在編寫財務軟件,或者做一些3D建模,在飛機上進行負載均衡,編寫一些定製的壓縮算法等。我曾與那些努力使用簡單數學的優秀開發人員合作。知道謹慎的數學似乎非常具體。理解各種算法的工作原理可能會有所幫助,如果你能做到這一點,那麼你無法構建最佳性的證明並不重要。

說實話我認爲最重要的是瞭解你正在構建的業務,你方法如何編寫代碼(可讀性,模塊化等)

9

是。

我發現離散數學是計算機科學的核心。理解集合論,布爾代數,地圖等對開發者都是有利的,並且都是離散數學的一部分。

當然,這些概念在大多數學術意義上並不總是適用的。你將幾乎從不打開你的離散數學教科書,並將一些東西拷貝到你的代碼中來解決問題。但是,理解這些概念將有助於開發人員編寫更好的代碼,更好的算法並更有效地使用設計模式。

+1

好吧,但是軟件開發是計算機科學核心的知識。我不相信。 – 2010-09-06 01:24:44

+3

我相信是的。也許不是每個開發者都需要CS背景,但每個項目都需要。我的工作需要採取可能非常複雜的客戶需求,併爲他們找到優雅的解決方案。沒有CS學位,大多數人會在這項任務中失敗。當我完成後,我將設計轉交給外包組,基本上完成了代碼。他們不理解CS,離散數學等 - 但我確實。 – 2010-09-06 12:21:05

+3

不得不說,我同意John Saunders的看法,這取決於你在做什麼,如果你正在用高級動態語言進行開發,那麼關於CS的錯綜複雜的知識可能不是必需的,語言水平越高,更簡單的是,它變得更加複雜,確保它們在機器使用方面的效率較低,但這是提高程序員生產力的一個折衷方案,它取決於哪種類型的項目能夠確切地說出一個in深入瞭解CS的知識確實非常必要。 – Rick 2010-09-07 07:50:12

0

離散數學的一些知識可能有一天會幫助你停下來,然後花費大量的時間試圖編寫一些數學上不可能的或NP複雜性來解決的問題。當某些提出的軟件問題或解決方案路徑更類似於簡單的作業分配或您班中沒有人完成的那些任期項目之一時,您將獲得更好的「感覺」。

1

你有機會解決問題的種類取決於你知道的。

如果你只知道四年級數學,你只會被要求解決涉及數學的四年級或更少的問題。

如果你渴望做更多或理解其他算法的基礎,你必須學習任何數學是必要的。

我想你會發現,通過卡住的點來改善你的數學,你對所解決的問題的欣賞,以及將你學習的數學擴展到新領域的更好機會。

令我噁心的是,聽到人們立即貶低他們覺得困難的地方,好像證明他們不願意推翻無知和鬥爭的痛苦。學習任何新技能需要你通過這個障礙,無論是數學還是其他任何東西。我建議你留下來,並向自己證明,通過抵制放棄的衝動,你可以掌握一些難題。

1

您已經發現離散數學的結果在編程中很有用。我的經驗是,理解爲什麼有用的東西,而不是試圖簡單地遵循它,讓你找到並解決許多錯誤和誤解。它還使您能夠處理幾乎但不完全像教科書中的情況一樣的情況,並且瞭解何時教科書的答案不再適用。花費時間去理解即使你可能使用或工作的東西的一小部分也不會被浪費。

0

這取決於你在說什麼離散數學的一部分。當然,認識數學總是有利的......但是我認爲了解離散數學的某些部分不僅是優點,而且對於開發人員來說非常重要(當然,這取決於他/她工作的項目) 。

但是主題,如:

  • 集理論
  • 圖論
  • ALG。分析
  • Alg。複雜
  • 排序
  • 等...

是爲開發至關重要。

相關問題