專業導論課的目的是將學生引入軟件工程專業,并對軟件工程專業產生濃厚的學習興趣,激勵學生成為本專業的高級人才。本課程是對四年本科學習內容的引導,而不是對某一門課的引導。對此,需要從計算機、編程語言、軟件項目開發、數字通信網絡、數據與信息處理、音視頻與計算機圖形學、機器與智能等歷史發展的角度進行論述和引導,讓學生從100多年前的計算技術歷史快速地進入當今社會,并具備面向未來的人工智能和智能制造的眼光,引導學生能夠從軟件產業和人才發展的角度思考自己今后的學習與工作。
《軟件工程專業導論》分為9章正文和4個附錄。
編寫本書的目的是讓大學新生快速地了解計算機、通信、信息和軟件工程產業的相關知識,引發其對編程和組織小組進行軟件開發的興趣,為后續理論課、實驗課以及創新創業等工程活動拓寬知識面,從而培養學生主動學習和創新實踐的能力。
第1章以數的進制開始,講述了人類從手寫計算到機械和電子計算裝置的發展過程,引發學生對自動計算裝置的思考。討論了如何用數字電路實現邏輯運算和算術運算。
第2章從編程的要素出發討論了馮·諾依曼機器的結構,說明了集成電路計算機器的基本原理,進一步探索了量子計算機器的原理,引出了系統軟件和應用軟件的分類。
第3章,從機器語言和匯編語言人手,討論了高級編程語言的基本特征和發展歷史,論述了多種基本數據類型和浮點數的表達,進一步講述了數組、結構體、對象等復雜數據的表達,引發學生創立更高效、更安全的編程語言。
第4章,講述了軟件開發的集成環境,論述了操作系統和庫函數的作用,簡述了移動終端和嵌入式開發的過程,討論了個體程序員能力的局限性,引導出小組開發、大型程序開發的瀑布式和迭代式過程。
第5章的基本觀點是“通信也是計算”。本章從電報通信與字符編碼出發,以直觀的郵政通信和傳統的電話交換為例,引導出數據包交換的基本原理,討論了基于包交換的互聯網的構成、產業化和管理問題,進一步引出“軟件定義的網絡”的發展。
第6章主要呈現的是“數據管理和信息交流也是軟件”的主題。本章從學生信息的表格化(即結構化)管理出發,引出關系代數和數據庫管理系統。本章還介紹了信息蜘蛛網(Web)的概念,給出了萬維網的發展和產業歷程。通過對結構化和非結構化信息的對比,引出了信息通信中信息量的測量問題。
第7章的主題是“音頻與視覺空間也是軟件”。本章從聲音和圖像數字化人手,討論了圖像和視頻的壓縮,引出了計算機圖形學和虛擬現實技術。進一步討論了專用處理器的作用。以當前常用的一維碼、二維碼、多維碼的發明和應用為例,引導學生圍繞視覺空間的表達進行發明創造。
第8章的主題是“機器與智能”,目的是引導學生用計算機硬件和軟件制造出人工的智能。本章從蒸汽機替代人的體力勞動開始,引出如何用計算機程序替代人類的腦力勞動,從而建立智能系統或產品。討論了圖靈給出的智能評價標準和不足。從圖靈無組織機人手,引出了基于人工神經網絡的學習問題。介紹了當前第四次工業革命中美國、德國和中國智能制造的發展現狀。
王安生,北京郵電大學教授。曾任(解放軍)北京系統工程研究所軟件工程研究室主任,多項軍用標準的主編和起草者,或部委科技二等獎一項,立三等功一次。主講軟件工程、軟件過程改進等課程。2005~2006年度在英國做訪問學者。2013年被選舉為軟件學院教授委員會主席。著有《軟件工程化》2014年清華大學出版,93萬字)等書籍。
目錄
第1章從手工計算到自動計算
1.1數的表達
1.1.1十進制數
1.1.2二八十六進制數
1.2手寫計算
1.3手工計算工具
1.4巴貝奇機械自動計算機器
1.5減法與補碼
1.5.1用減數的補碼做運算
1.5.2用被減數的補碼做運算
1.6邏輯計算
1.6.1邏輯計算
1.6.2用電路構造邏輯運算單元
1.6.3邏輯向量計算
1.7二進制加減法計算機器
1.7.1用邏輯電路實現二進制的加法器
1.7.2二進制的反碼與補碼器
1.7.3二進制加法器/減法器
1.7.4二進制數正負數范圍
1.8思考題
第2章從自動計算到可編程計算機器
2.1可編程的計算機器
2.1.1用巴貝奇機器做更復雜的計算
2.1.2圖靈計算機器
2.1.3圖靈機的形式化
2.2馮·諾依曼的計算機器
2.2.1馮·諾依曼機的結構
2.2.2指令格式和執行流程
2.2.3指令集
2.2.4數據格式與存儲器編址
2.3集成電路與計算產業化
2.3.1半導體的集成電路
2.3.2集成電路產業與摩爾定律
2.3.3摩爾定律的終結
2.3.4新材料
2.4量子計算機
2.4.1量子運動原理
2.4.2量子用于計算的原理
2.4.3量子計算機產業動態
2.5系統軟件
2.5.1操作系統
2.5.2系統軟件與應用軟件
2.5.3軟件商業競爭方式的創新
2.6思考題
第3章編程語言與數據表達
3.1匯編語言
3.1.1用機器指令編程的困擾
3.1.2匯編語言和編程
3.2高級語言
3.2.1高級編程語言簡史
3.2.2高級語言的執行
3.2.3高級語言分類
3.3高級語言的特征
3.3.1詞法和語法
3.3.2語法和語義
3.3.3語句
3.4基本數據類型與變量運算
3.4.1數值型
3.4.2邏輯型
3.4.3枚舉型
3.4.4字符與字符串
3.4.5指針運算
3.4.6不同類型變量之間的運算
3.5浮點數
3.5.1浮點數的表達理論
3.5.2運算中出現的問題
3.5.3IEEE754浮點數的范圍
3.6擴展的數據類型與結構
3.6.1數組
3.6.2結構體
3.6.3鏈表
3.6.4棧與隊列
3.6.5樹
3.6.6圖
3.6.7對象與OO語言
3.7編程語言的可靠與安全
3.7.1語言缺陷的例子
3.7.2弱類型與強類型語言
3.7.3創立和設計更可靠安全的語言
3.8思考題
第4章軟件開發環境與過程
4.1集成開發環境
4.1.1代碼編輯器
4.1.2編譯器
4.1.3鏈接器
4.1.4程序加載
4.1.5代碼調試和安全問題
4.2操作系統與運行環境
4.2.1調用操作系統的功能
4.2.2庫
4.2.3遠程調用
4.3嵌入式與移動終端軟件的開發
4.3.1嵌入式計算機
4.3.2移動終端設備
4.3.3交叉開發環境
4.4個體程序員能力
4.4.1程序員個體能力差異
4.4.2提高個體能力
4.5項目小組的組織
4.5.1小組的組織協調問題
4.5.2首席程序員的組織方式
4.5.3矩陣式的組織方式
4.5.4結對編程
4.6大項目的開發過程
4.6.1從程序開發到軟件開發
4.6.2瀑布式開發模型
4.6.3中間產品(文檔)的價值
4.6.4文檔與圖示化表達
4.7迭代與敏捷
4.7.1增量式迭代開發
4.7.2漸進式迭代開發
4.7.3敏捷方法
4.8思考題
第5章數據通信與網絡
5.1數字化通信與編碼
5.1.1電報、電傳與ASCII碼
5.1.2漢字編碼與Unicode
5.2通信交換網絡
5.2.1郵政業務網絡
5.2.2電話交換網絡
5.3數據包交換網絡
5.3.1基于數據包的網絡原理
5.3.2數據包的設計
5.3.3數據分片與重新組裝
5.3.4路由選擇
5.4互聯網設計
5.4.1網絡互聯的需求
5.4.2網絡互聯的設計模型
5.4.3DoD網絡互聯協議族設計
5.5互聯網發展與應用
5.5.1美國互聯網的全面發展
5.5.2中國發展互聯網的歷程
5.5.3IETF(互聯網工程任務組)
5.5.4互聯網的管理
5.6軟件定義的網絡
5.6.1傳統路由器與網絡管理問題
5.6.2OpenFlow論壇
5.6.3SDN的提出
5.6.4SDN的產學研究
5.7思考題
第6章從數據管理到Web和信息通信
6.1數據結構化管理
6.1.1數據存儲的結構化
6.1.2消除數據冗余
6.1.3建立實體關聯
6.2關系代數
6.2.1關系代數定義
6.2.2“選擇”運算
6.2.3“投影”運算
6.2.4兩個表的“笛卡兒積”運算
6.2.5“并”運算
6.2.6“差”運算
6.2.7“交”運算
6.2.8兩個表的“連接”運算
6.3關系數據庫
6.3.1關系數據庫管理系統
6.3.2SQL:結構化查詢語言
6.4萬維網
6.4.1WWW的初衷
6.4.2Web基本原理
6.4.3WWW函數庫
6.4.4早期美國網站的迅速發展
6.4.5Web服務器產品
6.4.6Web瀏覽器產品
6.4.7早期中國WWW的發展
6.5Web搜索
6.5.1爬蟲
6.5.2內容整理
6.5.3搜索策略
6.6Web變遷與NoSQL數據庫
6.6.1Web應用方式的變遷
6.6.2Web對信息管理系統的改變
6.6.3NoSQL對數據處理系統的影響
6.6.4大數據時代
6.7信息量
6.7.1單變量的熵定義
6.7.2關聯信息的熵定義
6.7.3數據、信息與知識時代
6.8思考題
第7章數字音視頻與圖形學
7.1數字音頻
7.1.1機械式留聲機
7.1.2磁帶錄音機
7.1.3數字音頻系統
7.2數字圖像
7.2.1圖像傳感
7.2.2圖像位圖表示
7.2.3圖像壓縮
7.2.4數字圖像的應用
7.3數字視頻
7.3.1視頻數據與壓縮
7.3.2數字電視廣播系統
7.3.3視頻識別的應用
7.3.4立體電影與電視
7.4計算機圖形學
7.4.1圖像的矢量表示
7.4.2圖形的運算
7.4.3二維圖形
7.4.4三維圖形
7.4.5圖形學的應用
7.4.6虛擬現實技術
7.5專用處理器
7.5.1GPU
7.5.2TPU
7.6圖形與符號編碼
7.6.1一維碼
7.6.2二維碼
7.6.3三維碼
7.7思考題
第8章機器與智能
8.1可控制的自動機器
8.1.1替代體力的自動可控機器
8.1.2自動反饋控制器
8.1.3自適應與AI控制器
8.2基于計算機的控制器
8.2.1將計算機嵌入到控制系統中
8.2.2控制器的設計
8.2.3傳感器
8.2.4可編程邏輯控制器
8.2.5社會系統的控制
8.3人工智能
8.3.1圖靈無組織的機器
8.3.2人工神經網絡的發展歷程
8.3.3模擬神經元
8.3.4模擬多層神經網
8.3.5機器學習
8.3.6其他算法
8.4智能的評價
8.4.1圖靈測試
8.4.2圖靈測試的消極面
8.4.3智能分級
8.5智能制造
8.5.1先進(制造)工程環境
8.5.2物聯網
8.5.3工業互聯網
8.6智能制造作為國家戰略
8.6.1德國工業4.0
8.6.2美國智能制造
8.6.3中國制造2025
8.7思考題
第9章軟件產業與人才
9.1軟件與產業
9.1.1軟件與程序
9.1.2軟件作為商品:版權與許可證
9.1.3云計算:一切作為服務
9.2軟件企業過程能力的改進
9.2.1軟件工廠模式
9.2.2軟件過程與改進
9.2.3SEI和漢弗萊的貢獻
9.2.4CMM/CMMI模型
9.3產業生態、聯盟、開放與開源
9.3.1軟件產業生態
9.3.2產業聯盟
9.3.3企業間的并購
9.3.4開放策略
9.3.5開源策略
9.4軟件危機:永恒的話題
9.4.1國防工業軟件的指數級增長
9.4.2制造業軟件成本的急速增長
9.4.3超大規模軟件系統
9.4.4軟件生產率嚴重不足
9.5中國軟件危機
9.5.1軟件導致通信與網絡系統的危機
9.5.2軟件導致信息化社會的安全危機
9.5.3軟件導致制造業的危機
9.6軟件產業人才
9.6.1軟件工廠型人才
9.6.2軟件工程型人才
9.6.3復合型人才
9.6.4創新創業思維
9.6.5國際化視野
9.6.6軟件商業奇才
9.7軟件工程與新工科
9.7.1軟件工程的就業
9.7.2美國歐洲中國軟件產業對比
9.7.3軟件與其他產業500強的對比
9.7.4新工科戰略
9.7.5軟件工程與新工科的融合
9.8思考題
附錄A歷史責任
A.1工業革命推動力
A.1.1前三次工業革命
A.1.2第四次工業革命的基礎
A.2中國工業革命歷程
A.2.1中國近代危機與民族解放
A.2.2兩彈一星與國際地位
A.2.3改革開放
A.3軟件產業教育的歷史責任
A.3.1軟件人才危機
A.3.2示范性軟件學院的歷史責任
附錄B北京郵電大學國家示范性軟件學院本科培養方案
B.1教育部的指導意見
B.2“三六一一”實踐教學體系
B.2.1形成過程
B.2.2“三六一一”的內涵與外延
B.32017版本科培養方案
B.3.1培養線
B.3.2培養線與課程地圖
B.3.3實踐課與“三六一一”映射
B.3.4“三六一一”與SWEBOK的映射關系
附錄C《專業導論課》的目的
C.1教育理念
C.1.1形而上學與形而下學
C.1.2通識教育與專業教育
C.1.3領域知識與軟件工程專業知識
C.2本書與北郵軟件學院2017版培養方案關聯
C.2.1對北郵軟件學院2017版課程的引導
C.2.2通過課程配套實驗引發學習興趣
附錄D國內部分示范性軟件學院課程體系
D.1哈爾濱工業大學軟件學院
D.2清華大學軟件學院
D.3重慶大學大數據與軟件學院
D.4復旦大學軟件學院
D.5華中科技大學軟件學院