2010-04-22 72 views
14

我是一名計算機科學專業的學生,​​完成了我的第二學期的編程課。我很喜歡他們,並且學到了很多東西,但是看起來其他學生比我更難以理解和分配任務。當一項任務到期時,不可避免的團體電子郵件會在一兩天之前發佈,人們需要一些特定問題的幫助,或者有時人們似乎很難知道從哪裏開始。我該如何幫助在編程課上苦苦掙扎的同學呢?

我真的很想幫忙,但我很難想出正確的方式來給他們幫助而不給他們答案。當我在理解一個概念時遇到困難時,代碼片段可以幫助我,但同時如果它有很大的意義,可能很難想出另一種方法去實現它。此外,每個作業的學術誠信部分總是隱約出現開銷警告,與其他人共享代碼。我試過使用僞代碼來幫助其他人提供關於程序流程的想法,讓他們弄清楚如何實現它的某些方面,但我沒有得到太多的反饋,也不知道它實際上對他們有多大的幫助或者如果它進一步混淆了他們。

所以我基本上是想看看有沒有人有這方面的經驗,或者我可以幫助其他學生推動他們朝正確的方向發展,或幫助他們以正確的方式思考問題。

+5

我只想指出,同學們不應該是教育的資源,這是教學人員的用途。你很可能錯誤地理解了這個任務,犯了可怕的錯誤等等。所以理想的行動方式是不要幫助,讓他們跟老師討論。然後又有一些小的東西,比如「編譯器抱怨現在的WTF?」,在這些情況下試圖幫助,但確保它保持在五分鐘之內。 – NomeN 2010-04-22 19:51:11

+2

@Nome當然,除非你在開始的C++類中,並且你已經用C++編寫了> 5,000個LOC項目,因爲3年前你感到無聊了......這就是我所處的情況。我的課很沉悶 – Earlz 2010-04-22 22:09:17

+8

@NomeN我不同意這一點。我認爲一個對這些材料感到滿意的同學是有幫助的 - 有時候比老師更有幫助。爲什麼?因爲你們兩個分享一個POV。有些教師只是壞教師,就是這樣,一個同學可以在傳達一個想法方面做更好的工作。是的,有時一個聰明的學生會得到一個任務錯誤的問題,但如果他或她仍然知道這些概念,那麼他們可以幫助他們的朋友,而不是一個壞老師在作業中澄清問題。 – wilhelmtell 2010-04-22 22:10:09

回答

18

讓他們向您解釋他們的代碼。

這樣可以完成幾件事情:

  • 首先,它表明,他們實際上有代碼給你看。如果他們甚至還沒有打開文本編輯器,他們怎麼能不理解?
  • 接下來,它演示了他們理解基本級別的代碼。他們本可以從某處複製它。如果他們不知道他們的代碼的第一件事,那就是一面旗幟。 (如果他們確實複製了代碼,但仍然花時間瞭解代碼,那麼這仍然是學術上不誠實的,但在大學畢業後這是一項寶貴的技能。)
  • 最後,現在我們處於他們可能實際在你的幫助下(或者甚至可以不用!)得到它,如果他們到達了他們理解的洞(當他們向你解釋他們的代碼時)並且跳到他們那裏,那麼他們已經解決了他們自己的問題。如果他們不認識這個洞,那麼這就是你可以給他們提供有針對性的提示的地方。
+0

很好的建議,我真的很喜歡讓他們解釋他們的代碼。聽起來像是一個很好的開始,並找出他們真正做什麼,沒有得到什麼。 很好的建議,我很欣賞所有的輸入。 – 2010-04-22 19:58:10

+6

同意,一個好方法。基本上橡膠鴨子,你是他們的橡皮鴨。 – derivation 2010-04-22 20:06:12

+0

@derivation,我認爲這是來自Pragmatic Programmers或Code Complete,但我不記得哪一個。 – John 2010-04-22 20:08:31

0

在教學中最常見的問題之一是確定學生是否理解你。確定是否應該繼續或改寫的簡單而有效的方法是讓學生通過做一些密切相關但不相同的事情來表明他們的理解。

此外,由於編程本質上是單詞問題,所以學生將問題分解成幾個步驟很重要。在我向他們展示任何東西之前,我會要求看到他們的高等級穿越。太多的人在語法掛了,從來沒有真正明確,他們正試圖在潛水前要做什麼

3

