什麼是軟件開發?

  有人問我:「什麼是軟件開發?」。回答這個問題前,咱們須要先理解什麼是軟件。微信

1、軟件定義

  關於軟件,一些優秀的人已經給出了簡單易懂的定義,舉個例子:工具

  軟件是計算機系統的一部分,它適配各類不一樣用途的機器。例如,經過同一臺計算機但不一樣的軟件,咱們能夠玩遊戲、計算繳稅、寫信或者寫書,以及得到約會邀請的答覆。測試

—— 傑拉爾德·溫伯格優化

  這句話是做者解釋給他的朋友的,他的朋友是一名電腦小白。編碼

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

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

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

  讓咱們簡化一下。開發

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

  目前看起來不錯。

  假若你聽過「一切問題都是人的問題」這句話,而且願意相信它,那咱們就能夠接着簡化。

  軟件開發解決人的問題。

  這個定義充滿了敷衍的味道。若是你敢向你的女朋友這麼解釋,她大抵會提到「你是不不愛我了」之類的話題。

  回到正題,它好在足夠籠統,把全部的細節概括爲「人的問題」,一言以蔽之,至少不會有多大誤差。

  關於什麼是「人的問題」,咱們沒法一一列舉。但經過下面的例子,也許能夠窺探到一些奧祕:早在 1995 年,有人便以爲軟件開發要解決的問題陷入了困境。

  咱們遇到了史無前例的困難,不知道在作出電子表格(Excel)後,計算機還能夠用來作什麼。

—— 查爾斯·西蒙尼

  從今天來看,這個觀點頗失謙遜,軟件行業歷來沒有止步於表格處理程序。固然,咱們不是要批判什麼,它是用來引出如下軟件開發的三點特性。

  「人的問題」不可預料。

  世界在改變,人的需求也是一直變化的,咱們不知道下一步會發生什麼。值得一提的是,有時咱們甚至不知道過去發生了什麼。

  「人的問題」具備延續性。

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

  「人的問題」具備複雜性。

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

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

 2、軟件複雜性

   隨手翻開一本介紹軟件工程的書,你都會看到它會說起復雜性。軟件複雜性的本質是,現實世界是無比複雜的。至於現實爲何是複雜的,不在本文討論的範疇。本文更關心的問題是:

  是什麼讓軟件變複雜的?

  咱們在上文提到「軟件是運行在計算機裏的系統」,這裏直接給出系統的通常定義:

  系統是對世界的一種觀點。

  你可能一時沒法接受這個它。

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

  抽象意味着要從繁複的具象世界裏剝絲抽繭,不一樣的抽象就會產生不一樣的系統。

  觀點或者說抽象能夠簡單也能夠複雜。

  一個軟件從無到有,愈來愈複雜,根本緣由就在於特性不斷增長和改變,不一樣角度會產生不一樣的觀點。

  舉個食品行業的例子。

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

  管理層但願業績進一步提升,具體到研究部門,目標是調製出更好吃的配方。

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

  公司董事決定開會。

  「咱們生產的食品更好吃了嗎?」

  「固然,咱們的銷售額增加達到了 30%。」

  「可是咱們的顧客不這樣說。」

  「他們只是不肯意改變!」

  再舉個例子,打開你的手機,各種軟件源源不斷地彈出新聞資訊類消息。大部分軟件工具成熟之後,再也不願意僅作好它的本職工做,當你使用一個小衆 APP 時,你能夠親眼見證它從小而美到臃腫不堪的歷程。

  這是複雜性的一面,面對它,咱們惟一可以作的就是「不要多餘的特性」,它有個經典表述:

  不要過早的考慮優化。

  回到上面的故事,也許那家公司什麼也不作,銷售額一樣會上漲。

  你能夠能會質疑「說的輕巧,咱們總不能什麼都不作?」

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

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

  付出什麼,就要準備好獲得什麼。你願意付出多少薪資僱傭員工,你願意增長多少特性,你願意採用什麼樣的解決方案,你願意爲這個 Bug 留出多少工做量。

  拿出什麼樣的籌碼,是真實擺在咱們眼前的問題。

 4、什麼是軟件開發

  如今,咱們能夠正式回答這個問題了。

  首先,「預料」對方真正的目的是什麼?

  1. 對方只是隨口一問。

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

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

  4. 其餘可能性。

  對於項莊舞劍;意在沛公,你翻開和老媽的微信聊天記錄,閱讀一番《不得不看,職場新老手都有用的一百條話術!》,基本能夠應付了。

        至於第三種狀況,先給他來個含辭模糊的定義,好比

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

  通常地,對方發現本身聽得雲裏霧裏後,就會識趣的中止這個話題。但也有可能,尤爲是碰到其餘領域的工程師時,會引出更爲具體的問題。

  不幸的是,有時候問題根本就不存在,正以下面的寥寥數語,它會讓你全部準備好的說辭付之流水。  

  「工做忙嗎?」

  「還行。」

  「天天都幹啥?」

  「主要是寫代碼。」

  「不懂,據說挺累的。」

  「有時候是累,工做不都這樣麼。」

  「嘿,說的也是。」

相關文章
相關標籤/搜索