⌨️ 第一章 编程的基础知识
📄 一句话概括

开发工程师的日常由两件事构成:写代码(把逻辑翻译成程序)和构建环境(让程序能在机器上跑起来)——后者常占掉一半时间,而且更能区分新手和老手。

📝 本节和前面几节的关系

1-7 的开发环节细看就这两件事。你对【环境的痛】应该不陌生:C++ 课配 Dev-C++、Java 课配 IDEA、树莓派课被 PEP 668 卡过——本节把那些零散的痛收纳成一张【为什么环境这么难】的地图。

一、两种工作的分界

写代码:用编程语言把设计图翻译成指令——这是【创造】的部分,最容易上手也最容易被 AI 辅助(1-3)。

构建环境:让代码能跑起来的一切准备——

老手共识:写代码是【逻辑对不对】的问题,环境是【组合对不对】的问题——后者变量多、坑深、报错难懂,所以有名言:【在我机器上是好的】是软件界第一大甩锅语录。

二、环境为什么这么难

同一个程序要跑起来,底下叠了四层条件:

代码本身
 └── 依赖的第三方库(版本要对)
      └── 语言运行时(Python 3.x?Java 21?)
           └── 操作系统与配置(路径分隔符、环境变量、防火墙)

任何一层不匹配都报错,而且报错常常指向很远的地方。你亲身踩过的例子:

三、行业解法:把环境【说明书化】

环境问题吵了几十年,行业沉淀了三层解法:

  1. 虚拟环境(venv/npm 目录):每个项目圈自己的地,依赖互不串门——树莓派课的 venv 就是最小版;
  2. 环境描述文件(requirements.txt、package.json):把【要装什么、什么版本】写成清单,别人一条命令照单全装;
  3. 容器(Docker):连操作系统层一起打包——【我的机器】变成【任何机器】,是当下团队开发的标配。

共同思想:环境不再靠口头相传,而靠一份可执行的说明书。 说明书在手,新同事十分钟上岗,CI 流水线也能自动搭出同样的环境(1-8 的 DevOps 就建在这上面)。

四、动手 Demo:给一个项目写一份环境说明书

拿你最熟的项目(比如数据库课的在线 SQLite 复习环境)做一次【如果换台电脑怎么十秒复现】的演练:

看到什么算成功:一份不超过十行的清单,包含: 1. 语言与版本(如 Python 3.13); 2. 依赖清单(本项目在线运行器方案=无依赖); 3. 配置项(浏览器即可,无本地安装); 4. 一句【怎么启动】。

读结果:换一台电脑,照单执行,项目照常跑——这份清单就是环境描述文件的雏形。能写出它,说明你分清了【代码】和【环境】这两本账。

30 秒实验

在你的 Windows 电脑上按 Win + R 输入 cmd,然后敲 python --version(或 py --version)。

看到什么算成功:显示版本号,或提示【不是内部或外部命令】。

读结果:两种结果都正常——有版本号说明运行时已配好;报【不是命令】说明 PATH 环境变量没配(正是【环境构建】四层里的最底层)。这就是环境问题的最小标本:代码一个字没错,跑不起来。

常见误区

  1. 【环境搭好了就一劳永逸】——依赖会升级、系统会更新、同事会换机器;环境说明书要像代码一样维护。
  2. 【环境报错一定是代码错】——先分层排查:报错发生在哪一层(库?运行时?系统配置?)——树莓派课的 MockFactory 就是一例:代码能跑、针脚没反应,查的是环境层。
  3. 【容器是大公司才用的】——Docker Desktop 装上就能用;个人项目用它把【换电脑重配半天】变成【一条命令两分钟】。
  4. 【写代码快=厉害】——老手的厉害在【少踩环境的坑+快速定位是哪一层出的问题】;这需要 1-1 那张六层皮地图。
自测三问(点开对答案) 1. **【在我机器上是好的】暴露的是什么问题?** 环境不可复现——依赖、运行时或系统配置与别人不一致;解法是把环境说明书化(清单或容器)。 2. **venv 解决的是四层里的哪一层?** 依赖层(第三方库版本隔离);它不管运行时与操作系统层,所以 Python 版本本身还得对。 3. **容器比 venv 多包了什么?** 连语言运行时与操作系统相关配置一起打包——从【依赖隔离】升级到【整台机器的说明书】。

相关笔记