的幾點思考:

  1. 不要結對編程

    有學生(中你正在幫助的人)坐在椅子上編碼。可以是代碼片段,可以是項目的一部分,只要它代表了他們遇到的問題。當他們走時,指出(不是粗魯的)他們可能做錯事情的地方,或者可以改進的地方。

  2. 審查工作完成

    一個幫助我的東西最是有一個對等(而不是教師或學生助手)審查我的代碼。大多數時候,同行可能會指出他們可能會以不同方式完成某些事情的地方。

  3. 讓他們重複你。

    我經常讓我幫助學習的人重複我剛剛說過的話,看他們是否理解它或有任何問題。當人們不瞭解某些東西時,人們不會說話的頻率會很高。

  4. 在項目到期前提供幫助。

    試圖在項目到期前完成項目是一種絕對的方法,至少不要像以前那樣徹底學習這些概念。

  5. 不編碼它自己

    你的同齡人將學習什麼,如果你爲他們做。

  6. 尋找其他資源

    的一名助手,一個友好的教授,你的同行的另一人可以是非常寶貴的資源。如果你發現你的教學風格與你的同齡人的學習風格不匹配,請將他們指向可能能夠幫助他們的其他人。

  7. 抱最好的希望

    你只能走這麼遠教一個人的時候;他們不得不學習。

+8

哦,和8:除非你確定你知道你在做什麼,否則不要提供幫助。不好的建議往往比沒有建議更糟。 – 2010-04-22 19:40:59

8

我曾擔任助理教授和CS部門的服務檯(並幫助哥們)。這就是我所做的...

抽象出這個問題,找到一個相關的問題,然後解決與他們有關的問題。如果他們不能建立聯繫,你無法真正幫助他們。

編輯:如果他們在一天或前一天尋找幫助,拒絕幫助的不僅僅是基本的基本語法。事情本來應該在截止日期之前處理很久。在當天拄着柺杖的人對你來說不是一個好習慣。

+0

絕對是一個好方法。 – justkt 2010-04-22 19:34:26

2

有一件事對你的同學可能有所幫助,那就是在講義中指出類似的代碼(或者如果你沒有在你自己的筆記中發佈講義)。這樣你只能向他們展示教授所說的內容,而是以有用的方式進行。

如果有其他學生開放,向他們詢問他們所嘗試的所有內容以及爲什麼會有所幫助。

最後,考慮去找你的教授,詢問他或她的意見,你可以做什麼以及他們如何建議你幫助他人。畢竟,教授們有多年的教學經驗。更重要的是,你將有機會在未來幾年成爲大學生嗎?我作爲一名大學生獲得了TA,這幫助我有效地運用自己的衝動來幫助別人,而不違反任何榮譽守則。如果你有這樣的大學生就業機會,讓教授現在看你,作爲有益的類型將幫助你獲得他們。

0

向他人解釋東西的一般經驗是找出他們先站在哪裏。儘量避免給他們解決他們甚至還沒有的問題(即使你確定他們以後會遇到他們)。換句話說,不要先走兩步。如果他們在理解按值時有問題,請不要解釋他們的遞歸。

-1

從心理學的角度

告訴他們一些流行的現實世界的應用(作爲一個例子),他們使用的日常...寫在相同的編程語言你想教.....

  1. 解釋背景
  2. 每一件事情給每一個學生,相當重視
  3. alwaysss使用顏色編碼語法
+0

人不是口袋妖怪。 – 2010-04-22 22:59:47

0

就一般幫助同學而言,我一般都是用「玩傻」的方法。我假裝我對他們的特定任務一無所知,我要求他們讓我加快他們應該做的事情。我還要求他們給我一個關於他們在課堂上學到的關於任務概念的快速結果。這通常需要大約5分鐘,大約95%的時間,其他學生在他們完成向我解釋時回答了他們自己的問題。如果他們在這一點上還沒有解決,我請他們引導我完成作業的解決方案。在這樣做的時候,他們通常會在他們的解決方案偏離他們剛纔所說的他們在課堂上學到的地方。

