自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

  最近,我作為培訓(xùn)師參與到一項(xiàng)教完全的初學(xué)者學(xué)編程的計(jì)劃當(dāng)中。

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

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

  菜鳥的目標(biāo)是掌握編程的基礎(chǔ)并且理解庫和框架的重要性。

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

  那么我們就來看看程序員新手應(yīng)該從何開始。

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

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

  初學(xué)者不應(yīng)該寫測試。對于他們的基礎(chǔ)技能水平來說這要求太高了。相反,他們應(yīng)該學(xué)習(xí)如何使用測試以及配合測試。

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

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

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

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

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

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

  基礎(chǔ)優(yōu)先

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

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

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

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

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

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

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

  基礎(chǔ)很重要。在學(xué)會基礎(chǔ)之前不要貿(mào)然前進(jìn)。

  庫和框架

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

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

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

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

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

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

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

  我沒有給這根支柱添加工具,因?yàn)楣ぞ咧粚τ薪?jīng)驗(yàn)的開發(fā)者有用。在現(xiàn)在這個早期階段,學(xué)生不需要了解如何集成和配置工具。

  師傅與徒弟

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

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

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

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

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

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

  挑戰(zhàn)與激勵

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

  教師無疑是意識到這點(diǎn)的,但出于激勵的原因還是設(shè)立這樣的練習(xí)。

  練習(xí)的主要目標(biāo)不是娛樂。練習(xí)應(yīng)該圍繞著特定技術(shù)設(shè)立,同時(shí)應(yīng)該幫助學(xué)生理解那項(xiàng)技術(shù)。

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

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

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

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

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

  學(xué)生應(yīng)該享受這些練習(xí)。在時(shí)間壓力下面向一個未知庫的練習(xí)未必合適。

  現(xiàn)實(shí)生活中不是每天都充滿陽光。初學(xué)者應(yīng)該對編程的現(xiàn)實(shí)做好充分準(zhǔn)備。

  最后建議

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

  培訓(xùn)師不應(yīng)該趕時(shí)間或者做出虛假承諾。他們應(yīng)該聚焦在學(xué)生是否理解了概念上面,而不是趕得太快。

責(zé)任編輯:張燕妮 來源: 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:19:28

Qt

2011-06-17 15:25:18

Qt

2011-06-17 15:44:25

Qt

2011-06-17 15:37:42

Qt

2011-06-17 14:54:31

Qt

2011-06-17 14:41:56

Qt

2011-06-17 14:29:55

Qt

2011-06-17 14:12:32

Qt

2011-06-17 15:06:14

Qt

2011-06-17 15:32:28

Qt

2011-06-01 09:27:08

JavaScript

2017-06-05 13:56:34

前端開發(fā)JavaScriptthis

2014-08-06 10:19:38

編程語言程序員

2021-12-09 05:58:51

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

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

點(diǎn)贊
收藏

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