diff options
| author | eltrac <hi@eltr.ac> | 2026-03-06 23:47:17 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-03-06 23:47:17 +0800 |
| commit | 3d3fc00379df9873605a1024f9f03aab16c8a72a (patch) | |
| tree | 7ac4d4164f7043b13cbac6ae4614a5c667437fb7 /content | |
| parent | 342e684d2e78b4c57add63502c69245aba2ecd4a (diff) | |
docs: new draft
Diffstat (limited to 'content')
| -rw-r--r-- | content/posts/lost-in-gui.md | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/content/posts/lost-in-gui.md b/content/posts/lost-in-gui.md new file mode 100644 index 00000000..43737c7f --- /dev/null +++ b/content/posts/lost-in-gui.md @@ -0,0 +1,61 @@ ++++ +title = '迷失于图形界面' +subtitle = 'It is a disability.' +slug = 'lost-in-gui' +tags = ['软件','设计'] +categories = '' +date = 2026-03-06T22:30:14+08:00 +draft = true +toc = true ++++ + +学校开设了 Python 课程,课程还涉及人工智能相关的内容,但也有相当一部分内容是 Python 程序设计基础。自然地,第一堂课的内容是配置开发环境,*自然地*,配置开发环境的内容就是*安装 PyCharm*,并在 PyCharm 的图形界面里找到对应的面板安装要用的依赖项。 + +一般来说,只要老师没有妨碍我愉快地用我爱用的编辑器(Neovim)写代码,我是不会说什么的。只不过,这位老师之前也教过我数据库的课程,他对于开发工具的态度在我看来非常典型,所以值得一谈。<!--more--> + +## 不解之词 + +老师在演示如何用 PyCharm 安装依赖时说了这样一句话:“我看有的人用写代码的方式就能把依赖安装上了,那样好像是会快很多,有些人就是能找到一些捷径啊!” + +尽管我对 Python 生态不熟悉,但根据他的描述,我大概明白他说的是类似 Node.js 的 `package.json`、Go 语言的 `go.mod` 和 Maven 的 `pom.xml` 之类的东西。在项目根目录的一个文件声明项目所需的依赖之后,执行安装命令,就能在当前项目下安装所需的依赖。这实际上是相当常见的实践,有正经工程应用的编程语言都有类似的东西。 + +在讲授数据库原理及其应用这门课的时候,他要求我们安装的是 [Navicat](https://www.navicat.com/),一个管理数据库的图形界面工具。我不想用闭源的商业软件(而且我当时的操作系统是 Arch Linux,似乎也没有在 AUR 上找到包),所以选择了 [DBeaver](https://dbeaver.io/)。我记得很清楚,我除了在需要提交作业截图时使用了这个软件,其他时候都是用 [MariaDB](https://mariadb.org/) 自带的命令行工具,手打 `SELECT` 和 `INSERT INTO` 语句,因为我真的不想在层层叠叠的图形界面里找我想要的功能。 + +我记得有一次交作业我实在不想打开 DBeaver,于是提交了终端截图,结果下一次上课的时候就听到他这样说:“有的同学直接输入 SQL 语句,都不嫌麻烦的吗?临时输入一两句还好,要输的东西多的时候,就直接在软件的表格里编辑数据表就好了啊。” + +到目前为止,这还只是操作习惯的差异,不足为奇。*所以,老师只是一个喜欢操作图形界面的人而已,这不代表他是个差劲的程序员,程序员的能力不体现在工具的选择上,不熟悉命令行工具又怎么了?* + +“大家用 `pip` 安装依赖的时候注意一下啊。”老师好像是突然想起了以往的经历,在讲课时突然插入了这样一句话,“用 `pip` 安装的第三方库和你的 PyCharm 里的第三方库可能不会互通,就是说你用 `pip` 安装了第三方库之后,在 PyCharm 里可能用不了,要在 PyCharm 的图形界面里安装依赖。” + +我没学过 Python,但确实用 Python 写过不少脚本来帮我自动化处理某些操作,比如批量修改博客的 Markdown 文件格式、替换文本之类的,我也的确遇到过没办法正常加载依赖的问题。当时我只能改变实现方式,避免调用第三方库,一直没明白原因。这么说,我的问题就要从老师那里得到解答了? + +没有,他直接往后讲了,什么也没说。他自己大概也不明白为什么 `pip` 安装的依赖会没办法在 PyCharm 里使用。 + +求助*熟练操作蟒蛇*的[狐狸](https://blog.southfox.me/)之后得知,这是 Python 的[虚拟环境](https://docs.python.org/3.14/library/venv.html)导致的,即 `venv`。虚拟环境会将软件包与全局环境的软件包隔离开来,只有在环境内显式声明的软件包才可用。`pip` 默认把软件包安装到全局环境中,而 PyCharm 会帮忙管理虚拟环境,两者不在同一个环境里操作软件包,所以没办法直接互通。 + +这就解释清楚了,所以我只需要执行 `source` 命令进入虚拟环境,然后在虚拟环境里管理依赖和运行 Python 程序就可以了;如果安装了 uv,使用 `uv run` ,可以直接在项目的环境里执行命令。[^1] + +不过,老师看起来教授 Python 也有几年了,为什么会不清楚这个基础概念呢?难道是我误解了老师的…… + +*好了,是时候放下我对教师的假惺惺的尊敬了。* + +## 图形界面的魔法 + +图形界面的优点在于,它屏蔽了很多细节,避免直接和复杂的配置文件和基础工具打交道。这无可厚非,软件设计的一大原则就是「信息屏蔽」,让用户关注更重要的事情。可是,对于程序员来说,这些细节真的应该被屏蔽吗?一个好的程序员不应该了解自己所使用的开发工具是如何运作的吗? + +我在英文博客上写过一篇《[Java Development with True IDEA](/en/posts/java-dev-with-true-idea/)》,强烈抨击了 IntelliJ IDEA 这个令我作呕的集成开发环境,并把 IDEA 重新定义为 Instant(快速)、Deliberate(审慎)、Elegant(优雅)和 Attentive(专心)。 + +我当时连续使用 IDEA 将近一年的时间,原因在于:没了 IDEA 我就不知道怎么开发 Java 项目了。之所以会这样,是因为 IDEA 给我屏蔽的信息太多了。不操心底层真正发生了什么的后果是,我根本不知道底下发生了什么。当我按下 IDEA 的「运行」按钮时(PyCharm 也是一样的),究竟有什么命令被执行了?我不清楚,以前的我也不关心,我只知道「这个按钮能让我的代码跑起来」,就像魔法一样。 + +可是,要是有一天魔法失效了呢?当我按下「运行」的时候程序没有被执行,当我按下「同步」按钮的时候依赖没有被同步(IDEA 的设计非常奇怪,有时候「同步」按钮根本不会显示,我必须在一个下拉框里找到某个菜单项才能正常同步依赖),当我的程序没有被正常编译,而我在密密麻麻的界面里找不到相关的配置项时,我要怎么办? + +要找到图形界面里的某项配置可真不简单。首先,我很难用语言描述清楚我要找的是什么,如果描述不清楚,又怎么在搜索引擎里搜索教程呢?其次,就算找到了我要的东西,有人告诉我这个东西要在 `Project Strucutre -> Libraries -> More` 里面找到,我也要在硕大的图形界面里搜寻这些文字的位置。再次,就算有截图指引,我也有可能因为版本差异而没有办法在图中所示的地方找到我需要的东西。 + +唔,有人可能会因为熟悉图形界面迷宫而感到自豪吧。我记得我在各种按钮、菜单、面板和输入框之间穿梭,只为了调整项目的编译方式时,有一个不熟悉计算机的朋友突然凑过来看我在做什么,发出了「好厉害」的感叹。可是,究竟为什么要学习一套可有可无的、建立在基础工具之上的抽象,而不去直接使用基础工具呢? + +这就好比用 React 开发一个只有一页的网站,而这一页的内容只是几句话和几个链接——*你为什么不能直接写 HTML,而要去操作虚拟 DOM 呢?* + +## 破除魔法 + + +[^1]: 参见:[Running commands in projects | uv](https://docs.astral.sh/uv/concepts/projects/run/) |
