2013-05-30 88 views
0

我正在學習軟件工程,我的一些課程包括計算理論和分析算法。我發現很難將圖靈機與軟件工程聯繫起來,或者只是簡單的編程。所以我的問題是:軟件工程計算機科學

爲什麼包括在計算機科學在軟件工程領域發揮重要作用的理論科目?或者如何將PDA,TM,P,NP等知識應用於開發軟件?我沒有看到兩者之間的聯繫。

+1

理論上可以填寫很多背景資料。例如,相當多的實際問題都是NP難題。認識到一個問題實際上是NP-hard可以避免很多頭痛。 – Nuclearman

回答

4

總是需要一點理論。它可以幫助你以正確的方式思考。 我知道在第一種方法中它可能看起來很孤立,但如果你能夠抓住它的真正含義,那麼你將會有這種額外的樂趣,尤其是在你的領域。

圖靈機,例如,你提到的,是一個經典的邏輯和數學模型,以瞭解的限制和機械計算以及算法的複雜性研究的潛力。
當然,軟件工程師比科學家需要更少的理論和更多的技術,但在這裏我們正在談論我們應該擁有的理論基礎。

+0

感謝您的澄清! – sameday

2

爲什麼包含這些主題有兩個原因。

  1. 正如Gengiolo所說,這些構成了理論基礎,我們應該,可以說,都有。

  2. 在試圖理解這些基本原則時,我們發展了我們的推理技巧,並將它們應用於複雜的多學科問題。

我很少使用我在學習軟件工程時以其原始形式學習的任何理論 - 甚至實踐 - 科目。但我相信,對這些原則有一個很好的基本知識,這使我成爲一名更好的工程師 - 也更加適用。

1

那麼, 軟件工程教育是有問題的。和計算機科學也。

我不認爲去學習圖靈機,會給你更多關於算法複雜性和計算極限的見解。但它們是我們歷史的一部分,我們應該瞭解它們。 至少我們應該知道Alan Turing :-)

而且很難談論軟件工程和計算機科學的「理論基礎」。 有些人會要求你解決一個NP難題,這也是不現實的。你會說:「哦,那是NP硬先生」。許多軟件開發者都在做「日常開發」任務。

所以你「對你的感覺正確」。但軟件開發不僅僅是「編寫代碼」或「學習新的熱門技術」。如果你這樣做,你會讓你的思維工具「沉悶」。 爲了讓它們保持清晰,請考慮Algoritmic Complexity,NP等問題分類和其他課程作爲思考練習。發揮你的想象力,還可以參加其他部門的其他有趣課程,比如「絃樂理論」[物理],或者理解人性爲什麼不參加「人類學」課程。:-)

事實是,我們的教育是試圖使我們的瑞士刀。從一點點知道,但不是一個真正的刀或真正的開罐器等。[沒有深刻的知識]他們認爲如果你認爲自己是一個「真正的開罐器」,你可以從「微型開罐器」開始,他們會向你展示它。