1. 开篇概览
前一周写了一篇博文“记-码农的“启蒙”之《程序设计语言-实践之路》和《面向对象分析和设计》两书”,其中说打算总结下这两本书中有哪些收获,就是关于第一本书《程序设计语言-实践之路》的系列总结博文。
1.1 为何要读这本书?
首先这是一本介绍语言的入门书籍(笔者阅读是裘宗燕老先生翻译的第二版),如果你想从中学到一些独门绝技,那么抱歉,木有;其次它介绍的是程序设计语言的一些重要基础概念、各种概念之间的关系;并解释了语言中诸多结构的形成和发展过程,以及他们演化到今天这种形式的根源。
那么或许你该问了,了解这些有甚好处,不知道我照样写出漂亮的代码、架构等。的确,你可以的,现在的程序员在工作中都不止要用到一两种语言,然而我们通常对这门语言最直接的感触就是它的语法层面;我猜测你或多或少都有被语法的糖衣炮弹(语法糖)给打晕、蒙蔽过的经历吧。那么如果可以让你从语言设计者的角度来看待语言,则非常有助于你了解一门语言的特性,理解其中的优势以及弱势、以及它们为何发展进化为今天的形式,从而能更好的使用它们;从而能有效的避免身陷众多语言的糖衣炮弹中。
如果你有上面的需求,那么我力荐你买一本回来读读。细心的朋友可能会发现书名中还有个副标题“实践之路”,然而博文标题并无此。不是偷懒,而是故意为之。因为我想关注讨论的是语言的核心概念,而不是编译器实现细节方面。
1.2 计算机科学惯于在抽象之上建立抽象
好吧,我承认这句话有点装13。
这是这本书的序言中的第一句话,虽说计算机科学这个词语范围是有点甚广,但是仔细想一想也确实是这样的事实,就拿语言来说,汇编是对硬件操作的抽象;高级语言是又是对汇编的进一步抽象。而高级语言中也有各种的抽象思想所在,比如过程抽象产生了子程序、OOP中的面向接口编程也是一种抽象。总结来说也就是现在的操作系统、数据库、大型软件等等无一不是建立在抽象的基础之上。因为现在的软件系统的复杂度已经远远的超出了人的理解范围,抽象这种技能也不得已而为之,你不得不将大量复杂的细节隐藏起来来降低理解上的难度。
总之一句话“抽象无处不在”。
2. 本系列博文导航目录
由于不去关注实现方面的细节(对应本书中是2,4,5,14,15章节),所以都是以概念性方面的知识点安排的。话虽如此,但是语言的设计和实现具有内在的密切联系,想要忽略实现细节而很好的理解设计方面的概念也是很难做到的,这就需要读者自己去了解实现方面的一些知识点了。其中本系列2-6篇属于语言的核心概念,而7-10属于现有各种类型语言特性的概述性介绍。
- 1. 引言
- 2. 名字、作用域和约束(核心概念)
- 3. 控制流(核心概念)
- 4. 数据类型(核心概念)
- 5. 子程序和控制抽象(核心概念)(敬请期待)
- 6. 数据抽象和面向对象(核心概念)(敬请期待)
- 7. 函数式语言(敬请期待)
- 8. 逻辑式语言(敬请期待)
- 9. 脚步语言(敬请期待)
- 10.并发(敬请期待)
我的计划是2周一篇,目录结构暂定如此(照搬的书目录),也许会有一些章节内容繁多,到时会做适当的分割。
3. 总结
由于这些都是我个人理解的一家之言,难免会有一些错误或者不严谨的地方,欢迎园友们不吝赐教。