天天看點

小螃蟹的代碼進化史

這個作業屬于哪個課程 2021春軟體工程實踐|S班(福州大學)
這個作業要求在哪裡 作業具體要求
這個作業的目标 對軟體工程實踐這門課程進行回顧、總結;對在課程期間學習到的技術進行總結
其他參考文獻 《建構之法》、菜鳥教程、CSDN、部落格園
目錄
  • 一、課程回顧與總結
    • 1.提問題的部落格連結
    • 2.問題解答與闡明
      • Q1:關于合格的軟體工程師
      • Q2:關于MBTI
      • Q3:關于創新
      • Q4:關于“赢者通吃”
      • Q5:關于團隊
    • 3.産生的新問題
    • 4.分别在項目的5個階段收獲的最大的知識/能力
    • 5.實踐課程經曆帶來的了解/心得
  • 二、個人技術總結

https://www.cnblogs.com/Cherry-XPX/p/14477958.html

問題引用:

在《建構之法》的P32中有一段話如下:IT專業的大學畢業生找工作時聲稱:我精通Java,會用C++寫“Hello World”程式,我懂軟體工程,我畫了很多圖,寫了很多文檔,最後得了很高的分數……這些同學是真的懂軟體工程,是一個合格的軟體工程師麼?

我的回答

不是。我之前曾說:一名合格的軟體工程師要有良好的編碼能力、自覺的規範意識和團隊精神、較強的英語閱讀及寫作能力、求知欲和進取心等。我曾經以為努力做到以上這些基本上算得上是一名合格的軟體工程師了。但是近期發生在自己及周圍同學身邊的一些事情讓我對“合格的軟體工程師”有了新的認識。計算機資訊技術作為一門學科,在短短的時間催生了一個新興的計算機行業。這個領域裡聚集了從事理論研究、軟硬體研發、網絡和基礎應用的專業人才,時至今日俨然形成了一個新的龐大的科技隊伍。在時代的背景下,日益衆多的人才加入到軟體工程師的隊伍中來。為了滿足人才的需求,人的教育問題顯得日益重要。

計算機科學和軟體産業的發展不能離開人的因素。而人的因素又離不開人的教育。人的教育有兩層含義:學科教育或者技術教育、人的素質和道德教育。前者決定你有沒有資格或能力進入這個行業;後者決定你能否在這個行業立足、走得長遠,人的素質和道德教育更是我們事業成功的首要關鍵。我們的落後,并不光在技術層面,更重要的是在人的素質和人的精神層面。包括軟體行業在内的各行各業都有相關的職業操守和一些不成文的規矩,我們所有的合作與競争都應該建立在此基礎上。是以,一名合格的軟體工程師,不僅要有過硬的專業水準,還要有良好的素質和修養。軟體世界是一個日新月異的世界。軟體工程師應該在自己的整個職業生涯中,要不斷更新和完善自己的專業知識,還要不斷提升自己的道德情操和職業操守,努力向“合格”靠近。

P100提到“在結對程式設計模式下,一對程式員肩并肩、平等地、互補地進行開發工作。他們并排坐在一台電腦前,面對同一個顯示器,使用同一個鍵盤、同一個滑鼠一起工作。他們一起分析,一起設計,一起寫測試用例,一起編碼,一起做單元測試,一起做內建測試,一起寫文檔等”。
從事軟體行業的人肯定是避免不了團隊合作以及結對程式設計的。那麼《建構之法》也在P108提到性格一定程度上會影響合作。據MBTI分析,ISTJ、INTJ以及INTP型人格才适合軟體行業。但是我并不屬于上面三種類型,自認為學習本專業确實還是有一些吃力的。現在不禁有點懷疑自己,能否提點一二?

《建構之法》在P108提到性格一定程度上會影響合作。據MBTI分析,ISTJ、INTJ以及INTP型人格才适合軟體行業,可我并不屬于上面三種類型,是以我會對自己有一定的懷疑。曾經這種懷疑在我看來是有迹可循的:相同的科目室友花一天時間的複習效果比我花三天時間複習效果好,同一個算法别人聽一遍就能夠了解而我可能要花時間再聽好幾遍才能做到,諸如此類的事情不停地在提醒我:我的性格是不是真的不适合?後來,随着軟工實踐的深入學習,我和周圍同學的交流、合作變得越來越多,我逐漸意識到不是性格合不合适的問題,很多時候是方法不對。效率高的同學往往有一套自己做事的方法,他們更加樂于總結、更善于搜尋與探尋、對消息的捕捉更加敏銳、和别人的交流也會更加頻繁。認識到這些之後,我逐漸擺正了自己的心态,跳出之前給自己定的條條框框後,效率慢慢變得高了起來,學習也變得更加快樂了。

