TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Worse Is Better (2001)

88 pointsby karimfalmost 4 years ago

10 comments

gambleralmost 4 years ago
<i>&gt;The concept known as &quot;worse is better&quot; holds that in software making (and perhaps in other arenas as well) it is better to start with a minimal creation and grow it as needed.</i><p>It&#x27;s a horrible moniker for the concept and most people who use it don&#x27;t really mean piecemeal growth at all. What they do talk about is usually design where some shortcut allows you to quickly accomplish a short-term goal while completely ignoring long-term consequences. <i>This</i> is the mentality that I see everywhere in the software industry today.<p>Go is mentioned here in comments as an example of &quot;worse is better&quot;. It fits nicely. The main &quot;feature&quot; of the language is that it doesn&#x27;t have any constructs that would require an average college grad or a disgruntled Java shitcoder out there to apply <i>effort</i> in order to understand the feature. Thus, people grab the language and mindlessly run with it. By the time the codebase grows where you need more advanced features, it&#x27;s too late to switch.<p>My prediction is that in a few years when an average Go codebase switches ownership at least once, it will become widely hated, and language developers will start cramming in features that they originally said aren&#x27;t needed there at all. You&#x27;ve already seen a preview of thing when they replaced cutesey (and obviously broken) dependency management with modules.
评论 #27954217 未加载
评论 #27952806 未加载
评论 #27955904 未加载
chartpathalmost 4 years ago
I think it&#x27;s possible to take the cult of simplicity too far. As is the case with over engineering.<p>There is always the risk of over-simplifying and dumbing down the inherent complexity of problems. Instead of representing the problem space with a good data model, programmers who love to brag about their love of &quot;simplicity&quot; sometimes end up with many extra &quot;simple&quot; layers than are necessary.<p>It&#x27;s not a binary because there are a lot of factors that go into simplicity and some matter more than others in different contexts. One person&#x27;s simplicity is another&#x27;s tedious verbosity. And another&#x27;s use of specialized programming techniques is someone else&#x27;s scary learning curve.<p>Much easier to just label My Preferred Solution as The Most Simple and Parsimonious because clearly I am the smartest and most scientific thinker in the group. Other approaches are Too Complex, therefore I don&#x27;t need to understand them. It&#x27;s just projection of insecurity about knowledge gaps by hiding under the appearance of being an iconoclast.<p>That said, there are definitely some castle-in-the-sky and nonsense-on-stilts implementations out there :) Some would say ORMs, others would point to the actor model, and others would even say anything higher level than pointers and for-loops. For what purpose though?
评论 #27954147 未加载
pipthepixiealmost 4 years ago
&gt; The concept known as &quot;worse is better&quot; holds that in software making (and perhaps in other arenas as well) it is better to start with a minimal creation and grow it as needed.<p>Or in other words, try to avoid Feature Creep[0] or Overengineering[1]<p>[0] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Feature_creep" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Feature_creep</a><p>[1] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Overengineering" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Overengineering</a>
评论 #27949690 未加载
jchwalmost 4 years ago
Many newer programming languages have focused on reducing hidden control flow and ugly text macros in favor of more transparent metaprogramming, which may help to illustrate one of the bigger issues with Lisp. Lisp itself is simple and elegant, but that doesn&#x27;t mean it&#x27;s easy to write simple and elegant Lisp code. Imperative programming is maybe less elegant and beautiful than functional programming, but imperative programming is easy to understand by humans. Sure, C code may not literally execute line by line, but this is how C programmers mentally model execution, to the point where sometimes people are befuddled to learn it’s not the case. It&#x27;s such an effective approach that CPUs <i>also</i> provide an as-if illusion of in-order execution. And sure, Lisp macros are powerful, but it feels like nobody ever stopped to consider if maybe there&#x27;s an upper limit to how powerful you really want a programming language to be. Well, I have. I want languages more like Go and Zig. People will always hate at least Go, but it didn&#x27;t hit TIOBE top 10 out of sheer baseless hype and corporate sponsorship. Simple, easy to understand, perhaps even &quot;stupid&quot; code <i>works</i>.<p>I could be wrong—perhaps the Lisp renaissance is just around the bend. But realistically, I&#x27;m not running into any problems where I wish to deal with more clever and elegant code. In fact, I&#x27;m running into problems where I wish to deal with dumber and more obvious code. That these ideals often conflict is probably a great source of debate and strife.
评论 #27950914 未加载
评论 #27951227 未加载
评论 #27950877 未加载
评论 #27956297 未加载
评论 #27951326 未加载
评论 #27953670 未加载
drewcooalmost 4 years ago
So we&#x27;re presented with one design philosophy and one design Gabriel admits is a strawman. This was written before steelmanning was common and he was open about it, so the strawman is forgivable.<p>Then again, maybe they&#x27;re both stickmen of those design approaches. All of the important context is stripped from both. What is the goal of the designed thing? How will it be used? What are the costs?<p>The &quot;better&quot; &quot;MIT&#x2F;Stanford style&quot; was designing things to be as perfect as possible when considered in a vacuum. The &quot;worse&quot; &quot;NJ style&quot; was intended for use in industry. I still see That jarring difference between the academic and industry approaches today. And I&#x27;d rather make a difference in the world with running software, but I can see value in academics, too.
评论 #27952841 未加载
评论 #27949446 未加载
majkinetoralmost 4 years ago
Worse is better is definitely better. I have no doubts about it.<p>Natural organisms seem to follow that pattern - Pauling showed the cells produce sub-optimum concentrations of substances by genetic machinery probably because keeping it at optimum takes up more resources to maintain cellular machinery. Sounds totally like worse is better to me. Life is full of examples .
jstimpflealmost 4 years ago
Why is there never much discussion about the actual technical issue presented in the text, which is how to design a syscall API with respect to interrupt handling?<p>I never thought of the EINTR errno as a hack. It strikes me as very pragmatic and actually the right choice. Am I missing something? Why would one want to save the state of the system call routine when an interrupt occurs and the interrupt handler is executed in user code?<p>The point of interrupts is precisely that they can interrupt a call that otherwise could potentially block forever. When an interrupt occurs, the user code has the chance to completely cancel any attempts to complete the original call. Otherwise, just re-try. The complexity added to the syscall API is small, the practical benefit is very real.<p>So why would I want a general mechanism in the kernel that automatically continues the blocking call after running the interrupt handler?<p>To me the lesson from &quot;Worse is Better&quot; has always been &quot;Don&#x27;t design before you actually know what you need. You&#x27;ll probably end up with something that does not do what you want and that you can&#x27;t fix&quot;.
manmalalmost 4 years ago
The notion that a minimal first version is the ideal starting point is mirrored in this quote from John Gall:<p>&gt; A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system.
jchanimalalmost 4 years ago
Worse is better and excellence are not at odds. Worse is better applies at one side of a shearing layer, and excellence on the other.<p>In software, a worse is better API imposes designing for modularity upon the applications that depend on you. An excellent implementation means your internals are clean and efficient.
wrycoderalmost 4 years ago
Read the original [0] Lisp: the good news, the bad news, and how to win big. (Spoiler: they didn’t.)<p>[0] <a href="https:&#x2F;&#x2F;www.dreamsongs.com&#x2F;WIB.html" rel="nofollow">https:&#x2F;&#x2F;www.dreamsongs.com&#x2F;WIB.html</a>