迁移 blog 到 wordpress

lucida.me

lucida.me 是我在 2014 年时创建的 blog。

最初我在模仿 刘未鹏 的 mindhacks:深度长文,技术为主,顺带一些诙谐。

7 年之后,lucida.me 只有十余篇文章,虽然一些文章的点击量还可以(比如 程序员必读书单 1.0我的算法学习之路 这两篇),但更新极慢,中间还断更两三年之久。

2021 年的年底,我打算重新写点东西。

不会像之前写书单推荐一百多本书那么夸张,毕竟那类长文工作量太大,既没有时间,也没有动力。况且工作时间越长,越能意识到自己的不足,越不敢随便推荐。

应该会写点书评,偶尔吐个槽。

jekyll → hexo → wordpress

lucida.me 经历了三个阶段:

  1. github pages + jekyll(2014 – 2016):利用 github pages 作为托管空间,jekyll 作为博客框架
  2. VPS + hexo (2016 – 2021):鉴于 github 间歇抽风,更换到一个更稳定的 VPS,并把迟迟没更新的 jekyll 换到 hexo
  3. VPS + wordpress(2021 -):当前状态

为什么要从 hexo 切换到 wordpress

继续阅读迁移 blog 到 wordpress

我们能从一本 45 年历史的计算机书中学到什么

人月神话 —— 1999 年图灵奖获得者 Fred Brooks 作于 1975 年,到现在已经快半个世纪。

计算机行业的发展速度不必赘言,

这本上个世纪的书还有用吗?

有用。


第一次见到 人月神话,是在 2007 年,大连奥林匹克电子广场地下二层鹿鸣书店。

鹿鸣书店专门卖计算机/电子科技书籍,所以我当时一度以为 人月神话 摆错了地方,因为它的书名非常像武侠言情小说,比如古龙的新月传奇,或是张国荣的星月童话。

第二次见到 人月神话,是在 2010 年,当时刚刚考完研,打算把计算机经典书籍过一遍,在所有的推荐书单我都发现了这本书。

看来这本书不是武侠言情小说。


第一次阅读,过程十分痛苦:一部分,源自于这本书故作聪明但并不达意的翻译(比如把 Second System Effect 翻译成 画蛇添足 ),另一部分,源自于这本书面向项目经理和有经验的工程师,我一个在校学生,能读出个屁来。

第一遍读完我只记住了书中那句略显逗逼的话:

无论多少个母亲,孕育一个生命都需要十个月。

之后每次别人催我做什么,我都会用这句话顶回去。

所以这本书并不是给在校学生看的,甚至不是给刚入行的看的,要读懂它没个几年经验是不行的。

要是你还在读大学,有人推荐你看人月神话,那个人一定是个大忽悠,或是知乎买书刷返利。

继续阅读我们能从一本 45 年历史的计算机书中学到什么

程序员必读书单 1.0 — 六年后的回顾

年更系列(继续保持一年一次的更新频率 o_O)

六年之前,我写了 程序员必读书单 这篇文章,两万五千多字介绍了近 100 本书,覆盖基础理论,编程语言,程序设计等十余个领域。然后从中精选出 30 本书用于入门和提升。

当时写这篇文章的初衷是想写一个不会过时的书单。书单写于 2015,现在 2021,是否还适用呢?

必读书单

先放下 2015 年的书单:

入门书籍

程序设计:

  1. 基础理论 : 编码:隐匿在计算机软硬件背后的语言
  2. 编程语言 :
    • C : C 和指针
    • C++ : C++ 程序设计原理与实践
    • Java : Java 核心技术(第9版)
    • C# : 精通 C#(第6版)
    • JavaScript : JavaScript DOM编程艺术(第2版)
    • Python : Python 基础教程(第二版)
  3. 编程语言理论 : 编程语言实现模式
  4. 程序设计 : 程序设计方法
  5. 算法与数据结构 : 算法(第4版)
  6. 程序调试 : 调试九法——软硬件错误的排查之道

软件开发:

  1. 编程实践 : 程序设计实践
  2. 面向对象程序设计 : Head First设计模式
  3. 重构 : 重构
  4. 软件测试 : How to Break Software
  5. 项目管理 : 极客与团队
  6. 专业开发 : 程序员修炼之道:从小工到专家
  7. 大师之言 : 奇思妙想:15 位计算机天才及其重大发现
  8. 界面设计 : 写给大家看的设计书
  9. 交互设计 : 通用设计法则
