【代码之髓】编程语言核心概念
要确认理解是否正确,首先得表达出来。
更新历史
- 2023.03.04:完成初稿
读后感
这本书是典型的日系程序科普书,比较细化横向思考,把不同语言的相同功能的设计进行对比,第一次看比较新鲜,看多了就有点无趣。反而是和程序无关的如何学习很有意思,可能说到底核心概念就是学习,学习无非知懂明精。
读书笔记
要确认理解是否正确,首先得表达出来
假设你正在学习一些知识,并自我感觉已经理解了。那么,你到底是真正理解了呢,还是感觉自己已经理解了呢?这个仅凭自己苦思冥想是不行的。为了验证理解正确与否,需要表达出来。只能基于自己的理解说出自己的观点,然后让第三方来判断和检验。比如学习英语,就要在别人面前使用自己学到的英语,同时观察别人的反应。不这样做的话,就无法知道自己是否真正掌握了英语。
程序员一直受益于这一点。如果是写文章,写出来的东西即使有错误也可能没人指出来,或者根本没有人看你的东西。但是写程序不一样,语言处理器会事无巨细地做错误检查并指出。这和与人打交道不同,只要你方便,它总是有足够的时间和耐心陪你一起。
当你不知道该学习什么时
应该学习什么?我们经常听到这样的问题。在回答之前,笔者想先问这样一个问题:你学习的目的是什么?这个如果不明确,提建议就无从下手。我们生活在一个信息爆炸的时代。不管三七二十一统统都学,这样的学习策略已经不再适用。必然要有所学,有所不学。这时,我们就要事先明确
自己到底想做什么,然后再去学习能够达成这一目标的知识。不知道自己要做什么?或许你从一开始就在苦思,想做一件完美的事情。一件从没有人想到过的,能获得别人赞誉的事情。如果最初的设想太过宏大导致无从下手,那么这一设想就永远不可能实现。还不如从小事做起,从简单的事情做起。在这个过程中,你可以逐渐明白自己哪些已经能做、哪些还不能做,如果要做还要学习哪些知识。长此以往,就能培养出完成更复杂的任务的能力。
具体的知识和抽象的知识
在语言 X 中如何实现 Y,像这种具体的知识(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。世界瞬息万变,这意味着限定了应用范围的具体知识将慢慢失去其价值。因此,我们不仅要学习具体的知识,更要有意识地去学习那些应用范围广泛的抽象的概念。
当然,学习了抽象的元知识,如果不将其与你具体的经验相结合,也无法在实际应用中发挥其作用。喜欢樱花的人即使剪下花开的树枝带回家,终将看到的也仅仅是枝枯花败的场景而已。要想樱花年年盛开,离开根部和枝干是不行的。
我们所学的知识到底有没有真正的“根基”,可以通过考察能否具体地举例或者具体地实现来确认。没有真正根基的知识是无法顺藤摸瓜、触类旁通的,所谓学习到的知识也只能像鹦鹉学舌般的重复讲讲而已。想要因地制宜地活用知识更是缘木求鱼,根本没有可能了。
学习讲求细嚼慢咽
一口吞不下一整块肉。首先要把肉切成能入口的大小,嚼碎后再吃。同样的道理,对抽象的概念、复杂的系统和不习惯的领域,我们也不可能一下子理解通透。首先要把信息切分,一小块一小块地消化吸收到自己的大脑里。
然而,在信息爆炸时代,如何对信息做取舍呢?什么信息是重要的,什么是不重要的?要判断什么信息重要首先需要对其有深刻的理解,但如此一来,就陷入到先有蛋还是先有鸡的困境中了。
身边如果有这熟悉这些信息的人、朋友,向他们请教也是一种方法。但要是没有呢?在网上检索查询的话,那些发言者是真的熟悉还是装作熟悉呢,这又该如何判断?
作者本人写的文档当然是最为翔实的。但是要么认为难懂,要么认为内容太多,要么认为看英语有困难,我们总会有各种借口放弃查阅原作者的一手资料,而去寻找那些写得简单的解说。这就如同,当肉太大、太硬时,转而不顾食品安全,吃起别人做出来的肉馅。
从需要的地方开始阅读
针对面对庞大信息量心力交瘁时该怎么办的问题,我们在“学习讲求细嚼慢咽”专栏中介绍了三种方法。第一种方法就是“从需要的地方开始阅读”。
有时,我们并不需要掌握一本书或者文档的全部内容。明确阅读的目的并弄清楚为达成这一目的需要阅读哪些地方,就可以有针对性地阅读,无需在其他无关的地方花费大量精力。
或许有些人会因为不逐字逐句仔细阅读而产生负罪感。但是比起心力交瘁完全读不下去来说,还是挑挑拣拣地阅读更好吧。与其让“非全部读完不可”这样的完美主义挫败干劲,还不如放弃不读呢。要知道,干劲是多么地宝贵呀!