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

如何學(xué)習(xí)一門新的語言

開發(fā) 后端
首先要說,這并不是一篇教你如何學(xué)習(xí)的文章,因?yàn)榈浇裉鞛橹刮乙矝]有找到一種通用的方法來解決如何學(xué)習(xí)的問題。但是在探索的道路上,我確實(shí)產(chǎn)生過一些思路,我想把這些思考的過程分享出來讓大家探討。如果這對(duì)你有幫助的話,那我會(huì)非常高興。

如何學(xué)習(xí)一門新的語言

首先要說,這并不是一篇教你如何學(xué)習(xí)的文章,因?yàn)榈浇裉鞛橹刮乙矝]有找到一種通用的方法來解決如何學(xué)習(xí)的問題。但是在探索的道路上,我確實(shí)產(chǎn)生過一些思路,我想把這些思考的過程分享出來讓大家探討。如果這對(duì)你有幫助的話,那我會(huì)非常高興。

我最近在學(xué)習(xí) Rust ,這是一門很酷但是相對(duì)冷門的語言(學(xué)習(xí)冷門語言可能是我的一大愛好,比如我就非常喜歡 CoffeeScript ,這是 JavaScript 的一門方言)。自從在某些語言的舒適區(qū)待久之后,經(jīng)常會(huì)產(chǎn)生自己無所不能的錯(cuò)覺,這也是我不斷想學(xué)習(xí)新語言的一大動(dòng)力。

而我的學(xué)習(xí)過程跟大多數(shù)人類似,就是先在網(wǎng)上找文檔然后自學(xué)。而在看文檔的過程中,我就發(fā)現(xiàn)了一些問題。

手冊(cè)的作用

“去看文檔嘍。”這是老鳥在面對(duì)新手時(shí)最喜歡扔的一句話,我通常也是這么扔給自己的。但當(dāng)你打開一門語言的手冊(cè),你會(huì)發(fā)現(xiàn)它除了教你語法外,幾乎沒有教你什么其它東西。于是你會(huì)陷入這樣一個(gè)境地:

“背下來了么?”
“背不下來,太難懂了。”
“再看一遍,給我背下來。”
。。。
“背下來了么?”
“大部分背下來了。”
“給我寫個(gè)程序,實(shí)現(xiàn)個(gè)XX功能。”
“不會(huì)。。。”
“。。。”

在一個(gè)高級(jí)開發(fā)者眼里,你會(huì)了語法理所當(dāng)然就應(yīng)該會(huì)寫程序了,但實(shí)際情況并非如此。這讓我想起前段時(shí)間跟一個(gè)朋友關(guān)于目前編程教育市場(chǎng)的一個(gè)討論。我出于自己的經(jīng)驗(yàn)提出一個(gè)想法:讓大牛開發(fā)者來教新手入門。在我的設(shè)想中,大牛開發(fā)者擁有強(qiáng)大的實(shí)戰(zhàn)經(jīng)驗(yàn),以及豐富的專業(yè)知識(shí),更是自帶光環(huán),這不比現(xiàn)在市場(chǎng)上那些半吊子的講師好多了。在我為自己“偉大”的想法得意的時(shí)候,朋友給我澆了一盆冷水。他告訴我這樣根本行不通,大牛根本不知道菜鳥需要什么知識(shí),你可能以為基礎(chǔ)語法講清楚就好了,人家卻連編輯器是什么都不清楚。設(shè)想一下,讓一個(gè)大學(xué)教授去教一群小學(xué)生,這對(duì)兩者來說都是一種災(zāi)難吧。

這些語言的創(chuàng)造者,或者文檔的作者,無疑都是一些大神。它們?cè)谧珜懸粋€(gè)語言手冊(cè)的過程中,只能盡量負(fù)責(zé)地把這個(gè)語言的全貌準(zhǔn)確地有組織地展現(xiàn)給你。然而這種全面的展現(xiàn),對(duì)于一個(gè)沒有任何引導(dǎo)的初學(xué)者來說并不完全是一件好事。簡(jiǎn)單來說就是,你會(huì)在一些次要的事情上浪費(fèi)太多時(shí)間,而一些主要的概念又沒有理解透徹。

關(guān)于看真實(shí)代碼

當(dāng)覺得文檔滿足不了你的時(shí)候,老鳥們往往會(huì)扔給你第二招:看代碼??词裁创a呢?那還用說,當(dāng)然是被業(yè)界奉為經(jīng)典的,在 GitHub 上至少有一萬顆星的知名開源項(xiàng)目代碼啦。

