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.

Simple Software Manifesto

82 pointsby Spakmanover 5 years ago

26 comments

pronover 5 years ago
Every new generation of programmers starts a crusade to simplify without first trying to understand why we&#x27;re not &quot;simple&quot; despite the previous generation having done the same. Of course, one possible explanation could be that without a constant crusade for simplicity we&#x27;d be in a far worse place; the &quot;permanent revolution&quot; explanation. But is this the right explanation? Turing Award winning computer scientist Fred Brooks had this to say:<p>&gt; The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstracts away its essence. (No Silver Bullet, 1986)<p>&gt; Complexity is the business we are in, and complexity is what limits us. (No Silver Bullet Refired, 1995)<p>The reason &quot;complexity is the business we are in&quot; is that software doesn&#x27;t live in a vacuum. Like the economy and like bureaucracy, it is built to serve a certain social purpose. Of course, there needs to be a constant struggle not to <i>over</i>-complicate, but it should be done with the understanding that over-simplification is just as problematic.
评论 #21762164 未加载
评论 #21762406 未加载
评论 #21762339 未加载
评论 #21762252 未加载
评论 #21762389 未加载
评论 #21763428 未加载
评论 #21762693 未加载
评论 #21762166 未加载
评论 #21762459 未加载
评论 #21763979 未加载
评论 #21762208 未加载
评论 #21762471 未加载
评论 #21766234 未加载
nullspaceover 5 years ago
&gt; There is only one correct way to do something .... so take great care in doing it right the first time.<p>I hear this a lot, in various contexts, and I even used say it a lot. But this has actually stopped making sense for me. I don’t think I’ve ever genuinely seen a case where there is only one obvious way to do something, or that there’s a way that is obviously the “right” way. Everything non-trivial is chock full of trade offs and hidden corners that could make it obviously wrong in hindsight.<p>Does someone disagree? Can you share your perspective.
评论 #21761978 未加载
评论 #21761866 未加载
评论 #21761939 未加载
评论 #21765091 未加载
评论 #21763833 未加载
评论 #21762592 未加载
评论 #21766258 未加载
majewskyover 5 years ago
&gt; We target C99 or C11<p>C is anything but simple. It looks simple on the outside, then beats you to death with undefined behavior and either overexplicitness (if you don&#x27;t use macros) or nested-macros hell (if you do). Their choice of C is routed more in the authors coming from the Unix community, not in their desire for simple software.<p>If anything, they should start with a truly simple programming language. Something like Go minus huge runtime and maybe plus basic generics.
评论 #21762714 未加载
评论 #21766324 未加载
评论 #21762574 未加载
bitwizeover 5 years ago
Yet more suckless-style posing. Ho fucking hum.<p>Software is complex because the real world is messy. That messiness cannot ever be &quot;abstracted away&quot;, it can only be hidden.<p>You can&#x27;t derive a better software stack from first principles. What we have is the tireless work of many people, quite a few of whom are smarter than you. Rust and LLVM, for instance, are much more fit for purpose than &quot;my pet compiler backend + my favorite C subset&quot; because even the most disciplined C subset is still full of UB traps and Rust has had years going on a decade of work, by many hands, addressing the very cases where C falls flat on its ass. The same with LLVM vs. whatever brain fart J. Random Hacker thinks up as an ideal abstract machine,
评论 #21763215 未加载
fefe23over 5 years ago
I have come to believe that we are dealing not with a domain specific problem but with the human condition itself. I call this my gradient theory.<p>Consider human learning as an optimization in the mathematical sense. Note that humans are good at learning things along a gradient. Now note that this is not just about how the learning works but also how far we go. For example, if a human thinks it is too cold, they turn the knob not where they want the temperature to be but much farther up, and then when the desired temperature is reached, they turn it back. Or consider how you find a page in a book. You overshoot and then go back. Or how you choose the speed when driving. You go as fast as you feel comfortable, and you find that by overshooting and correcting.<p>I think this is inherent in humans. Evolution made us this way.<p>The downside is that humans are bad in environments where there is no clear limit or where you can&#x27;t correct after overshooting, for example driving too fast and then having an accident, or substance abuse.<p>Now take this thought and apply it to programming.<p>If you find me a way to work with complexity, for example modularization, abstracting it away, etc., it will not lead to us writing a good version of the software we had before. It will lead us to writing larger software that will then again be at the limit of what we can do with the technology available.<p>So far it is just a theory, but I can see in my software selection that all the programs that I consider good and simple in the sense that this manifesto describes, all of those are old programs that were written when the functionality they offer was the limit of what was achievable with technology back then. The reason they did not metastasize into something unwieldly is that a) they did but it was still comparatively small or b) they already contain all the features anyone could think of.<p>Try comparing two programs of your choice that do essentially the same. You will find that if there is an old and a new one, the newer one will be bigger and slower and usually work in less environments and have less features.<p>It also turns out that no two people have the same idea of what &quot;simple&quot; means. For me, with software, simple means it does all I really need it to do, and nothing else. Other people usually need it to do other things and they don&#x27;t need some of the stuff I need.
评论 #21762418 未加载
CptMauliover 5 years ago
Just from some discussions from the last weeks, I don&#x27;t think simple is possible anymore: just Unicode and Font Rendering by themselves have a complexity which boggles the mind. If you then consider stuff like authentication&#x2F;authorization, i18n and support for blind people its clear that &quot;simple&quot; just doesn&#x27;t cut it.
评论 #21762238 未加载
评论 #21762230 未加载
pcr910303over 5 years ago
Every software has a reason to be complex. Often software authors desire to make simple software by removing such features regarded ‘complex’ without understanding why those features were introduced (mostly because they don’t use them). The consequences is that people who are in the minority can’t use the software.<p>As a CJK person, the most prominent example is multilingual support in the FOSS community; I still have not seen any Linux GUI app with proper out-of-the-box IME support (and that includes DEs, WMs, etc...) mostly because for some reason (hint, most are from the western world) the devs of Linux distributions turn off IME support by default. Is it really ‘simple’ to turn off some features that you don’t use, resulting in total breakage of apps when the feature is in use? Really?
评论 #21762499 未加载
评论 #21762570 未加载
评论 #21766355 未加载
gerbillyover 5 years ago
Ugh, I don&#x27;t share this sentiment.<p>Each new generation of programmers creates new tools to replace the &#x27;complex&#x27; ones that came before without even bothering to understand them.<p>In my 25 year career I&#x27;ve seen it multiple times. We are all going downhill.<p>Attention spans in the smartphone era might be preventing people from reading the f*ing manual.<p>This means that any system or library which has an operating model that must be understood before it can be effectively used¹ simply can&#x27;t be understood by the majority of programmers today.<p>1: The currently popular things in software world are mostly the type of system that lack such a model and which can be &#x27;mastered&#x27; by asking discrete questions on stack overflow. This lack of complexity causes a loss of expressive power.
评论 #21763523 未加载
评论 #21762404 未加载
cocktailpeanutsover 5 years ago
Don&#x27;t #2 and #3 contradict?<p>&gt; Constraining the user to simple tools encourages creativity and allows the system to be more quickly understood<p>&gt; There is only one correct way to do something, because two ways would be more complex<p>When you encourage creativity with combinations of simple tools, creative people will come up with multiple ways of doing things.
评论 #21762419 未加载
评论 #21762543 未加载
frou_dhover 5 years ago
My related observation is that the phrase <i>&quot;simple yet powerful&quot;</i> is the biggest cliché in developer&#x2F;techie-facing marketing of software:<p><a href="https:&#x2F;&#x2F;github.com&#x2F;search?q=%22simple+yet+powerful%22&amp;type=Code" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;search?q=%22simple+yet+powerful%22&amp;type=C...</a><p>Is there any camp that DOESN&#x27;T consider their preferred way of doing thing to be simple yet powerful?
Koshkinover 5 years ago
It shouldn&#x27;t be just about software. Hardware has become astonishingly complex as well. Forget about a high quality superhet radio containing 15 transistors, or a CPU with a manageable instruction set and an assembler that is a pleasure for a human to write in. No doubt modern systems are better than old ones, but I miss those times somehow...
评论 #21762665 未加载
GR-O-NDover 5 years ago
This also reminds me of OpenBSD, in particular Ted Unangst. He&#x27;s famous for deleting features that add complexity without any significant benefit or are only useful in a small number of edge cases. For instance, the replacement of sudo (with its massively complicated configuration syntax) with doas.
stirayover 5 years ago
My proposals, under high level programming something derived from:<p>- thou shall learn how to use the wheel, thou shell not reimplement it instead<p>- best software barely satisfies task it was made for<p>- antipasta statement: no lasignas, no spaghetti and no raviolli<p>- the code forming interface will be at max 20% of actual code written<p>- no interface will be designed to solve all humanity problems for next millenia<p>I think that all those were hugest pains I had within 23+ years of development.<p>What were yours?
adamfeldmanover 5 years ago
&quot;Simple Made Easy&quot;, a talk by Rich Hickey <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=4173854" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=4173854</a>
AlexandrBover 5 years ago
What’s wrong with Perl?<p>Also, with no C macros there are no C generics. I wish the author luck in maintaining that mess.
评论 #21766799 未加载
评论 #21764486 未加载
评论 #21766434 未加载
HelloNurseover 5 years ago
Simplistic software manifesto.<p>1. All software breaks, so let&#x27;s avoid failure by not even trying.<p>2. Constraining the user to simple tools, because the user is an idiot.<p>3. There is only one correct way to do something, and it&#x27;s mine. Coming up with one mediocre way to do things is already a great accomplishment; thinking about design tradeoffs is unthinkable. YOLO!<p>4. The dependencies of a system are not fun, so they are your responsibility. Good luck.<p>5. Standards are a source of inspiration, idiots (see #2 above) aren&#x27;t going to run into interoperability problems, missing features, and other consequences of implementing only the &quot;simple&quot; parts of the standard.<p>The cproc missing features list is a brief but very insightful example of this way of thinking (I mean, this way of <i>not</i> thinking).
Porthos9Kover 5 years ago
This reminds me of suckless.<p><a href="https:&#x2F;&#x2F;suckless.org&#x2F;philosophy&#x2F;" rel="nofollow">https:&#x2F;&#x2F;suckless.org&#x2F;philosophy&#x2F;</a>
评论 #21762443 未加载
0x445442over 5 years ago
I suggest the biggest problem we have in the industry is a laziness towards engineering and an unwillingness by business to accept the law of fast, good and cheap.<p>Very few organizations use real data and the scientific method to make decisions on architectures and design. Most rely on anecdotes, gut feel, politics and software cults to make these decisions.<p>Consequently, there&#x27;s rarely real proof on the advantages of one approach over another. The rigor, and thus cost, needed to make those determinations is perceived to be too great but the reality is, those perceptions are often unfounded when considering the total cost of software.<p>This all hit me years ago when working for company that had to go through CMMI certification. As part of the effort, a consultant would come out quarterly to coach us along and monitor our progress. During that time period I noticed a significant portion of my time was now spent on the implementation of the process. When the consultant was out for a visit I told him I had concerns because we did not have a charge number for the extra time it was taking to implement the process. He asked why that would be necessary and I asked, how else could you make an objective determination on the benefit&#x2F;cost ratio of implementing the process being greater than one. Disappointingly, the blank stare ensued.
btbuildemover 5 years ago
I believe the complexity is inherent, and we haven&#x27;t yet found a way to handle it gracefully.<p>I&#x27;d like to note that &quot;simple software&quot; means a different thing to the developer, and to the user. And in the grand scheme of things, the developer and all the code he wrote is highly irrelevant. We&#x27;d like to think we are, but how much does it really matter what kind of trowel the mason used, and how clean he kept it? What matters is the cathedral he built, the feel of the space within, the durability of the walls.<p>In my view, the complexity is closely related to scale. I&#x27;d like to draw a parallel with nature, where things scale linearly up to some critical point, at which a system goes through reorganization and only then continues to grow. I think mimicking this phenomenon can be a path towards software simplicity.
blackbrokkoliover 5 years ago
&gt; Constraining the user to simple tools encourages creativity and allows the system to be more quickly understood. This supports the removal of complicated features.<p>Oh god, no. This horrible idea escalated so far that there is now a billion dollar industry (RPA) automating braindead tasks just because software can not be arsed any more to include API, code&#x2F;CLI based access or, to steal the wording, complex tools at all.<p>IMO this is another round of weirdly religious adherence to &quot;UX&quot; schemes which ends in massive damage, like the unconditional love for whitespace everywhere.<p>Please stop using &quot;simplicity&quot; as a cop out to prevent having to build software that, for example, has basic things like stack deletion. The result will just suck.
als0over 5 years ago
&gt; POSIX should probably be replaced when the time is right.<p>Everyone loves to bash POSIX. The idea of replacing it lingers on, but has anyone considered the idea of updating POSIX to remove the gnarly parts? This is a somewhat incompatible change and would have to be versioned appropriately.
ptahover 5 years ago
simple for developers != simple for users
Pete_Dover 5 years ago
I would suggest sinit for init &#x2F; supervisor: <a href="https:&#x2F;&#x2F;core.suckless.org&#x2F;sinit&#x2F;" rel="nofollow">https:&#x2F;&#x2F;core.suckless.org&#x2F;sinit&#x2F;</a>
bachmeierover 5 years ago
&gt; Simple software manifesto<p>Excellent!<p>&gt; There is only one correct way to do something<p>!!! The correct way to do something depends on what else you&#x27;re doing at the same time.<p>&gt; Simple software in practice &gt; C<p>Dear God
faisalhackshahover 5 years ago
Why use C? Constrained with no macros? What about undefined behavior?<p>Rewrite in Zig!
jagger27over 5 years ago
apk truly is a great package manager. Glad to see it mentioned here. It’s such a bummer going back to aptitude after using it in my lighter weight VMs.