【做業】指望與篤信
開頭一些本身想說的
以前的話,無論怎麼說,還算是順利地本校保研了,並且與本身相性良好的軟件工程專業,總體來講還算是順利。此時選擇了高等軟件工程課程,在這剛開始固然不免有些想絮叨絮叨的,還望各位看官老爺們海涵😄。若是對此沒有太多興趣的話,能夠直接跳轉到下一節。html
其實也沒啥,不過就是老調重彈而已,此處是一點我的的過去履歷,本文不做贅述,也沒太多可說的。簡單來講的話,筆者自認爲能夠算是有必定的代碼和工程經驗,對一些問題應該還算是勉勉強強有些理解。java
此外,筆者在本科期間,擔任過2019年度的面向對象設計與構造課程的助教組長,作了點微小的貢獻:git
- 分不一樣層次,調研了原有課程體系的問題表象
- 基於問題表象,抽象了問題內涵,並理順了相關的邏輯關係,找到了幾點根本癥結所在
- 基於上述分析,從新設計了課程制度,構建了全新的分佈式課程系統,課程內容也必定程度上進行了重構,並最終取得了階段性成果
- 此後,做爲高階助教指導下屆助教的工做與進一步改革,並提供系統技術支持與指導
- 再此後,卸任助教,擔任課程組顧問,參與部分課程事務並負責持續提供系統技術支持與指導
關於對這個本科課程的一些思考和說明,能夠參考下我知乎上的回答,以及其餘的一些博客內容,此處再也不贅述。其實說這些,主要是感受若是是個人話,或許能夠從一種不同的視角來看待這門新的軟件工程課程。算法
我的的一點碎碎唸到此結束,接下來是我的針對課程的一些思考。jvm
我的對課程的理解與指望
目前讀了已經提交的幾篇博客,能感受到這些同窗們無論怎麼說,態度很認真,很值得欽佩。不過也不得不說,確實體現出來了一些實實在在的問題,或者更準確的說,是此類課程都廣泛容易存在的實實在在的問題。maven
以前筆者做爲助教實際上也廣泛發現了相似的狀況,並作過一些學生視角層面上的思考。此外,還和老師們有過一些交流了討論,在此我做以下思考:分佈式
- 軟件工程課真的沒有意義嗎?NO!做爲過來人,個人感受是,不只有意義,並且意義大了去了。有不少課程上教的理論內容和實踐要求,偏偏在實際工做中是相當重要的。舉例來講,面向對象的各類設計要求,看似很無謂,但實際上正是有了這些,大規模團隊開發的質量纔有可能獲得保障。各類文檔的撰寫,看起來很無聊很累,可是隻要項目一大,人數一多,對代碼沒有充分且規整的記錄的話,那麼團隊協做將基本不可能,軟件的後續開發與迭代效率將以肉眼可見的程序急速降低,這對於任何團隊和組織而言都是絕對不可接受的。這些事情真正作過實際應用向工做的人應該沒有誰不明白的。
- 可是爲何這麼多學生就是以爲這些事很無聊很沒意義甚至很扯淡呢?恩,這是個好問題!其實生活中就有相似的場景——有至關一部分的中老年文學做者(固然普通人也大抵相似,只不過文筆不夠好不能作到讓本身的故事盡人皆知而已),回憶年輕的時候,都會發現本身的長輩某些勸告簡直是至理的,但是還有更微妙的一點,那就是這些人廣泛表示本身年輕的時候可不懂這些,並且大抵還都獨斷獨行過。其實這個道理相似——由於這些經驗顯然不是空穴來風,都是經驗豐富的實踐者們用本身雙腳丈量出來的最好的路,但是這些都是創建在豐富實戰經驗的基礎上的,對於缺少經驗的學生而言,這些就會很容易變得像是在單純的灌輸和說教,不只起不到應有的效果甚至可能加重反感。
- 那既然這樣該怎麼作呢?另外一個好問題!私覺得最根本也是最直接的解決方案就是將實踐真真正正的引入課程中來。不少時候,光說不練不可能領悟到真正的內容,在計算機這個專業,尤爲是軟件工程這個方向上更是如此。理論終究仍是爲更好的實踐而服務的,都是無數前人總結出來的乾貨。而沒有充分的實踐經驗爲基礎的話,思想意識上首先就不可能達獲得這一層。私覺得這也正是北航六系的一個亮點所在,幾乎全部的關鍵專業課的課程組,都在這一點上達成了高度共識。
- 那應該怎樣在課堂這樣一個有限的週期內進行實踐訓練呢?這個問題問到點子上了。其實,很多相似實踐類課程之因此效果欠佳,倒並非由於平鋪直敘,而是沒有處理好無限的工程實踐與有限的課程週期的這組矛盾。對於這個問題,比較容易想到的一種方式,就是加大工做量。實際上這毫無疑問是必要的,沒有充分的實踐經驗培養,不少問題的理解根本無從談起。可是另外一個值得思考的問題在於——真的是越累越好,甚至於向辱而生麼?我我的以爲實際上並沒必要要,最佳的一個狀態,是強度保持較高且恰到好處的水平,而且課程自己須要具有充分的引導能力,將學生的付出引向正確的方向,簡而言之——好鋼用在刀刃上,讓師生助教的時間都花在正確且高效的地方。
- 此外,課程層面上還有另外一個值得注意的地方,那就是是否適合直接將產業用技術、方法及其工具鏈(下文統稱產業應用)直接引入課程教學中。這個問題我在以前的面向對象課程中也面對過,曾經使用的JSF是一個不算成熟且有頗多缺陷的實驗型工具暫且不論,後續引入的是JML、UML相關工具鏈,這是都在嚴格軟件工程領域有必定應用的,實際產業應用的推廣足以證實其對於產業的價值。可是產業的應用場景和教學的應用場景依然有很大的差異。具體來講,產業應用重在提升產業開發與協做效率,而且經常有一個基本的前提與假設——使用者是在以提升開發效率爲目的進行工做的(相似於no evil原則)。而這個假設對於課程應用來講,可能會形成致命的後果,由於學生經常並不能作到這一點,偏偏相反不少學生更像是在爲了經過某種考覈而工做。而產業應用經常由於其需求性質,而不具有對教育與考覈相關功能的充分支持,因而就會形成不少鑽空子甚至嚴重破壞教學與考覈秩序的狀況出現。固然,說這些不是說不該該引入產業應用,只是說不該該直接盲目地,生搬硬套地在課程中引入產業應用。爲了解決這一問題有兩種基本思路,其一是基於產業應用,自行設計教學考覈用應用,這樣能夠作到量身定製可是對於課程組而言水平要求至關高;而另外一種思路,則是進行充分調研分析後,設計出合理的教學內容與方法,輔助以完善的考覈方法與制度,實現公平合理且引導性良好的考覈。
以上是本人對課程自己的指望,接下來講說我本身的。其實我本身的部分很是明確而簡單:工具
- 但願課程能在我本來的一些基礎上,進一步強化理解與技能水平
- 此外,但願此次帶團隊的經歷能給我帶來teamwork方面上的提升
大概就是這樣。學習
我的對項目的理解
宏觀理解——如何作好團隊工做
在這裏,實際上筆者也認真拜讀了以前幾位同窗的博客做業,一樣的,我以爲他態度很認真,很值得欽佩,就這一點而言比我這樣十足的懶漢強的不知道到哪裏去了。那接下來,我這邊也儘量結合過去的經歷談談本身對項目這件事的宏觀理解。測試
讓咱們回到這節的標題上來,如何作好一個項目,在宏觀層面上我是這樣的看的:
- 認清形勢。具體來講,這個團隊的牽頭者必須對行情有充分的瞭解,且具有冷靜理性的頭腦。不可陷入經驗主義從而做出不合時宜的判斷。
- 具有合適的行動路線。基於上一點的準確認識,而規劃出一條比較適合此時此地此些人的行動路線,尤其重要。切忌基於過去或者他人的某些所謂「成功經驗」而全盤照搬,由於成功不可複製。
- 合理統籌規劃。事實證實,一樣的一個班子,一樣的一批資源以及相似的所處環境,不一樣的規劃下實際作出的成果可能天差地別。做爲計算機科班出身的人應該會知道一個問題,分佈式系統的運行效率很大程度上取決於其內部的調度算法。團隊工做也是相似的道理。
- 充分的團隊協做。這一點依然很重要,畢竟不管什麼時代、去作什麼,最關鍵的都不是幾件紙面參數厲害的武器裝備,而是使用它們的人。一個團隊如果具有強大的凝聚力與行動力,那麼在搖搖欲墜之時可屹立不倒,在衝鋒號響之時可重拳出擊,望風披靡。
簡而言之,以上問題,分別解決的是幾個問題:
- 咱們是誰,咱們在哪,咱們有什麼?
- 咱們該往哪裏走,該去作什麼?
- 咱們該怎麼去作,該讓誰去作?
這些看上去像廢話同樣很簡單而又假大空對吧?可是實際上並不那麼容易都作到,這是很真切的體會😢。不過若是能作獲得這幾點,那很 多事情基本上已經算是能夠正常運轉了,即使偶爾偏離航線也有充足的修正能力。某種意義上,宏觀工做的優劣決定了項目成果的下限。
微觀理解——如何作好合做開發
在上述的基本面上,想要作好合做開發,依然須要更加微觀層面上的一些注意點。此處我談一些我的的理解。筆者在微觀層面上是這樣看的:
- 基礎要求
- 全體人員的重視度與投入度。這一點毋庸置疑,也能夠算是一個團隊最最基礎的,缺少了這一點團隊基本沒什麼能量可言。
- 團隊成員對總體技術棧的瞭解和把握。具體來講,就是須要對所需使用的技術棧與工具鏈等有充分的熟悉和了解,好比對java、git、對plantuml等工具的瞭解。這也屬於很是基礎的要求。
- 團隊領導者對狀況的掌握能力。具體來講團隊領導者須要對眼下的狀況(包括成員內部關係狀況,技術積累狀況,資源積累狀況等)有充分的認識和了解,並須要必定程度上具有抽象思惟,將狀況進行準確理解和描述。
- 基本要求
- 團隊成員的技能水平與熟練度。這一點和上面相似,可是對技能的要求更高一些,須要作到熟練操做並完成任務,並可以造成必定的規範性,且保證質量可靠。
- 團隊領導者對狀況的分析能力。在充分掌握狀況的基礎上,還須要作到對狀況的分析,找出真正的成功關鍵,以及真正的失敗緣由在哪裏,而不是人云亦云,或者頭痛醫頭腳痛醫腳。
- 團隊領導者對各種資源的調配能力。在充分掌握資源狀態的基礎上,還須要能作到合理配置資源,作到充分的物盡其用,並作到充分的並行化以提升效率(實際上,大多數的團隊協做效率提升,其精髓都在於這並行二字)。
- 進階要求
- 團隊成員對大方向的充分了解與承認。實際上,一流團隊擁有共同的信仰,二流團隊擁有共同的利益,三流團隊擁有共同的敵人,不入流的團隊別名烏合之衆。一個團隊的大多數成員要是能作到很清楚本身究竟在作什麼樣的一個事業,並對此充分承認,而不是對某個領導者我的崇拜(這樣的團隊很脆弱)或者純粹逐利(因利而聚的團隊註定因利而散),那這樣的團隊將擁有史無前例的凝聚力和行動力,且堅如盤石。
- 團隊成員之間的相互信任與支持。同上,團隊成員之間的充分信任,以及通力協做,能夠極大減小團隊內耗,提升效率。
- 團隊領導者的大方向把握能力。領導者須要對整個環境有充分認識,並基於此做出整個團隊將來走向的決策。這是關鍵中的關鍵,甚至能夠說,哪怕別的全有而這個沒有,也八成會走向失敗。
以上算是我的的一些簡單總結,可能並不全面,還望指正😄。這些方面則是一些具體執行層面上的注意事項了,通常來講想要作到雖仍需修煉,但並不是高不可攀。作獲得這幾點,意味着主線工做已經能夠正常展開並有力推動了,能作到開足馬力向目標前進。某種意義上,微觀工做的優劣決定了項目成果的上限。
提早分析——對自選項目的理解
咱們組本次選擇的項目是Program knowledge提取
,須要完成的工做有需求、設計、實現與測試。我的感受,這樣的項目實際上說難也難,說簡單也很是簡單,難在一些前置的技術棧須要去充分了解,而且爲了獲取最佳學習體驗,須要作足功課;簡單在於在完成上述的準備工做後,接下來就是系統設計與實現,這些都是本人足夠熟悉的領域。
實際上對咱們這邊來講,完成任務是穩得,因此我認爲更須要關心的是如何讓本身得到真正的提升,而完成任務只是手段而不是目的。
勤能補拙——自我拯救補課計劃
考慮到筆者仍有較多不成熟的地方,因此筆者以爲本身實際上很須要進行一些補課,在此簡單列舉一下:
- Java部分,筆者雖然有過必定的java開發經驗,並熟悉maven等工具的使用,可是依然有必定的知識空白鬚要填補,以適應複雜的程序分析需求。其中包含:
- jvm底層知識,須要能夠基於指令進行必定行爲分析的程度
- java語法深層知識,須要達到能夠對代碼語義進行定量分析的程度
- 相關java工具鏈的使用,用於支撐語義的定量分析
- 建模相關部分,筆者雖有過感性體會與實際操做經歷,可是並未太多深刻研究過詳細理論,這部分尤爲須要惡補。其中包含:
- UML及其相關工具鏈的使用與理解
- 在上述基礎上對建模這一律念自己的更深度理解
- 團隊協做及資源配置能力,這個自沒必要說,團隊協做的成敗與我這個團隊leader有着重大關係。這個的話沒辦法很細緻的羅列補課清單,大概只能實踐中不斷學習吧。
一點隨意的總結和大量的胡言亂語
以上的部分算是個人一些思考,感受本身還須要學習的東西仍是太多了。並且,這注定不是一個輕鬆地過程,每每伴隨着破,以及然後的立,人這種生物,思惟永遠帶有一股子慣性,想打破原有的溫馨區並非件容易的事,須要充分的覺悟與執行力。具體來講,當你隨便碼代碼,碼習慣了碼爽了,而後有一天正兒八經教你如何像個正經工程師同樣的碼代碼,這時候不少人就開始不肯意了,也不爲啥,就是不愛被管這管那,尤爲青黃不接又不得不服從的那段時間,並很差受。可是當瓶頸過去了,纔會明白,所作的這一切真的都是血賺的,關於這一點,懂的人都清楚。爲此,我會拿出個人認真勁,並拿出學習的姿態來面對課程及其做業,由於我相信其意義,更相信本身。
此外,估計後續還會有選了這個課的人看到個人這篇博客。爲此我我的比較想提醒一句,若是你真的想要有所收穫的話,就請務必擺脫學生思惟,以徹底面向實戰的心態進行學習與訓練。接下來的話可能會揭有些人的傷疤並引發不適,筆者對此表示遺憾並請玻璃心們主動繞行。首先我看到部分同窗退選,而緣由僅僅只是由於據說課程是硬核的,就馬上打了退堂鼓。關於這件事我不想過多揣測他人,我沒這個德也沒這個能,何況有些人總歸是有本身的規劃的,對於這樣的人咱們固然應該尊重,由於他們爲了本身的信仰而去作了一件正確的事,這很是好。但是若是僅僅只是由於畏難就這麼撤了,或者沒有撤而選擇消極應對,那真的有些使人費解。首先,逃避能夠解決什麼問題?逃避只能讓你除了收穫無底洞般的空虛和恐懼以外一無所得。而後,請問您真的以爲就能夠一直這樣下去麼?還真別說,我在本科階段遇到過不止一個這樣想的人。這些人一個廣泛的特色,就是認爲現實社會和童話同樣美好,其中一部分人以爲天下無賊歲月靜好,另外一部分人更簡單,由於他們根本什麼都沒去想過,也壓根不關心,今朝有酒今朝醉,哪管明天是與非。他們壓根不明白,到了那個時候,本身的那點小確幸小尊嚴,以及引覺得傲了十幾二十年的考試分數,在現實面前一分錢都不值,哪怕是最被視爲硬通貨的文憑,在起到敲門磚做用後也和廢紙沒有本質區別。現實永遠是最簡單粗暴且不乏殘酷的,沒有那些奇異瑰麗的美景,取而代之只有——勝者與敗者、王侯與匪寇、生存及毀滅。筆者曾被這些人反駁過「爲何課程要這麼難?」、「爲何要和學生這麼過不去?」、「學這些有什麼意義?哪有一個用得上的?」、「我辛辛苦苦18年高考到這就是爲了來被一門課爲難的麼?」等種種言論,簡直無奇不有。對此,筆者的一個統一回復是——您和我在這掰扯沒用,請您直接去找你將來的上司、將來的老闆、將來的客戶、將來的競爭對手,還有將來來基於各類或利益或其餘動機的敵對勢力去「友好商談」一下,看看他們會不會由於大家不知道幾年前曾經被叫作學霸會多考幾分抑或長得有點帥,就給大家如此「水」,如此「輕鬆愉快」的環境。然而事實是,他們不只不會放你一馬,還會將你如同打獵般擊潰後提着你的腦殼殼去領功。到那時候,曾經在學校高潔風雅不可一世的您,充其量不過只是他們碗裏多出來的一塊排骨而已,吃完肉剃乾淨骨頭就被吐進垃圾桶,遂自仰天長嘯曰「世道不公人心不古」、「時運不濟懷才不遇」、「內卷之害甚矣」云云,嗤,止增笑耳,早知今日而又何須當初😆。筆者忍不住想起了某位偉大的北大教員,由於他的思想實際上從未過期,過去如此,如今如此,將來也必將如此。
說多了,扯回來,無論怎樣,我我的是但願真刀真槍地再次強化本身的技術實力與技術理解。而且但願同組的小夥伴們也能徹底以實戰的心態面對此次集體協做,而不是隻是爲了完成課程甚至只是應付苦差事。這樣不管對本身,仍是對組員,都是更好的。