什么是軟件開發?


  有人問我:“什么是軟件開發?”。回答這個問題前,我們需要先理解什么是軟件。

一、軟件定義

  關於軟件,有的人已經給出了簡單易懂的定義,舉個例子:

  軟件是計算機系統的一部分,它適配各種不同用途的機器。例如,通過同一台計算機但不同的軟件,我們可以玩游戲、計算繳稅、寫信或者寫書,以及獲得約會邀請的答復。

—— 傑拉爾德·溫伯格

  這句話的作者是美國計算機名人堂的代表人物,他曾向一名“電腦小白”朋友做出以上解釋。

  有了上述定義,什么是軟件開發也就顯而易見。

  軟件開發研究如何讓運行在計算機里的不同系統解決人們在現實中遇到的問題。

  我們經常見到這樣的句式,試圖一句話就把事情講得面面俱到。

  不妨簡化一下。

  軟件開發研究如何讓計算機解決問題。

  目前看起來不錯,我們得到了一個相對普適的觀點。

  倘若你相信“一切問題都是人的問題”,那我們就可以接着簡化。

  軟件開發解決人的問題。

  不得不說,這個定義充滿了敷衍的味道。如果你敢向你的女友這么解釋,她大抵會提到“你是不不愛我了!”。

  回到正題,它好在足夠籠統,把所有的細節歸納為“人的問題”,一言以蔽之,至少不會有多大偏差。

  你可能會刨根問底,提問“什么是人的問題?”。於此,我們無法給出更加一般的解釋,但通過下面的例子,也許可以窺探到一些奧秘:早在 1995 年,有人便覺得軟件開發要解決的問題陷入了困境。

  我們遇到了前所未有的困難,不知道在做出電子表格(Excel)后,計算機還可以用來做什么。

—— 查爾斯·西蒙尼

  從今天來看,這個觀點頗失謙遜,軟件行業從來沒有止步於表格處理程序。

  當然,我們不是要批判什么,通過考察它,我們可以發現軟件開發所解決的問題的三點特性。

  “人的問題”不可預料。

  世界在改變,人的需求也是一直變化的,我們不知道下一步會發生什么。

  “人的問題”具有延續性。

  在 1977 年,人們開始用電子表格處理數據。在今天的辦公自動化領域,電子表格仍具有着不可替代的作用。這是值得慶幸的,總有些問題和解決方案會持續很長一段時間。

  “人的問題”具有復雜性。

  盡管軟件技術在當今的 IT 領域開花結果,人們探索出了各種各樣的成型解決方案,但開發者和開發團隊依舊面對着復雜的開發環境。

       復雜性足夠我們花費一整節的內容來闡述它,歡迎閱讀下一節。

 二、軟件復雜性

  當我們來把自然無限繁多的現象同我們理解力的局限性及我們器官的粗糙相比時,除了看到我們工作進展的緩慢,在長久的工作中不時中斷,天才的難得,連接重要事物的鏈條中斷,我們還能看到什么呢?

—— 《哲學思想錄》[法] 狄德羅

   隨手翻開一本介紹軟件工程的書,你都會看到它會提及復雜性。軟件復雜性的本質是,現實世界是無比復雜的。至於現實為什么是復雜的,不在本文討論的范疇。本文更關心的問題是:

  是什么讓軟件變復雜的?

  我們在上文提到“軟件是運行在計算機里的系統”,這里直接給出系統的一般定義:

  系統是對世界的一種觀點。(一般系統論)

  換種說法,系統是對世界的一種抽象。

  抽象意味着要從繁復的具象世界里剝絲抽繭,不同的抽象就會產生不同的系統。

  觀點可以簡單也可以相當復雜。

  一個軟件從無到有,越來越復雜,根本原因就在於特性不斷增加和改變,不同角度會產生不同的觀點。

  舉個食品行業的例子。

  一家公司以獨家配方生產一種食品,每個季度的銷售額上漲 10%。

  管理層希望業績進一步提高,具體到研究部門,目標是調制出更好吃的配方。

  研究團隊計划每個月只改動一點點,一年過去了,不斷地有顧客投訴食品不再是原來的味道了。

  公司董事決定開會。

  “我們生產的食品更好吃了嗎?”

  “當然,我們的銷售額增長達到了 30%。”銷售經理自信地回答。

  “但是我們的顧客不這樣說。”

  “他們只是不願意改變!”

  這是復雜性的一面,面對它,我們能夠做的就是“不要多余的特性”。而在保持簡單時,我們同時傾向於不做任何優化,它有個經典表述:

  不要過早的考慮優化。

  回到上面的故事,銷售額的增長不一定完全歸因於研發團隊的努力,也許那家公司什么也不做,銷售額同樣會上漲。

  你可能會質疑“說的輕巧,我們總不能什么都不做?”

  回答它,涉及到人們做決定時繞不開的一個問題。

  你願意付出什么樣的代價?

  付出什么,就要准備好得到什么。你願意付出多少薪資雇佣員工,你願意增加多少特性,你願意采用什么樣的解決方案,你願意為這個 Bug 留出多少工作量。

  拿出什么樣的籌碼,承擔什么樣的風險,是真實擺在我們眼前的問題。

 四、什么是軟件開發

  現在,我們可以再次回到這個問題了。

  首先,“預料”對方真正的目的是什么?

  1. 對方只是隨口一問。

  2. 對方想打探你的薪資,然后向你介紹相親對象。

  3. 對方對軟件行業這個話題感興趣,並想深入了解更多。

  4. 其他可能性。

        這里只分析第三種情況,先給他來個含辭模糊的定義,比如

  軟件開發通過設計、編碼、測試以及持續地維護解決人的需求。

  一般地,對方發現自己聽得雲里霧里后,就會識趣的停止這個話題。但也有可能,尤其是碰到其他領域的工程師時,會引出更為具體的問題。

  不幸的是,有時候問題根本就不存在,正如下面的數語寒暄,它會讓你所有准備好的說辭付之流水。  

  “工作忙嗎?”

  “還行。”

  “每天都干啥?”

  “主要是寫代碼。”

  “不懂,聽說挺累的。”

  “有時候是累,工作不都這樣么。”

  “嘿,說的也是。”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM