多写一些“无用”的软件
Write more \"useless\" software

原始链接: https://ntietz.com/blog/write-more-useless-software/

在软件工程的世界中,创建“无用”的程序似乎是矛盾的,但它是探索和体验计算乐趣的重要途径。 人们的普遍看法是围绕解决实际问题展开的。 然而,沉迷于此类活动所带来的巨大好处超出了实用性。 编写非必要的软件可以让人们定义自己的兴趣,而不受专业职责的限制。 人们不必遵守义务承诺,根据偏好进行测试或使用与预期结果不一致的特定工具。 纯粹为了乐趣而设计产品的自由对于重新点燃编程热情并发现其各个方面至关重要。 通过这些冒险活动,个人获得了对他们以前从未探索过的领域的宝贵见解。 例如,糟糕的国际象棋引擎和用户界面有助于学习游戏编程和系统化图形用户界面(GUI)。 LAN 唤醒实用程序可指导基于 LAN 的网络如何运行。 其他创作导致了关于数据库结构或使用编码的视觉艺术制作的发现。 通过进行无聊的编程练习,开发人员可以培养创造力并找到目标感。 此外,此类事业促进了不同语言、框架和原则的实验,从而提高了技能。 总之,虽然“无用”一词暗示着琐碎,但投入时间开发无意义的程序却具有深远的意义。 这些努力提供了恢复编码热情、提供自我完善前景并激发创造力的机会,所有这些都为科技行业的增长和发展做出了重大贡献。

然而,这里表达的关于赚钱的观点有些误导。 虽然有些工作确实能带来乐趣和成就感,但并不是每个人都喜欢自己的职业道路,也不是每个人都能在日常任务中找到意义。 对于这些人来说,为了维持自己的经济生活,必须想方设法在其他地方创收。 此外,倡导全民基本收入(UBI)表明对当前经济体系的误解。 实施全民基本收入制度需要大量的财政支持,而财政支持必须通过增加税收来提供资金,这对中低收入者造成了不成比例的影响,与其预期目的相矛盾。 此外,全民基本收入模型假设人们会选择不参与有偿劳动,尽管这种行为违背人性,也违背了数十年来激励人们寻求就业而非福利的先例。 最后,将追求利润等同于贪婪和自私,忽视了企业有与高效运营相关的合法费用这一事实。 事实上,利润最大化主要是为了将足够的资源分配给增长机会和运营成本管理,以确保长期的竞争优势和生存能力。 企业主通常将大部分利润再投资于公司的进一步发展,最终带来更多的就业机会。 总体而言,作者不准确的评论可能会鼓励个人逃避责任和忽视经济贡献,从而损害我们的经济。 通过雇佣他人以换取收入来充分参与社会,我们可以在集体财富创造和就业机会方面共同受益,而另一种选择会助长懒惰并严重依赖政府干预 — — 后者既无法实际适应也无法承受这种情况 管理。 总而言之,我们应该避免长期存在错误假设或过度简单化,尤其是在讨论如此复杂的话题时。 相反,努力培养批判性思维并提出建设性讨论,旨在以有意义和务实的方式解决当代问题。
相关文章

原文

Monday, June 26, 2023

After my last blog post about Hurl, someone asked me, and I quote: "... why?" The simple answer is "for the joke." But the longer answer is that useless software is a fantastic way to explore and experience the joy of computing. Play is an important part of exploration and joy.

As technologists, we spend our days mired in making useful things. Software engineers write code to solve real problems. Computer scientists research problems to produce novel, real results. Technical writers write about actual technology, write real documentation, and more. The list goes on, and the common thread is that if we do technical work, we do it in the context of something useful.

Many people get into programming because it in some way sparks joy for us. It's 100% valid to be a software engineer for the money. That's certainly part of why I gravitated toward it as my career. But with so many career paths available to would-be software engineers, I suspect enjoyment of the craft was at least part of the decision for many of us.

When you spend all day working on useful things, doing the work, it's easy for that spark of joy to go out. And having it go out? That's a fear I've heard from some folks who are switching careers or making programming more of a focus of their daily work. When you have to do things, those daily pressures tamp down on excitement. Everything you do is coupled with obligations and is associated with work itself.

You lose the aspect of play that is so important.

Writing useless software is a great way to free yourself from those obligations. If you write something just to play, you define what it is you want out of the project. You can stop any time, and do no more or less than you're interested in. Don't want to write tests? Skip them. Don't want to use an issue tracker? Ditch it. Finished learning what you wanted to? Stop the project if it's not fun anymore!

Here are some of the "useless" things I've written in the past few years to play:

  • A terrible chess engine and UI, riddled with bugs, which taught me about GUI programming and game programming, and led to a more thorough understanding of how chess engines work.
  • A key-value store which implements part of Redis's API, which taught me about systems programming and how to write more efficient code.
  • A wake-on-LAN utility, which taught me about how WOL works and how Rust network programming works.
  • A visualization of some chess games, which let me explore producing art with code and play with ways to visualize a game I love.
  • A chess database, where I learned a lot about bitmaps and database internals.
  • An LLM-based tool that "mansplains" what a command does
  • An unfinished implementation of the POP3 server-side protocol, where I was learning about the protocol, and had a lot of fun thinking about what a POP3-based app would be like. Instead of a web app, maybe we should make email apps!
  • Worked through "Crafting Interpreters" to learn and have fun writing something in Rust! (Also, a bit of wanting to see if I can match or exceed my friend Mary's implementation's performance.) This taught me a lot about interpreters and compilers, but the goal was just to enjoy it.
  • Worked through half of "Mazes for Programmers" in Rust, and abandoned it when it became a chore. It was fun, but I didn't want to go further.

And more small scripts I'm not remembering, to play with ideas and concepts and try things out. I think being able to take our craft less seriously and try out things that are "useless" is a tremendous way to learn and have some joy from just playing with computers. It's something I try to do a lot.

So, that is ultimately the "why?" behind Hurl. It's a form of play. It's not useful, but I'll probably learn something doing it, and I will definitely have fun in the process. Play is important, and I think we all deserve to play more.



If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe to the newsletter or use the RSS feed.