編程大牛們,你們有什麼能快速入門一門語言/框架/工具的獨門方法?

其實很多前輩也已經講過不少快速入門的方法,然後每個人的學習習慣,思維方式是有差別的,這種方法適合這個人就不一定適合另一個人了。不如就此機會,把大家的入門秘訣都匯總一下,好能幫助更多的人學好編程。大家知道什麼大牛都邀請一下吧,讓各路大牛都來回答一下


我先用反式思維來說說,什麼方式基本入不了門,或者入門很慢吧。

1. 不要亂讀書。讀書前好好看看作者背景,是否該領域的大師、至少是專業人士,否則不要讀。比如譚浩強的系列,絕對不要讀。每一領域入門經典也就1~3本,一定要下功夫找。

2. 不要用Baidu搜索各種論壇 菜鳥推薦的技術教程。去Google那些真正的專家、現職工程師推薦的資源。

3. 不要到論壇上看所謂網盤裡數十G的所謂免費資料,真正經典的就兩三個,自己動手去 看最正宗的官方文檔。

4. 不要著急瞎寫所謂的一次性「項目」。先把內功練好。根據工作機遇,紮根一些長期維護、不斷提高質量的項目。

總結:最關鍵的是,要樹立正確的「技術價值觀」,找對行業最經典的資源入手, 向行業最資深的人學習。


  1. 讀書;
  2. 做習題;
  3. 做練手項目;
  4. 回到1。


我有很多方法,但是都不是用來快速入門前5門語言/框架/工具的。題主可以在好好搞定了前5門,學習第6門的時候來找我。


作者:phodal

鏈接:學習的藝術——如何學好一門技術、語言 - Phodal - 手工藝人 - 知乎專欄

來源:知乎

著作權歸作者所有,轉載請聯繫作者獲得授權。

還在繼續開發Growth(Github: phodal/growth · GitHub)的路上,很多功能似乎已經趨於完善,有些功能也讓我百玩不厭——如最近添加的規則引擎。接著我開始陸陸續續地添加了這麼多功能。直接今天我想我需要一篇文章放在最前面來告訴用戶,你需要怎樣去學習?因此,也就有了此文。

我不是一個學霸,大學掛了六科。也沒有受過非常好的教育,上大的大學是二本倒數的。好在計算機學得比較早,也可以混點自學能力,也算混得還行。一直想著做一些有意義的事,並且可以獲得更多的用戶反饋。想法一直有的,直到有一天在整理資料的時候才想起來可以整理出一個APP。

儘管之前已經有技能樹、成長書單和Web Developer 成長路線圖的經驗,說到底這也是很大的挑戰。

一次語言學習體驗

在我們開始學習一門語言或者技術的時候,我們可能會從一門hello,world開始。

好了,現在我是Scala語言的初學者,接著我用搜索引擎去搜索『Scala』來看看『Scala』是什麼鬼:

Scala 是一門類Java 的編程語言,它結合了面向對象編程和函數式編程。

接著又開始看『Scala "hello,world"』,然後找到了這樣的一個示例:

object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}

GET到了5%的知識。

看上去這門語言相比於Java語言來說還行。然後我找到了一本名為『Scala 指南』的電子書,有這樣的一本目錄:

  • 表達式和值
  • 函數是一等公民
  • 借貸模式
  • 按名稱傳遞參數
  • 定義類
  • 鴨子類型
  • 柯里化
  • 范型
  • Traits
  • ...

看上去還行, 又GET到了5%的知識點。接著,依照上面的代碼和搭建指南在自己的電腦上安裝了Scala的環境:

brew install scala

Windows用戶可以用:

choco install scala

然後開始寫一個又一個的Demo,感覺自己GET到了很多特別的知識點。

到了第二天忘了!

接著,你又重新把昨天的知識過了一遍,還是沒有多大的作用。突然間,你聽到別人在討論什麼是這個世界上最好的語言——你開始加入討論了。

於是,你說出了Scala這門語言可以:

  • 支持高階函數。lambda,閉包...
  • 支持偏函數。 match..
  • mixin,依賴注入..
  • 等等

