在這個系列部落格的第一篇中,首先要涉及到的哲學原理就是——世界的本原是物質。
在IT領域,有硬體和軟體之分,而二者之間的關係,就和物質與精神類似。沒有硬體的存在,那麼軟體就沒有能夠發揮作用的基礎支援了。所以,我們會看到,硬體的作用非常重要,即便是我們只從事軟體開發,也需要對硬體有足夠的瞭解,這也正是計算機軟體專業的學生也需要學習計算機原理,計算機網路等等課程的原因所在把。
硬體的不同,有時候會在很大程度上決定執行其上的軟體,比方說,在不同體系結構的計算機硬體上,所能夠執行的軟體會受到限定,比方說,計算機會分為微型計算機、小型計算機、大型計算機等等,上面執行的軟體,從作業系統到各種應用軟體,都會有很大的區別,這也是由於每種計算機所要完成的工作也是不同的。再比方說x86架構和RISC架構的計算機,軟體執行的方式也不盡相同。很多大型軟體,像Linux、Oracle等等都需要針對不同的架構來開發出不同的軟體。
在解決問題的過程中,儘管我們是開發人員,大部分的時間只會和軟體打交道,但是對於特定的問題,也要關注硬體。比方說效能問題,根據摩爾定律,硬體更新的速度非常之快,所以在很多時候,大家都希望透過從硬體的角度來解決,軟體執行的速度不夠快,那麼我們就換更好的CPU,甚至是四核、八核的,提高平行計算的速度,或者加更多的記憶體,讓更多的程式在記憶體中執行,或者把磁碟換成固態的硬碟等等。這樣的手段在某些情況下會很有效,起到立竿見影的效果,而且購買這些硬體所需要付出的成本,遠遠要比一個程式設計師修改程式、從軟體的角度調優的成本要低得多。
然而,我們又不能夠把所有的效能最佳化問題都交給硬體工程師來解決,那樣軟體工程師不就失去了存在的價值嗎?很多時候,我們在編寫程式的時候就應該關注效能的問題,從開始的時候就避免因為程式的編寫而造成效能問題。比方說,因為各種裝置或者的速度大概會是:網路 < 傳統硬碟 < 固態硬碟 < 記憶體 < 快取記憶體,這樣我們在編寫程式的時候,就應該儘量避免網路傳輸的頻率和數量,比方說應用伺服器和資料庫伺服器是透過網路連線的兩臺獨立的計算機,那麼就應該在往返一條指令的過程中,在一臺伺服器上做更多的處理,而不是過於頻繁地在兩臺伺服器之間傳遞資料。而且在二者之間傳遞資料的時候,要儘可能地節省,只傳遞必要的資料,而不是眉毛鬍子一把抓,傳遞了一大堆沒有用的資料,這樣就會產生大量的浪費。
硬體和軟體是密不可分的,而且硬體是看得見摸得著的實體,而想要一個人認識到軟體,就有一些抽象了,它們只不過是存在於計算機中的“1”和“0”,因此就會產生這樣的情況,人們願意為硬體付費,但是卻不願意為了軟體花錢。很多人願意花1萬元購買一臺昂貴的計算機,卻不願意花30元購買一個小軟體。這對於程式設計師群體是一種悲哀,因為那就意味著大家的勞動成果沒有得到認可,畢竟錢也是對價值的一種體現。所以,在很多專案中(特別是國內專案),廠商都喜歡採用硬體和軟體搭配在一起銷售的方式,因為只有見到了硬體,才認為自己的錢花的值得。更可笑的是,為了證實自己的硬體有價值,廠商們可能會把本來可以做的很小的裝置放在一個龐大無比的鐵箱子裡,那樣才能夠賣得出價錢——這鐵塊兒也太值錢了吧,哈哈。
因為同樣的原因,還有一些廠商喜歡把軟體的功能整合到硬體之中去,把原來的賣軟體變成了賣硬體,比方說大家最為熟悉的防火牆,有硬體防火牆,也有軟體防火牆,其實二者的功能以及執行機制上都是類似的,但是銷售起來卻完全不是一個概念了。
在現在流行的移動開發中,硬體對於開發者的影響也非常大。iOS的開發者很幸福,只需要針對一種或者幾種裝置開發應用就好了,而Android的開發者就比較悲催了,光是主流裝置的種類就夠頭疼的了,更不用提各種各樣的山寨機了,儘管現在有不少網站提供了虛擬測試的環境,但是很多功能只有用具體的裝置才能夠測試出真正的效果。因此,現在才會有HTML 5技術會更為流行的說法,這樣開發者就不需要去適配各種各樣的裝置了。然而這又會導致另外的問題,原生的應用和基於HTML 5的應用,不論從開發方法還是從各種使用方式來說,都會有一些區別。
軟體的確會受到硬體的各種限制,同時,沒有軟體,硬體也就沒有用武之地了。想要讓一個硬體發揮出真正的作用,需要大量軟體的支援,比方說我們的計算機中會安裝作業系統軟體、辦公軟體、開發軟體、遊戲軟體等等,每種不同的軟體都會為我們的工作提供不同的便利,有了這些軟體,我們的工作和生活才會變得如此美好。
總之,硬體和軟體的關係,與物質和精神之間的關係類似,硬體決定了軟體,反過來軟體也會讓硬體體現出存在的價值,決定硬體所能夠起到作用的效果,二者是密不可分的。
文章轉自:http://www.cnblogs.com/houbowei/archive/2013/02/28/2936146.html