人生苦短,快用 Python

1. 写在前面

Ruby
语言到 Go
语言,目前终于开始使用 Python
进行编码。

对于 职场新手
,可能首先会提出一个问题:难道 Ruby
/ Go
不香吗?难道 Python
比其他两个语言好?其实都不是。如果我们认同 “技术是为业务服务的”
这个论调,那么 “编程语言应该为业务场景服务”
,仅此而已。

2. 编程语言是为业务场景服务的

根据业务场景选择合适的编程语言,使得当前场景的开发收益最大化。当用户量不是很多(机器没什么压力)而业务逻辑却比较繁杂(开发者编码有压力)的情况下,使用 Python 编码或许是一个较为明智的选择。

2.1 静态语言与动态语言

所谓静态语言,是指代码在编译的时候(简称 编译时
)变量的类型就可以确定的语言,比如 C/C++、Java、Go、Object-C 等;所谓静态语言,是指代码在运行的时候(简称 运行时
)变量的类型才可以确定的语言,比如 Python、Ruby、JavaScript、PHP、SQL等。

进一步,所以 编译时
,是指把代码文本转换为机器可执行文件的环境上下文,它会 产出
一个机器可以执行的二进制文件。所谓 运行时
,是指可执行的二进制文件在 CPU 上真实执行的上下文。

2.1.1 静态语言的①编写-②编译并链接-③执行过程

// cat main.go
package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

当我们使用 Go 编写
业务逻辑(比如上面的 hello world
代码)并执行 go run main.go
的时候,Go 开发工具链隐含地帮我们首先 编译并链接源码
生成可以执行的二进制文件,紧接着 运行
这个二进制文件。也就是说, go run main.go
等效于 ① go build main.go
+ ② ./mian
这两个命令操作。

我们可以简单地认为 go build main.go
是 Go 代码的编译时,产物是一个可执行的二进制文件 main
;命令 ./main
是 Go 代码的运行时,此时我们编写的逻辑 开始
在 CPU 上执行。

2.1.2 动态语言的①编写-②解释执行过程

# cat hello.py
print("hello world")

当我们使用 Python 编写
业务逻辑(比如上面的代码),在执行 python hello.py
的时候,Python 解释器直接帮我们 解释并执行
业务逻辑。由于人与机器之间的隔阂,python 源码最终也要变成机器可以执行的代码;但是相对于静态语言, 动态语言不存在编译后机器可执行的二进制产物
。换句话说,Python 的解释器一边编译源码,一边执行编译生成的代码。

2.2 人生苦短,快用Python

仅仅缺省编译链接过程并不能成为选择动态语言 Python 的理由,原因很简单:但凡使用 Python 能够解决的问题,均可以使用其他非 Python 的方案解决。

  • 我们可以使用 Python 处理文件(重命名、修改内容),也可以使用 Go 或者 Java 等完成同样的任务;
  • 我们可以使用 Python 处理表格数据,也可以使用 Go 或者 Java 等处理表格数据并达到同样的效果;
  • 我们可以使用 Python 编写爬虫工具,也可以使用 GO 或者 Java 等实现爬虫工具;
  • 我们可以使用 Python 编写 Web 服务,而使用 Go 或者 Java 等也可以编写 Web 服务甚至生态更完整;
  • 我们可以使用 Python 实践 AI 算法,而其他的语言也可以完成类似的工作(只不过生态不如 Python);
  • 其他……

基于上面的事实,并不存在必学 Python 的理由。可能 Python 只是一些细节上让完成上面列出的任务更简单,比如文件的读取、类型的转换(字符串与数字的互转)、序列号与反序列化(json字符串与json对象之间互转),等等;Python 语言本身封装了一些工具方法很容易地完成这些事情,而 Python 的第三方包进一步扩展了整个生态。

  • Python 可以更简单地处理文件(重命名、修改内容),比如几行代码就可以实现文件的打开、读取、写入、关闭;
  • Python 可以更快地处理表格数据,比如可以方便地循环迭代每一行每一个格子,也可以很方便地对表格数据进行格式转换;
  • Python 可以更快地处理爬取到的数据,比如可以方便地把 json 字符串转换成为 json 对象进行进一步的处理;
  • Python 在 AI 算法实践领域几乎是霸权地位(因为那些懂算法的人更喜欢写 Python 代码),使得 Python 技术栈几乎包含了所有 AI 相关的算法;
  • 其他……

基于上面的考虑,其实可以尝试学一下 Python。

3 小结

因为 Python 提供的一些便利性,当用户量不是很多(机器没什么压力)而业务逻辑却比较繁杂(开发者编码有压力)的情况下,使用 Python 编码是一个较为明智的选择:

  • 释放开发者把注意力放在业务逻辑的理解与梳理;
  • 很容易地扩充编码队伍(容易培养或招纳新成员).