當(dāng)你懷著崇敬的心情,打開扔給你的網(wǎng)址,看著滿屏幕的代碼時(shí),你會(huì)對(duì)自己?jiǎn)柍瞿侨齻€(gè)經(jīng)典的哲學(xué)問題。這是什么東西?它是怎么做到的?為什么要這么寫?搞不好某些人還會(huì)因?yàn)轶@嚇過度,從而失去了學(xué)習(xí)下去的信心。

那么讓我們一起來看看這些代碼里有什么鬼東西,會(huì)嚇得新手信心不足。

大段的注釋

說一件事你們不要笑,在我還是個(gè)萌新的時(shí)候,我曾經(jīng)對(duì)這些穿插在代碼中的神秘文字產(chǎn)生了深深的困惑,我還以為它們對(duì)代碼有某種加成作用,以至于我還試驗(yàn)過把注釋去掉會(huì)對(duì)代碼執(zhí)行產(chǎn)生什么影響。而現(xiàn)實(shí)中好的代碼會(huì)讓后面的維護(hù)者方便很多,但不好的甚至錯(cuò)誤的注釋會(huì)讓人迷惑不已。

語法糖

語法糖是個(gè)好東西,它大大簡(jiǎn)化了我們的編程過程,高手用起語法糖寫起代碼來簡(jiǎn)直不要太爽,所以越強(qiáng)大的項(xiàng)目這玩意兒越多。但是對(duì)于初學(xué)者來說,語法糖隱藏了一些細(xì)節(jié),而且讓語法看起來很怪異。有些代碼如果你用標(biāo)準(zhǔn)語法來寫是很好懂的,但如果用語法糖來寫的話很難讓人一下子明白。

初學(xué)者為了弄懂這些語法往往要花大量時(shí)間,但其實(shí)這些時(shí)間在這個(gè)階段是沒必要的浪費(fèi)。你看不懂它覺得它是一個(gè)很重要的東西,其實(shí)它只是一個(gè)做工精巧的小玩意兒,離開了它這些代碼照樣能工作。而隨著你的經(jīng)驗(yàn)豐富,也可以隨時(shí)隨地用起來,用的方法可能也不盡相同。

代碼里的重點(diǎn)

對(duì)于一個(gè)開源項(xiàng)目來說,往往 50% 的代碼可能都是在適配各種不同的運(yùn)行環(huán)境,將系統(tǒng)的 API 抽象成項(xiàng)目里通用的接口,這部分代碼除非你自己要做類似的項(xiàng)目,要不然的話對(duì)初學(xué)者來說參考意義不大。更何況,為了適配某些系統(tǒng)奇葩的運(yùn)行環(huán)境,開發(fā)者往往會(huì)大開腦洞,創(chuàng)造出一些非常奇怪的代碼。這些旁門左道充滿了玄學(xué)和不確定性,初學(xué)者看多了可能會(huì)發(fā)生如武俠小說里練功出差錯(cuò)的結(jié)果:走火入魔。

剩下的代碼里 20% 是項(xiàng)目?jī)?nèi)部的接口抽象和定義,最后 30% 才是真正值得看的東西,它們往往散落在各個(gè)地方,但又為了一個(gè)設(shè)計(jì)核心服務(wù)。讓初學(xué)者識(shí)別出這些代碼來,未免太強(qiáng)人所難。

野文檔

這是我自己的一個(gè)定義,我把一切非官方的開發(fā)文檔都稱為野文檔。初學(xué)者會(huì)在搜索引擎里得到大量的相關(guān)文檔,他們很多是學(xué)習(xí)心得,很多人在寫這篇文章時(shí)水平可能比你也高不了多少。這就造成了這些文檔的水平參差不齊,所面向的重點(diǎn)也不同,也許你花了大把時(shí)間弄懂的是一個(gè)錯(cuò)誤的或者過時(shí)的知識(shí)。而大部分號(hào)稱教你入門的文章,可能也就是告訴了你如何搭建一個(gè)運(yùn)行環(huán)境,這門語言的精髓和重點(diǎn)作者自己估計(jì)也沒弄明白。

而如果你碰到一篇被奉為經(jīng)典的好的入門文章,那你真的要好好感謝作者。因?yàn)檫@意味著作者付出了大量的深入思考,深入淺出這四個(gè)字說起來簡(jiǎn)單,做起來可是需要相當(dāng)?shù)墓Φ椎摹?/p>

