跑步轨迹软件
有些决定是理智的。 我的意思是:某些决策是您在充分了解所有选择和合理了解潜在后果的基础上选择要做的事情,它基于对每种可能性增加其作为一个整体的成功的可能性的分析,的。
我们不会一直做出明智的决定,也不需要这样做。 有时,我们做出错误的决定-我们忽略理智或(为了尽可能少的理智而进行优化)以实现某些与项目的表面目标相冲突的外部目标。 错误的决定也很重要。
当我们在充分了解工具箱的情况下为工作选择最差的工具时,我们会使工作变得更艰难。 有时,我们这样做是为了向自己或他人展示我们的能力-这是“ hack”的历史含义之一,并且是软件开发社区自我组织的重要组成部分。 其他时候,我们这样做是为了强迫自己以新的方式思考问题。 但是,错误的决定(按照定义)不是理智的-他们需要付出更多的努力才能获得同等的结果(或者通过同等的努力会产生更糟糕的结果)。
当我们做出我们认为是错误的决定,然后发现它是理智的时候(当我们为工作使用错误的工具,然后比使用正确的工具发现工作更容易时),我们发现了一个缺陷。我们对工具及其正确使用的理解。 但是,更多时候,我们选择我们认为合适的工具,并且发现工作比我们预期的要困难得多。 有时这是因为我们对正确的工具一无所知。 有时,正确的工具不存在。
我今天在软件开发中看到的最大问题是三个方面:
我们告诉人们,某些工具比实际情况更普遍适用 我们阻止人们使用适当的工具,并阻止人们了解它们 我们接受开发人员的无知是合理的,并将错误的工具生态系统视为理智的
最明显的例子是Web应用程序。
HTML是表示静态文档的一种不好的方式-对于要在纸上查看的文本文档,其质量要比TeX差,对于要在纸上查看的所有文档,其质量要比对Postscript差,对于要在纸上查看的文本文档,其差要比纯文本或降价可以在屏幕上阅读,并且只能笨拙地粗略地表示少数非纸张类概念(跳转链接和锚点,但跨度之间不包含换行或链接)。 对于静态文档,最合适的表示形式是HTML。
HTTP是一种处理静态文档的坏方法-比gopher复杂得多,但实际上并没有从其复杂性中受益。 它没有IPFS提供的任何保证(因此,文档可以从您的身下更改而不会发出警告,如果主机掉线了,文档也可以这样做)。 最重要的是,没有主要的HTTP服务器或Web浏览器正确使用该标准的功能,这些功能会略微改善其余HTTP带来的问题。 取而代之的是,滥用规范中不正确的部分会产生整个寄生生态系统。 (根据规范,当然,相同的URL应该始终指向同一页面,404应该仅用于从未指向任何内容的URL,并且应该使用不同的代码来表示已经移动或意外移动的页面HTTP中没有任何情况是提供文件的技术上最合适的方法。
对于使用Web托管静态HTML文档的所有问题,在交互性方面,情况变得更加糟糕。 HTML是一个错误,但是CGI是一种犯罪,在静态文档中使用嵌入式脚本语言强制其进行自我修改是一个悲剧。
当然,这是聪明的顶峰。 如果有人编写了一个网络应用程序,并以嘲讽的方式展示了自己的技巧和变态,我会为之鼓掌。
毕竟,HTML几乎无法以理智的方式表示最小格式的文本,而HTTP是用于获取文件的a肿的无状态协议。 在Web浏览器中使GUI工作就像将DOOM移植到脚本中并在激光打印机上运行,每页一帧。
问题在于,网络邀请了两代程序员,他们以某种方式认为这个不正当的生态系统是理智的,并且浪费了自己的时间,并且浪费了他们正在运行的计算机的资源。 好像视频游戏行业认为激光打印机是写和玩第一人称射击游戏的自然设备,并投入了二十年的时间使激光打印机打印速度更快,纸张更薄并且带有隆隆的垫子。
有时,我们没有做出明智决定的原因是结构性的。 我们知道正确的决定是什么,但是付钱给我们的人坚持认为我们做出了错误的决定。 我们可能会低估当时这种不正常行为的代价-当一个不懂如何做出技术决定的人做出决定时,有可能将演示,玩具和概念验证项目作为项目的一部分重复使用。从理论上讲生产质量体系。 (网络就是一个例子:这是一个快速投入使用的简化演示,旨在向CERN基本超文本概念讲授西装革履,以便他们可以理解Tim Berners-Lee的真实超文本项目。)
软件工程师在白领行业中处于独特的地位-需求如此之高,起薪如此之高,期望正规教育的人很少,又有多少生产性工作却能获得报酬的其他专业是什么? 因此,软件工程师具有独特的能力,可以拒绝非明智的解决方案。 在生活成本膨胀的地方之外,软件工程师(如果他们节俭生活)可以因不愿积极地使世界和自己的生活恶化而被解雇。
在教学法和用户界面中存在一个相关问题。
如今,程序员和非程序员之间存在严格的区分。 有一些运动要求学生“学习如何编码”-主要是暗示这将保证他们有高薪的工作或使他们为应付日益计算机化的生态系统做好充分的准备。 当然,任何以大多数公立学校教学生代数或The Great Gatsby的方式来教学生编程的学校,都不会使学生进一步理解他们的计算机,而只能使他们理解Mochizuki关于ABC猜想的证明或Lacanian的评论。芬尼根的苏醒。 新手程序员和能力最低的程序员之间的鸿沟远大于从未接触过计算机的人和新手程序员之间的鸿沟,并且它包含着思维上的许多根本性变化。
非程序员和新手程序员之间的划分不是学习曲线的自然部分,但实际上是由我们的工具强制执行的,该工具一直朝着将用户划分为“技术”和“非技术”的方向发展。 80年代的个人计算机被极度非技术人员所使用,他们期望用户能够从手册中键入一行或两行代码以完成任何事情,现已由现代PC取代,要获得根本不需要编写任何代码的必要工具,就要寻找看起来有些可疑的第三方网站。 从1982年对Macintosh项目做出的某些管理决定开始,UI理念从“简单应该容易,困难应该可能”转变为“电视广告中没有的任何内容都应该是不可能的”。 这样,非程序员和新手(例如“超级用户”)之间的中间状态几乎消失了。
没有根本的技术障碍可以阻止我们拥有与UNIX命令行相同的灵活性和可组合性的“图形用户界面”。 这只是一个社会障碍:非技术用户应获得由公司生产的软件以牟利,每个公司都生活在围墙花园中,并且他们对如何更改这些软件的工作方式完全没有好奇心,而技术用户则希望运行的技术用户导向的操作系统在视觉上没有打磨,并且倾向于基于文本的界面。
我在这里并没有在Linux上苦恼……或者至少不是太多。 如果必须对我进行分类,那么我当然可以算是“技术含量很高的男孩”了,但是技术含量和原油含量之间的界线应该是窗帘,而不是砖墙。
Xerox Alto向我们展示了如何使独立开发的图形应用程序可以在70年代运行时由非技术或最低技术的用户组成! 它也工作很快,但随后他们又没有使用Electron.js
将程序员和非程序员分成不同的贫民窟,谁能从中受益? 好吧,宣传(大多是虚假的)广告的产品将教您如何快速从非程序员转变为程序员,并且从这种部门中受益匪浅。 (如果每个人都知道可以通过逐步探索更多接口来学习编程,而在该接口中编程和使用现有程序之间的划分很模糊,那么对编程训练营的需求就会大大减少。)图形应用程序可能会重新构成缺乏即使他们比等效的(但看上去很恐怖)的命令行应用程序花更多的精力来学习使用,仍具有“用户友好”的灵活性; 同样,设计欠佳的命令行应用程序即使做得比为相同任务而设计的图形应用程序要少,并且做得越来越慢,而且技术用户(尤其是新来的转换者)也会买入,即使它们做不到,它们也可能会宣称自己“功能强大”。 (以前者为例,请查看1985年以来的任何Apple产品;以后者为例,请参见诸如Arch和Gentoo之类的面向黑客的Linux发行版,后者拒绝提供安装程序,而是要求用户重新输入源代码但是,除了寻求短期状态外,用户也无法从这种划分中受益:在可能进行编程的系统上,对编程一无所知就变得更加无知,更灵活的系统具有一致的内部逻辑可以理解并纳入非技术用户的直觉,而灵活的系统不仅使初学者更容易进步,而且中级和高级开发者也可以轻松创建有用且有趣的程序。
当彼得·泰尔(Peter Thiel)说“每个公司都想成为垄断者”时,他是正确的。 而且,从某人拥有此类公司大量股份的角度来看,这是可取的。 从其他所有人的角度来看,这太可怕了。 好吧,将程序员与非程序员隔离开来,并阻止非程序员使用或了解灵活且可组合的系统,可以在硬盘上创建一些小小的fiefdom。 在这两个群体的普遍想象中,由于某些天生的天赋,程序员可以在unix的绿色领域中自由发挥; 缺乏神圣召唤的非程序员在宪法上无法在这些领域玩游戏,并且应该感激他们得到了漏水的小屋和陈旧的面包。 当然,就像许多将一个小组提升到另一个小组的剥削性部门一样,它完全是人为的-由第三方设计和维护,第三方可以使两个小组的生活变得更糟,但要确保一个小组的事情比另一个小组糟得多。
当然,这两种情况是相关的。 他们互相喂食。
您不需要被公司雇用来编写代码。 您无需成为一个大型团体的一员即可编写开源代码。 您可以编写对您有意义的东西,并在您认为合适的时候将其赠送。 您可以自己编写代码,而无需考虑其他人的需求。 没有人会因为您在个人项目中做出好的决定而开除您。
技术和非技术用户不是不同的组。 他们俩都希望过上舒适的生活。 他们想要做出明智的决定,或者为了炫耀而做出错误的决定。 技术用户在决策设施上没有垄断权,而且在涉及用户的特定情况时,他们甚至不一定更了解什么是最合适的选择。
非技术用户实际上是高度技术人员。 他们对使用的软件的行为有详尽的直觉。 这些直觉可能并不准确,但不一定比许多熟练的程序员对其使用的工具所犯的错误观念准确。
编程语言设计是用户界面设计的一部分。 不仅如此,用户界面设计还是编程语言设计的一部分。 用户界面是一种语言,用户可使用该语言解释其对计算机的意图,并且由于用户界面是一种编程语言,因此无法进行用编程语言表示欢迎的决策的用户界面已损坏。
我们所有人都只是希望能够解决我们的问题。 我们都想要使解决问题变得容易的工具。 当工具制造商以降低工具使用率的方式互相阻碍时,没有人会受益。 当工具制造商告诉一群人他们太笨了而无法使用工具而拒绝教他们时,没有人会受益。 从根本上说,程序员和非程序员之间的区别是,非程序员被告知某些工具对他们来说是禁区,他们相信它。
并非总是这样,也不再需要这样。 但是,解决问题需要打破与旧方法的兼容性。
仅仅因为被告知要使用系统而使用系统,就使我们陷入了逐渐恶化的决策漩涡。 仅由于熟悉系统而使用系统会使我们陷入无知的漩涡。 竭尽全力学习新技术,拒绝实施或使用错误的解决方案不仅是一个好主意,而且在道德上势在必行。
如果公司想在我们的计算机上创建小小的围墙花园,那么我们应该将它们饿死并消除它们。 拒绝所有使您难以制定适合您的解决方案的系统。 拒绝任何人为地限制您制作任何东西的能力的系统。 拒绝任何想要拥有您的解决方案或阻止其为您工作的系统。
我们都需要学习新的工具和新的语言。 没关系,因为这些工具将是我们的。
(该文档也位于Gopher的gopher://fuckup.solutions/0enkiv2/trajectories.txt)。
翻译自: /trajectories-for-the-future-of-software-34f06b8c8fc7
跑步轨迹软件