P359提到“誰不喜歡創新呢?然而細細想來,創新就是做和以前不一樣的事,并不是所有的人都喜歡‘不一樣’”。
書中也列舉出了很多種别人“不喜歡”創新的理由,如果我的idea遭到質疑的理由是“這從來就行不通、沒有人需要這些方案、在實際中根本行不通”等,我大可以像《建構之法》裡面說的那樣,通過考慮“對利益相關人要講清楚‘你能從中得到什麼’、創新的想法和目前流行的做法相比,有什麼相對優勢,能讓别人清楚地看到這個差別”等方面解決問題。但是如果我的idea是因為“個人自負/嫉妒或者是面子問題”等原因被否決我又應該怎麼辦呢?

我現在認識到這個問題其實問得不怎麼好。首先這個問題不具有普遍性,其次這個問題也不好回答。一個idea從提出到被認可,要對利益相關人要講清楚“你能從中得到什麼”、創新的想法和目前流行的做法相比有什麼相對優勢,能讓别人清楚地看到這個差別,大多數人對足夠好的idea是喜聞樂見的。如果真的遇到問題中所出現的情況,那就勇敢地與“壞人”鬥智鬥勇,努力讓更多、更有權威的人看見自己的idea,這樣被采納的機率就高得多。

P372中提到一個“黃金點遊戲”(這個遊戲規定第一名得到全部的分數,第二名(不管多接近)到倒數第二名都是0分,最後一名還要倒扣分),從這個遊戲作者得出“軟體行業就是一個赢者通吃的環境,最後一名還要把自己的身家倒貼進去”的結論。
這不禁讓我想到:每當班上同學要自行組隊完成老師布置的團隊項目實踐作業時。我發現如果同學A和C成績較好、項目經驗較豐富,而B同學成績一般、經驗不足。此時A和C會更加容易找到隊友,同時他們也更加傾向于和對方組隊而不是選擇B作為隊員。長此以往,A、C的能力、成績、經驗等等會以快于B的速度提升,那麼A、C自然就能獲得更多機會、成績更好、發展更快。這個例子是不是也能證明軟體工程“強者通吃”這個結論呢?那麼作為處于第二名和倒數第二名的同學在這種情況下要如何“曲線救國”而迎頭趕上呢?

我覺得“自行組隊做項目 ”這個例子一定程度上能反映軟體工程“強者通吃”這個說法。如果一個同學因為能力不足而沒有人來找他組隊,這個同學可能會是以信心受挫,導緻效率不高,再加上水準有限,花費了時間卻學習成果不佳,也就是《建構之法》裡所說的“最後一名還要把自己的身家倒貼進去”。其實,我能力不算好,我也曾經遇到過這種情況,但是我并沒有是以信心受挫。我的做法是化被動為主動,鼓起勇氣向能力好的人發起組隊邀請,坦誠地向他們說明自身的優缺點,同時也真誠的表達自己的誠意和決心,大多數時候同學們都會樂于一起學習一起進步。如果一味地逃避、不自信、被動地等待而不主動争取,這無疑是作繭自縛,很難有進步。

P409在介紹團隊合作的規範階段時提到“通過聆聽、讨論,成員互相之間更加了解,認識到并欣賞各自的能力和經驗。在工作中互相支援,大家意識到并尊重各人的個性”。
我想這是團隊的leader需要做的事情。我曾經所在的一個學習小組裡,我們成員們已經有了一定的默契。A成員累計代碼量最高能力最強,但有一個缺點:情商低且不自知(實話實說,沒有诋毀的意思)。每當其他成員有失誤時,A會毫不留情地當面說出類似于“都是因為他我們才會浪費這麼多時間”這樣的話語,其他成員的積極性以及自信心或多或少受到了影響。而在leader與A多次交涉無果的情況下,隻有留下A或者是剔除A兩個選擇。我想如果調整團員,那麼團隊需要花時間重建立立默契;如果留下A,那團隊的其他成員繼續被打擊。此時,leader是否有必要将A換掉?

