最近,我參與了乙個教初學者程式設計的專案。
學習如何程式設計是很難的。我經常發現,大學課程和訓練營錯過了程式設計的重要方面,並採取了糟糕的方法來教授菜鳥。
我想和大家分享一下我認為乙個成功的程式設計學習方法應該建立在五個基本支柱上。
菜鳥的目標是掌握程式設計的基礎知識,了解庫和框架的重要性。
雲、一般的操作或構建工具等高階話題不應該是課程的一部分。在談到設計模式時,我也持懷疑態度。它們預設了初學者永遠不會有的經驗。
所以,讓我們看看新程式設計師應該從**開始。
測試驅動的開發 (tdd)
tdd帶來了很多【好處】。不幸的是,這是乙個高階話題,初學者還沒有完全準備好。
初學者不應該寫測試。這對於他們的基本技能水平來說,將是太多了。相反,他們應該學習如何使用測試。
每一門程式設計方法都應該以練習為中心。我用單元測試來擴充套件我的練習,並為學生提供乙個已經設定好的環境來執行這些測試。
學生們所要做的就是編寫他們的**,然後看著測試器的燈從紅色變成綠色。由此產生的遊戲化是乙個很好的***。
比如說 如果選擇的技術是spring,我就在spring專案中提供練習和測試。學生們不需要知道任何關於spring的知識,他們只需要知道spring的位置。他們只需要知道練習的位置和觸發測試的按鈕。
此外,學生們必須知道如何使用偵錯程式,並且要有乙個方便的read-eval-print loop(repl)。在tdd中,能夠在執行時分析**,並且有乙個小實驗的操場是必不可少的。
主要是保證學生在掌握核心程式設計技能後,不用再學習基本的tdd行為。在學生以後的職業生涯中,改變習慣會比現在學習這些習慣難得多。這就是為什麼他們應該從一開始就如同呼吸一樣的頻繁的使用tdd的原因
在以後的職業生涯中,他們應該對沒有單元測試的專案產生反感。他們應該直觀地將沒有單元測試的專案視為反模式。
基礎第一
我經常聽到,新手應該立即從框架開始。這就好比把人放在拉力賽車裡教他們如何開車,要求他們避免轉向過度。這根本就忽略了乙個事實,那就是他們仍然把剎車誤認為是油門。
當我們讓學生開始學習angular這樣的框架時同樣適用。初學者需要先了解程式設計的基礎知識。他們需要在使用別人的**之前,先熟悉基本元素和編寫**的含義。
對於新手來說,函式、變數、條件和迴圈的概念是完全陌生的。這四個元素構建了程式設計的基礎。乙個程式的一切構成都依賴於它們。
學生是第一次聽到這些概念,但最重要的是學生要熟練掌握這些概念。如果學生沒有掌握基礎知識,接下來的一切都像魔術一樣,會導致學生感到困惑和沮喪。
教師應該在這些基礎知識上多花些時間。但可悲的是,很多人走得太快了。問題在於,有些教師難以把自己放到學生的角色中去。他們已經從事程式設計多年,已經忘記了初學者要處理的問題型別。這和乙個專業的拉力賽車手很相似。他無法想象有人在剎車前需要思考。他只是自動地去做。
我設計的練習是具有挑戰性的,但通過使用四個主要元素的組合,可以在合理的時間內解決。
乙個很好的例子是羅馬和阿拉伯數字的轉換器。這個挑戰需要學生的耐心。一旦他們成功運用四大要素解決挑戰,他們的積極性也會得到很大的提公升。
基礎知識很重要。在他們沒有解決之前,不要繼續前進。
庫和框架
當學生花了大量時間編碼之後,他們一定會了解到大部分**已經以庫或框架的形式存在。這與其說是一種模式,不如說是一種思維方式。
現代開發者知道並選擇正確的庫。他們不會花幾個小時自己寫乙個錯誤的版本。
為了讓這種思維方式的轉變取得成功,"基礎階段 "的例子應該是可以通過使用知名庫來解決的。
這樣一來,學生們就會立刻明白庫的價值。他們圍繞那些複雜的問題絞盡腦汁。現在他們發現,乙個庫很快就解決了這個練習。
與tdd類似,當同事吹噓他們自製的狀態管理庫使redux變得沒有必要時,學生應該產生懷疑。
談到框架,學生一旦了解庫的用處,就不會有任何問題,理解其重要性。
根據課程的時間安排,可能很難在框架上投入時間。但正如我已經指出的,最重要的方面是將學生的思維方式從一切從頭開始程式設計轉變為探索和使用庫。
我沒有在這個支柱中加入工具,因為它們只對有經驗的開發人員有用。在這個早期階段,學生不需要學習如何整合和配置工具。
師傅和學徒
20多歲的時候,我就想學鋼琴。我不想請老師,認為自己可以學。五年後,我諮詢了一位專業的家教老師。嗯,我能說什麼呢?我在1個月內學到的東西比之前5年的時間還多。
我的鋼琴老師指出了我彈奏中我聽不到的錯誤,讓我意識到了我從未想象過的演繹方式。畢竟,她給我灌輸了**和藝術的思維方式,而這兩種思維方式對於身為技術人員的我來說是遙不可及的。
在程式設計中也是一樣。如果有人沒有程式設計的經驗,那麼自學就可能是個壞主意。雖然有很多成功的案例,但我質疑單幹的效率。
相反,應該是 "師徒 "關係。一開始,師傅給出的規則,徒弟必須遵守--盲目地遵守! 師傅可能會解釋規則,但通常道理是徒弟無法理解的。
這些內化的規則形成了一種安全網。如果乙個人迷失了方向,總能有一些安全的歸宿。
教學不應該是獨角戲。師傅要和每個學生單獨打交道。他應該檢查學生的工作情況,提出建議,並根據他們的進度調整課程的速度。
當徒弟們掌握到一定程度後,應鼓勵他們去探索新的領域。師傅演變成乙個分享 "智慧型"、開放討論的導師。
挑戰與激勵
"讓我們創造乙個facebook轉殖版!" 這句話並不是來自乙個由一群高階軟體開發人員和數百萬歐元預算支援的ceo。這是程式設計師入門課程中的乙個練習。這樣的任務實際上是不可能的。更糟糕的是,學生們被置於仙境之中,並被蒙蔽了雙眼,以為自己擁有的技能真的是遙不可及。
毫無疑問,教師意識到了這一點,但出於激勵的原因,卻創造了這樣的練習。
練習的主要目的不是為了娛樂。它應該圍繞著某一特定的技術而創造,應該幫助學生理解這一技術。
激勵是好事,但不能以犧牲內容為代價。程式設計並不容易。如果學生沒有內在的動機,編碼可能不是辦法。
新手應該體驗一下什麼是專業的開發人員。在投入大量時間之前,他們應該知道等待他們的是什麼。
例如,許多商業應用都圍繞著複雜的表單和網格。建立這些是練習可以傳授的重要技能。構建乙個類似於facebook的應用程式可能不是學生馬上學習的最佳學習方法。
同樣,乙個非程式設計師可能會驚訝於開發人員每天寫的**行數之少。甚至有的時候,我們會刪除**或者一無所獲。
為什麼會這樣呢?因為事情總是出錯。我們花了無盡的時間來修復一些極其奇怪的bug,結果只是乙個簡單的錯別字。一些工具可能無法使用,只是因為乙個庫有了乙個小的版本公升級。或者系統崩潰是因為有人忘了在git中新增檔案。這樣的例子可以舉不勝舉。
學生應該享受這些經驗。在時間的壓力下,針對未知庫的練習可能正是正確的事情;)
在現實生活中,陽光並不總是燦爛的。初學者應該為程式設計的現實做好充分的準備。
看到這裡你是不是對學習程式設計又有了一點新的認知呢~
如果你喜歡這篇文章的話,動動小指,點個贊哦~
如果你想學程式設計,小編推薦乙個c語言/c++程式設計學習基地【點選進入】!
乙個活躍、高逼格、高層次的程式設計學習殿堂;程式設計入門只是順帶,思維的提高才有價值!
涉及到了:程式設計入門、遊戲程式設計、網路程式設計、windows程式設計、linux程式設計、qt介面開發、黑客等等......
有時候,創業也是一種浮躁
現在到處充滿著浮躁,人都處在追求金錢和權力的瘋狂狀態。打工的不管幹的好還是幹的不好,都想著天天加工資,天天公升職 當官的也不管幹的咋樣,天天也都想著如何混的更好 即使為人師表者,也在背後使勁的撈錢 不過如此如此,那麼來點有追求的,創業呢?哎,其實也是浮躁。想想看,等你老了,住著別墅 開著名車 有很高...
迷茫,有時候只是一種藉口
為什麼會迷茫?總覺得,再多的言語也無法企及自己思緒裡的荒蕪,再多的表情也見證不了自己內心的蒼涼。於是,我們自言自語 沒有人會明白自己了吧,沒有誰再可以信任了吧?有時候,我們甚至一度迷失了自己,模糊了自己是誰,忘記了身處何地欲往何方。那些因迷茫而凝結起來的心情,彷彿一首低宛的曲子,不停地吟唱落寂的憂傷...
有時候愛是一種錯覺 周國平
你翻閱他的人生履歷,追尋著他的足跡,感受著他的喜怒哀樂,並為著他的開心而開心,為著他的憂鬱而憂鬱。你以為這就是愛了。你讀他的文字,欣賞著他的才氣,喜歡聽他的言談歡笑,喜歡貼近他的感覺,甚至為著他願意與你說話,而欣喜異常。你以為這就是愛了。你對自己說你是願意做他的新娘的,願意與他攜手百年,願意為他置一...