继续阅读程序员必读书单 1.0 — 六年后的回顾

程序员必读书单 1.0

本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。

前言

Reading makes a full man; conference a ready man; and writing an exact man.

Francis Bacon

优秀的程序员应该具备两方面能力:

  • 良好的 程序设计 能力:
    • 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列);
    • 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络);
    • 熟悉至少两门以上编程语言(例如 C++,Java,C#,和 Python);
  • 专业的 软件开发 素养:
    • 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码;
    • 把握客户需求,按时交付客户所需要的软件产品;
    • 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。

和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的——尤其是经典图书,它们都能够拓宽程序员的视野,提高程序员的成长速度。

在过去几年的学习和工作中,我阅读了大量的程序设计/软件开发书籍。随着阅读量的增长,我意识到:

  • 经典书籍需要不断被重读——每一次重读都会有新的体会;
  • 书籍并非读的越多越好——大多数书籍只是经典书籍中的概念延伸(有时甚至是照搬);

意识到这两点之后,我开始思考一个很 功利 的问题:如何从尽可能少的书中,获取尽可能多的关键知识?换句话说:

  • 优秀的程序员应该掌握哪些关键概念?
  • 哪些书籍来可以帮助程序员掌握这些关键概念?

这即是这篇文章的出发点——我试图通过 程序员必读书单 这篇文章来回答上面两个问题。

标准

进入必读书单之前,我先介绍下书单里的书籍选择标准和领域选择标准。

继续阅读程序员必读书单 1.0

我的算法学习之路

关于

严格来说,本文题目应该是 我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如 算法导论 指的实际上是 数据结构和算法导论),所以我认为本文题目是合理的。

这篇文章讲了什么?

  • 我这些年学习数据结构和算法的总结。
  • 一些不错的算法书籍和教程。
  • 算法的重要性。

初学

第一次接触数据结构是在大二下学期的数据结构课程。然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——反正最后考试划个重点也能过,于是这门整个计算机专业本科最重要的课程就被傻逼的我直接忽略过去了。

直到大三我才反应过来以后还要找工作——而且大二的折腾证明了我并没有什么商业才能,以后还是得靠码代码混饭吃,我当时惊恐的发现自己对编程序几乎一无所知,于是我给自己制订了一个类似于建国初期五年计划的读书成长计划,其中包括C语言基础、数据结构以及计算机网络等方面的书籍。

读书计划的第一步是选择书籍,我曾向当时我觉得很牛的 “学长” 和 “大神” 请教应该读哪些算法书籍,”学长”们均推荐算法导论,还有几个”大神”推荐计算机程序设计艺术(现在我疑心他们是否翻过这些书),草草的翻了下这两本书发现实在看不懂,但幸运的是我在无意中发现了 豆瓣 这个神奇的网站,里面有很多质量不错的书评,于是我就把评价很高而且看上去不那么吓人的计算机书籍都买了下来——事实证明豆瓣要比这些”学长”或是”大神”靠谱的多得多。

继续阅读我的算法学习之路

90 分钟实现一门编程语言——极简解释器教程

关于

本文介绍了如何使用 C# 实现一个简化 Scheme——iScheme 及其解释器。

如果你对下面的内容感兴趣:

  • 实现基本的词法分析,语法分析并生成抽象语法树。
  • 实现嵌套作用域和函数调用。
  • 解释器的基本原理。
  • 以及一些 C# 编程技巧。

那么请继续阅读。

如果你对以下内容感兴趣:

  • 高级的词法/语法分析技术。
  • 类型推导/分析。
  • 目标代码优化。

本文则过于初级,你可以跳过本文,但欢迎指出本文的错误 🙂

代码样例

public static int Add(int a, int b) {
    return a + b;
}
>> Add(3, 4)
>> 7
>> Add(5, 5)
>> 10

这段代码定义了 Add 函数,接下来的 >> 符号表示对 Add(3, 4) 进行求值,再下一行的 >> 7 表示上一行的求值结果,不同的求值用换行分开。可以把这里的 >> 理解成控制台提示符(即Terminal中的PS)。

继续阅读90 分钟实现一门编程语言——极简解释器教程