代码的未来-读书笔记

读书记录:

我于2015/1/9日购买了本书, 经过2个晚上, 1个白天的时间, 通读完了<<代码的未来>>, 只余NoSQL, MongoDB, SQL, Memcached4章共30页还未读完.

书中对未来的预测非常让我信服, 即未来的编程语言应该能够方便进行多核和云计算的开发.

matz对当前以及未来几年技术趋势把握非常精准, 对当下非常流行的技术趋势都研究颇深.

matz先概括性地讲解了编程的一些问题:

编程的时间和空间

  • 编程的本质
  • 未来的预测

编程语言的过去, 现在和未来
讲述了编程语言的起源, 发展, 兴衰起伏.

  • 编程语言的时间
    编程语言的世界一章中, 探讨了编程时间的先驱, 编程语言的历史, 以及编程语言从过去到现在的进化方向, 最后对20年后和未来的编程语言进行了预测.

  • DSL: Domain Specify Language, 领域建模语言
    matz从Unix的内部DSL, 如shell, awk, seq等迷你DSL讲起, 再讲述了DSL的优势, 以及定义后, 介绍了Ruby作为最好的DSL语言的应用.

  • 元编程
    Meta, Relection
    类对象
    类的操作
    Lisp
    数据和程序
    Lisp程序, S表达式

    宏的功与过
    元编程的可能性与危险性

这一章主要讲述了语言的元编程能力, 重点讲述了ruby的元编程, 以及与元编程的鼻祖Lisp的宏(S表达式)比较

  • 内存的管理
    讲述GC的定义, 方式以及常用的GC方式, 文章谈到了静态语言和动态语言各自在GC上的使用方式, 以及GC优化手段. 包括java的GC.

内容:

  • 看似无限的内存
  • GC的三种基本方式
  • 术语定义
  • 标记清除方式, 复制收集方式
  • 引用计数方式, 引用计数方式的缺点
  • 进一步改良的应用方式
  • 分代回收
  • 对来自老生代的引用进行记录
  • 增量回收
  • 并行回收
  • GC大一统理论

第三章 编程语言新的潮流

  • 语言的设计
    以java,javascript, ruby, go三种语言来探讨语言的设计问题
    静态和动态类型的区别
    类型在静态类型和动态类型中的应用
    静态和动态类型语言的优缺点
    Duck type, 鸭式辩形
    Structural Subtyping

讨论一下问题:
作为客户端语言发布的java为何在服务器端获得成功?
Rails如何让ruby火起来?
Go在服务器端的应用

  • Go语言
    本章主要是Go语言的介绍和入门知识, matz认为go很有前途
    New
    Experimental(实验性)
    Concurrent
    GC
    Systems

  • Dart
    很想java的强类型语言, matz不看好

  • CoffeeScript
    对javascript的不满导致的coffeescript的诞生, coffee的入门介绍. matz认为coffee参考了ruby和python(但主要是参考了python), coffee的设计非常精妙和恰到好处, 某些方面比ruby更好

内容:

  • 声明和作用域
  • 分号和代码块
  • 省略记法
  • 字符串
  • 数组和循环

第四章 云时代的编程


4.1 可扩展性

  • 信息的尺感度
  • 大量数据的查找
  • 二分法查找
  • 散列表
  • 布隆过滤器
  • 一台计算机的极限
  • DHT(分布式散列表)
  • Roma
  • MapReduce

4.2 C10K问题

  • 何为C10K问题?
  • C10K问题引发的想当然
  • 使用epoll功能
  • 使用libev
  • 使用EventMachine

4.3 HashFold

  • HashFold库的实现(Level 1)
  • 运用多核的必要性
  • 目前ruby实现存在的问题
  • 通过进程来实现HashFold(Level 2)
  • 抖动
  • 运用进程池的HashFold(Level 3)

进程间通信

  • 进程与线程
  • 同一台计算机上的进程通信
  • TCP/IP协议
  • 用C语言进行套接字编程
  • 用Ruby进行套接字编程
  • Ruby的socket功能
  • 用Ruby实现网络服务器

Rack和Unicorn

  • Rack中间件
  • 应用程序服务器的问题
  • Unicorn架构
  • Unicorn的解决方案
  • 性能
  • 策略

第五章 支撑大数据的数据存储技术


5.1 键-值存储

  • Hash类
  • DBM类
  • 数据库的ACID特性
  • CAP原理
  • CAP的解决方案-BASE
  • 不能舍弃可用性
  • 大规模环境下的键-值存储, 以Roma为例
  • 访问键-值存储
  • 键-值存储的节点处理
  • 存储器
  • 写入和读取
  • 节点追加
  • 故障应对
  • 终止处理
  • 其他机制
  • 性能和应用案例

5.2 NoSQL

  • RDB的极限
  • NoSQL数据库的解决方案
  • 形形色色的各类NoSQL数据库
    -面向文档的数据库
  • MongoDB安装和启动
  • MongoDB的数据库结构
  • 数据的插入和查询
  • 用javascript进行查询
  • 高级查询
  • 数据的更新和删除
  • 乐观并发控制

5.3 用Ruby来操作MongoDB

  • 使用Ruby驱动
  • 对数据库进行操作
  • 数据的插入
  • 数据的查询
  • 高级查询
  • find方法的选项
  • 原子操作
  • ActiveRecord
  • OD Mapper

5.4 SQL数据库的反击

  • "云"的定义
  • SQL数据库的极限
  • 存储引擎Spider
  • SQL数据库之父的反驳
  • SQL数据库VoltDB
  • VoltDB的架构
  • VoltDB中的编程
  • Hello VoltDB
  • 性能测试

memcached和它的伙伴们

  • 用于高速访问的缓存
  • memcached
  • 对memcached的不满
  • memcached的替代服务器
  • Redis
  • Redis的数据类型
  • Redis的命令和示例

第六章 多核时代的编程


6.1 摩尔定律

  • 呈几何数增长
  • 摩尔定律的内涵
  • 摩尔定律的结果
  • 摩尔定律所带来的可能性
  • 为了提高性能
  • 摩尔定律的极限
  • 超越极限
  • 不再有免费的午餐

6.2 Unix管道

  • 管道编程
  • 多核时代的管道
  • xargs-另一种运用核心的方式
  • 注意瓶颈
  • 阿姆达尔定律
  • 多核编译
  • ccache
  • distcc
  • 编译性能测试

5.3 非阻塞I/O

  • 何为非阻塞I/O?
  • 使用read(2)方法
  • 边沿触发和水平触发
  • 使用read(2)和select的方法
  • 使用read+O_NONBLOCK标志
  • Ruby的非阻塞
  • 使用aio_read

5.4 node.js

  • matz的减负, 拖延, 委派
  • 非阻塞编程
  • node.js框架
  • 事件驱动编程
  • 事件循环的利弊
  • node.js的编程
  • node.js的网络编程
  • node.js的回调风格
  • node.js的优越性
  • EventMachine与Rev

5.5 ZeroMQ

  • 多CPU的必要性
  • 阿姆达尔定律
  • 多CPU的运用方法
  • 进程间通信
  • 管道
  • SysV IPC
  • Socket
  • Unix Socket
  • ZeroMQ, 连接模型

你可能感兴趣的:(代码的未来-读书笔记)