title: 代碼之髓讀後感——如何高效的學習語言
date: 2017-07-08 17:17:00
categories: 技術
tags: 讀後感編程
《代碼之髓》這本書裏提出了三種學習語言的方法—— 如何高效的學習語言?函數
在比較中學習工具
在歷史中學習學習
在實踐中學習設計
經過比較多種語言,總結出某種語言的獨有特色,以及多種語言的共有特色。blog
借用王垠的一些話——get
重視語言特性,而不是語言。
何一種「語言」,都是各類「語言特性」的組合。
每一種語言裏面必然有一套「通用」的特性。好比變量,函數,整數和浮點數運算,等等。這些是每一個通用程序語言裏面都必須有的,一個都不能少。你只要經過「某種語言」學會了這些特性,掌握這些特性的根本概念,就能隨時把這些知識應用到任何其它語言。
掌握了通用的語言特性,剩下的就只剩某些語言「特有」的特性了。研究語言的人都知道,要設計出新的,好的,無害的特性,是很是困難的。因此通常說來,一種好的語言,它所特有的新特性,終究不會超過一兩種。若是有個語言號稱本身有超過 5 種新特性,那你就得當心了,由於它們帶來的和可能不是優點,而是災難!it
各類語言之中,都有着共性,這是基本,而個性只是部分點。入門
在比較中學習,能夠幫助咱們更清楚地意識到:
哪些點是共性——就是上面王垠所謂的「語言特性」,由於這纔是語言的基本。掌握了這些共性,對於咱們的語言學習有着極大的幫助。這一般肯定着一門語言的基本架構方式,大體的代碼雛形,以及基本流程。這會告訴咱們如何去站立,如何去行走。
哪些點是個性——這個是須要咱們深刻使用時須要考慮的點。由於通常這些東西,都是一些在當前特定的條件下的,「如此作更爲方便」的方法。有時候這些東西可能不是必要的考量,可是掌握他們,對於此門語言使用每每會起到提高總體質量的做用。甚至促使咱們對於解決適當的問題有着更爲靈活多選的方式。這會告訴咱們如何在如今的路上奔跑,跳躍。由於這時候更加關注了這條路上的細節,哪裏有坑,哪裏有捷徑...
由於掌握了語言特性的人都知道,本身須要的特性,在任何語言裏面必定有對應的表達方式。
借用在當下的語境中,重視在對比中學習,體會到更多的語言特性,會幫助咱們對於語言的學習變得更加有一種直觀的感覺。咱們的思惟中,解決問題變得天然而然。編程就是把思惟映射到機器中的途徑而已。咱們已經知道什麼樣的想法能夠用怎樣的工具來實現,那實現想法也不就是一段段思路的拼接的過程麼?
咱們有時會發現,編程其實並不難,彷佛就是須要了解下這門語言中有着哪些工具可供咱們利用,咱們須要作的就是熟悉這樣一套系統,一臺大型設備的各類功能。可是咱們最後會發現,也只有那些其餘工具也具備的功能,纔是咱們最起碼要知道的。那些高精尖的技巧,也不過是在特殊環境下的應對方式。
感受學起來好像很容易,可是實際上咱們在學習中老是會迷失在各類細節中,最典型的就是相似於C中關於輸出的格式的翻炒——
舉個誇張點的例子。我發現不少編程培訓班和野雞大學的編程入門課,每每一來就教學生如何使用 printf 打印「Hello World!」,進而要他們記憶 printf 的各類「格式字符」的意義,要他們實現各類複雜格式的打印輸出,甚至要求打印到文本文件裏,而後再讀出來……
對於掌握編程的核心概念來講,這些其實都是次要的。
總而言之,經過對比學習,你會更容易發現真正的語言特性到底是什麼。學習編程到底要學習什麼。
經過追溯語言的發展歷史,瞭解語言是如何產生,變化,消失的,探尋語言發展演變的軌跡。
有時候,咱們在學習中,對於一些功能的學習,每每會不明因此,這實際上是由於,對於這種功能,你本身從內在其實並無以爲理所固然,就像是爲何要有類這一類的問題其實潛在的就在你的心頭縈繞着,這使得你的學習,會變得茫然,就像咱們最初學習線性代數,上來就整一堆定義,先把你整暈,再來一堆定理,每每不明因此,直接就迷失了,到頭來腦殼空空,真正的實際應用中,什麼也變不出來。因此我到如今對於線性代數仍是充滿了敬畏。
在歷史中學習,能幫助咱們更加清晰地瞭解那些被掩埋的細節。回看語言設計者爲了解決何種問題而創造出這樣一種語言,閱讀其發展變遷的歷史,那些功能的原因就會變得清晰,你也就會更加認同其中所蘊含的現實意義。
而從歷史中學習,也是有助於咱們更容易瞭解到語言的特性,那些非特性的部分爲何被創造出來,是爲了解決一種什麼樣的具體問題。這些都有助於加深咱們對於語言的理解。
親自進行程序設計,邊實踐邊思考如何編程,才能深刻了解設計者的意圖,同時也能發現本身原先理解的不到位之處。
這是這行的至上真理。
三種學習的方式,其實是爲了知足咱們學習語言的三種情緒:但願快速掌握的迫切,對於未知事物的求真以及對於自我認知的測驗