項目 | 內容 |
---|---|
課程班級博客鏈接 | 18卓越班 |
這個作業要求鏈接 | 實驗一 |
我的課程學習目標 | (1)學習博客園軟件開發者學習社區使用技巧和經驗。 (2)了解Github的基本操作。 |
這個作業在哪些方面幫助我實現學習目標 | (1)通過本次作業,我們初步學會了博客園的使用。 (2)初步了解了Github的基本操作。 (3)閱讀了《現代軟件工程—構建之法》一書, 並對軟件工程有了一定的認識 |
任務1:填寫了關於自己對於軟件工程課業水平調查的問卷
- 較為詳細的填寫了關於自己軟件工程的水平。
任務2:在博客園平台注冊個人博客賬號和加入班級博客
- 由於之前已經注冊過博客園的賬號,所以這里只需加入班級博客,並進行相關的信息修改。
任務3:注冊Github賬號
- 由於之前有創新創業的經歷,所以已經注冊過了GitHub賬號。
- 同時去年暑假使用過類似與git的工具svn,所以對這方面也有一定的了解。
任務4:填寫博客園、github賬號信息
- 如實詳細的填寫了問卷。
任務5:構建之法與博客首秀
- Markdown語法:由於之前經常使用簡書來記錄總結一些知識點,所以對一些簡單的Markdown語法有一定的了解。
后續如果有時間,還得進一步為個人博客增加一些CSS,JS設置等,改善博客閱讀體驗。
對《現代軟件工程—構建之法》的理解與看法(三個問題)
1. 程序與軟件的區別
軟件=程序+軟件工程(摘自P2)
- 鄒欣老師在書中通過客戶們對阿超的需求這個例子,解釋了程序,軟件構件過程,質量保障,軟件測試,需求分析,程序理解等概念。讓我們對幾個概念有了初步認識。最后得到了軟件=程序+軟件工程的推論。
- 通過前幾年的計算機學習,“軟件=程序+軟件工程”這一概念,我的理解如下:
- 軟件就是一個系統,用戶可以在其上面實現用戶所需的各種功能,一般由前端和后台組成。
- 前端用於用戶進行各種操作,並連接了數據庫,支持各種增刪改操作。
- 后台用於管理人員進行各種權限管理,頁面的布局,功能的添加等。
- 程序指用來實現某一特定功能的代碼段,通常需要通過各種數據結構以及算法來進行復雜度上的優化。
- 個人認為軟件與程序的重要性:程序>軟件。
- 程序的編寫,需要自己使用適合的數據結構和算法來優化,雖然如今各種語言的庫已經比較完善了,但對於編程人員的要求還是極大的。
- 對於軟件,就根據之前寫項目的經驗來說,一個項目通常由好多人共同完成,為了規范化編程,通常使用各種API來實現最終功能。而且各種軟件的重復性較高,市面上已經存在了各種成熟的框架,這大大降低了對程序員的要求。拿各種用來管理各種事務的網頁來說,編程人員只需要熟悉並掌握MVC框架,再使用一些類似於JEECG的代碼生成器和一些UI框架。僅需幾周就可以編寫一個簡單且美觀的網頁。
- 軟件就是一個系統,用戶可以在其上面實現用戶所需的各種功能,一般由前端和后台組成。
- 而通過閱讀了鄒欣老師的書,我發現事實並非如此。軟件並不是簡單的做一個網頁。一個成熟的軟件不僅需要做出一個美觀且用戶體驗良好的界面,還必須經受住軟件維護,服務運行,商業模式,安全性能,高並發性能等各種方面的考驗。
2. 軟件工程與計算機科學的關系
軟件工程是把系統的、有序的、可量化的方法應用到軟件的開發、運營和維護上的過程。
軟件工程包括下列領域:軟件需求分析、軟件設計、軟件構建、軟件測試和軟件維護。
軟件工程和下列的學科相關:計算機科學、計算機工程、管理學、數學、項目管理學、質量管理、軟件人體工學、系統工程、工業設計和用戶體驗設計。(P8)
軟件開發的難題:復雜性;不可見性;易變性;服從性;非連續性。(P9)
計算機科學 軟件工程 發現和研究長期的、客觀的真理 短期的實際結構(具體的軟件會過時) 理想化的 對各種因素的折衷 確定性,完美,通用性 對不確定性和風險的管理,足夠好,具體的應用 各個學科獨立深入研究,做出成果 關注和應用各個相關學科的知識,解決問題 統一的理論 百花齊放的實踐方法 形式化,追求簡明的公式 在實踐中建立起來的靈感和直覺 正確性 可靠性 (P12)
- 雖然我們學院有軟件工程和計算機科學與技術這兩個專業,但之前並沒有思考過這兩個專業的區別。僅僅知道這兩個專業在課程的設立上有很大的區別。
- 在后面的學習中,希望能對這兩個學科的區別有深刻的認識,並着重於一方面進行深入研究。
3. 結對編程的作用與如何實現代碼規范
代碼風格的原則是:簡明,易讀,無二義性。(P70)
代碼復審的形式
名稱 形式 目的 自我復審 自己vs.自己 用同伴復審的標准來要求自己。不一定最有效,因為開發者對自己總是過於自信。
如果能持之以恆,則對個人有很大好處。同伴復審 復審者vs.開發者 簡便易行 團隊復審 團隊vs.開發者 有比較嚴格的規定和流程,適用於關鍵的代碼,以及復審后不再更新的代碼覆蓋率高
——有很多雙眼睛盯着程序,但效率可能不高(全體人員都要到會)(P79)
兩人的合作——如何影響對方(P89)
兩人在一起和做,自然會出現不同意見,每個人都有自己的想法,在兩個人平等合作的情況下,不存在領導與被領導的關系,如何能說服對方?
這個時候不是比誰的嗓門大,首先雙方要意識到,問題早點出現要比晚點出現好很多,我們有機會早日解決問題。
除了技術方面的考慮外,一個成熟的工程師要琢磨對方的話語和觀察對方的肢體語言,了解它們所表示的潛台詞,試着從對方的角度看待問題。
同時也要根據情況采取不同的方法影響別人。影響的方式有:斷言;橋梁;說服;吸引。
沒有絕對正確或錯誤的方法,只有合適或不合適的方法。
- 對於代碼規范,鄒欣老師在書中指出這一點在軟件開發中十分重要,但如何實現僅僅只是簡單的提了一下。據我了解,對於JAVA來說,通過《重構》與《Effective Java》這兩本書可以很全面的了解代碼的設計和規范。
同時還可以閱讀《設計模式》來了解面向對象軟件的幾十種設計模式。
在后面的學習中,需要對這三本書進行通讀,來增強自己的代碼設計能力 - 對於結對編程,這一概念是第一次接觸。通過鄒欣老師的描述,我認為這種模式對於軟件工程這一門課有着極大幫助。
在后面的學習中應該積極參與結對編程。
總結:雖然書上還用了大篇幅來具體講解了軟件工程這一門課的各個組成。但在正式學習這門課之前,我認為最重要的還是通過閱讀鄒欣老師的書,並從中找到適合以后進行軟件工程學習的方法,減少以后學習過程中的彎路,提高學習的效率。對於這門課的主體知識,我們可以在以后的學習中,慢慢積累和學習。