雖然隔壁的Python小哥贏得了這次辯論,然而你發現你又回想起了Scala的很多特性。

你發現隔壁的Python小哥之所以贏得了這場辯論是因為他把Python語言用到了各個地方——機器學習、人工智慧、硬體、Web開發、移動應用等。而,你還沒有用Scala寫過一個真正的應用。

讓我想想我來能做什麼?我有一個博客。對,我有一個博客,我可以用Scala把我的博客重寫一遍:

  1. 先找一Scala的Web框架,Play看上去很不錯,就這個了。這是一個MVC框架,原來用的Express也是一個MVC框架。Router寫這裡,Controller類似這個,就是這樣的。
  2. 既然已經有PyJS,也會有Scala-js,前端就用這個了。

好了,博客重寫了一遍了。

感覺還挺不錯的,我決定向隔壁的Java小弟推銷這門語言,以解救他於火海之中。

『讓我想想我有什麼殺手鐧?』

『這裡的知識好像還缺了一點,這個是什麼?』

好了,你已經GET到了90%了。如下圖所示:

希望你能從這張圖上GET到很多點。

輸出是最好的輸入

上面那張圖『學習金字塔』就是在說明——輸出是最好的輸入。

如果你不試著去寫點博客、整理資料、準備分享,那麼你可能並沒有意識到你缺少了多少東西。雖然你已經有了很多的實踐,然並卵。

因為你一直在完成功能、完成工作,你總會有意、無意地漏掉一些知識,而你也沒有意識到這些知識的重要性。

從我有限的(500+)博客寫作經驗里,我發現多數時候我需要更多地的參考資料才能更好也向人們展示這個過程。為了輸出我們需要更多的輸入,進而加速這個過程。

而如果是寫書的時候則是一個更高水平的學習,你需要發現別人在他們的書中欠缺的一些知識點。並且你還要展示一些在別的書中沒有,而這本書會展現這個點的知識,這意味著你需要挖掘得更深。

所以,如果下次有人問你如果學一門新語言、技術,那麼答案就是寫一本書。

如何應用一門新的技術

對於多數人來說,寫書不是一件容易的事,而應用新的技術則是一件迫在眉睫的事。

通常來說,技術出自於對現有的技術的改進。這就意味著,在掌握現有技術的情況下,我們只需要做一些小小的改動就更可以實現技術升級。

而學習一門新的技術的最好實踐就是用這門技術對現有的系統行重寫。

第一個系統(v1): Spring MVC + Bootstrap + jQuery

那麼在那個合適的年代裡, 我們需要單頁面應用,就使用了Backbone。然後,我們就可以用Mustache + HTML來替換掉JSP。

第二個系統(v2): Spring MVC + Backbone + Mustache

在這時我們已經實現了前後端分離了,這時候系統實現上變成了這樣。

第二個系統(v2.2): RESTful Services + Backbone + Mustache

或者

第二個系統(v2.2): RESTful Services + Angular.js 1.x

Spring只是一個RESTful服務,我們還需要一些問題,比如DOM的渲染速度太慢了。

第三個系統(v3): RESTful Services + React

系統就是這樣一步步演進過來的。

儘管在最後系統的架構已經不是當初的架構,而系統本身的業務邏輯變化並沒有發生太大的變化。

特別是對於如博客這一類的系統來說,他的一些技術實現已經趨於穩定,而且是你經常使用的東西。所以,下次試試用新的技術的時候,可以先從對你的博客的重寫開始。


我的方法:

沒有需求我一般很少會去學什麼框架的……有了需求之後,看項目文檔一般都會有什麼quick tutorial的東西。。。。把上面的基本框架運行一下。然後根據自己的需求去改一下。。。


你這題目透著危險的味道.

投機取巧, 或者美其名曰尋找捷徑, 是學習上的頭號敵人.

而迷信大牛, 依靠他人, 是缺乏自我思考能力, 導致沒有主見和信心的表現.

學習上的切入點的選擇, 無非是泳者選擇從泳池這頭, 或是那頭入水而已. 不是學習成敗與否的決定性條件.


過程:

1、找兩本書,比照著看;

2、出題給自己做,比如編個xtree命令、blog系統、爬蟲;

