標籤:
課程內容來自網易雲課堂中科大孟寧老師的軟體工程(C編碼實踐篇)課程。
課程頁面
我覺得本門課程的設定非常科學,每一周課程都是基於上一周課程的進一步抽象,使得學習者能夠循序漸進,逐漸加深對軟體工程的理解。
1. 第一周:熟悉Linux實驗環境;要求 實驗一:寫一個hello world小程式。
實驗報告連結+git程式碼程式庫連結
總結:hello world本身很容易,但是linux下工作方式和windows下完全不同,會給不熟悉linux的人帶來不少問題。首先vi沒有Windows下的IDE智能化,不能即時糾正語法錯誤,編譯是會產生不少語法錯誤,需要細心調試。其次,linux的諸多命令和參數,需要更長時間練習操作才能熟練掌握。最後,初學者往往不熟悉git,需要一定時間研究版本控制系統。這3點是liunx初學者需要克服的困難。
2. 第二周:代碼風格規範;要求 實驗二:命令列菜單小程式V1.0。
實驗報告連結+git程式碼程式庫連結
總結:初步接觸了模組化設計思想,理解了代碼風格的重要性,學會了將命令封裝成函數供使用者調用。
3. 第三周:基本的模組化設計;要求 實驗三:內部模組化的命令列菜單小程式V2.0。
實驗報告連結+git程式碼程式庫連結
總結:初步實現了商務邏輯與資料結構的分離,加深了對模組化思想的理解。而且這次自己做死創造難度,採用了AVL樹做資料結構,static函式宣告,函數指標做參數實現call -back;以及實現了在Windows IDE下編程,共用到Linux虛擬機器編譯運行,最後從自己的Vmware11的Ubuntu虛擬機器向實驗樓git代碼。從而進一步提高了自身的水平。
4. 第四周:可重用模組的介面設計;要求 實驗四:用可重用的鏈表模組來實現命令列菜單小程式V2.5。
實驗報告連結+git程式碼程式庫連結
總結:本次對於資料結構,我參考了Linux核心原始碼中雙向鏈表的實現,移植其功能介面整合到menu菜單程式中。而在Linux核心鏈表的設計中,為了達到最高運行效率,使用了宏定義和內嵌函式完成所有功能的設計實現,所有代碼整合在其設計的介面標頭檔中。Linux核心原始碼博大精深,其通用的設計思想和高效的實現方式,值得C/C++程式員認真閱讀,即使不去做核心相關的工作,閱讀精彩的代碼對程式員自我修養的提高也是大有裨益的。
5. 第五周:可重用模組的介面設計(callback函數);要求 實驗五:用callback增強鏈表模組來實現命令列菜單小程式V2.8。
實驗報告連結+git程式碼程式庫連結
總結:本次實驗通過Debug調試的使用增強了代碼調試的能力,利用函數指標參數化上下文,以最小化資訊隱藏的標準,設計了更加 通用好用 的API介面。
6. 第六周:函數的可重新進入性(reentrant)及安全執行緒淺析;本次沒有實驗,老師主要介紹了多線程編程和安全執行緒方面的知識。
總結:多線程編程和並行編程是未來技術的發展趨勢,儘管這方面的內容博大精深,但卻是一個優秀的軟體工程師核心競爭力的體現。關於這方面知識的進一步學習,我推薦2套最新更新出版的經典書籍:《Linux/UNIX系統編程手冊》和《UNIX環境進階編程(第3版)》。我認為如果掌握好這2套書的內容,將會在技術競爭力上有絕對優勢。
7. 第七周:子系統的可重用設計;要求 實驗七:將menu設計為可重用的子系統。
實驗報告連結+git程式碼程式庫連結
總結:本次實驗痛點在於Liunx系統函數getopt的理解和使用。getopt本身參數眾多,難以理解,極易用錯。做為最後一次實驗,綜合了前面所學知識,完成目標需要全面設計和仔細分析調試。
8. 第八周:代碼背後的設計思想;本次沒有實驗,老師主要總結了前面的課程,論述了軟體工程的一些理論知識。
總結:本次課程主要講述了 不同的品質視角,各種設計方法論,和幾個重要的設計指導原則;為進一步學習後續課程打下良好的基礎。
通過一學期的學習,使得自己對軟體工程有一個初步瞭解和認識,找到了進一步提高能力的方向。回想起一學期的曆程,最大的收穫是:抽象能力的提高和模組化思想的實踐。非常期待軟體工程系列課程的 後續2門課程。最大的遺憾是課程時間比較短,不足以深入學習多線程編程方面的內容。這方面網路上視頻稀缺,而書籍比較晦澀難懂,自學難度較大,期待老師以後有時間能製作多線程和並行編程方面的課程。
真實姓名:薛鎮(與最後申請認證的姓名務必一致) + 原創作品轉載請註明出處 + 《軟體工程(C編碼實踐篇)》MOOC課程http://mooc.study.163.com/course/USTC-1000002006
軟體工程(C編碼實踐篇)課程總結