相對(duì)較好的做法

在這么多語言的學(xué)習(xí)過程中,我也總結(jié)了一些相對(duì)比較好的學(xué)習(xí)方法。我認(rèn)為看代碼是非常有必要的,因?yàn)楣馑烙浾Z法是無法掌握好這門語言的。但是去看一些大型項(xiàng)目代碼的缺點(diǎn)我在上面也說了,到底該如何是好呢?

我建議大家可以去看官方給出的,專門供初學(xué)者學(xué)習(xí)的 Step-By-Step 代碼,這種代碼一般在官方的文檔頁就可以找到鏈接入口,它有如下好處:

  1. 由淺入深,富有層次。這些代碼往往是跟隨者文檔的深入,慢慢把語法細(xì)節(jié)展開的。不會(huì)一下給你展現(xiàn)太多,讓你無法 GET 到重點(diǎn)。每段代碼都會(huì)有一個(gè)重點(diǎn)要表現(xiàn)的特性,這樣看起來會(huì)一目了然。
  2. 有質(zhì)量保證。這些代碼的撰寫一般是官方人員負(fù)責(zé),這可以在很大程度上保證準(zhǔn)確性。
  3. 更新及時(shí)。我們知道很多語言的細(xì)節(jié)是會(huì)隨著版本的升級(jí)有所改變的,而很多網(wǎng)上的第三方文檔往往缺乏維護(hù),但官方文檔一般都會(huì)同步更新。

我建議大家一邊看手冊(cè)一邊看代碼,這樣印象會(huì)更深刻。眼睛看了之后,我認(rèn)為要盡快找一些好的例子來練手,不需要一上來就搞比較復(fù)雜的大型項(xiàng)目,也是由淺入深。這種練手項(xiàng)目去哪里找呢,很多語言的 tutorial 板塊就是干這個(gè)的,做的比較完善的甚至還提供在線的教學(xué)體驗(yàn)環(huán)境,大家應(yīng)該好好利用。

寫在最后

這篇討論學(xué)習(xí)方法的文章引發(fā)了我的一些額外思考。我經(jīng)常在開發(fā)者社區(qū)里看到老鳥和初學(xué)者互懟,寫這篇文章的過程也讓我理性思考了產(chǎn)生這些矛盾的原因。總的來說就是一些信息的不對(duì)稱造成的。老鳥認(rèn)為這個(gè)問題根本不是問題,網(wǎng)上一搜一大把,不愿多講甚至冷嘲熱諷。而初學(xué)者卻覺得這些信息根本理解不能,老鳥的嘲諷就是一種羞辱。

我認(rèn)為要打破這種不對(duì)稱需要雙方付出耐心,而這種耐心的付出是相互的,你付出的多回報(bào)的就越多。而最先邁出付出這一步的,應(yīng)該是初學(xué)者,畢竟從情理上來說是你請(qǐng)求人家辦事。而你需要付出的不過是把自己的問題講明白,說出你的思考過程,附上必要的信息。一個(gè)好學(xué)的人是不會(huì)讓人討厭的,但前提是你得有一個(gè)不讓人討厭的姿態(tài)展現(xiàn)出來。 

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2024-06-27 09:00:00

人工智能編程語言軟件開發(fā)

2015-07-28 15:35:48

學(xué)習(xí)語言

2013-07-26 10:23:04

2011-12-30 09:33:02

程序員語言

2022-02-27 14:45:16

編程語言JavaC#

2022-11-04 11:11:15

語言入職項(xiàng)目

2017-04-07 10:45:43

編程語言

2017-04-07 16:49:00

語言程序編程

2022-02-21 11:15:59

編程語言后端開發(fā)

2013-08-06 09:31:42

IT技術(shù)周刊

2015-08-17 15:12:56

新技術(shù)語言框架

2021-07-09 06:48:30

語言Scala編程

2011-12-30 09:29:38

程序員

2020-11-12 07:00:50

JavaScript前端編程語言

2012-03-28 09:40:40

JavaScript

2014-12-03 09:48:36

編程語言

2012-09-04 11:20:31

2014-06-03 17:44:00

快速學(xué)習(xí)新技術(shù)

2015-11-12 10:25:48

編程語言

2021-10-10 12:45:13

編程語言開發(fā)
點(diǎn)贊
收藏

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