1. 程式人生 > >鄒欣老師答東北師大學生問

鄒欣老師答東北師大學生問

鄒欣老師於2018年7月14日上午在東北師範大學與參加過構建之法(現代軟體工程)課程學習的同學座談。鄒老師概述課程後,同學們自由提問,鄒欣老師當場作答。以下,共9段問答,根據現場同學實際的視訊整理而來,並保留了口語的特點。整理者都是東北師範大學計算機系的研究生,冉華、劉淑霞、代秋彤、高遠博。

問答一 初始的動機。

整理人:冉華

學生1:楊老師是我從本科的時候,因為我跟著亮哥,也就是齊嘉亮學長在資訊化辦做事,所以有機會接觸到。因為我們學校的每個專業開課是需要一定的人數,當時是亮哥,然後還有鄭蕊師姐和實驗室的師兄幫老師找同學來上課,而我當時因為認識亮哥,那我就跟著來上課了。
鄒欣老師:對。

學生1:

當時接觸這個課之後,我收穫挺多的。第一收穫就是讓我自己對軟體工程有了一個興趣。因為那個時候的我是很糟糕的,自己基礎也不好,接觸專案也很少。後來在楊老師那裡受到了很多折磨,現在想來還是很痛苦。而一直令我不解的一個疑惑就是,老師最開始為什麼會有一個想法,也就是到各個高校推行構建之法,出於一種什麼目的,又或者說是因為哪些經歷而讓您決定了到各個高校去推行構建之法,我很好奇您的動機。

鄒欣老師:那我剛剛講的你都覺得不是解釋?那不夠解釋?

學生1:對。某些事是您突然想到的,還是?

周筠老師:這些在剛剛已經講過。

鄒欣老師:沒關係,我們再講一下。

學生1:但我覺得,就僅僅是出於,比如微軟面試這類事就讓老師產生推行構建之法的想法,我覺得這些事作為理由還不夠強烈。

鄒欣老師:對。我從一個軟體工程師,變化到推廣一種較新的《軟體工程》講課方法, 當然有一些主要和次要原因。 我們當時跟清華大學有合作,領導讓我講軟體工程這門課,這就是一個主要原因。我講了之後,大家反應還可以,我就繼續講下去了。 並且我在不同的學校中發現現有的教學方法還有很多可以提高的地方, 我就想把好方法介紹給大家,所以現在有三十多個學校的老師都來參與改進的工作。 有了這個社群之後, 我更覺得要把這件事情做好, 覺得這個動機還不夠強烈嗎?

學生1:哦,我明白了,謝謝老師。

問答二 推廣和協作是教學的一部分,軟體也是如此。

整理人:劉淑霞

學生2:我認為軟體工程這門課很好,這是一種新的教學模式或者說是一種新的教學改革,這不同於以往的教學培訓方案。您是一個教學研究者,是以教授這門課為主要目的,還是以推廣這門課然後讓更多人受益為主要目的?我想問的是您是如何權衡這兩者之間的關係,是如何研究這門課讓同學更容易學習,還是研究如何將這門課推廣到全國各大高校?

鄒欣老師:簡單地說,是分享如何能有效地講好一門課。在講課和分享的過程中,你會發現與人合作是一個非常重要的技能 --- 但是大學生沒有得到訓練。 學校也鼓勵幫助同學,要有集體主義精神,等等。但如果在高考考場上,只有你一個人神志清醒,別人迷糊了,這時候,你不能幫別人,因為那是作弊。 而且別人考試失常對你個人是有好處的。 我們從小學一年級到高三、大學幾乎都是這樣,獨立考試獨立完成任務,不能幫別人。那你怎麼能突然畢業到了公司就馬上集體主義、馬上合作呢? 我估計因為你從來沒有得到這種訓練,所以你是不會這麼做的,或者做得不好。
在公司的專案中,大家都是競爭與合作的關係,就像球隊打球一樣。我們一起把專案做好,但是最後報酬是有高有低的。在專案團體中你不希望別人都很爛,只有你一個人很強。如果這樣的話,整個團隊就失敗了,你也沒有得到好處。 在團隊中,如果我覺得某個人做的不對,我是應該給他反饋讓他做好,而不是貶損他、罵他或者背後說他,或者等著看他的笑話。什麼是有效的交流手段呢?最基本的就是一對一的交流, 實際上就是結對程式設計這個思路。所以在軟工課上,我們先做個人專案,再做結對專案,最後做alpha/beta 版本的團隊專案,中間專案換人。這都是創造機會讓大家練習交流能力,協作能力。
要把這課教好,就得研究教學規律,還得了解學生的心理。最初我是對教學規律懂得非常少,在實踐中瞭解了一些,也看了一些關於教學的書。 你說這門課是一個創新,事實上也不全是。這個課在國外好的大學就是這麼教的,已經教很久了。把一個看起來比較好的教學方式引入到國內,並且能夠落地,這也算是一個創新。因為有很多好的事情引入到國內實際上並沒有落地。 我們要分析原因,但是光靠情懷,光靠錢是不行的。這個原因大家可以分析一下。

