最近自己学习了一下一些实用的技术,比如某些 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,它的文档应该是跟当前实现同步的?然而却不是。看到中间就会发现很多命令行,按照文档的输入,就是不管用。得到其他地方搜索这问题,才会明白是怎么回事。
作为一个大量普及的技术的入门文档,这是不应该出现的问题。
