编程:从入门到放弃

Updated: 2018-12-01

这些页面的目的不是炫耀和鼓吹一些冷僻的编程知识,而是通过横向比较一些语言的特性,来更深入的理解和体会编程语言的设计。这里的坑都是在实际工程中踩过的,虽然有一些对于编程入门来说显得吹毛求疵。

学习编程最好的方法就是动手尝试。书中的例子都尽量保持短小,以方便尝试和重现。其中用到的几个语言,哪怕不是你的最爱,也不妨感受一下。已经不止一次,我曾经嗤之以鼻的语言后来成了我的主要工作语言。

三段论

我们把每个坑展开为一篇三段论:

  1. 入门:一点点基础知识。
  2. 坑!:出乎意料的结果。
  3. 还没放弃?:如果你还打算继续学习,那就给你个解释。

语言和环境

下面列出了书中会用到的集中语言和它们的hello world的例子。我们尽量使用 REPL(Read–eval–print loop,即交互模式)来获得更快的反馈,和更直观的印象。如果没有特别说明,可以通过提示符来判断是什么语言。

Bash

在 macOS 和 Linux 中可以直接打开 terminal 运行。Windows 下则建议安装 Windows Subsystem for Linux。提示符为$

$ echo "hello world"
hello world

Java

Java 9 之后提供了jshell(在$JAVA_HOME/bin下)。提示符是jshell>

jshell> "hello world"
$1 ==> "hello world"

Python

如果没有特别声明,文中的例子都是 Python 3 的。运行python进入 Python 2,或python3进入 Python 3。提示符都是>>>:

>>> 'hello world'
'hello world'

Javascript

Javascript 的命令都通过node来执行。提示符是>:

> 'hello world'
'hello world'

PHP/Hack

PHP5 于 2018 年退役,但文中有的例子是只存在于 PHP5 的。如果无特别声明,PHP 都使用 7 以上的版本。运行$ php -a进入交互模式。提示符为php >

php > print 'hello world';
hello world

Hack 大多数情况兼容 PHP。但版本 3.24 后可能不再兼容 PHP5。运行$ hhvm -a可进入交互模式。提示符为hphpd>:

hphpd> print 'hello world';
print 'hello world';
"hello world"

SQL

我们用 MySQL 来执行 SQL。$ mysql -u root -p然后输入密码进入交互模式。提示符为mysql>

mysql> SELECT 'hello world';
+-------------+
| hello world |
+-------------+
| hello world |
+-------------+
1 row in set (0.00 sec)