學生2:好的,謝謝老師!老師我還想問下,我們國內有多少所學校教授了軟體工程這門課?

鄒欣老師:學校一年的課程分為春季學期和秋季學期,按照一個學年來算,每年有不下40個學校教授了這門課,學校從清華北航到三本,有些職業高中也開了這門課。

學生2:好的,謝謝老師!

問答三 時間,20年的準備

整理人:高遠博

學生3:鄒欣老師寫作這本書花費多少時間,他怎樣平衡寫作與工作之間的關係。

鄒欣老師:當然花費了很多時間。

我後來講的另外一門課叫現代程式設計。就因為我意識到說這些人如果沒有經歷過很好的程式設計的鍛鍊的話他是不可能做好軟體工程的。所以我們在北航也開了《現代程式設計》這門課。 沒有教材,我一上課就說: 同學們,讓我們一塊來做這道題,第二節課, 還是做題練習。第一節課時我們一共有70個人選課,經過做題之後,只剩下20個人聽,好多同學走掉了。這樣,十節課我們就做了十道題,難度由淺入深。後來我就不講這節課了,因為反應比較差。過了半年有的同學反饋說, “鄒老師,正因為上了這門課,我對軟體和程式設計有較深入的理解。而且我現在要寫簡歷申請學校, 我列出了自己的成就,大部分有分量的成就,都是在這門課上學到的。 我現在意識到這個課的價值了。”
我想:這不是一個很好的結果嗎? 當然提早退課的學生沒有獲得這個結果。
可以說,在我工作的前20年,我都在為這個目標做準備。因為我一直在做專案, 把做高質量專案的方法交給學生,就好了。
但是,也有別的公司的工程師去學校講課,大都是失敗的,因為學生不做作業。我看到某個有名的公司的工程師去學校講課,他很有情懷, 開始講這個大牛是這樣做軟體的,那個大牛是那樣。因為他覺得一旦講了那些大牛的故事學生就應該很激動,就應該開始寫程式碼,對吧。但是同學們就都非常茫然,也沒有行動。

光靠情懷是沒有用的,因為教學是有規律的。他不能靠打雞血,靠喊口號式的教學來取得紮實的成果。

然後寫書呢,寫這麼厚的書,因為我剛開始07年寫過一本《移山之道》, 所以這個是第二本,和第一本相比,改了很多東西。 這裡面的很多素材是我生活和工作中碰到的,所以我很有感覺,而不是去一個很不熟悉的領域蒐集資料。生活和工作給我無數多的靈感,有意地長期整理,你就可以用它們做一些事情。 我們現在出版業也比較靈活,編輯們給我很多支援。 這書正式的版本是第三版,但中間可能改了有十版之多, 我們隨時發現問題隨時可以改進,然後就可以印刷,印刷雖然還是這一版但內容會有些變化。 不斷改進的結果是讀者評價還不錯。從07年到現在已經11年,11年才寫了一本書,你這樣想時間也比較長,但是結果還可以。

問答四 教師與學生/健身教練與學員/導遊與遊客

整理人:劉淑霞

學生4:我的程式碼能力基礎不好,看到練習題題目就寫不出程式碼,看到答案就會做了,自己想不出來。像我這樣的情況,除了刷題,我還應該做些什麼?

