<li id="2aw4k"></li>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
    <center id="2aw4k"><small id="2aw4k"></small></center><center id="2aw4k"><small id="2aw4k"></small></center>
    首頁»程序人生»如何教新手編程

    如何教新手編程

    來源:ituring 發布時間:2013-06-26 閱讀次數:

      過去的一年中,許多計算機專業的教授和教育專家都寫了關于 MOOC 如何擴大計算機教育服務的規模,使得成千上萬的學生都能享受到。而我想從另外一個角度,說一說我是如何在 9 個月的時間里向 1 位學生教授計算機編程的。

      2011 年 7 月到 2012 年 3 月之間,我給 Brian Goler 教授基本的編程知識;他是舊金山灣區一位有經驗的企業家,在市場、銷售和產品開發等方面都有廣泛的經驗。Brian 之前沒有編程經驗,但在幾個月的時間里,他就做出了 SwearBuy,一個讓那個人們對喜愛的產品發表評論的免費 web 應用程序。更重要的是,Brian 獲得了自學的能力,能夠接下來自己搜尋、學習更高階的技術內容。我的主要貢獻,是指導他克服一些通常會打擊初學者的障礙。

      背景

      Brian 通過我的個人網站上知道了我,因為里邊有幾篇計算機科學教育的文章。下面摘錄他在 2011 年 7 月給我發的第一封郵件里的一段內容:

    我們沒見過面,但我想試試看能否從您這兒得到些建議。

    我在網上搜尋能幫我學習編程的導師的時候發現了你的網站。更準確地說,我在上一門計算機課程,我希望找一個導師,每周能當面輔導我 1-2 次,每次 1 小時左右。

    我正在上 MIT 的 OCW 6.00 課程。盡管 OCW 和其他的在線課程都很棒,但我覺得如果有個人可以請教、還能檢查我的作業,并給與反饋,那我的進度應該會更快些,對概念的理解也會更深入。

    您在 MIT 和 Stanford 都待過,應該認識一些合適的人吧?或者,可以給我推薦下去哪兒找合適的人?當然,我會向輔導的人付錢的。

      因為那會兒我剛好不忙,于是我就親自輔導 Brian。我們第一次的一小時會面是在他家,第二次是在附近的一家咖啡館。之后我去參加某個學術會議,于是第三次的輔導我們就通過 Skype 在線視頻電話進行。我們用了 Skype 的屏幕共享功能,這樣在聊天的時候我就能同時看到他的電腦屏幕。這種形式非常適合輔導,于是我們決定接下來的所有輔導都通過 Skype 進行。我只當面輔導過 Brian 兩次,而我們的 Skype 視頻通話時長高達 50 小時(大約 40 次)。

      在 Skype 上的在線輔導進行的如此順暢,我們都感到很驚喜。這甚至比我們當面聊天更有效,那樣還會受困于嘈雜的咖啡廳和狹小的筆記本電腦屏幕。借助 Skype 的屏幕共享功能,我能在我自己的公寓里邊舒服地看到 Brian 的電腦屏幕,并且與他實時互動。如果我需要畫些草圖來說明,那我只需要共享屏幕,然后用繪圖板來畫就行了。(Salman Khan 就是用類似的辦法教他的表弟,于是就有了現在知名的可汗學院教育視頻。)

      基于項目的學習

      Brian 的目標是學習基本的編程技巧,提高自己;而不是要獲得一份程序員的工作,或是成為一名研究人員。在見我之前,Brian 已經通過上 MIT 開放課程中的 計算機科學與編程基礎,自學了幾周 Python 編程。開始的幾次輔導中,我們通過課程講義和作業,復習了基本的編程概念。

      然而,我很快就意識到,僅僅通過學院式的課程資料來學習,無法讓 Brian 足夠投入,尤其考慮到他已經大學畢業 20 年這個現實。他看起來并不滿足于只學習一些計算機學科的術語、做一些針對大學生的數學相關的小練習。

      因此,我決定教 Brian 成為一個實用主義的業余程序員,而不是一個飽學的計算機科學專家。我鼓勵他想出一個給自己或朋友用、自己也愿意做的軟件。相應地,我將指導他完成這個軟件項目。這個想法如此簡單,但效果卻異常好。

      Brian 提出了一些 idea,并最終決定實現其中的一個,也就是后來的 SwearBuy。在接下來的 9 個月里,他每周都投入十幾個小時的時間編寫 SwearBuy,常常干到深夜。我們每周都有一到兩次的 Skype 輔導,每次持續一到兩個小時。輔導中的大部分時間,我都用來回答 Brian 的問題,幫他調試 bug,有時還跟他結對編程,一起寫點兒代碼。我每次講的時間都只有幾分鐘。除了能讓他的注意力高度集中外,這種基于問答的形式對我來說也很不錯,因為我幾乎不必花時間提前做什么準備。

      基于項目的學習十分高效,因為 Brian十分重視他自己的第一個項目。他的學習被需求牽著走,而不是一些預先設置好的的學術課程。因為他對 Swearbuy 的熱情非常高,所以常常會想出很多新功能的點子。為了實現這些功能,他必然要學習一些新的編程技術。因此,我的角色就變成了:

    • 評估他想實現的功能的可行性,如果需要的話,指導他完成一個簡單版本;

    • 挑選最適合他需要的編程工具、風格以及技巧;

    • 給他找到合適的自學資料(比如代碼示例、博客、在線教程、書等);

    • 在他努力理解和應用自學的內容時,回答他的疑問。

      編程實現一個任務,常常有幾十種甚至上百種方式;這種選擇的多樣性常常讓初學者手足無措。因為選擇太多,他們反而不知從何入手。我要做的,主要就是幫他將選擇范圍縮小到一個可控的范疇,適合他各個階段的學習;然后讓他去自學,遇到問題時我再解答他的疑問。

      我十多年的編程和教授編程的經驗,使得我在每個需要選擇的點上,都能將選擇范圍縮小到我認為最適合 Brian學習的程度。比如,我選擇讓他用最基本的編程語言(比如 Python,JavaScript,SQL)功能來“從頭”搭建 SwearBuy,而不是在已有的一些復雜的 web 應用開發框架上開始。盡管為此 Brian 不得不寫更多的代碼來“從頭”(這個詞兒可能有些不準確,因為不可能完全從零開始)開始實現期望的功能,但他通過這個過程,能夠深入到內部原理,深入理解各個部分是如何組合到一起的。

      Brian 的項目是我們 Skype 會話的絕好的基礎,因為我能將自己要教授的新概念融入到他想實現的新功能中去。再多的刻意的課后練習所發揮的作用,也比不上一個屬于學生自己的的應用程序。

      在掙扎中學習

      在我們每次 1-2 小時的 Skype 輔導開始前,Brian 通常會編程 10-15 個小時,所以他總是用大量急切的問題要問,有很多新寫的代碼需要我幫他來調試和優化。如果我只是給他講課,而不基于任何背景,那他不可能消化的這么徹底,很可能只是點點頭,然后說“嗯,好吧,好像是這么回事兒……不錯,然后呢?”相反,因為他在每次輔導之前,都一直在和具體的代碼相關的問題糾纏——甚至經常因此而受挫和沮喪——所以每當我給他解釋清楚了什么之前看起來好像不可逾越的問題時,他的反應往往是“喔喔喔,哇哦!現在我算是徹底明白了!”。他的喜悅和釋然每次都那么明顯。我覺得對消化知識來說,沒有比這更好的方式了:先花上幾個小時努力解決問題,不斷積累心中煩躁的情緒,然后再接受導師的指導。

      為了減少 Brian 的痛苦,我幫他搭建了開發環境,做了一些乏味的工作,因為這些東西不會直接促進他的學習。我希望他把精力花費在編程和搭建 SwearBuy 上,而不要浪費時間做些不相關的事情,比如搭建服務器或是版本控制系統。(當然了,如果他的目標是成為一個系統管理員,那我盡可以讓他去糾結那些細節。)

      有很多時髦的書、在線教程以及直播節目,都宣稱能讓你在 7 天或是 3 周時間里學會編程(或者別的什么技能)。很明顯,你不可能在幾周里就掌握一門新技能,而且我覺得也沒幾個人真的相信他們可以。這些“快速獲取技能”計劃的真正問題在于,他們忽視了可持續性。這些課程就好像減肥食譜一樣,可能會讓你馬上減掉 10 磅體重,但卻無法讓你保持住,除非你真正地養成了好的習慣。類似的,除非你不斷努力很多年,否則也無法精通編程;為了激勵自己不斷努力,你必須是在做自己有熱情的事情。努力掙扎可不是什么有趣的事兒,如果沒有適當的激勵,太容易早早地放棄了。

      當 Brian 意識到他不再需要我的輔導時,我知道我成功了。盡管他也承認要成為一名技藝精湛的程序員,自己還需要努力好幾年,但他已經知道在現有的水平下,如何努力才能到達那個高度。在過去的九個月里,他學到了足夠多的東西,能夠支持他繼續自學下去。對于自己給了他足夠的方法和智慧來繼續自學,而不是填鴨式地應付一個學生,我感到很自豪。

      最后的思考

      在我們的輔導結束之后,Brian 反映說,盡管他受益于這種“通過做來學習”的方法,但他仍然認為,將基于項目的學習和傳統的計算機課程學習結合起來,有很大的價值。在構建 SwearBuy 的過程中,他經常通過 Google、閱讀技術博客、從 StackOverflow 上拷貝代碼等方式,來臨時解決自己的問題。結果,他發現自己經常得出并非最優的方案,而且用的東西自己都無法完全理解。Brian 的一些巨大的進步,來自于他從項目中抽身出來,轉而去看書或聽課時學到的新的概念,然后想著如何將其用到 SwearBuy 中。

      自從我們 2012 年 3 月結束最后一次的輔導以來,我 6 個月沒有收到 Brian 的消息了。最近他給我發的電子郵件中提到,他剛剛寫了個 Python 腳本,幫自己給個人股票投資建立模型:“對這個腳本我感到很自豪,因為這是我做的第一個實用的自用工具。我過去一直都在評估股票投資項目,一直想模擬各種場景;一開始我用的是 Excel,但后來終于發現 Python 才是做這件事兒的不二之選。

      我很喜歡這封郵件,因為它展示了編程技能的作用,讓原本無聊且困難的任務能夠輕松完成。我希望每個學習編程的人都能有邁過那道坎兒的時刻,從那以后就不僅是為學校或公司的活兒而編程,而更多的是為自己而編程。

      我還想說一遍那句老話,積極性意味著一切。Brian 的積極性來自自己的項目,所以實際上他是自學的。我要做的僅僅是定期指導一下他,幫他最有效地進步,讓他的努力變為有效的學習。

      我的這些經驗如何才能推廣到教授大批的自我激勵的程度遠不及 Brian 的學生的教學實踐中去?我摸索出的這些技巧如何能不再局限于一對一的輔導這種形式?我也不知道。我只知道,如果你能讓學生產生真正的積極性,幫他們移除學習中一些不必要的障礙,而且在適當的時候拉他們一把,那么實際上他們就完全可以自學。

      英文原文:Teaching Programming To A Highly Motivated Beginner

    QQ群:WEB開發者官方群(515171538),驗證消息:10000
    微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
    提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
    網友評論(共0條評論) 正在載入評論......
    理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
    登錄會員中心
    大乐透彩票预测
    <li id="2aw4k"></li>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
    <center id="2aw4k"><small id="2aw4k"></small></center><center id="2aw4k"><small id="2aw4k"></small></center>
    <li id="2aw4k"></li>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
    <center id="2aw4k"><small id="2aw4k"></small></center><center id="2aw4k"><small id="2aw4k"></small></center>