3、結合新的語言知識點,不斷重構代碼;一定要自動化單元測試;一定要模塊化、組件化;

4、試試函數式、多線程、非同步、鏈式API、事件;試試虛擬機語言的反射、位元組碼技術;試試分散式。都有不同收穫。

最重要的幾點:

1、一定要先掌握一門主流開發語言;學習其他語言,一定要相互比較。(增量式學習)

2、要分清楚是要簡單了解,還是準備深入學習;

一定要先按5 minute quick start完成示例。

深入學習,最好抽時間走遍tutorial。看看xxx primer、各種權威指南等。

另外,Oreilly家的cookbook特別方便上手。


第一本,入門
《Head first HTMLCSS》
最好的入門書。看兩遍就對HTML CSS 有個大概印象了。
此時把w3cschool作為備查手冊收藏起來

第二本《CSS權威指南(第三版)》
最權威的CSS書籍,除了閱讀W3C的文檔外的不二選擇(就是翻譯有點操蛋,遇到感到難理解的地方可能還是要求助於網路資源)。有時間(無論是現在還是將來)可以反覆看,併當做字典隨時查。

第三本《精通CSS》
廣受前輩推薦的一本書。上一本書是字典的話,這本書相當於《中學生作文大全》,彙集了一些CSS的最佳實踐。

第四本《圖解CSS3:核心技術與案例實踐》
這本書比較新,講解的是最新的CSS3(前三本書停留在CSS2.1時代),CSS3也是必學的,不是什麼可學可不學的最新技術。

HTML CSS值得看的書就這些(之後會有一本《CSS秘密花園》,尚在翻譯中,也很值得期待),剩下的就是自己寫還有看技術博客了。接下來是JavaScript,HTML和CSS都是沒有邏輯的標記型語言,JS才是真正的編程語言,評價前端工程師的水平就看這個了。

第五本《JavaScript DOM編程藝術》
最好的JS入門書籍,一目了然地告訴你如何用JS操作DOM(這是瀏覽器端編程的基本功),還灌輸了最符合標準的編程理念。可惜有點老,最新一版是2010年的,以至於部分內容有點過期,例如本書內經常提到「某某方法瀏覽器不一定支持,需要小心使用」,而這些歷史遺留問題當今已經不存在了,閱讀過程中無視就好。真想學好前端這門技術,不能光看視頻和看書,想學習可以加裙前面是 6 1 1 中間是 4 2 8後面是 1 4 2,這裡有最新的HTML資料和分析課程講解,真心想學習的可以加,不是來學習的請勿打擾。點擊鏈接加入群【網頁製作學習群】:https://jq.qq.com/?_wv=1027k=49ZfTHl

第六本《JavaScript高級程序設計》
每個前端必看的書,此書是前端工程師科技樹的關鍵一環。看完此書後再看看之後各類進階書籍會比較好。
俗稱紅寶書,也算入門書籍,雖然是大部頭(七百多頁),但至少通讀一遍。
全部掌握了,你可以在網路社區里談笑風生了,經過實踐的鍛煉後,面試個前端工程師的崗位應該都沒問題了。

第七本《JavaScript語言精粹》
也是前端必看。薄薄一百來頁,對JS的去粗取精。

第八本《你不知道的JavaScript》
這是一套叢書, 目前為止僅翻譯了第一卷。每本都挺薄,深入介紹了JS中的重要概念。

第九本《JavaScript設計模式》
「設計模式」是軟體工程的重要課題,相當於高考時候的答題套路。前人總結出來的應對各種問題的模板。也算是必看書籍。關於JavaScript設計模式的書籍目前也有好幾本,也有國人寫的,挑一兩本看看就好。

第十本《高性能網站建設指南》(及其續篇《高性能網站進階》)
告訴你真正的商業公司的前端是怎麼優化一個網站的。當然優化的問題不是看看書就能解決的,最好時刻了解你的同行們的經驗。