鄒欣老師:這個同學的提問讓我想到了一種模式,這個模式很有意思,就是導遊和遊客的關係,這個關係比我們推崇的 “健身教練和健身學員” 的關係差一個等級。你看遊客從來不流汗,有一個描述遊客的順口溜:上車睡覺,下車尿尿,到了就拍照,回家全忘掉。在導遊和遊客模式中,老師會說 “同學們快來領略一下軟體工程靚麗的風景線!” ,

同學們就會這樣說,“哦,我看到了,這樣啊,有例子嗎?看到例子就會做了,自己寫不會,沒想明白”。 然後就去下一個風景點。

這位同學就是處於遊客的狀態。到了旅遊點,你和導遊說, “我太累了,不想下車,可以在車裡等嗎?”

很多課程就是處於導遊與遊客的狀態,學生彷彿領略了各種專業課的大好風光,至於你真正學了什麼就難講了,遊客狀態的學生就會和每個知識點合影,而遊客狀態的老師對期末考試的要求也會比較寬鬆。像這個提問的學生呢,就得多練,比如健身,光看健身視訊沒用,得自己親自去練。這個學生可能把自己和老師的關係擺在了導遊和遊客的關係。東北師大就像知識海洋中的旅行團,大家要想健身獲得能力,就要多流汗,多練,多摔跤,得達到這種狀態, 才能真正學會。

問答五 最小代價

整理人:劉淑霞

學生5:我現在是研一嘛,就一直想著,就是在研究生的課程和實踐專案,這些應該如何權衡?

鄒欣老師:你是說這兩者有矛盾嗎?

學生5:對,因為可能是精力有限的。我應該是把重點放在開發專案上面還是說重點把精力放在研究生課程上。

鄒欣老師:你現在是跟著老師一個實驗室做東西嗎?

學生5:對。

鄒欣老師:我覺得這個問題挺好。實際上,你應該問你的導師和你的老師,對吧? 因為要溝通,對不對?比如說,你問你的導師,請你給我講一個最小的努力,什麼程度是最小的努力,我就可以從你這裡拿到一個學位。而這是很自然的,你心裡一定在想這個問題,對吧?因為你精力是有限的,因為你還要享受生活。你有女朋友了嗎?

學生5:有。

鄒欣老師:對,那還要照顧女朋友,對不對?同時你也可以問這個老師,比如上這門課,老師,那你這課中什麼是最低的要求,我就可以得到一個“過”。
這個我覺得很正常,難道不應該問嗎?一旦你有了疑問,就有了很多假設,我要二十四小時都來實驗室才能過嗎,那你女朋友也受不了。可能老師也不能理解,我不就是講這麼一門課嗎,你非得跟我這麼起勁。所以你一定要了解雙方的期望值是什麼,那導師也對你有期望值對不對?所以你應該講出來,那導師你對我有什麼期望值?我覺得這應該擺在明面上,對吧?一個禮拜來多少次實驗室,如果他說七天的話,那老師,我還有個女朋友,那要怎樣?我女朋友可以來嗎?你一定要了解好,否則就會有很多矛盾和誤解。你覺得你做的很不錯,但導師覺得你做的特別差勁。

當然你直接問:“什麼是最小的努力讓我可以從你這兒得到畢業證”,老師會覺得你這人沒有情懷。情懷這件事情,有時候你把它挑明瞭說,反而讓大家覺得很尷尬。那你可以以一個比較合適的方式問,老師會告訴你,什麼是最低的要求。然後呢,你也可以問你女朋友,你說我一週應該陪你多少天,最少的時間是多少,你才能繼續做我女朋友。你還可以問進階問題,如果我們關係要再進一層,應該做到哪些點?這個我覺得也可以談,對吧。挑明瞭不就更好嗎?否則,如果別人忽然對你很冷淡,你也不知道為什麼。

學生5:謝謝老師!

問答六 真正的快樂或者持久的快樂,是你克服了困難,達到了一個你以前達不到的狀態

整理人:代秋彤

學生6:鄒老師、各位老師好,我是第一節軟體工程的,是上的楊老師的課。我先談談自己對軟體工程課的理解。

鄒欣老師:兩句話,談談感想,濃縮一下。

學生6:以理論為基礎,以工程為依託,以自律為動力的一門課程。

(一片掌聲)

鄒欣老師:水平高!

