天天看點

讀《建構之法》(部分)有感

讀《建構之法》(部分)有感

講軟體工程的書有很多,筆者很慚愧,并沒有讀過多少。不過在讀這本書的時候,也感到了其與其他此類書的差别。寫軟體工程的書,很多都太過注重“工”字,讀起來感覺不如這本有活力,這本書像是一個在軟體企業多年的人面對面向你講述他這些年的感觸與經驗,他有一套連貫的思維,更加注重“人”而不是“工”。

由于之前并沒有對軟體工程有比較完整的認識,思維一直停留在程式的表層,是以剛開始讀時感覺不能很好的了解。在讀的過程中,有很多書中的概念與思路與自身所認識的有偏差或沖突,停下來思考又沒有得到恰當的答案,于是我又往前翻頁……這種讀法效率實在太低下了,而且并沒有讓我學到一些東西,反而陷入了自我糾結的誤區。

然後我找到了原因,這類介紹某種思維體系的書要知道他在說什麼,首先你要按着他的思路走,因為我一直遊離在外面,是以不能很好的了解。那麼我就接着往下看了。

第一章     概論

問題:需求分析階段,怎麼判斷使用者需求是否合理?那些看似雞肋的需求到底要不要設計呢?

“顧客有各種需求,有些靠譜,有些不靠譜;有些容易做到,有些難以做到。軟體團隊需要從需求分析開始,把合适的需求梳理出來,然後逐漸展開後續工作,如設計(軟體架構)、實作(寫資料結構和算法)、測試,到最後釋出軟體。”

在概論這一章中,提到軟體團隊在進行建構時,首先就要考慮到使用者需求的問題。作為一個個使用者,自然是希望自己所用的軟體功能比其他軟體都要好。本書在提到民用飛機功能的需求時,考慮安全性的問題,設定了該項功能,雖然被使用的機率很低。這種需求在每個領域都适用嗎?我覺得不是的。有些軟體設計了太多的功能,看上去是迎合了各類使用者的需求,但因為内容太雜,大多數使用者很嫌棄這種冗雜的界面和複雜的操作。但也有軟體靠着這種功能得到了使用者的青睐。

在通過網絡搜尋之後,我發現需求分析往下分還有業務需求,使用者需求,功能需求,非功能性需求。一個優秀軟體需求分析師,要有業務能力的同時,還要有技術背景。網絡上有很多從業人士認為,要在技術部呆兩年,再在産品部呆兩年,做需求分析師才行。如此可以了解到,需求分析在軟體工程流程中的重要地位。那麼,考慮到這個問題的複雜性,就談那些而被認為比較雞肋的功能吧。翻看手機短信時,我發現短信現在竟然可以發送視訊和圖檔,這些都是用流量的。在智能手機普及的現在,用微信和qq比用短信友善多了,還有各種小功能,還省錢,為什麼在一部智能手機上還會有這樣的功能呢?看上去什麼都能發,很符合使用者的需求,但從實際使用上看,這真的是符合需求嗎?

問題:在軟體工程專業搞理論研究有必要嗎?

談論到軟體工程與計算機的關系時,作者言計算機科學子領域的劃分有偏理論的,也有偏實踐的,與軟體工程有很多的交叉領域。而軟體工程則是毫無疑問的實踐領域。“計算機理論的進展會幫助軟體工程;軟體工程的進展會幫助計算機科學家更有效地進行實驗和探索。”那麼,軟體工程存在學術派嗎?既然計算機科學已承擔了理論研究,那麼軟體工程還需要這方面的人才嗎?

在知乎等論壇上,有不少人在軟體專業将來的選擇上很迷茫,尤其在考不考博之類的問題上。這就是研究還是做工程的問題吧。“想走科學研究這條路的,應該選計算機科學與技術專業”“軟體工程就是做工程,搞什麼學術啊”“搞軟體工程學術研究還是很有前景的”大家都有不同的想法。我在想,軟體工程的學術研究是否和計算機科學相同呢?既然重點在與做工程,那麼考博會不會沒有什麼必要呢?若都是在研究某方面的,選擇計算機科學比軟體工程不會更好嗎?

第二章     個人技術與流程

問題:什麼是API?

不止一次看到API這個詞了,查了一下它的意思,百度百科是這樣說的。

“API(Application Programming Interface,應用程式程式設計接口)是一些預先定義的函數,目的是提供應用程式與開發人員基于某軟體或硬體得以通路一組例程的能力,而又無需通路源碼,或了解内部工作機制的細節。”

這與我先開始想的不同。在第一章中,論及軟體企業的商業模式時,“如果有人要開發社交網絡軟體,同時提供API讓别人能二次開發……”。于是,我便把它想做軟體中的一個功能,一段特殊的程式。第二章中又在單元測試中提到要對API進行測試,又要讓對方明白API的語義,了解API。我就不是很懂了。

接口在我想象中類似于插頭的插孔,強調兩者的對接,有人把它了解成一個辦證的視窗,可我怎麼想都覺得很抽象,不是很懂。

第十六章 IT行業 的創新

問題:使用者忠誠度是否可以通過一些“小手段”來提升?

“在使用者中招募粉絲,讓粉絲有參與感并整合到市場推廣中。”

一件産品剛出世時,它不可能生來就有無數使用者忠誠擁護,像是一款沒什麼名氣的香水,很多情況下獲得熱度都是來自于它背後的推手。明星為了獲得關注與人氣,其經紀公司會買水軍,很多人恰是在水軍的影響下才知道這個明星,成為他的死忠粉。

那麼使用者忠誠度可不可以在前期用買水軍的方式獲得?在很多年前360與騰訊的戰争中,也有不少引導輿論的兩方水軍,無形中造出來一批忠實使用者,這種行為是否違反軟體到的規範呢?

本書的英文名為《Build To Win》,正如作者所說,是面向市場的,是以在讀書時能感到一種商業化的模式,側重點也是更偏于實踐中的問題。同時他十分注重團隊而不是個人,是真正把人放在團隊中考慮,要求作為一個軟體工程師在軟體開發流程中該具備的能力。相信在一個學期的學習後,我們會對軟體工程有一個較為完整的認識。