就程序特定的幫助而言,我有時會要求其他學生髮送他們的代碼,然後通過我編寫的一個簡單的shell腳本運行它。該腳本在而不是註釋的代碼文件中清除了所有內容,並將結果提供給其他學生閱讀。生成的文件通常會像其代碼大綱一樣讀取,並且很多時候只需將代碼隱藏起來就可以看到代碼出錯的地方。如果他們的方法是完全錯誤的,我告訴他們使用註釋來寫出代碼應該做什麼(以高級術語)的大綱;完成後,他們用實現該大綱步驟的代碼填寫大綱的每個部分(隨時測試每個「塊」)。這有助於很多人將代碼從算法中分離出來(許多常見問題來自於缺乏系統或有紀律的解決問題的方法,而這一練習有助於讓他們走上正確的道路)。

另一種方法是使用不同的編程語言來回答問題。例如,我通過使用C,Ruby甚至僞代碼(更像簡單的英語而不是代碼)解釋概念,幫助我的幾個同學在Matlab項目中學習。我知道他們對其他語言有更多的經驗,所以我用他們最擅長的方式來說明這些概念,並鼓勵他們首先用「母語」來解決問題。一旦他們確信他們理解了這些概念,他們就可以研究如何以目標語言實現它們。當你還在學習一門語言的時候,不得不學習新的概念,這會讓你更加困難。這種方法還有助於確定他們是否無法理解如何解決問題或如何對解決方案進行編碼。

2

我不認爲你應該幫助他們。我認爲這在學術上是不誠實的。此外,他們沒有幫助你讓他們回答問題,甚至不讓你回答問題,因爲一旦他們參加了考試(或現實世界),你就不會在他們身邊。他們不僅需要學習如何自己編程(這可能是你幫助他們做的),而且還需要自己解答他們的問題。這意味着發佈在像StackOverflow這樣的地方。你可能想要推薦他們制定一個具體的問題(總是一個很好的練習),然後用「家庭作業」標籤貼在這裏。

當我在大學攻讀CS課程時,有許多學生根本無法編寫代碼或設計(特別是我正在考慮高級軟件工程課程)。他們也不知道如何去解決問題,或者在哪裏尋找答案,在哪裏得到問題解答,或者問什麼問題。他們完全無能爲力,因爲他們大部分時間都是花時間在團隊中做家庭作業/項目,並且讓更多有才華的團隊成員手持他們。不要永存這個。這個行業最後需要的是更多無能的程序員,他們畢業後的成績很好,可以將他們的簡歷上傳。

+0

你說得很好。幫助他們編寫程序是我想盡量避免的,如果我要幫助另一個學生,我想確保我的幫助能幫助他們意識到如何自己解決問題。我看到的其中一件事是人們似乎沒有得到模塊化。我覺得有一些這樣的領域,有些人可以使用指導來幫助點擊這個想法。非常好的迴應,如果我在將來給予幫助,我需要確保有人想要學習,而不是尋找答案。 – 2010-04-22 22:15:35

+0

我不同意。幫助他們與給予他們答案不一樣。幫助他們更類似於重新教授他們可能沒有按照課堂教授的方式學習的概念。用它來解決他們的問題仍然取決於他們。你說他們需要學習如何「讓自己的問題得到解答」,但是這不是他們要求你尋求幫助的方式嗎?我同意,拖延別人的沉重負擔對所有參與者來說都是一個壞主意,但我不會說這是避免完全幫助同學的理由。 – bta 2010-04-22 22:32:53

1

每當我試圖教我的女朋友如何編程時,我幾乎什麼也沒做,只是提出問題。 (她在無聊之前得到了.each聲明)

問他們問題他們的代碼是如何工作的以及他們如何認爲他們可以完成任務。給他們在正確的方向輕推。永遠不要EVER爲他們輸入一些東西。如果你有另一臺電腦並輸入代碼來顯示它們並向他們顯示結果,那很好,但不要這樣做。

1

以下是我給我的學生老師的建議:避免給學生提供答案。相反,問他們的問題。並確保提出問題,他們可以問自己未來。對於我教的材料,這裏是我希望所有學生自問的一些問題:

  • 什麼是您的抽象?

  • 什麼是你的抽象應該如何表現的例子?你能向我展示另一個例子嗎?

  • 是否有任何您允許抽象失敗的示例?這個例子應該如何失敗?

  • 你測試過這些例子嗎?

  • 什麼是您的抽象表示?

  • 表示與抽象有什麼關係?你能給我看一張照片嗎?你能用數學讓我看看嗎?

  • 什麼功能被允許看到表示?每個功能的合同是什麼?表示是否滿足函數可以假設的不變量?每個函數都確保保持不變嗎?

  • valgrind是什麼意思?