學生6:(學生鞠躬,表示對老師的感謝)。我主要的問題是最後的自律,也就是動力從何而來,我們如何能從各方面提升學生對學習這門課的興趣。茶話會麼,我們就隨便談,我自己想到的一個就是,我也是切身體會麼,老師的個人魅力真的特別、特別吸引我(此時老師們讚揚楊老師)。我的切身體會麼,就是老師的個人魅力對這門課的,比如說興趣啊,比如說學生的動力啊什麼的,都是有各方面的提升的。然後,我更希望老師能從各個方面和各個維度展現他自己的魅力。

鄒欣老師:那這不是健身教練和學員的關係了,這是模特和觀眾的關係了。

(一片笑聲)

學生6:但你,你能和他有一種……怎麼說呢,有一種嚮往,你希望成為什麼樣的人,希望成為像他那樣的人。畢竟是老師講的這門課,首先我要對這門課有學習的興趣、學習的動力,再就是希望之後比如技術方面有什麼進步,這都是後話。主要就是,首先要把人吸引過來。我就是想問下老師,《構建之法》這本書或者這門課對同學有哪些吸引,之後還能從哪些方面來吸引更多的同學,讓更多的同學喜歡上這門課,更有動力去完成一些自己不敢想象的事情。因為當時,說實話我上這門的時候,情緒比較低落。

(一片笑聲)

鄒欣老師:是不是因為老師導致你情緒低落的。

學生6:不是因為老師,但是是老師把我從裡面拉出來的。主要是這門課,不說打發了那種迷茫的時光,而是說從這門課裡找到一些對自己的認可。

鄒欣老師:好,謝謝,謝謝這位同學。我覺得總結的非常好,我就一點來講,實際上很多同學在學校裡都想把這門課學好,他也希望能度過一個快樂的大學時光,這也是為什麼有些同學找了男朋友和女朋友。比如說這個課如果比較容易,你可以得到些快樂,因為很容易就過了,得到了一些驚喜。
但真正的快樂或者持久的快樂,是你克服了困難,達到了一個你以前達不到的狀態,學習這門課的過程中是有困難的,學習軟體工程這門課也是有困難的。所以我覺得,當我們這些同學堅持上完軟體工程的課的時候,他可能會得到一種滿足,付出的努力,獲得的收穫。比如我們的助教,周老師,還有很多編輯,我們的同事,做一些事情的時候也有很多埋怨、不理解,但你克服了這些困難之後,你取得了一些練習成果,會很高興。
你在大學的時候,比如大學四年或者研究生兩年,真的克服了很多困難,將自己提高到了一個比較高的的水平,那這件事我覺得這會是你人生中比較重要的階段。如果說你很愉快的過完了大學四年,沒有人來挑戰你,你很多的課都輕鬆的過了,那也許你是天才,也許你虛度了光陰。大學的課應該都是有難度的,大學就是一個大量訓練的學校。比如說,那些大師對於學生來說,大師肯定有魅力,但是你一定要努力,而且是大量的努力,才能成長。最近教育部領導講,本科是大學之本,另外很多教育界的人士對這方面的有著思考和憂慮,就是說如果把大學當成餐館的話,就是收錢給別人吃飯,為了討好顧客而放鬆很多要求,這其實是不對的。大學就是困難的,我們這課就是會有人覺得苦難,覺得不行,這很正常。

問答七 科學、技術、工程、哲學

整理人:高遠博

學生7:我想提個建議就是說,在座的各位可能都是研究生,學術碩士或工程碩士,就是說可能有科研方面的追求,但是說科研和工程這兩個可能交集不大,然後我想提的意見就是雖然他倆交集不大但是都有關於做實驗的,我希望在軟體工程這個書上能夠新增一些就是說怎樣設計實驗,做實驗應該遵循怎樣的規範這種問題。

