用户力量,而非用户力量:htop及其设计理念

2021-01-19 17:39:42

这个简短的故事不是真正关于htop的,也不是我将用来举例说明的功能要求,而是关于驱动一点点软件开发的核心原理,直到每个细节。我所说的“核心原则”是真的。

开发软件时,我们必须做出一百万个决定。我们经常受到一些潜规则的驱使,从我们在外部视觉上的个人美学,到我们对产品行为的良好用户体验的理解,到工程学中的“膨胀在哪里”内部。在FOSS中,我们经常同时戴所有这些帽子。

我们通常并不总是清楚地知道是什么驱使了这些原则。评估这些原则没有比用户反馈要求改变行为更好的机会了。而且,没有比将这些原则书面形式更好地向自己解释为什么这种改变会“感到错误”的方法。

作为最终用户,我正在偷看htop问题跟踪器,这是一种令人耳目一新的体验,最近我退出了我开始的这个FOSS项目。我发现了一个功能请求,要求进行更改以使其默认情况下隐藏线程。

随便使用htop的人们通常不知道用户级线程的用途。实际需要查看它们的人可以通过SHIFT + H轻松启用它们。

由于默认情况下当前启用了这些功能,因此不方便查看列表以查看正在运行的内容,占用的RAM,CPU使用率等信息,因此,我认为不默认显示它们会更加方便用户使用。

他继续显示两个屏幕快照:一个具有默认行为,充满了进程混合的线程(绿色),另一个具有禁用的线程。

当前的一位开发人员说,用户想出如何隐藏事物要比让他们发现隐藏的事物更容易发现时,反驳也很明智:

Htop还可以显示Disk IO,可以说非常有用,但是默认情况下是隐藏的。

那时,我决定戴上“原作者”的帽子,以解释现有行为背后的意图。这是我写的:

@ C0rn3j,您好,我以为我会提供一些历史背景,以了解我默认显示线程的动机是什么。

是!我完全赞同这一观点。启用线程并将其涂成绿色的选择是经过深思熟虑的。

您不知道有多少次有人问我:“嘿,为什么有些流程是绿色的?”在这15年以上的时间里,而且没有,这并不烦人:每次,这都是一个向人传授线程的机会!

htop旨在提供系统中正在发生的情况的视图。如果一个进程正在产生疯狂的线程,或者由于一个进程的多个线程正在工作而使您的所有内核不堪重负,那么我认为将其显示给用户是公平的,即使他们对线程一无所知-或我要说的是,尤其是如果他们对线程一无所知,否则这些事情将会发生,甚至不知道在哪里查找。

Htop还可以显示Disk IO,可以说非常有用,但是默认情况下是隐藏的。

当我仍然活跃于htop开发时,我的最后一个项目是将选项卡添加到界面,以便用户在这些附加列中导航时,将具有更可发现的路径:

这段代码在旧仓库的下一个分支https://github.com/hishamhm/htop/中-我认为制表符的代码实际上已经完成了(尽管没有经过超级测试);很好,您可以单击它们或使用Tab键循环,但是我一直在努力的Perf Counters支持并没有真正稳定到我喜欢的程度,那是当我忙于其他事情并逐渐消失时从开发开始—事实证明,我比系统监视部分更喜欢编写接口代码!

无论如何,我认为这也说明了设计的模式:我实现了整个选项卡功能,因为我想使IO和Perf计数器更易于发现。我想将这些信息摆在用户面前,特别是对于不了解这些事情的用户!我考虑了我已经在htop内实现了iotop的全部功能的事实,但是人们并不知道这是个人的失败,也是一种实际的学习体验:如果UI设计无法实现,则添加系统功能是没有用的用户的手。 (甚至我也没有使用IO功能,因为没有便捷的使用方式。)

我从来不想为“知道他们在做什么的超高级Linux高级用户”实现工具,否则,我永远不会在底部花整行显示F键,也不会花时间来实现Vim绑定(哦, ;)),而不是鼠标的支持。我一直认为,可以通过“设置”屏幕来设置每个设置,您可以通过F2-Setup(显示在底部!)进行访问,并且可以使用键盘或鼠标进行控制,而无需“编辑此配置”。文件以使用此高级功能仅用于“启动”或什至“读取手册页”(实际上,它只有手册页,因为Debian开发人员提供了它!)。

我想制作一种功能强大但不会对用户隐藏的工具,而是邀请用户变得更加强大。伸出手来引导他们前进的工具,可帮助用户了解系统内部发生的事情,从而对它进行更多控制。这是您将权力交给用户的方式,而不是通过设置启动障碍或为用户提供所需的最低限度的费用。我拒绝“为电力用户使用的复杂工具”与“为凡人提供的简化工具”之间的二分法,后者是某些公司流行的设计范式,不幸的是,它被许多OSS GUI项目复制,却没有意识到其目标。这个范式确实存在,但这是另一回事。

(PS:为证明这一点,我必须说,选项卡功能比Perf Counters本身的代码更改要大得多;它包含一些相当大的内部重构(没有“工具箱”,所有内容都是“手工绘制的”)。 ”(通过htop)),不幸的是,这可能会使代码难以恢复(或不知道!谁知道?),当然选项卡是用户可定义和用户可编辑的!)

提议更改默认设置的用户感谢我的历史记录,并关闭了功能请求。但是从某种意义上说,写下这本书对我来说可能比对他们来说更具启发性。

当我开始编写htop时,我并未着手创建“增强用户能力的工具”或任何此类崇高的目标。 (我只想拥有一个滚动的顶部,并且比2005年前后的顶部更能容忍错误的输入!)但是当我继续编写该软件时,每个小小的决定都必须来自某个地方,即使这样做没有经过深思熟虑,即使当时只是“感觉正确”。这就是您的原则开始渗透到项目中的方式。

随着时间的流逝,我在上面的回复中描述的图片变得清晰起来。它帮助我建立了实用的准则,例如“每个设置都必须可以通过UI进行访问”,它帮助我根据功能请求与这些原则的匹配程度来确定优先级甚至拒绝了功能请求,并且帮助我建立了软件的目的感我正在努力。

如果您不清楚自己要构建的软件的基本原则是什么,我建议您尝试一下本练习-尝试解释软件中的事物为何如此。即使目前尚无意识,总会有一些原则。

(PS:如果有进取心的人会挖掘选项卡支持代码并将其复活到htop 3,那就太棒了!我不打算自己很快就这样做,但是所有必要的点点滴滴都在那里!)