軟件=程序+軟件工程算法
軟件企業=軟件+商業模式數據結構
工程師的宗旨是:我構建,故我在架構
程序在這裏指的是源程序,就是一行行的代碼,它們是創建在數據結構上的一些算法。程序對數據進行操做,工程師把它們構建爲機器能懂的可執行代碼。構建不單單是cc和link命令,一個複雜的軟件不但要有合理的軟件架構、軟件設計與實現,還要有各類文件和數據來描述各個程序文件之間的依賴關係、編譯參數、連接參數,等等。這些都是軟件構建的過程。學習
軟件工程:和軟件開發活動(構建管理、源代碼管理、軟件設計、軟件測試、項目管理)相關的內容,是軟件工程的核心部分。是把系統的、有序的、可量化的方法應用到軟件的開發、運營和維護上的過程。廣義上的軟件工程也包括用戶體驗、用戶界面設計等等。是把系統的、有序的、可量化的方法應用到軟件的開發、運營和維護上的過程。測試
軟件工程的工程二字意味着它與許多工程領域的學科,以及管理學科有很大關係,創造性地運用科學原理,設計和實現建築、機器、裝置或生產過程;或者是在實踐中使用一個或多個上述實體;或者是實現這些實體的過程。
網站
軟件開發過程有如下五點的難題:spa
1.複雜性: 軟件的各個模塊之間有各類顯性或隱性的依賴關係,隨着系統的成長和模塊的增長,這些關係的數量每每以幾何級數的速度增加。操作系統
2.不可見性:軟件工程師能直接看見源代碼 ,但源代碼不是軟件自己,工程師看不到本身的源代碼是如何具體地在用戶的機器上被執行的。設計
3.易變性 :軟件看上去很容易修改,修改軟件比修改硬件容易多了。但其實正確的修改軟件是一件很困難的事情。項目管理
4.服從性:軟件不能獨自存在,它要運行在硬件上面,要服從系統中其餘組成部分的要求,服從用戶的要求、行業系統的要求。
5.非連續性:許多軟件系統沒有增長輸入就能看到相應輸出增長的特性,有時輸入上很小的變化,會引發輸出上極大的變化。
軟件的行爲和用戶所指望的不同就叫Bug。而我一直認爲的是程序的錯誤,缺陷。
Bug的多少能夠直接衡量一個軟件的開發效率、用戶滿意度、可靠性和可維護性。
用戶滿意度:用戶在使用時發現了軟件的不少問題,影響了用戶使用軟件的效率
可靠性:某個軟甲常常會崩潰,某個操做系統會時不時死機,某個網站每每在最須要的時候登不上去(就好像咱們學校的EOL)
軟件流程的質量:軟件團隊的BUG
可維護性:修復了一個問題,不能另外一個問題又出來,這樣反反覆覆,浪費時間和資金。
經過本書的學習,要作到如下三點:
1.研發出符合用戶需求的軟件
2.經過必定的軟件流程,在預計時間內發佈「足夠好」的軟件(經過全隊的努力,在一個長期階段內逐步完成)
3.能證實所開發的軟件是能夠維護和繼續發展的。
咱們學習從寫簡單的代碼一步步到寫複雜的代碼,正如書上所說,我用C語言實現了二叉樹的遍歷算法,但這個程序有什麼實際用處呢?讀到後面我知道了程序(算法、數據結構)是基本功,可是在算法和數據結構之上,軟件工程決定了軟件的質量;商業模式決定了一個軟件企業的成敗。軟件從業人員和軟件企業的道德操守會極大地影響軟件用戶的利益。咱們如今分了計科和軟工的方向,書中提到了計算機科學和軟件工程的不一樣側重點,計算機理論的進展會幫助軟件工程(例如對程序的正確性分析);軟件工程的進展會幫助計算機科學家更有效地進行實驗和探索。書中說到工程師的宗旨是:我構建,故我在。雖然如今的我還不能稱爲工程師,但我必定會以這條宗旨爲目標而前進。如今咱們首先要作的是發現用戶的需求是什麼,才能根據用戶的需求去開發後續的工做。本書在無聊的概念之中插入了無數的例子,能讓我有更好的理解,這樣很好,否則只是經過概念沒法獲得深刻的理解。