看 完以上十本算是前端入門了。到現在為止,配合搜索引擎,已經可以無障礙地做出靜態網頁、各種特效、用AJAX配合後台構建Web應用了。然後是各種框架、 庫、預處理語言的學習,而且現在JavaScript也可以用來寫伺服器了(Node.js),這樣一來JS通吃前後端,前端工程師都歡欣鼓舞,這也是個 學習熱點。下面是一些補充書籍,可以穿插著看。(至少看了兩遍《JavaScript高級程序設計》再看下面的書)
《圖解HTTP》和《HTTP權威指南》
每個Web程序員都應該熟悉HTTP協議里的內容。《圖解HTTP》算是科普級別的書,《HTTP權威指南》則是大部頭,需要點耐心才能看完。建議在了解AJAX後立刻開始學習HTTP協議。

《鋒利的jQuery》
講JS最著名的庫——jQuery的,快速入門的書。光會原生JS不夠,還要會用庫。

《數據結構和演算法的JavaScript描述》
作為程序員如果連基本的數據結構和排序、查找演算法都不會實在丟臉。

《JavaScript編程精解》
鞏固對JS的理解,很薄

《JavaScript啟示錄》
同上,也很薄。

《JavaScript權威指南》
號稱「聖經」,最權威的JS書本,買來當作字典備查吧,沒事也可以翻翻。
然後就是向高級前端工程師發展了,由於我是個菜鳥,也沒辦法做什麼推薦。這時候全靠上社區、看博客來開闊眼界追趕潮流了。

=========
最後不得不說的是,所有的書裡面的一些理念、方法等,只是作者自己認為的最佳方案,不代表就是絕對的真理,有的甚至因為時代的發展反而成為了錯誤內容,「盡信書不如無書」,大家還是應該結合工作實際和當前的潮流來學習新知識。
《圖解CSS3:核心技術與案例實戰》
《CSS實戰手冊第3版》
《HTML5與CSS3權威指南(上下冊)》

JS

入門:

《深入淺出JavaScript》

《JavaScript DOM編程藝術》

《JavaScript學習指南》

《JavaScript權威指南》

任選其一。

個人建議:JavaScript權威指南。

進階:

《ppk談JavaScript》

《精通JavaScript》

《JavaScript高級程序設計》

任選其一。

個人建議:JavaScript高級程序設計。


先把文檔(書)粗略看一遍,不求記住。

找個比較成熟的項目直接從入口看代碼,邊看邊改,遇到不懂的馬上查,記錄。

再仔仔細細地看一遍文檔(書)。


我們要穿一手鞋,文檔是最好的老師。不管什麼框架,語言,都是先寫Hello World。

這個文檔里的start里一定會有。

然後就是照著文檔來。因為文檔一定是功能細分化的,所以可以根據需求專註於某些功能。

如果真的碰到特別蠢的,久不更新的文檔,那麼,google吧,這種坑多的框架,stackoverflow上一定會有許許多多的人提出各種問題。盡情向答者學習吧!

當基本上手之後,應該做練手項目,把學到的知識都串起來用一遍,此時有不會的,忘記的地方再去文檔里查或者google里搜。

做完以上之後,可以說算是入門啦。哪怕以後要用這個框架的其他功能,也可以很快的學會並吸收!

對了,我覺得新上手框架有一個最大的忌諱。

不要在剛上手的時候就摳字眼,去深究一個功能或者模塊是怎麼實現的。

敏捷開發,效率永遠應該是最重要的


正所謂欲速則不達。還是穩穩地走吧。

走的太快了,容易摔跟頭。

我覺得好的方法就是多實踐,多思考。


大神們都是知道這些語言,框架,工具怎麼做出來,套路都是一樣的,而且甚至都是實現過類似的語言,框架,工具的,哪來什麼入門啊?

所以,還是好好去修鍊如何掌握實現這些語言,框架和工具所需要的技能才是關鍵。


在學習某種技術和框架之前,首先我必須對他感興趣,並且理解他是為了解決什麼問題而存在的,如果是我應該怎麼去造這個輪子從而解決這些問題。

這個時候我在看官方文檔的時候,就會與作者產生強烈的共鳴,許多api還沒有看到文檔,就已經猜到了他們的存在,當看到他們的時候...嘿嘿,果然是這樣。。。

我從來不會去看某些視頻,因為太浪費時間了,如果我有看文檔解決不了的問題,那麼我就看源碼,我會適當的參與一些pr 。

