什麼推動軟體開發的進步?

2021-08-25 15:08:32 字數 1947 閱讀 1642

有人說,軟體大牛們都是懶人,因為懶而發明新的事物,以便讓大家懶得有利,懶得有成果。還有人說是熱情,激情什麼的?聽起來是不是太正面了!

其實,還有一種可能,也許更加令人信服的可能——關鍵在於人心的差異——不管是什麼東西,只要不是自己做的,就總是能夠挑出毛病,看到不喜歡——程式設計師總是希望創造新的,而不是維護舊的。

」windows

革命簡史「

一文(自己搜尋)就是這樣的一篇文章。無論是

dde,

ole,

com,

atl,

activex

的任何一項技術,之所以會發生,其原因都在於「這個東西有乙個致命的弱點:它(它們)

​​​不是我們做的…」

,相比那些堂而皇之的理由,「不是我們做的」似乎更加直指人性,讓人們

​​更加容易相信。所謂的文過飾非,我想說的就是這乙個意思吧。

這樣的說法也可以解釋很多現象。比如歷史悠久,相容性非常好的

c語言(至今還在語言兵器譜上前一二位徘徊)

,c的最大優點是歷史遺產豐厚,支持者眾多,很多語言,資料庫,工具都支援c語言

。而它的最大缺點則是:很基本的元素都沒有,比如

string

型別,boolean

型別,更不要說豐富內建的資料結構了

;模型太過簡單,當遇到稍微複雜的問題時,必須通過拼湊的技術來完成。以模組技術為例,

include

乙個檔案,為了避免重複包含,需要通過

#ifndef *** #define xx i

來處理。在比如編譯

lib檔案,需要用

#pragma comment lib

之類的非常晦澀的巨集——這些都應該是語言本身支援的啊。在60

年代到90

年代,語言數量達到了幾千種,大量的牛們為了成為某某語言之父而殫精竭慮,卻沒有考慮到如果大家的力量集中於

c語言或者幾種語言上對整個

it行業更加有利。比如

go語言在

2009

年贏得了很多人的關注,可是go和

c並不相容!

zimbu

也是。依我看,很多新語言的發明者儘管有冠冕堂皇的解決某個問題的理由,其實潛在的規則依然還是:它們(其他的語言)不是我做的。大量的語言的存在照成的問題比解決的問題更多——沒有那個行業如同軟體行業那樣,讓巴別塔大行其道,大量的相同業務的系統用不同的語言,利用不同的

api重複的發明出來。

我還記得愛因斯坦和波爾為了量子理論整整辯論了

12年,愛因斯坦的頭腦,如果真正沉下心來研究量子理論,不會花費那麼長的時間,不得不讓人懷疑,他是不是也有同樣的潛台詞

​。大賢大哲都是如此,我們又會如何呢。很多領域都是如此,我的乙個朋友,也是前同事,曾經給我說到另外乙個前同事對我的看法:「以前他非常不喜歡你,覺得你管的太多,而當他自己也在帶幾個人的時候,他覺得管人真的很麻煩,然後回顧到我們一起的時候,他說你真的很厲害,很有方法」。管理方面也同樣在不但的重演著這一切。

​​依我看,改變這一切是很難的,而利用這一點就會輕鬆很多。難道不正是人類的豐富多彩的差異讓社會得以進步嗎?一向以來,程式設計師之間的差異是缺乏溝通的,如果程式設計師看到不爽的**,往往並不好意思直接提給作者本人,但是在背後卻會發表意見:「什麼破玩意,如此難用,不如自己做乙個」。通過正式的**評審,可以表現出這樣的差別,從而在溝通中得到雙贏的局面。從心理學角度來看,評審的好處是:

1. 看到差別,會自然的引起大家的思考,促進溝通

2. 能夠參與產品的設計,提出自己的看法和溝通,對不滿者也是乙個心理的釋放

沒有爭論就沒有創造。太過和諧的環境,往往是缺乏創新的環境。語言這裡打的熱鬧,才有程式設計師的舒服。

sql這裡表面上有競爭,其實是

oracle,s

qlserver

兩家獨大,形成了寡頭的局面。他們兩家假裝競爭,其實各自有自己的地盤。沒有衝突,這就是為什麼這麼多年來sql語言進步甚少的原因。

貓兒的毛要順著摸,對人類的天然缺陷(或者說特質)也是如此。

什麼是軟體開發

有乙個銷售的同事在會議上說,你們軟體開發人員真好,坐在電腦前打打 就可以完成工作了。還有一些對軟體開發不懂的老闆說,你們軟體開發不就是寫幾行 就可以了嗎。可見,沒有深入軟體開發的了解,永遠都是這麼膚淺的認識。其實軟體開發總共有11個過程 定義問題 需求分析 規劃構造 軟體架構 詳細設計 編碼與除錯 ...

什麼是軟體開發模式

軟體開發模式又稱開發范型 風範 具體描述如下 開發過程遵循的步驟 如面向過程的開發模式是對特定問題執行過程自頂向下層層分解,並定義成由一系列步驟構成的演算法,落實到可執行的 上。物件導向開發模式首先考慮的是參與到問題物件上 實體 為完成任務各個物件如何進行通訊協作,最後進一步將物件封裝可以執行方法,...

什麼是程式設計?什麼是軟體開發?

在學校裡,為了實現課堂練習,為了完成作業,為了實現而實現的 過程,我將其定義為程式設計,這個時候,你只要正確的讓編譯器把你的 順利的編譯通過,輸出你希望的或者說你的導師希望的結果即可,你不需要考慮彈性 擴充套件性和維護性,也不需要考慮你的 是否強壯,也不需要考慮是否具有價值,因為你只是在程式設計。而...