《建構之法-現代軟體工程》
首先,我們應該在自己内心先明确什麼是軟體工程?
幾乎所有程式員都知道“程式=資料結構+算法”這句名言。 但是程式就是一個軟體了麼?其實并不是,一個程式要想成為一個軟體是需要經過很多的過程的,包括需求分析、設計、測試、釋出等等的步驟,這些都屬于軟體工程的範疇,是以一個推論就是 軟體= 程式+軟體工程 。
作為IT專業的學生,如果僅僅精通例如Java、C++、Python等,寫過很多文檔,考試成績很高…。并不代表你真正懂得軟體工程,也并不意味着你是一個合格的工程師。
軟體工程包含下列領域:
軟體工程包含下列領域:軟體需求分析、軟體設計、軟體建構、軟體測試和軟體維護。
軟體工程和下列學科相關:
計算機科學、計算機工程、管理學、數學、項目管理學、品質管理、軟體人體工學、系統工程、工業設計和使用者界面設計。
通過上述,可見,軟體工程是把系統的、有序的、可量化的方法應用到軟體的開發、營運和維護上的過程,這是一個比較正式的定義,用我們自己的了解來說就是開發軟體過程中包含的所有活動之和就是軟體工程。
軟體工程與計算機科學的關系
計算機科學(Computer Science)這一領域可以分為下面這些領域:
計算機理論
資訊和編碼理論
算法和資料結構
形式化方法
程式設計語言
計算機體系結構
并行計算和分布式系統
實時系統和嵌入式系統
作業系統
計算機網絡
科學計算
安全和密碼
人工智能 :模式識别、機器學習、資料挖掘、資訊提取等
計算機圖形學、加算計視覺、多媒體
資料庫和大規模資料處理
網際網路
自然語言處理和語音
人機互動
軟體工程
軟體工程隻是計算機科學的一個分支,但其互相之間卻有着密不可分的關系。
軟體開發相關活動
從狹義上來将軟體工程是從需求分析開始,到最後的軟體維護終止,中間包含軟體設計、建構、測試、釋出。如果我們整體以一條線的模型來串起來,這就是我們熟悉的瀑布開發模型;如果我們每一小部分用一條線串起來,完成一小部分之後再接另一小部分,這就是疊代開發模型;在疊代開發模型的基礎上,加上靈活的項目管理方法(XP,Scrum等),我們就得到了靈活開發(可以看到靈活開發和疊代開發并不是一個層級的東西,放在這裡可能不太合适)。
“要想了解世界,就必須親自來打造它。”
正如這句話所說,想要了解,就要親自打造建構。是以我們必須要具備一定的軟體開發能力,而這也将是我們在以後的工作中必不可少的一項技能,程式員的存在意義大概也在于此。
如專家所歸納的:
哲學家:我思,故我在。
科學家:我發現,故我在。
工程師:我建構,故我在。
軟體品質
進行軟體開發,并不是單純的傳遞一個可用的軟體産品就可以了。軟體品質的高低好壞也是我們應該重點考慮的。一個品質好的産品,不會頻繁的出現問題,同時使用者使用體驗也會很舒服。相反軟體品質低,使用者就會來投訴了。
由前文的公式
“軟體=程式+軟體工程”
,進一步可知
軟體品質=程式的品質 + 軟體工程的品質
。
這說明僅僅是程式寫得好是不夠的,軟體開發所涉及的活動都會影響到軟體的品質(跟性能很類似,上下遊的元件、服務都會影響到性能)。
團隊合作與個人
團隊有團隊的開發流程,個人也有個人的開發流程。通過學習軟體工程,我們知道軟體品質并不是誰的事,而是所有人的事,要完成一個高品質軟體,個人不僅要完成好自己負責的部分,還要考慮整個團隊的工程,我們就擁有了上司力。
PM是啥?
在不同的公司可以是:Product Manager(産品經理)、Project Manager(項目經理)、Program Manager(項目經理,差別于Project Manager)。
PM的能力要求和任務
1.觀察、了解和快速學習的能力,PM要能夠在一個新的領域快速上手。
2.分析管理能力。
3.一定的專業能力,如專業的了解和表達。
4.自省能力。
結語
《建構之法-現代軟體工程》這本書雖然我隻是粗略浏覽了一遍,但卻讓我對軟體工程有了全新的認識和更加全面的了解。作者通過大量的示例、圖表等講解,使得原本枯燥乏味難以了解的知識變得有趣,容易消化。它給出了你一個索引,你可以順着它的線去尋找更高層的領域,而且很多方面為個人打開了一扇門,讓你從更高處來看待自己的工作,極大的幫助了我們如何找準自己的定位及目标。