2009-12-07 82 views
4

有一天,我對我期望軟件運行的硬件幾乎一無所知。我已經做了大約5年的開發工作,但自從離開大學後,我一直沒有關注硬件理論/設計。我甚至不再製造我自己的機器,因爲,誠實地說,我寧願支付額外的幾塊錢,讓Comp Sci退出在我的店鋪建立它。平均開發人員應該知道裸機需要多少錢?

雖然它有一個什麼樣的引擎蓋下怎麼回事,它的抽象的基礎知識有很好的理解,使遠離我們作爲開發者,我們真的不需要用Programmed I/OMemory-Mapped I/O等錯綜複雜假惺惺顯然很重要,..

或者我們做?

請注意,我在這裏談論你的每日LOB開發,而不是專門的裸機。

因此,定義'平均'你將如何,但總體而言,一個勝任的程序員能夠潛入多深?

+0

什麼,YAGNI在這裏不適用? ;) – Benjol 2009-12-07 12:39:54

+0

其實我很確定YAGNI非常適用,但爲了自我改善的利益... – Stimul8d 2009-12-07 13:39:34

回答

9

這取決於你的發展水平有多高。

  1. 如果您爲嵌入式系統開發,這意味着很多硬件知識(接近EE級別)。
    • 如果您在某些專業領域,比如遊戲的低級3D圖形編程,您應該知道特定圖形卡的來龍去脈。
    • 如果你正在做web或桌面應用程序,可能不是那麼多。

但在所有的發展,你應該知道的基本知識。例如,

  1. von-Neumann架構的瓶頸在哪裏?
    • CPU緩存如何工作(在多線程中很重要)。
    • 操作系統調度在單處理器多處理器CPU上將如何不同(再次,在多線程中很重要)。
    • IO的工作方式以及爲什麼當您寫入文件並不一定意味着您的數據立即持久。
    • IO有多慢,爲什麼大多數數據庫應用程序都是IO綁定的。
    • 爲什麼網絡比IO更慢,更不可靠(而無線網絡更是如此)。

在另一方面,我不認爲知道具體喜歡什麼內存映射IO是,或知道NAND和NOR閃存之間的差異,平均*非常重要(桌面/網絡)開發人員。即使對現代CPU架構的瞭解也可能會成爲一門科學,看看它們在過去幾年中的複雜程度,更不用說code emitted by modern compilers is becoming more difficult to predict(鏈接文章顯示,現在更難超越編譯器在低級優化)。就像幾十年前的汽車修理工更容易一樣,今天並不是很多人會嘗試自己修理汽車。

**的「平均」的定義可能會有所不同。*

+0

+1。我也想*強調*在各個層面上的記憶速度差異的知識。一級緩存,二級緩存,內存,驅動器緩存和硬盤的速度。另外,旋轉磁盤的順序可能會非常快,但閃存磁盤如何可以快速找到。 – 2009-12-07 12:00:33

+0

這對我來說是一個足夠全面的答案。歡呼的夥計。 – Stimul8d 2009-12-10 14:00:33

3

這當然是可能的,無需瞭解底層硬件做任何度日。然而,即使知道例如緩存的工作方式以及在特定目標機器上哪些操作是快速/慢速的,也可以幫助您在設計軟件時做出更好的設計決策。

就我個人而言,我認爲知道如何機器,我花一天工作至少10小時有非常滿意;)

然後又爲什麼定居平均?

3

我覺得能夠理解編譯器發出的彙編語言非常有用,在我的例子中是C++。這在考慮優化問題和解決困難的調試問題時非常有用。

2

在很多情況下,您不知道您的程序將運行在哪個硬件上,因此關心一臺機器的某些特定細節是沒有意義的。用戶可能會在某些64位RISC硬件上的虛擬機上運行Win32可執行文件,誰知道。除非您確定知道目標硬件,否則最好使用操作系統和標準庫提供的抽象,並按預期使用它們。相信構建操作系統的人員,編譯器和庫可以正常工作。

1

操作系統開發人員爲了抽象底層物理世界做了出色的工作。他們的目的是爲普通開發人員提供與許多硬件通用的接口,以便他可以專注於其應用程序並開發可移植,易於維護並能夠獲得操作系統更新優化的代碼。

因此,對於普通開發人員製作平均應用程序,我認爲最好不要問太多關於硬件的問題。

+2

我第一次見到它表明缺乏技術知識是件好事。 – 2009-12-07 10:51:49

+0

我的觀點並不是爲了防止人們學習!它是關於專業化,授權和關注的有效手段。 – mouviciel 2009-12-07 12:24:29

+0

@尼爾,他們說無知是幸福的... – Benjol 2009-12-07 12:38:55

相關問題