[BUAA软工]提问回顾与个人总结
提問回顧與個(gè)人總結(jié)
| 所屬課程 | 2019春季計(jì)算機(jī)學(xué)院軟件工程(任健) |
| 所屬作業(yè) | 提問回顧與問題總結(jié) |
| 課程目標(biāo) | 理解軟件工程的作用和重要性,提升工程能力,團(tuán)隊(duì)協(xié)作能力 |
| 作業(yè)目標(biāo) | 回顧軟工課程,總結(jié)課程的收獲 |
| 提問博客 | 軟工第1次個(gè)人作業(yè) |
一、問題回顧與解答
1. goto語句
函數(shù)最好有單一的出口,為了達(dá)到這一目的,可以使用goto。只要有助于程序邏輯的清晰體現(xiàn),什么方法都可以使用,包括goto。——《構(gòu)建之法》P69 4.3.2
goto語句在c語言中難以操縱,初衷可能是添加一兩個(gè)goto為了體現(xiàn)程序邏輯,如書中提到的單一出口設(shè)計(jì)。但一旦函數(shù)的邏輯比較復(fù)雜,使用goto是否會(huì)反而破壞程序的條理性呢?
不論是使用更便捷的工具還是更復(fù)雜的工具,都會(huì)為項(xiàng)目帶來很多的弊端和隱患。比如Python語言,在OO編程中就有著種種不利于工程性的一些特性,而更強(qiáng)大的C++卻有著種種技術(shù)難題。但技術(shù)是人來使用的,只要軟件工程師的使用符合工程標(biāo)準(zhǔn),就可以使用種種技術(shù)。事實(shí)上,在我們的開發(fā)過程中,往往會(huì)使用很多更復(fù)雜,更不利于程序條理性的工具,但為了實(shí)現(xiàn)需求,我們是可以選擇去挑戰(zhàn)使用這樣的技術(shù)的。
2. 全棧工程師
當(dāng)一個(gè)運(yùn)維工程師在維護(hù)一套系統(tǒng)的時(shí)候,運(yùn)維團(tuán)隊(duì)要了解各個(gè)模塊的作用、維護(hù)知識,以及和硬件、商業(yè)模式相關(guān)的各種事件的需求。如果這大部分運(yùn)維工作都是由一個(gè)工程師來完成,那么這位工程師的確是“全棧”。P53 3.3
書中文字給人一種現(xiàn)在是個(gè)人就敢說自己是全棧工程師的感覺,可能作者對身邊存在的這樣一種浮躁的現(xiàn)象有一些自己的思考和駁斥。
考慮這樣幾種情況:某職工曾在多家互聯(lián)網(wǎng)公司任職,在A公司做過后端,在B公司做過前端,在C公司做過服務(wù)器維護(hù),在D公司又負(fù)責(zé)寫算法,所以他在投給E公司的簡歷上寫——我是全棧工程師。
某獨(dú)立開發(fā)者自己維護(hù)了一個(gè)開源項(xiàng)目并且有著一些穩(wěn)定的用戶,這個(gè)開源項(xiàng)目部署在了網(wǎng)站上并且該項(xiàng)目的前端后端都是由該開發(fā)者自行搭建,并在網(wǎng)站上貼上了自己的支付寶收款碼求各位大爺們救濟(jì)。碰巧該開發(fā)者看了《構(gòu)建之法》這一段,于是心里閃過——我是全棧工程師。
請問職工A和開發(fā)者B,究竟誰的技術(shù)更好?A作為一個(gè)有廣泛工作經(jīng)驗(yàn)的職工,他可能有著極強(qiáng)的工程能力和編碼能力;而B可能只是一個(gè)剛畢業(yè)的研究生,有著維護(hù)自己開源項(xiàng)目的愛好。
這是否意味著,全棧工程師在不同的情境下有著不同的意味,而不代表著一個(gè)技術(shù)上更高一層的階級呢?
先說結(jié)論,全棧工程師在同一個(gè)項(xiàng)目或系統(tǒng)內(nèi),代表著一個(gè)技術(shù)上更高的階級。
在我小組軟工的項(xiàng)目組內(nèi),有著一名對項(xiàng)目非常上心的同學(xué)。他做過的事情從前端到后端,從Linux Shell到Android,從項(xiàng)目需求定制到日常例會(huì)內(nèi)容制訂都有所涉獵,最終他也獲得了應(yīng)得的貢獻(xiàn)分?jǐn)?shù)。因此在我們這個(gè)項(xiàng)目內(nèi),他就是處于一個(gè)全棧工程師的地位。即便拋開對開發(fā)的熱情,從純技術(shù)層面來說,我認(rèn)為他在我們的項(xiàng)目組,也屬于一個(gè)技術(shù)上更高一層的階級。這也是我們項(xiàng)目最終能成功完成的主要因素,就是有這樣一位全棧工程師,為各個(gè)部分的同學(xué)出謀劃策提供建議,甚至親自動(dòng)手。
當(dāng)然,他目前的技術(shù)可能不足以在企業(yè)內(nèi)擔(dān)任全棧工程師,那需要更多的經(jīng)驗(yàn)。但在每個(gè)項(xiàng)目內(nèi),都會(huì)有著這樣一位技術(shù)上的領(lǐng)頭人物,如果他真的能涉獵到項(xiàng)目的所有部分,那么他在這一場景下就符合全棧工程師的定義了。
3. 軟件測試
我曾經(jīng)了解到在如今BAT的大部分項(xiàng)目里,也沒有建立良好的Code Review制度,Unit Test也僅僅有重要模塊會(huì)做。那么對于這樣大型項(xiàng)目的覆蓋性測試,其花費(fèi)的人力成本是否會(huì)得到相應(yīng)的回報(bào)呢?如果做工程的最終目的是為了盈利的話,軟件測試的全面性在實(shí)際應(yīng)用中是否并不被重視呢,而我們在完成作業(yè)時(shí)卻還要為邏輯簡單明了但構(gòu)造測試樣例卻有難度的那些分支去做100%覆蓋,是否是教育的過度形式化的一種體現(xiàn)呢?
關(guān)于軟件測試的作用,在我們的項(xiàng)目中,通過單元測試和分支覆蓋來找到的BUG屈指可數(shù)。這一點(diǎn)或許是因?yàn)槲覀兊臉I(yè)務(wù)邏輯較為簡單。對于大型項(xiàng)目,或許合格的單元測試可以在軟件工程中提升效率,即花費(fèi)部分測試的時(shí)間來減少返工修BUG的時(shí)間,在項(xiàng)目的敏捷開發(fā)中可以節(jié)省項(xiàng)目的總體人力成本。而在課程中應(yīng)用這種形式,并不是為了節(jié)省時(shí)間和人力成本,也并不是真的要為了修BUG, 更多的是為了讓我們了解軟件工程中測試的重要性,形成軟件測試的潛意識。
4. 人類學(xué)調(diào)查
我平時(shí)接觸的同學(xué)都是計(jì)算機(jī)專業(yè)的,……,我從來沒為軟件或服務(wù)付過費(fèi)。——《構(gòu)建之法》P159
據(jù)書中提到,這是某計(jì)算機(jī)系的同學(xué),這里我要提出一些自己的見解。
該同學(xué)覺得自己每天FQ上外網(wǎng)看quora,表姐父母卻天天hao123,QQ秀,話語中體現(xiàn)出自己比海量的中國用戶不知高到哪里去了。
如果他覺得站在墻外就更懂計(jì)算機(jī),我還可以理解,但是他認(rèn)為自己從來沒為軟件或服務(wù)付過費(fèi)是一種很hacker的行為我就很奇怪了。上百度搜個(gè)注冊機(jī)破解碼就覺得自己比那些不愿意花錢干等著的人高半頭?作為計(jì)算機(jī)未來的從業(yè)者,自己想用軟件不花錢,自己寫軟件的時(shí)候你也別想著賺別人的錢啊?如果可以培養(yǎng)一些高素質(zhì)人群的付費(fèi)使用習(xí)慣,我認(rèn)為這是可以促進(jìn)現(xiàn)有軟件工程的質(zhì)量的。如果大家都想不花錢用,那軟件提供商就只能在軟件上掛廣告,大家都不舒服,何必呢?
這只是一個(gè)和書中所選的某位同學(xué)的觀點(diǎn)不合的一些看法,并沒有構(gòu)成提問。原書只是想借用這一例子來說明用戶需求調(diào)查中,人類學(xué)調(diào)查的重要性,即世界上存在大量為使用便捷,或者Geek眼里的懶惰付錢的人。
Geek自然有資格評價(jià)他人的懶惰,但Geek卻不應(yīng)為自己會(huì)使用搜索引擎尋找破解軟件而自豪。這不是Geek,這只是聰明的窮鬼而已。
5. 大馬哈魚洄游模型
P416
書中提到了一些軟件工程課的一些現(xiàn)象,看起來軟件工程這門課似乎并不完善,這似乎主要是因?yàn)橥瑢W(xué)們的水平比較低(上課睡覺),還有一些課程安排方面過于高屋建瓴,沒有落實(shí)到地。
比如本次博客作業(yè),要大家在比較短時(shí)間內(nèi)瀏覽完鄒欣老師的《構(gòu)建之法》這本書,這一看,上周課上的PPT基本上就是構(gòu)建之法的掃描件嘛。書中安排了健身學(xué)員的身份給大家,你讀完,你就是很想提高自己,你不想讀,就是想把健身卡墊桌腳。那既然我們大家都讀完構(gòu)建之法了,是不是我們就已經(jīng)大致了解軟件工程理論,只需要等著編碼實(shí)踐了呢?那么如果未來的課程還只是構(gòu)建之法的掃描縮印,那理論課的課程內(nèi)容在第一次博客作業(yè)時(shí)就已經(jīng)學(xué)習(xí)完畢了,理論課的內(nèi)容是否顯得空虛了一些呢?如果課程設(shè)計(jì)時(shí)知道大家在這很短的時(shí)間內(nèi)看不明白構(gòu)建之法的軟工精髓,那么留本次博客作業(yè)讓大家看完這本書是否合理,又是否自相矛盾呢?
如果不能解決上述問題,就盲目地認(rèn)為是因?yàn)閷W(xué)生沒有學(xué)好軟工就是因?yàn)橛媒∩砜▔|桌腳了,是不是有些不妥呢?
私以為《構(gòu)建之法》是一本很好的書,深入淺出而生動(dòng)獨(dú)特。軟工課程是想以課程中所介紹的方法和實(shí)際的項(xiàng)目開發(fā)相結(jié)合,從而讓學(xué)生更好地理解軟工的精髓。但是在實(shí)際操作上卻仍然有著一些不足之處。這樣的不足之處,可以通過學(xué)生的熱情和主觀能動(dòng)性來彌補(bǔ)。軟工課程中介紹的理論和軟工項(xiàng)目的開發(fā)在實(shí)際環(huán)境中脫節(jié)嚴(yán)重,至少在我身邊的數(shù)個(gè)小組是這樣的。當(dāng)然,學(xué)生可以通過不懈的努力和主動(dòng)去嘗試學(xué)習(xí)來親身實(shí)踐,但更好的課程制度應(yīng)該是去建立一個(gè)良好的學(xué)習(xí)體系,并以此聯(lián)系理論和實(shí)踐。這一點(diǎn)我認(rèn)為軟工課程還需要改進(jìn),但我個(gè)人沒有很好的建議,因?yàn)檫@確實(shí)是一件很困難的事情,因?yàn)樵谖铱磥?#xff0c;很多軟工的理論都是難以在課程項(xiàng)目這個(gè)級別就輕松實(shí)現(xiàn)的。
二、知識點(diǎn)總結(jié)
- 需求:用戶的需求是推動(dòng)項(xiàng)目功能設(shè)計(jì)的關(guān)鍵因素,因此用戶調(diào)查是非常重要的
- 設(shè)計(jì):在軟件的功能設(shè)計(jì)上,應(yīng)均衡考慮功能的效果及功能本身實(shí)現(xiàn)的難度等多方面
- 實(shí)現(xiàn):實(shí)現(xiàn)時(shí)應(yīng)盡量選用較為成熟的框架或工具,這樣有詳盡的文檔和大量的社區(qū)貢獻(xiàn)者所提供的資料
- 測試:測試工程師需要對項(xiàng)目所使用的的技術(shù)較為熟悉,并對項(xiàng)目的結(jié)構(gòu)和每個(gè)函數(shù)的作用有著具體的了解才能更好地完成測試。
- 發(fā)布:App的發(fā)布需要考慮到很多因素,如安全因素,使用代碼的開源許可等等。因此App的發(fā)布需要提前調(diào)研,防止由于應(yīng)用市場的政策導(dǎo)致App發(fā)布的延期。
- 維護(hù):對功能主要集中在本地的App的維護(hù)主要體現(xiàn)在日常反饋Bug的修復(fù)和新功能的跟進(jìn),新系統(tǒng)的適配等等。其次要對App使用的一些在線服務(wù)進(jìn)行維護(hù),保證其可用性,比如Bug反饋服務(wù)和軟件檢查更新服務(wù)。
三、理解和心得
對軟工的課程項(xiàng)目,我認(rèn)為在其中團(tuán)隊(duì)的協(xié)作和溝通是極為重要的,對項(xiàng)目的熱情也是必不可少的。而每個(gè)人的技術(shù)實(shí)力應(yīng)該是一個(gè)團(tuán)隊(duì)成功的主要因素,輔以軟件工程方法的優(yōu)秀應(yīng)用,才可以成就一個(gè)更好的項(xiàng)目。
對此,我可以理解課程為什么會(huì)有大量的博客來進(jìn)行展示,或許是課程更重視一個(gè)項(xiàng)目開發(fā)中軟件工程方法的應(yīng)用。對項(xiàng)目本身,更注重其功能的全面性,以及其功能和需求的切合度,能自圓其說便可。而項(xiàng)目的實(shí)現(xiàn)難度和技術(shù)的優(yōu)秀與否,在課程的構(gòu)建中并不是最重要的部分。雖然事實(shí)上很多成功的應(yīng)用或許不會(huì)使用十分先進(jìn)的技術(shù),而是其抓住了市場的需求和痛點(diǎn),但是對于程序員本身來說,對技術(shù)的追求應(yīng)該是永不停歇的。
轉(zhuǎn)載于:https://www.cnblogs.com/SephyFine/p/11102831.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的[BUAA软工]提问回顾与个人总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java容器--Map
- 下一篇: Slackware网卡配置文件和配置工具