2023年,美國加利福尼亞州發現金礦,人們從世界各地湧向這裡,一時形成淘金熱。一位做紡織品生意的猶太青年商人列維·司特斯(levi strauss)靈機一動,將滯銷帆布製成幾百條褲子到淘金工地推銷,意想不到大受歡迎。這就是全世界最受歡迎的牛仔褲品牌levis。
去挖金礦的人是否都找到了金子我不知道,但levi因為牛仔褲大賺了一筆是事實,不然也就沒有現在levis品牌了。
軟體工程(software engineering)解決的是如何做好軟體開發(software development)的問題,使用來自於科學,經濟學,社會學以及日常中總結的各種方法,經驗來幫助軟體開發團隊做好軟體。說得好玄乎~~~實話實說,我也是今天才仔細琢磨了一下這個定義,翻譯過來好高大上。不過話說回來,琢磨一下自己幹的事兒,這些玩意還真都用得上。
好吧,我們先來看看到底什麼是軟體開發。
軟體開發不就是把軟體做出來麼?這有什麼可解釋的?那我們比較一下同樣是把一件東西做出來,軟體開發和製造一輛汽車的過程有什麼不同麼?
乙個汽車工廠裡面積最大的部分應該就是生產線了,在這個生產線上要完成所有零件的組裝。如果按照這個思路去看軟體開發,那麼所謂的生產線就是「編譯打包」或者說「持續整合」過程。你一定要問,為啥不是寫**的過程?因為在**寫出來之前,軟體都處於設計過程,「零件」還沒成型啊!你想想,上了生產線的汽車零件還允許工人現場打磨一下,修改一下尺寸嗎?如果是這樣,這個車你敢買嗎?但軟體的生產過程中的大部分時間,以及基本上所有參與者(包括寫**的程式設計師)都在進行設計工作,都是設計師,而不是工人,真正完成裝配過程的「工人」是編譯器,ci系統等已經高度自動化的程式。
這就是為什麼管理程式設計師不能像管理工人一樣,因為你需要他們去創造,而不是拿著做好的東西進行裝配。同時,軟體開發的本質也就決定了用管理工廠的思路來管理軟體開發是行不通的,這也就是為什麼用「瀑布」模式來管理開發過程會很彆扭。
那麼如何做好軟體開發?那就是本文的重點,你需要一條怎樣的牛仔褲?
先講乙個關於電廠的故事,這個故事來自於
記得有個給我們上培訓課的主講老師是個鬚髮皆白的老先生,進門後掏出一堆零件放在講台上, 一盞酒精燈、乙個小水壺、乙個葉片、乙個銅光閃閃的小電機、一盞小燈泡。 老先生往壺裡倒了些水,點燃酒精燈,不一會兒水開了,從壺嘴裡噴出了蒸汽,帶動葉片旋轉,然後小燈泡就亮了。安全和效率就是工程技術的本質,在軟體工程中,我們對「安全」的理解會更加寬泛,可以換做「質量」。他說:這就是電廠。
他還說:如果燒的是煤炭,這就是燃煤電廠;如果燒的天然氣,這就是燃氣電廠;
如果獲得熱能的方式是核裂變,這就是核電廠;如果帶動葉片的能量來自水從高處流向低處,這就是水電廠。
老先生說:你們或許會問 「那我們看到的電廠怎麼這麼複雜」,答案其實很簡單, 電力專案需要複雜系統的目的,一是為了確保安全(safety),二是為了提高效率(efficiency)。
既然開發過程的大部分處於「設計」階段,那麼也就意味著在上生產線進行裝配(編譯打包)之前,軟體一直處於不確定狀態,因此傳統的確定需求,完成設計,確保100%按照設計執行的思路是行不通的。我們必須找到適合軟體開發的工程技術,這才出現了敏捷開發,極限程式設計,scrum,kanban等等;這些方法的本質都是要構建乙個高度自適應的系統,以便適應這個不確定狀態,所以軟體開發中的效率問題的解決不是傳統的標準化流程的思路,而是不停變化的思路,乍聽上去會覺得乙個不停變化的系統怎麼會效率高呢?當然,最高效的系統一定是步調一致,統一執行的。軟體開發系統其實也是這樣,只是這個系統從乙個高效狀態到另外乙個高效狀態的轉換是非常快的,可以說是在隨時變化的。
解決了效率問題,我們來看看質量。什麼是質量?我們再來講乙個故事:
一位老者去理髮店剪頭髮,第一次去的時候理髮店的店員非常熱情,端茶送水,幫老者洗頭,剪髮,吹乾,然後畢恭畢敬的送老者出門,收了30元的費用。老者很滿意,過了1個月又去了這家理髮店,這次店員沒有迎來送往,只是剪了頭髮,也收了30元費用。老者雖然心裡不高興,但是頭髮是剪了,也算是ok了。又過了1個月,老者又去理髮,這次店員再次笑臉相迎,全套服務,老者很高興地走了。再過了1個月,老者又去,這次老者對著店員提了乙個問題:我這30元到底買到的是什麼服務?我們再來舉個例子:全世界質量最好的汽車是豐田汽車,但你知道為啥是豐田汽車嗎?那是因為如果你買了一輛質保3年10萬公里的豐田汽車,在第4年/11萬公里的時候它出現問題的機率比其他廠商的品牌要高!對你沒聽錯,要高!
結合這2個例子,你應該會理解質量到底是什麼了?雖然作為消費者,你會覺得這個豐田車質量定義有點無法接受,但是高質量永遠不是在造萬年船,永遠是在一定範圍內定義的標準,而高質量就意味著偏差小。
軟體開發中,制定標準並持續的檢查偏差就是保證質量的思路,這裡面有很多方法,如:持續整合,測試驅動開發,編碼規範,完成規範,流程規範;甚至包括自動化部署,雲計算環境的使用等都和質量相關。但是要提高質量,則在標準和檢查的基礎上還需要「持續改進」。有人問,測試那裡去了,測試不是提高質量的方法嗎?其實測試只解決了「檢查偏差」的問題,要提高質量,以上3個要素缺一不可。
還有一些如微服務架構,soa,可測試性,可部署性的軟體架構思路也都和效率和質量相關。
關於牛仔褲你一定要知道的16條
關於牛仔褲你一定要知道的16條 1 買牛仔褲,褲腰處留出3厘公尺左右的富餘.下次買牛仔褲,你可以並不卡著腰買褲.3厘公尺左右的富餘能夠讓你的仔褲正好吊再髖骨上,就像你看到ck廣告模特一樣 另外,你坐下的時候也不怕把扣子崩開.2 牛仔褲買長不買短很多牛仔褲會再洗後縮水,所以你賣牛仔褲的時候應該買稍微長...
查詢資料的上一條和下一條
查詢當前資料的下一條 select from 表 where id 當前資料的id order by id asc limit1 查詢當前資料的上一條 select from 表 where id 當前資料的id order by id asc limit 1 查詢當前資料的下一條 select f...
你只跟你自己同在一條船上
今天自己翻了下自己的外部郵件,看到之前自己給自己寫的一句話 你只跟自己同在一條船上 我想,應該是當年歌華事件秋後算帳的時候寫的吧 我應該牢記這句話才是 今天本來想用手機銀行還信用卡的,可惜登入密碼竟然給忘掉了 唉,又不好浪費流量,只好上了一會兒 跟 和前同事 打了個招呼 告訴 我也來到她之前的小組,...