鄒欣老師:太好了,剛好我這個ppt講了這個東西(展示課程概念PPT中關於科學、技術、哲學關係的頁面)。書裡說電腦科學和軟體工程是兩個東西。電腦科學就是研究長期的真理。軟體工程是在短期的各種約束條件下我要做的足夠好,是一個各種因素折衷下的解決方案。但是它們不是說是割裂的。伽利略在做望遠鏡的時候的時候實際他是一個匠人,是一個工程師,但正因為他做了望遠鏡,他指向了木星土星,這個科學大家他是近代科學的奠基人。打開了一個窗子,哦原來天上的星星是這麼回事,然後這個會引起一些哲學的思考,比如地球是不是宇宙的中心,人類是不是唯一的主宰,上帝是否存在。為什麼以前上帝沒解釋是這樣一種情況,對不對。所以工程和科學是很有關係的。當你不做科學,那你可以研究,你不做工程或者工程能力很差,當然你可以做一些科學研究,但你的研究是經不起考驗的,對吧。那還有一點就是說如果你的工程沒做好,對你的科學會產生很大的影響。這是我從知乎上找到的材料,在高能物理方面美國以前想設計高速的對撞機,但是他這個工程沒做好,專案花費超了,超了82億,93年工程被迫停止,然後這個研究的人就沒有工程的基礎,當然你可以在紙上寫寫畫畫,但是你沒工程,你不能做實驗。 據說現在這個領域高質量的論文都在歐洲,因為那裡有高速對撞機, 可以講,工程沒做好,就沒有科學的進一步發展。那麼也可以反過來問,如果我們要研究長期的客觀的真理。你走到師大校園裡,你碰到一個計算機系的老師,你問,老師,你發現了什麼長期的真理。他有麼,(如果)他沒有,他為啥沒有,他為啥不能做世界一流的研究?
學生7:那個,老師,全國全世界那麼多高校,大家都是在做研究,不一定你做研究就一定能做出成果。

鄒欣老師:對嘛,他也可以是在探索路上。他探索到哪去了呢?如果你繼續深問下去的話,老師可能說,我們正在做一個實驗,實驗裝置和程式不給力,我們做得很慢。以前,在微軟的研究院也有這種情況。一個實習生做的專案,演示的時候,只有他操作才不崩潰,別人操作都崩潰。這個實習生走了之後沒人懂這個程式碼,老師只能再招一個實習生再寫一遍程式碼。在這種情況下你會發現很多研究都在低水平重複。剛剛做完低等級,老師有很多想法他要做更深的更高階的,他做不下去了。因為他不會做如軟體工程。

學生7:研究生會比較關心這個跟科研有關的。

鄒欣老師:如果你找來一個牛人比如說寫Linux核心的,他來我們實驗室,你覺得他不能做出世界一流的研究嗎?對不對。難道他沒有科研想法嗎?他當然有科研想法,而且他能做出來。你找一個有很多科研想法但是工程能力很差的人…

學生7:有沒有可能一個科學家他有很多idea,但是他的工程能力不太強。

鄒欣老師:我想這個科學家也是不行。術業有專攻嘛,他一定有過人之處。

書上提到深藍。許峰雄剛開始做這個深藍專案的時候,當時他是一個研究生,跟你一樣。當時大家認為,用計算機打敗國際象棋的冠軍需要很多理論的突破。但是他覺得這就是一個工程問題 --- 我把這個演算法實現的足夠快,就能打敗國際象棋人類冠軍。他做出深藍之後再也沒有人在這個領域發表科學論文了,因為這個領域被他用工程的力量結束了。別人經常吹我設計了一門新的語言,什麼邏輯啊符號啊邏輯推理啊。可以完美的解決,剩下的只是一個實現問題。但是他把它做出來了。如果你覺得你很牛,你就把它做出來吧。現在的很多計算機的理論研究都是可以做出來的,做出來給大家看看唄。 所以我覺得這個恰恰是我們沒有非常好的工程師,沒有非常好的工程素養,沒有非常好的這種理念,沒有正確的認識,導致電腦科學上的許多研究在比較低的水平重複。當然這是我的一個比較武斷的看法,你們可以採訪比較職業的科學家,看看他們對科學和工程有什麼看法。

問答九 領導力

整理人:代秋彤

學生8:我問一個問題,就是我曾經上過這門課,我現在回想起來還滿愧疚的。是因為對於這門課程來說,就是團隊專案是這門課程的重要組成部分,但其實在一塊兒的同學吧,說句不好聽的就是各懷鬼胎,就是每個人的志向不一樣,他可能對軟體開發的興趣不是那麼大。

