馬超群 +《軟件工程(C編碼實踐篇)》MOOC課程http://mooc.study.163.com/course/USTC-1000002006
一汁胆、C編碼實踐篇實驗報告
https://www.shiyanlou.com/courses/reports/1290335?【實驗一:寫一個hello world小程序】
https://www.shiyanlou.com/courses/reports/1291937【實驗二:命令行菜單小程序V1.0】
https://www.shiyanlou.com/courses/reports/1293526【實驗三:內(nèi)部模塊化的命令行菜單小程序V2.0】
https://www.shiyanlou.com/courses/reports/1296292【實驗四:用可重用的鏈表模塊來實現(xiàn)命令行菜單小程序V2.5】
https://www.shiyanlou.com/courses/reports/1299144【實驗五:用callback增強鏈表模塊來實現(xiàn)命令行菜單小程序V2.8】
https://www.shiyanlou.com/courses/reports/1302694【實驗七:將menu設(shè)計為可重用的子系統(tǒng)】
二峦耘、概述:
? ? ? 上了孟寧老師的課革骨,收獲最大的就是動手寫代碼牢裳,動手做實踐追他,不管是線上還是線下都是如此历造。下面是我整理的有關(guān)于這門課的我的一些收獲直秆。
課程學(xué)習(xí)心得
1预鬓、熟悉Linux編程環(huán)境
? ?? 專業(yè)的程序員應(yīng)該了解unix類的操作系統(tǒng)巧骚。因為大多數(shù)服務(wù)器用Linux系統(tǒng)。Linux環(huán)境下做開發(fā)可以徹底掌控設(shè)計格二。
2劈彪、代碼風(fēng)格規(guī)范
????在代碼的規(guī)范上,需要項目組統(tǒng)一格式顶猜,注意代碼風(fēng)格的原則:簡明沧奴、易讀、無二義性縮進(jìn)长窄、命名滔吠、注釋等代碼編排的風(fēng)格規(guī)范。
3挠日、基本的模塊化設(shè)計
????在設(shè)計規(guī)范上疮绷,要保證代碼是高內(nèi)聚,例如一個函數(shù)只做一件事嚣潜,一個模塊只做一類事的冬骚,實現(xiàn)功能盡量用庫函數(shù);還有要遵循“不和陌生人說話”的原則懂算,以保證除了類提供的接口只冻,別人無法訪問類的其他內(nèi)容。同時要合理使用數(shù)據(jù)結(jié)構(gòu)计技、控制結(jié)構(gòu)等來簡化代碼喜德。
4、可重用模塊的接口設(shè)計
????在模塊化的思想中酸役,講究高內(nèi)聚低耦合住诸,接口要規(guī)范驾胆,代碼要注意通用性,注意以下原則贱呐,Purpose Preconditions(assumptions)丧诺,Protocols,Postconditions(visible effects)奄薇,Quality Attributes驳阎。
5、callback函數(shù)
????用callback函數(shù)設(shè)計接口能夠方便地實現(xiàn)多態(tài)馁蒂,使接口更加通用而避免考慮許多情況呵晚,用戶使用起來也更簡潔眉枕。但callback的做法是把某些實現(xiàn)丟給了用戶隧出,也算造成了一些不必要的麻煩,應(yīng)該盡量少用callback歌粥。
????這里還提到了信息隱藏沮脖,一般地說金矛,定義和實現(xiàn)需要隱藏,而聲明和接口暴露給用戶勺届。
6驶俊、函數(shù)的可重入性(reentrant)及線程安全淺析
????在處理多線程問題中,需要關(guān)注函數(shù)是否是可重入的免姿,使用互斥鎖饼酿,讀寫鎖以保證多線程安全。同時了解了函數(shù)的可重入性與線程安全之間的關(guān)系胚膊,可重入的函數(shù)不一定是線程安全的故俐;可重入的函數(shù)在多個線程中并發(fā)使用時是線程安全的,但不同的可重入函數(shù)(共享全局變量及靜態(tài)變量)在多個線程中并發(fā)使用時會有線程安全問題(可能是線程安全的也可能不是線程安全的)澜掩;不可重入的函數(shù)一定不是線程安全的购披。
7、子系統(tǒng)的可重用設(shè)計
????盡管已經(jīng)為鏈表設(shè)計好接口肩榕,但要避免錯誤:手里有把錘子刚陡,看哪里都是釘子。menu子系統(tǒng)比較特殊株汉,與鏈表等常用模塊不同筐乳,接口不需要太通用,但為了可用于不同的項目乔妈,也不能太具體(夠用就好)蝙云。同時為了方便工程編譯,應(yīng)該寫Makefile文件路召,可以用automake或autoconf勃刨。
????為了讓menu子系統(tǒng)功能更強大波材,可用strtok和getopt等函數(shù)使其支持帶參數(shù)命令。
課程學(xué)習(xí)總結(jié)
????我最大的收獲是從頭到尾重新溫習(xí)了一遍軟件工程身隐,以及鍛煉了我的編碼能力廷区,不管是線上的實驗,還是線下的實驗贾铝,都讓我學(xué)習(xí)到了不少東西隙轻,只要你認(rèn)真對待,去上這門課還是挺有意義的垢揩。
????我最大的遺憾是這門課老師沒有要求我們組隊去完成一個項目玖绿,希望以后再開這門課的時候,老師可以給個實際的項目讓同學(xué)們以3到5人的小組模式去合作完成叁巨,因為這樣的團(tuán)隊項目開發(fā)才能讓我們更真切的體驗到軟件工程的整個過程斑匪。
? ? 孟寧老師的課程讓我收獲非常大,孟老師作為科大的老師锋勺,非常認(rèn)真負(fù)責(zé)秤标,對待學(xué)生也像朋友一樣,教學(xué)水平也非常高宙刘,上課生動有趣,在課堂之內(nèi)牢酵,也講了很多課堂外的知識悬包,讓還未邁入社會的我們受益匪淺。現(xiàn)在想想馍乙,這學(xué)期孟老師的課程我全部都選了布近,明智之舉啊~
? ? 最后,再次感謝老師能讓我學(xué)習(xí)到如此有用的知識丝格,相信對我以后找工作很有作用撑瞧。