偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

編程初學者必須建造的幾根“支柱”

新聞 前端
隨著眾多傳統(tǒng)工作面臨失業(yè)風險,編程成為 21 世紀必備的技能。網(wǎng)上有許多編程的資料,也有各種各樣的培訓班,但是很多都沒有抓住編程的重點方面,其教菜鳥的辦法很糟糕。

  英文原文:The main pillars of learning programming — and why beginners should master them.

  編者按:隨著眾多傳統(tǒng)工作面臨失業(yè)風險,編程成為 21 世紀必備的技能。網(wǎng)上有許多編程的資料,也有各種各樣的培訓班,但是很多都沒有抓住編程的重點方面,其教菜鳥的辦法很糟糕。為此,有 20 多年編程經(jīng)驗的 Rainer Hahnekamp 總結(jié)了新手學習編程的 5 大支柱,希望初學者能夠從中掌握到學習的方法。

  我編程都已經(jīng)超過 20 年了。在這段時間內(nèi),很高興能跟很多人一起工作,我從他們身上學到了很多。同時我也接觸了很多的學生,他們都是剛剛大學畢業(yè)的新人,這時候我就得擔負起老師或者導師的角色。

  最近,我作為培訓師參與到一項教完全的初學者學編程的計劃當中。

  學習如何編程是很難的。我經(jīng)常發(fā)現(xiàn)大學課程和新手訓練營沒有抓住編程的重點方面,其教菜鳥的辦法很糟糕。

  為此,我愿將我所認為的一門成功的編程課程必備的 5 大支柱分享給大家。一如以往地,我會將介紹放在主流 web 應用的背景下。

  菜鳥的目標是掌握編程的基礎并且理解庫和框架的重要性。

  像云、一般運營或者開發(fā)工具這樣的高級主題不應該成為課程的一部分。說到設計模式我也持懷疑態(tài)度。這需要的經(jīng)驗是初學者所不具備的。

  那么我們就來看看程序員新手應該從何開始。

  測試驅(qū)動開發(fā)(TDD)

  TDD 帶來了很多好處。不幸的是,這是一個高級主題,初學者恐怕還沒有完全準備好。

  初學者不應該寫測試。對于他們的基礎技能水平來說這要求太高了。相反,他們應該學習如何使用測試以及配合測試。

  每一門編程課程都應該以練習為核心。我把練習拓展到單元測試,給學生一個已經(jīng)為運行那些測試做好設置的環(huán)境。

  學生需要做的就只是寫他們的代碼然后看著 testrunner 的燈從紅色變成綠色。結(jié)果的游戲化是一個很好的副效應。

  比方說:如果選定技術(shù)是 Spring,我在一個 Spring 項目內(nèi)會提供練習和測試。學生不需要知道 Spring 的任何事情。他們所需要做的就是知道練習和觸發(fā)測試的按鈕在什么位置。

  此外,學生必須知道如何使用調(diào)試器并且要有一個讀取﹣求值﹣輸出循環(huán)(REPL)環(huán)境。在運行時分析代碼的能力以及有一個進行小型實驗的場地對于 TDD 要說是必不可少的。

  要點是要確保學生在習得核心變成技能之后不需要學習基本的 TDD 行為。在學生職業(yè)生涯后期改變習慣要比現(xiàn)在學習這些習慣困難得多。這就是為什么他們應該從一開始就感受單元測試的原因。

  在其以后的職業(yè)生涯里,他們應該會對沒有進行單元測試的項目感到厭惡。他們應該本能的將缺少單元測試視為反模式。

  基礎優(yōu)先

  我經(jīng)常聽說菜鳥應該馬上從框架開始學習。這就好比把人放到賽車上讓對方避免轉(zhuǎn)向過度一樣教人如何開車。這根本是忽視了他們?nèi)匀粫褎x車誤認成油門的事實。

  一開始讓學生學 Angular 這樣的框架也是同理。初學者首先需要理解編程的基礎。在使用別人的代碼之前,的他們需要熟悉基本要素以及寫代碼意味著什么。

  函數(shù)、變量、條件、循環(huán)這些改變對于新手來說完全就是陌生的。這四個要素構(gòu)成了編程的基礎。程序構(gòu)成的一切都要靠它們。

  學生都是第一次聽說這些概念,但是他們最終精通這些概念是極其重要的。如果學生沒掌握這些基礎,后續(xù)的一切看起來就像是魔術(shù)一樣,會導致迷惑和沮喪。

  教師應該在這些基礎上花更多的時間。不過,悲哀的是,很多人向前推進得太快了。問題在于很多教師沒能從學生的角度去考慮問題。他們編程有些年頭了,已經(jīng)忘了初學者必須應對的問題類型是什么了。這相當類似于專業(yè)賽車手。賽車手是無法想象某人剎車前還要想一下的。他的動作都是自動的。

  我設計練習會利用這四種要素的結(jié)合,一方面要具有挑戰(zhàn)性,同時在合理的時間范圍內(nèi)又是可以解決的。

  一個很好的例子是羅馬與阿拉伯數(shù)字的轉(zhuǎn)換。這個挑戰(zhàn)需要學生有耐心。一旦他們成功應用了 4 個要素解決了這個問題,其積極性就會得到很大的促進。

  基礎很重要。在學會基礎之前不要貿(mào)然前進。

  庫和框架

  在學生花費了大量時間去編程后,他們必須知道大多數(shù)代碼已經(jīng)以庫或者框架的形式存在了。這與其說是一種模式不如說是一種理念。

  就像我之前寫過那樣:現(xiàn)代開發(fā)者了解并選擇合適的庫。他們不會浪費時間自己去寫一個充滿 bug 的版本。

  要想讓這種理念轉(zhuǎn)變成功,“基礎階段”的例子應該用 Moment.js、Jackson、Lodash 或者 Apache Commons 等知名的庫來解決。

  這樣一來,學生馬上就能理解庫的價值了。之前他們曾經(jīng)絞盡腦汁去解決這些復雜問題。現(xiàn)在他們發(fā)現(xiàn)庫一下子就把那些練習給搞定了。

  跟 TDD 類似,學生應該對同時吹噓自己編寫的狀態(tài)管理庫秒殺 Redux 保持懷疑態(tài)度。

  說到框架,一旦理解了庫的用處之后學生理解其重要性就會毫無問題。

  取決于課程的時間長短,專門開辟時間將框架也許會比較困難。但是正如我已經(jīng)指出那樣,最重要的方面是心態(tài)的轉(zhuǎn)變——從一切都白手起家自己寫轉(zhuǎn)到使用庫來實現(xiàn)。

  我沒有給這根支柱添加工具,因為工具只對有經(jīng)驗的開發(fā)者有用。在現(xiàn)在這個早期階段,學生不需要了解如何集成和配置工具。

  師傅與徒弟

  我 20 出頭的時候曾想學鋼琴。我不想找老師,以為我自己就能學。5 年后,我咨詢了一位專業(yè)家教。怎么說呢。那 1 個月內(nèi)我學到的東西就比我 5 年時間學到的還要多。

  我的鋼琴老師指出了我在演奏過程中出現(xiàn)的錯誤,那些是我自己聽不到的,這讓我意識到一些我從未想象過的東西。畢竟,她給我灌輸了音樂和藝術(shù)的理念,這些都不是我這個搞技術(shù)的人能了解的。

  編程也一樣。如果某人對編程毫無經(jīng)驗,則自學就是個糟糕想法。盡管有很多成功故事,但我質(zhì)疑其效率。

  相反,應該有一種“師徒”關(guān)系。一開始時,師傅給出規(guī)則讓徒弟遵守——盲從!師傅可能會解釋一下規(guī)則,但通常推理會超出徒弟的理解范圍。

  這些內(nèi)化的規(guī)則會形成一道安全網(wǎng)。如果一個人迷路了,能保證有一些安全地帶可以返回。

  教學不應該是獨白。師傅必須因材施教。應該看看學生是怎么做的,然后給出建議,根據(jù)他們的進展情況調(diào)整課程速度。

  挑戰(zhàn)與激勵

  “我們來做個 Facebook 克隆版吧!”這話不是出自有一群資深開發(fā)者和數(shù)百萬歐元預算撐腰的 CEO。而是來自一門針對程序員的介紹性課程的練習。這樣一項任務幾乎是不可能的。甚至更糟的是,學生被放到仙境里面被哄騙以為自己有做超出自身能力的技能。

  教師無疑是意識到這點的,但出于激勵的原因還是設立這樣的練習。

  練習的主要目標不是娛樂。練習應該圍繞著特定技術(shù)設立,同時應該幫助學生理解那項技術(shù)。

  激勵是好的,但不要犧牲掉內(nèi)容:編程不易。如果學生缺乏內(nèi)在動機,編碼這條路也許不合適。

  新手應該體會到成為職業(yè)開發(fā)者意味著什么。在投入大量時間之前他們應該知道等待他們的是什么。

  比方說,很多商業(yè)應用圍繞著復雜表格進行處理。創(chuàng)建表格是練習可以賦予的一項重要技能。開發(fā)類似 Facebook 那樣的應用也許不是學生馬上就能學習的最佳課程。

  類似地,非程序員可能會對開發(fā)者每天寫的代碼行數(shù)至少感到驚訝。甚至有時候我們還刪除代碼或者一事無成。

  為什么?因為總有狀況發(fā)生。我們花費了無數(shù)時間去修復一些極其怪異的 bug,結(jié)果最后發(fā)現(xiàn)只是拼寫錯誤而已。一些工具工作不了可能僅僅因為一個庫進行了小型的版本升級?;蛘咭驗槟橙送洶岩粋€文件添加到 git 而系統(tǒng)崩潰。這樣的事情可以一直列下去。

  學生應該享受這些練習。在時間壓力下面向一個未知庫的練習未必合適。

  現(xiàn)實生活中不是每天都充滿陽光。初學者應該對編程的現(xiàn)實做好充分準備。

  最后建議

  最后但并非最不重要的一點:一個人無法在 2 周、2 月或甚至 2 年之內(nèi)成為職業(yè)程序員。這需要時間和耐心。

  培訓師不應該趕時間或者做出虛假承諾。他們應該聚焦在學生是否理解了概念上面,而不是趕得太快。

責任編輯:張燕妮 來源: 36kr
相關(guān)推薦

2011-07-11 17:45:13

java

2022-04-12 11:20:11

C 語言Linux編程

2022-04-13 09:27:39

C 語言編程

2011-06-17 15:44:25

Qt

2011-06-17 14:41:56

Qt

2011-06-17 14:54:31

Qt

2011-06-17 15:37:42

Qt

2011-06-17 15:25:18

Qt

2011-06-17 15:19:28

Qt

2011-06-17 14:29:55

Qt

2011-06-17 15:06:14

Qt

2011-06-17 14:12:32

Qt

2011-06-17 15:32:28

Qt

2017-06-05 13:56:34

前端開發(fā)JavaScriptthis

2011-06-01 09:27:08

JavaScript

2011-04-12 10:13:24

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2021-12-09 05:58:51

編程語言開發(fā)代碼

2014-08-06 10:19:38

編程語言程序員
點贊
收藏

51CTO技術(shù)棧公眾號