鄒欣老師:那你為什麼不用情懷去感染他們呢?

學生8:主要是我感覺我們不是上級關係,自己的口才也沒有羅永浩那麼好,不能用情懷去感染別人。說實話我交流能力也比較差,所以團隊專案該怎麼辦呢,雖然我們也嘗試地開了幾次會,但是發現開會總是打不起勁頭來,專案進度就會特別慢,然後老師要求專案每天要有一點進度,那隻能大部分工作是我自己做的,我就對同學和老師特別愧疚。

鄒欣老師:對同學有什麼愧疚的,你幫他們做的,他們應該感謝你啊。

學生8:是因為我沒有讓他們獲得更多的參與感和滿足感。

鄒欣老師:那就是他們都留在大巴車上,你去旅遊了,你把所有的景點都跑了一遍。

學生8:我感覺得作為組長,讓你的同學獲得更多的參與感應該是你的職責,對於老師來說你相當於欺騙了老師,他讓你完成的任務你沒有完成。

鄒欣老師:但是有個團隊貢獻分,就是你做了所有的事情,你把分全拿了,別人得零分就好了。

學生8:但是你要考慮到你與同學在現實中的關係,你跟他並不是上下級的關係。你如果全給他零分的話……

鄒欣老師:所以你又拉不下這個面子。

學生8:對,然後我就問可能在現實企業中也有這種團隊協作不太好的情況,我想問一下怎麼來解決這個問題。

鄒欣老師:這種情況當然有,體現在你怎麼給別人一個反饋,比如說他是在偷懶,你不是他的敵人,你不是他爸他媽,你也不是他的老師,你是和他在一塊做事情。那你怎麼說服他,這是一個能力,你以前也沒練習,所以你也沒有什麼招數。這是一點,軟體工程課給你了這個能力。第二點呢,也鍛鍊了你的領導力。這個領導力是我們在所有的教育中沒有鍛鍊到的,如果你把領導力退化成一個默默奉獻的能力,那你可能被累壞了。

學生8:確實比較累,其他組也差不多,只有一兩人主要付出,其他人工作比較少。

鄒欣老師:所以呢,這個回到老師的角度講,如果老師有充裕的時間話,他會對症下藥,但是他的時間有限。他也不能像劉老師那樣教一百多個學生,他如果每天跟每個學生談一小時,他別的事就不用幹了,這個就是現實中存在的問題。所以我們設計了一些環節,比如說貢獻分啊,換人啊,對吧。小組不是α和β階段嗎,那你做完α,把你自己換走啊。

學生8:我把自己換走……

鄒欣老師:對呀,你就去做別的專案了。

學生8:那當時還有一個問題,就是因為剛開學,大家可能不是太熟,在選人方面,對於每個人不是很瞭解。

鄒欣老師:其實你永遠會有這個問題。不太熟,你不好意思說; 太熟,你也不好意思說。在任何時候,你都可以說出來,但是你不知道怎麼做。因為這也是一個技能,需要鍛鍊的。優秀的領導者也不是天生就這樣,他也是通過很多鍛鍊變成這樣的。所以呢,你也可以鍛鍊自己。如果回到那個階段,你可以說,我要去另外一個組了,那原來的組我就不管了,這叫用腳投票。比如說一個公司很差,東西是你做的,但是你沒得到什麼認可,那怎麼辦。你就換工作,換公司,你幹嘛還在這待著,你能救他們多長時間? 當然,如果你有領導力,比如說把差的淘汰掉,提高整個團隊的能力,也可以。但我們這門課有很多約束條件,可以給低分,但不能中途就把別人都趕走。
所以在正常情況下,你還是可以有一些選擇的,困難是好事,那你就鍛鍊唄。

學生8:領導能力還是需要慢慢鍛鍊的。

鄒欣老師:對,你參加一個足球隊,一個健身的小團伙,都會有這種情況。很多人他開始說的很好,但是他後來不出力,很常見。但你不是無能為力,你畢業選擇去一個好的大學,去一個好的公司,去一個好的機關,那裡的人的素質都是你比較認可的,都想做事情,那你碰到南郭先生的概率會低一些, 可以做有意義的事情。 所以你自己是還是可以選擇的。

學生8:謝謝鄒老師。

鄒欣老師:沒事。