這個問題看每個團隊的具體情況吧。如果團隊已經足夠成熟足夠默契,而且A隻是單純情商低沒有壞心眼,那麼大可不必剔除隊員,大家開誠布公地溝通,坦誠地面對隊友缺點、互相包容就好。如果A人品有問題,理所當然是留不得的。

1.其實小組在做完需求分析後,我們都有意識到我們小組的項目需求龐大且瑣碎,使用者版塊、發帖版塊、組局版塊、樹洞版塊、私聊版塊,工作量其實比我們想象中的要大得多。後來小組根據功能的重要程度及使用頻率做了适當的删減。但其實在真正面對客戶的時候,我們要如何将需求化繁為簡呢?

需求階段

1.知識:閱讀了《建構之法》,懂得了怎麼樣能夠更好地擷取需求。

2.能力:思辨能力與創新能力。我們團隊的項目從無到有,是從需求分析開始的:人們需要的是什麼?我們能夠給客戶提供什麼?市場現有同類産品中能夠借鑒的是什麼要避免的是什麼?我們要怎麼在諸多競争者中脫穎而出?一系列都是我們都要思考并且解決的問題。在此過程中,我們學會了思考、辨識與創新。

設計階段

1.知識:基本掌握了XD、Axure等工具的使用。

2.能力:收獲了更好地與他人溝通的能力。團隊開會進行需求分析,沒有想象中“你一言我一語”那麼興奮、激烈地讨論,大多數的時候給我“和風細雨”的感受。“和風細雨”是安靜卻不沉默、輕松且自由。在小夥伴發表意見和看法時,有不同觀點的隊員不會立馬打斷他和他辯論,而是會先認真傾聽講述者的想法,然後再提出自己的看法。這樣下來,這樣的氛圍使得在團隊中不善言辭的小夥伴能夠充分地參與其中。而“和風細雨”是我對團隊的初印象,但一個充滿奇思妙想的團隊絕不隻有一個面,隊員們熟絡後也會互相打趣調侃,更多有意思的想法和觀點在玩笑中碰撞、被激發,進而提高了會議的效率。我深刻地認識到,“善于傾聽”是團隊有效溝通的關鍵,在溝通過程中保持謙遜、适度幽默也是非常重要的。

實作階段

1.知識:學習了新技術在團隊項目之前我是沒有使用過SSM架構的。一開始十分沒有底氣,是以提前2周找學習資料和網站瘋狂補課。剛剛開始的階段,因為基礎不好,看了好多網課收效甚微。後來通過隊友的指點,采用邊聽課邊做練習的方法,雖然進度緩慢,但是學習效果有了好轉,在團戰真正開始的時候能夠沒有了那麼大的壓力,當然這離不開我友好熱情的隊友們。在這個階段就是通過不斷地學習新技術、不斷練習、不斷請教、不斷溝通來獲得進步。

2.能力:從隊友身上學習到了更高效的學習方法。概括為:有計劃、會搜尋、多交流、多總結、不糾結。

測試階段

1.知識:基本上掌握了postman、Eolinker等工具的使用。

2.能力:變得更加有耐心、更加細心,能夠更好地控制自己的情緒了。

釋出階段

1.知識:了解了将自己項目部署到伺服器的基本流程、了解了将微信小程式釋出所需要的材料等

2.能力:學會了辯證地看待他人的評價,學會調整自己的得失心。

通過這門課,我收獲頗豐、感慨頗多,更加深入地參與并且了解了團隊的意義,更加深刻地認識到“态度決定成敗”、“細節決定成敗”,“行百裡者半九十”等話語的含義,但是我最大的收獲是學會了正确地看待自己。在團隊合作中,正确的認識自己是非常重要的。不要把自己看的太重要,因為人外有人天外有天,隻有謙遜才能使人進步,是以很多時候要學會傾聽他人的看法和意見,而不是一味地表現自己、看不到别人;也不能把自己看的太微不足道,因為你的潛力永遠超乎你的想象。正确的認識自己、不卑不亢,隻有這樣才能讓自己更快地融入團隊,更多地擷取進步,更好地服務團隊。

技術部落格标題 https://www.cnblogs.com/Cherry-XPX/p/14931977.html
技術概述 Java後端SSM架構圖檔上傳功能