最後,我想說的是,多嘗試造輪子,可以培養我上面說的這些能力!


0. 編程語言屬於底層基礎,框架、工具建於其上。所以要想基本功踏實,千萬別直接從庫、框架開始,所以他們能幫你快速擼出可用的程序。例子: 不會C#你照樣能用http://ASP.net做網站, 但你還是不會寫代碼!

1. 編程語言沒有優劣之分,任何語言都有它的價值所在,並且很多編程語言太多相似的地方,初級可以三心二意隨便學隨便玩多比較,知乎這類問題特別多。好處就是你不會學著php還想著怎麼用最好的語言寫桌面應用, 你還能了解js這種動態語言的類型不靠譜性,在學習時就可以注意點咯。

2. 選擇1個方向(網站/應用/桌面/...), 選擇最合適的語言+最棒的IDE(雖然IDE會生成一堆不明不白的文件,但真的建議初學者直接用IDE別用記事本, 你寫得不好IDE會給你實時提示),去找一本語法教程先放到一邊,不急敲代碼。

3. 打開刷題網站,開始刷題(包含知乎、SO等),不懂的先翻教材看看有哪些語法結構可以用上,實在不行再百度。每天就對著那100行不到的代碼調試、修修改改。這個過程可以清理常見語法障礙,對高級語法涉獵不會太多。

4. 花點時間研究研究官網API示例 和 高級語法特性(看不懂的繼續跳過)

----

經歷前面幾點後,可以說你有了某門編程語言的基礎了。

5. 選擇該語言的流行框架,快速瀏覽一遍官網(一般就是API),如果官網友好會有手把手的教程,那就先照著做,如果沒有一定要去找視頻、書找到一本運用這個框架開發出樣品的書。你在看那些資料的時候心裡就有了個目標。有代碼的就先運行起來看下效果,然後根據書/視頻上講的一大塊一大塊的往上搬磚,寫好大注釋對該樣品系統有個整體的認識,最後一句句分析樣品源碼。

6. 瀏覽網上已有的該框架的應用資源,自己構思一個需求,開始寫代碼。測試邊界增加需求重構代碼, 把一個產品做好做精緻比做十個囫圇吞棗的樣品好。

---


工具框架太多了,方法什麼的無從說起。語言嘛,一開始不要想著語言入門,而是編程入門。找一本c語言書,寫js代碼,學習數據結構。c最經典,js最簡單,c語言理論+js代碼實踐,完美組合。有了編程基礎再針對語言學習就是:語法特性 環境 框架什麼的了。


動手,思考


普通非大牛程序員試答:

編程=數據結構+演算法

以這個為標準的話,這個問題分兩種情況:編程已經入門的程序員和連編程都沒入門的程序員

如果一個連編程都沒有入門的人去學Java,先掌握Java的語法,這個過程也不用做什麼習題,然後去找本C語言的數據結構與演算法,然後用Java把上面的數據結構和演算法全部實現,那麼怎麼檢驗自己有沒有掌握數據結構和演算法呢?可以試試去實現DOM Level 1。好了,你入門了,後面還有很多問題,但都很容易了。


掌握一個語言的指標:

1.熟悉這個語言的常見的語法

2.熟悉數組和字元串的操作

3.熟悉面向對象寫法

4.熟悉文件操作

5.熟悉資料庫操作

相關:http協議/演算法等待補充


看官方文檔例子等等。


就框架來說,跑起來,加斷點,觀察數據是怎麼流動的。

然後結合代碼,思考作者為什麼這麼設計,理解他的設計思路。

基本上,設計思路如果理解了,其他的都可以直接猜出來,必要的話寫些東西測試一下猜想就行。


推薦閱讀:

專科女生有必要專升本嗎?在家庭和年齡都還允許的情況下
學英語需要注意是美式還是英式嗎?
大學數學(《數學分析》,《高數》)的自學要領是?
三流大學的學生怎樣彌補和一流大學的差距?
如果不考慮經濟問題,你們覺得工作累還是學習累?

TAG:學習 | 編程 | 計算機 | 後台開發 | 前端框架 |