本书概要介绍和阅读目标
这本书名为 Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages ,作者是 Bruce A. Tate ,即《七周七语言:学习编程语言的实用指南》,不过翻译时改成了《七周七语言:理解多种编程范型》。
学编程就好比学游泳,再好的理论也不如一头扎下水,扑腾着呼吸新鲜空气管用。在初次没入水面的那一刻,你必定会惊慌失措,但当你奋力浮出水面、大口大口地喘着气,你又会无比喜悦。这时你心里明白:“我学会游泳了。”至少我当初学游泳那会儿,就是这种感受。编程也同样如此——迈出第一步最难。因此你需要一位好老师,鼓励你勇敢地跳入水中。

顾名思义,(从英文书名的角度)这本书介绍了七种编程语言——它们的特性、应用、编程入门知识、关键编程范型、运用代表该语言最重要特性的技术解决问题。(从中文书名的角度)本书尤其关注不同编程语言蕴含的不同编程范型,可以说本书最重要的任务之一就是学习新的编程范型,(从英文书名的角度)本书也确实是学习这些语言的优秀入门指南。
…作为读者,你的脑袋必须多腾出点地方,以容纳七种不同的语法风格、四种编程范型、四十年语言开发的宝贵经验;作为作者,我必须尽量全面地涵盖各个主题,以便让你更好地理解语言。
这里列出本人阅读本书要达成的目标:
- 搭建相应语言的学习环境:下载对应的编译器或解释器,建立语言文件夹,在VSCode上安装相关插件,书写配置文件;
买这本书等于跟我做了笔买卖:你认可我把重点放在编程语言本而非详尽的安装过程上,我承诺在有限时间内尽可能多地授业解惑。你要学会利用Google搜索那些细枝末节,可别指望我会帮你解决各种安装问题。如此一来,我才有空间深入挖掘语言本身,而你在读过本书后,也才能了解更多语言方面的细节。
- 将书上的范例全部实现一遍:将书中的完整程序和代码片段一一输入并查看结果,做到对七种语言
Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell均略知一二——相当实用的技能!借鉴网络上的程序时可以针对问题进行调整。获得任何新技能的第一步,是先别想着独立解决什么,而是重复一遍前人已竟之事,这是掌握一门技能最快的方法。
可以说,学习本书不是为了成为专家,但是要学到比"Hello World"更加实用的知识。
第一章 简介
1.1 不走寻常路
这本书不是某些只介绍语言间相差无几的皮毛的教程,而是让我们痛快淋漓、深入探索语言本质。让我们了解以下问题:
- 语言的类型模型会影响对问题的处理方式和控制语言的运行方式。一门语言的类型模型是什么?强类型(Java)/弱类型(C语言),静态类型(Java)/动态类型(Ruby)。本书侧重强类型,也涉及静态类型和动态类型。
- 语言的编程范型是什么?面向对象
Object-Oriented、函数式、过程式,或者综合体?本书中有基于逻辑的Prolog,完全支持面向对象思想的Ruby和Scala,拥有函数式特性的Scala、Erlang、Clojure、Haskell,以及原型语言Io。其中Scala是多范型的multiparadigm,Clojure是多方法的multimethod(甚至允许自定义范型)。 - 如何和语言交互?编程语言可编译可解释,可有虚拟机或没有,有交互式命令行则先使用命令行,更大的项目用文件编程,不会涉及到如何打包。
- 语言的判断结构
decision construct和核心数据结构是什么?语言基本有if, while结构或其变形,像Erlang有模式匹配,Prolog有合一unification。核心数据结构则重点关注集合collection的使用,全面透彻理解集合。 - 语言有哪些与众不同的特性?要么是独特的高级结构,如Clojure的宏
macro、Io的消息解释message interpretation,要么支持强力的虚拟机,如Erlang的BEAM,要么提供针对特定问题的逻辑模型……
1.2 语言
这七门编程语言的选择理由:
- Ruby:面向对象语言,好用好读。重点介绍Ruby元编程
metaprogramming,可以扩展Ruby的语法。 - Io:和JavaScript同为原型语言,兼具简单性和语法一致性的并发结构,还有独特的消息分发机制。最简语法
mimimal syntax功能强大,和Lisp有些相似。 - Prolog:正是深受Prolog影响,Erlang才能够问世,作者认为它可以带给我们惊喜。
- Scala:运行于Java虚拟机上的一门语言,既引入了强大的函数式思想,也保留了面向对象。对于函数式语言程序员来说,Scala是异端邪说, 而对于Java开发者来说,Scala是天降福音。
- Erlang:一门历史悠久的函数式语言,在并发、分布式编程、容错等方面表现优异,用它设计带有并发、分布式等特征的程序会十分简单。
- Clojure:一门运行于Java虚拟机的、函数式的Lisp方言,彻底颠覆在JVM上并发编程的思考方式,是本书唯一在版本数据库中使用同一种策略管理并发的语言,最灵活的编程模型、众多Java库的支持。
- Haskell:本书唯一的纯函数式语言,极其强大的类型模型,不存在可变状态;相同的输入调用相同的函数总会返回相同的输出。
1.3-1.5 为什么买这本书
想要提高自己编程水平的程序员,可以买这本书。每年花个一星期学一门新语言,最少要挑出一门相性最好的语言使用,并把其他语言的精华融入到这门语言的代码中。最理想的情况,学习新语言会引领你踏上一条崭新的职业道路。
为了在新的计算机设计架构变革中占据先机,在编程范型的更新换代前提升自我,可以买这本书。比如Io、Scala、Erlang、Clojure、Haskell均拥有强大的并发模型,Io对 future 的实现、Scala的 actor 、Erlang的 let it crash 思想、Haskell避免副作用的纯函数、Clojure利用版本控制解决并发问题等等。
在学习语言基础时,想要真正理解语言设计者的思路,拥有超越基本语法的觉悟,可以买这本书。比如对Ruby能写一些元编程代码,可以用Prolog解决完整的数独问题,用Erlang写一个监控程序来检测崩溃进程、给用户报告崩溃进程的相关信息、启动另一进程接替崩溃进程的工作等等。为此,书中在每周设置了一些小型编程挑战和一个实战项目。
在带你超越语法之前,我要先向你作个承诺,同时也不得不作个让步。承诺是:决不会浅尝辄止、敷衍了事;让步是:无法像专业语言书籍那样涵盖所有基础知识。
如果阅读时不做任何习题,只能粗浅了解语法罢了;如果先看了答案再解答,也是不及格。真正要做的是先尽力解答习题,对于超出能力范围的小部分习题搜索答案。
此时此刻,我真想对你说几句意义深远又让人热血沸腾的话,但千言万语汇成四个字——享受编程。
第二章 Ruby
2.1 VS Code配置Ruby语言环境
首先看一下这篇文章,配置好学习Ruby的语言环境。
2.2 Ruby学习笔记
见这篇文章。
暂且跳过这一章,可能要看完其他相关的书后再写。
第三章 Io
3.1 Io简介
3.2 第一天:逃学吧,轻松一下
1 开场白
2. 对象、原型和继承
3. 方法
4. 列表和映射
5. true、false、nil以及单词
6. 第一天学到了什么
7. 第一天自习
3.3 第二天:香肠大王
1. 条件和循环
2. 运算符
3. 消息
4. 反射
5. 第二天我们学到了什么
6. 第二天自习
3.4 第三天:花车游行和各种奇妙经历
1. 领域特定语言
2. Io的 method_missing
3. 并发
4. 第三天学到了什么
5. 第三天自习
3.5 趁热打铁
1. 核心优势
2. 不足之处
3. 最后思考




428

被折叠的 条评论
为什么被折叠?



