Replying to f6XF

最近自己学习了一下一些实用的技术,比如某些 Web 前端技术,Kubernetes 的用法等等。我发现这些技术的官方教程普遍存在严重的问题,让人很不容易看下去。有些被叫做 tutorial,可是却仍然很难看懂。想了一下,计算机技术的教育一直以来都是这样,造成了很高的门槛。

初步总结一下,我觉得这些入门教程存在以下几个问题:

Web 前端 tutorial,普遍的问题是喜欢让学生做一些“现实应用”,比如小游戏。本来这技术用非常小的,几行代码的例子就能说明白,非得设计一个类似 tic-tac-toe 那样复杂的游戏。写了好几节课还没有明白最后做出什么。学到一半的时候,就已经开始迷糊这个技术的要点在哪里了。我到底是在学这个技术比起其它技术先进的地方,还是在折腾那个游戏到底该怎么写?

像 Kubernetes 的教程,就更糟糕。他们设计了一个叫做「minikube」的东西,让学生可以在本地架起一个 cluster,然后用教程的一些「minikube xx」命令来操作这个 cluster。然而这个 cluster 一起来,什么都还没做,就消耗大量的 CPU 时间,高达 50%,风扇狂转。

查了一下网络,发现这个问题很常见,已经在 GitHub 上面讨论了几年之久:https ://github.com/kubernetes/minikube/issues/3207。这个讨论从 2018 年 10 月,一直到 2021 年 3 月…… 貌似还是没有结果。

这个 minikube 只是一个学习用的 cluster,却自带了自己的命令行。这些命令行跟正式的命令工具 kubectl 的用法又不一样。作为一个学习工具,有什么必要设计自己的命令行呢?人们只是拿它学习,学了它的命令行,到时候却不能拿到实际的应用中用。

而且消耗大量 CPU 时间这个事情,如此长的时间得不到解决,这会让人怀疑 Kubernetes 这整个技术的资源管理是不是有问题,在实际的应用中会不会出问题。

而且 minikube 的文档还有一个问题,经常把之前从来没讲过的概念一下子摆出来,说我们这一节要介绍 blah blah blah…… 一般人看到这些就头晕了。我觉得一个好的教学文档,不应该把还没定义的术语列举出来,就算作为一个引文也不应该,因为这会让人迷惑和害怕。

这些文档还有很多很多其他的问题,比如前后不一致,跟实际的设计更新不同步,等等。你以为这么多人在做 Kubernetes,它的文档应该是跟当前实现同步的?然而却不是。看到中间就会发现很多命令行,按照文档的输入,就是不管用。得到其他地方搜索这问题,才会明白是怎么回事。

作为一个大量普及的技术的入门文档,这是不应该出现的问题。

昨天说的 IT 领域文档的问题,今天继续看 Kubernetes 的官方 tutorial,又看到一个很显著的例子(如图)。

什么都还没讲,已经罗列出一大堆从未出现过的术语,其中很多是自己造出来却从来没定义过的,还有一些其它特殊领域的术语(比如 Java CDI 之类)。看起来炫酷吓人,其实都是很简单的一些东西,起了一些新的名字。

最让人匪夷所思的是,等你看过(或跳过)这一大段文字之后,却发现这样结果:这个 interactive tutorial 已经不再提供了。

Content unavailable

The interactive tutorial for creating a cluster is not available. For more information, see the shutdown announcement.

很多年前我在某公司做 cluster manager 的时候,有同事就建议我们不要自己写,用 Kubernetes 算了。当时我拿 Kubernetes 的文档看了一下,就发现很多地方根本没写,留着空白 TODO 在那里,Kubernetes 的实现代码看不出来做了什么,当时就已经 38 万行了。

我当时就感觉这东西不对劲,心想 Google 是不是故意要搞出一个无比复杂的巨无霸来,浪费大家时间,拖垮其它公司。现在看来当时我们自己写 cluster manager 是对的,因为看懂 Kubernetes 的文档比自己写一个 cluster manager 花费的工夫还多。[阴险]

Reply to this note

Please Login to reply.

Discussion

No replies yet.