陈小涛的技术学习笔记

为什么我选择了 Python

「学第一门语言该选什么」这个问题我被问过很多次,我的回答一直没变:Python。但每次说完我都要补一句——不是因为它最强,而是因为它最不挡我的路。这两句话差别很大,前者是技术判断,后者是个人取舍。这篇把我的取舍过程完整摊开:我试过什么、为什么最后留下它、以及哪些情况我根本不建议你用。

上手成本生态反馈速度诚实的短板

一、先说结论

我从头到尾只想做成两件事:把脑子里的想法快速变成能跑的东西,以及把重复的活交给机器。这两件事的共同要求是"从想法到结果的路径要短"。Python 在这条路径上,几乎是所有主流语言里最短的。这就是全部理由。

「一门语言好不好,不取决于它有多少特性,而取决于它把你从想法送到结果之间,挡了多少道坎。 —— 我自己总结的一条选型标准

二、我当年试过哪些

我不是一开始就认准 Python 的。早期我什么都碰了一点,说出来你可能也有同感:

三、Python 到底赢在哪

上面那段经历只是结果,我还想过为什么是它。总结下来是五条,每条我都拿别的语言对照过:

1. 从想法到能跑,中间几乎没距离

不用声明类型、不用编译、不用管构建配置。写完一个文件,敲一行命令就跑。这个看起来是小事,实际影响巨大:反馈周期越短,你试错的速度越快,学得越快。

# 这就是一个完整的、能跑的程序,没有任何多余的东西
with open("notes.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
print(f"一共 {len(lines)} 行")
# 对比一下,同样的事在有些语言里的样子(示意)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
    FILE *fp = fopen("notes.txt", "r");
    if (!fp) { perror("open"); return 1; }
    int lines = 0, ch;
    while ((ch = fgetc(fp)) != EOF) if (ch == '\n') lines++;
    fclose(fp);
    printf("一共 %d 行\n", lines);
    return 0;
}

两边都能跑、结果一样。但一个是"我想读个文件",另一个是"我要先跟文件句柄、错误码、内存打交道,顺便读个文件"。差别不在难易,在注意力被占掉了多少。

坑点:中文文件一定要带 encoding="utf-8"。不带的话在 Windows 上经常读出来一堆乱码,我第一次遇到时还以为文件坏了,重下了好几遍。

2. 需要什么,基本都已经有人写好了

这是它最实际的优势。处理表格、生成文档、算数据、画图、批量改文件、调各种网络资源——你想到的事情,几乎都有现成的库可以直接用,装一下、导入、用。你不需要自己从零实现,只需要正确地把它们拼起来。

我一开始还觉得"用别人的库"有点不好意思,像作弊。后来想通了:我的目标是把事情做成,不是把轮子重新发明一遍。能站在别人的成果上往前一步,这本身就是效率。

3. 它逼我思考的是问题本身

有些语言的难点在语言本身:类型系统、内存管理、编译过程,你要先花很久跨过这些,才能开始解决真正的问题。Python 把这些基本藏起来了,于是我被逼着面对的只剩三个问题:输入是什么、输出是什么、中间怎么变。

这三个问题才是真正的难点,也才是真正值得花时间的地方。我更愿意把学习时间用在这上面,而不是用在跟编译器较劲上。

4. 写得越久,越能体会到"读得懂"的价值

三个月后回头看自己写的脚本,很多语言里你要费点劲才想起"当时为什么这么写"。Python 的语法接近自然语言,缩进代替括号,大部分代码不需要注释也能读懂它在干嘛。这一点在偶尔才维护一次的小脚本上尤其重要——因为它们没有文档、没有测试,全靠你自己看懂。

5. 它能从小长到大

最后这条我一开始没意识到,后来才发现很关键:Python 的脚本可以只是二十行的自动化,也可以长成一个正经的后台程序,中间不需要"换语言重写"。一个东西从"我随手写的"变成"我天天在用的",它可以一直用同一套东西演进下去。不用因为规模变大就推倒重来,这对个人项目来说是巨大的省事。

四、它的短板我不回避

如果只说优点,那就是软文不是笔记了。Python 的问题非常明确,我列在这,并且说清楚我自己怎么处理的:

它的长处

  • 上手快,反馈及时
  • 现成的库极其丰富
  • 代码可读性好,久放不忘
  • 从脚本到程序不用换路子
  • 跨系统跑,写一次哪都能用

它的短处

  • 纯计算任务跑得比编译型语言慢
  • 并发处理不是它最擅长的方向
  • 装到别人电脑上要带运行时
  • 太灵活,大项目里容易失控
  • 手机上基本不适合跑

逐条说我的应对:

五、什么情况我不建议用 Python

这个section其实比"推荐"更重要。以下几种场景,我会明确建议换别的:

六、那条学习曲线

最后放一张我自己感受最深的图。同样是"想做出东西"这个愿望,不同语言让你尝到甜头的时间点差别很大:

入门门槛 投入的时间 → 这里我就跑出第一个能用的东西了 另一些方向:成就感来得晚,但天花板高
蓝线是 Python:起步平缓,很快就能做出真东西

我想说的不是"简单就是好"。曲线平缓意味着你更容易坚持下来,而坚持这件事,在学任何东西上都是最大的变量。很多人放弃编程,不是因为难,而是因为连续几周都做不出任何能看见的东西。Python 最大的贡献,是让"做出东西"这件事来得足够早。


我的结论

选 Python,是因为它让我的精力花在「做什么」上,而不是「怎么让编译器满意」上。它不快、不是所有场景的最佳解、也不是什么都要用它的银弹。

但对我来说,一个能让我持续做出东西的法子,比一个理论上更强大的手段重要得多。这就是我全部的理由,也说不出更漂亮的说法了。