zoogeny 7 days ago

Hacker News is a perfect example of the "Worse is better" mantra applied to social engineering. I mean, slashdot had more features and functionality in the late 1990s.

What makes HN work is the tight focus and heavy moderation.

20
dang 7 days ago

Finally a Lisp system wins the worse-is-better crown!

kqr 6 days ago

For context, "worse is better" refers to Gabriel's observation that products with simple implementations and complicated interfaces tend to achieve adoption faster than products with complex implementations and elegant interfaces.

One of the original motivating examples were Unix-like systems (simple implementation, few correctness guarantees in interfaces) vs. Lisp-based systems (often well specified interfaces, but with complicated implementations as the cost.)

bbarnett 6 days ago

Now the 'God wrote in lisp' song makes even more sense.

https://m.youtube.com/watch?v=5-OjTPj7K54

neom 6 days ago

This is amazing, almost amazing as the website of the man who wrote it: https://www.songworm.com/index.html - "I wrote the generator for these pages in Macintosh Common Lisp."

bbarnett 6 days ago

I'm going to write a scifi story, the plot?

The lisp path won, Lispus instead of Linux, and we had AGI in 1997 due to code elegance.

seanmcdirmid 6 days ago

I think Richard Gabriel attributes it to Jamie Zawinski?

amiga386 6 days ago

He does not.

https://dreamsongs.com/WorseIsBetter.html

> One day in Spring 1989, I was sitting out on the Lucid porch with some of the hackers, and someone asked me why I thought people believed C and Unix were better than Lisp. I jokingly answered, "because, well, worse is better." We laughed over it for a while as I tried to make up an argument for why something clearly lousy could be good.

He then wrote Lisp: Good News, Bad News, How to Win Big (https://www.dreamsongs.com/WIB.html) for his EuroPAL keynote speech

> JWZ excerpted the worse-is-better sections [from Lisp: Good News, Bad News, How to Win Big] and sent them to his friends at CMU, who sent them to their friends at Bell Labs, who sent them to their friends everywhere.

The excerpt: https://www.dreamsongs.com/RiseOfWorseIsBetter.html

keeganpoppen 7 days ago

oh man... this comment is just so, so incredibly apt.

dotancohen 7 days ago

It's also by the guy who mods here.

90s_dev 7 days ago

"Incidentally, very few people grasp the amount of effort Daniel Gackle expends running HN now, and what an amazing job he does." -Paul Graham, https://x.com/paulg/status/1282055086433284103

90s_dev 6 days ago

My comment definitely has more points than the two above it, but it's lower, even though that pattern isn't true with my other comments. Probably because Daniel manually demoted it as part of his manual/automatic hybrid moderation tooling, and probably for the sake of being humble about the amount of work he does for HN. Which I think is an interesting example of my other comment's point about how dang probably moderates HN. I'd be curious whether I'm very far off with this Daniel.

c22 6 days ago

How do you know how many points the other comments got?

owl57 6 days ago

Interestingly, I think this is one of the cases where both the "For context…" comment and yours add important context for the parent comment that some readers may be not familiar with. Although that second one serves this purpose better, not because of the subject but because it's more directly informative.

oblio 6 days ago

Well, Facebook is PHP so...

dx4100 6 days ago

Any idea of how much of their code is still primarily PHP? Curious myself.

umanwizard 6 days ago

If you mean stock vanilla php: none. If you mean Hack, Meta’s PHP dialect which is internally just called “PHP” colloquially: a lot. Basically everything that responds to a public HTTP request, both for APIs and for the website. And since Meta is a lot less “service-oriented” than some companies, a lot more application logic happens in the web server process than you might expect.

Backend services in languages other than Hack do exist, of course. When I left Meta (then called Facebook) in 2019, they were almost exclusively in C++. Now I don’t know for sure but I think Rust is gaining a lot of popularity for non-Hack stuff.

giancarlostoro 6 days ago

IG should still be Django I would think? I'm kind of curious about Facebook / IG's use of GraphQL, is it hack or just nodejs?

umanwizard 5 days ago

You might be right about IG, I never worked on it so I’m not sure. Certainly there was still some Django when I joined in 2015 but now, who knows.

I’m not sure what you mean about the GraphQL question. Meta doesn’t use Node at all, or at least not to any significant extent.

loeg 6 days ago

The entire website is still a PHP-like derivative language (with an optimizing compiler, etc). Backend services are largely C++.

lokar 6 days ago

Well “hack”, but the same idea

dartharva 6 days ago

Is it still? I thought it has been ported

paxcoder 6 days ago

Yay

90s_dev 6 days ago

You're the outlier and for good reason.

johnisgood 7 days ago

HN may have less features, but do we even need them? I do not think it makes it worse because of that. You could call it minimalistic, which puts it into a more positive light. :)

Edit: or as someone else who has phrased it better: "less is more".

jrockway 6 days ago

I liked the "friends" and "foes" system that Slashdot had, though I would say generally the "foes" here just get banned which is convenient.

I also thought Slashdot's moderation system was kind of fun. I am not sure it was useful but I enjoyed the annotations (+5 Funny when serious, +5 Insightful when inciteful, etc.) Meta-moderation was also neat?

KerrAvon 6 days ago

In practice, the Slashdot moderation system was ridiculously easy to game. You could adjust your viewpoints to subtly praise Linux and denigrate Windows and be assured of a higher rating.

Shorel 6 days ago

I think the problem with Slashdot was that "Funny" was higher rated than "Interesting" or "Insightful", and it made the site a clown circus.

I'm not against memes and jokes, I like them. But I also like some actual intelligent discussion in between.

And that's why right now I visit Hacker News and it's been many years since I used Slashdot.

vid 6 days ago

Because people agreed with you? Why is that a problem?

fragmede 6 days ago

Because that leads to groupthink, which stifles critical thinking and leads to poor decision-making. Ideally we'd have honest debate instead of ignoring warning signs, dismissing alternative viewpoints, and failing to thoroughly evaluate risks. This leads to overconfidence which can cause blind spots leading to catastrophic failures. We can't adapt to new information or actually learn from our mistakes if our shared groupthink says oh that was bound to happen. We'd stop innovating entirely.

In terms of Slashdot groupthink, no one uses (used) Windows and Microsoft was about to fall, but when looking outside of that at computer sales vs counted Linux installs, the picture was and is still very different. The reverse happened on the server, but Nadella was able to see outside the groupthink bringing Azure to the success it enjoys today.

wredcoll 6 days ago

What a pile of meaningless buzzwords.

Slashdot's moderation system didn't lead people to think "no one used windows", the userbase just didn't like microsoft.

Beyond that, having to re-debate every single idea every single time it's brought up is inefficient to the point of uselessness. We, as individuals, don't have time to verify every single theory from first principles, so we rely on tools like "moderation" as a heuristic to make progress.

59nadir 6 days ago

Eh, I think he brings up a pretty good point but I wouldn't say HN is any better. People here think that MacOS has high usage numbers and iPhones are the most used phone, when that's not the case. There are also a few very, very misguided ideas about software development that definitely are over-represented on HN in large part due to the (apparently, according to polls) very inexperienced nature of most HN visitors and the things they tend to work on (low-skill/low-knowledge, "high-in-their-mind"-velocity work).

HN has some very clear bubbles that probably wouldn't happen without a popularity system tied to its comments and submissions; maybe the janitorial duty of removing spam and so on is enough for a page like this. I'm not sure I see the merits of upvotes and downvotes at this point.

freedomben 6 days ago

> What a pile of meaningless buzzwords.

I completely disagree. That was a very coherent and well articulated comment. Having a useful vocabulary is not the equivalent of using a bunch of buzzwords.

firesteelrain 6 days ago

Downvoting and upvoting even if not visible can also lead to groupthink moreso on sites like Reddit than here. Points acquired here eventually let you downvote. But, really no reason to upvote or downvote comments as no one can see the points of a particular comment on this site. I am aware that after so many downvotes that the comment starts to gray out into oblivion eventually but even that promotes groupthink. Factual counterpoints, especially in political threads, are hard to discuss

dragonwriter 6 days ago

> But, really no reason to upvote or downvote comments as no one can see the points of a particular comment on this site.

Voting effects the presentation order of comments, which is especially significant when there are many responses sharing an immediate parent.

That's probably a bigger impact from voting than making points publicly viewable would be

freedomben 6 days ago

Yes, I think it is definitely a balancing act, because the rising of certain comments can certainly contribute to groupthink. However, I also think that impact of having the best comments rise to the top is very useful. The system doesn't work super great in an early and active thread, but it works very well once the thread ages a little bit

firesteelrain 6 days ago

I think that supports my point. If there were no points then it would just be responses in order of posting. Points offer bias.

dragonwriter 6 days ago

Yes, the point of moderation, community or otherwise, is to be a mechanism for promoting group norms.

firesteelrain 6 days ago

That reinforces my point that sites like this lead to groupthink and coalescence around acceptable thought

dragonwriter 6 days ago

Well, it reinforces the hypothetical argument that sites like this have a mechanisms whic promotes settling into some kind of self-reinforcing content patterns. You’d have to actually show what the common patterns were for each site (and particularly whether they were share substance of argument or shared style, or both) to make the “groupthink” argument.

(I think the best argument against the groupthing argument here is how inconsistent the positions are that are claimed to be the “groupthink” position by those claiming that.)

firesteelrain 6 days ago

> (I think the best argument against the groupthing argument here is how inconsistent the positions are that are claimed to be the “groupthink” position by those claiming that

Aren’t you countering yourself by not providing the research requested above though?

I mean without objective evidence it’s all just a subjective opinion on either side

jachee 6 days ago

Where’d this approach to “groupthink” come from? Did you formulate this all on your own?

ETA: obligatory: /s

0xDEAFBEAD 6 days ago

I'm a little too young to remember Slashdot. It would be interesting to see an informal ethnography of those older discussion sites/Usenet/etc. from people who remember that stuff. Online communities deserve more study.

thijson 6 days ago

I always thought that moderation is a little high handed. Instead, individuals should choose what they see or don't see via a local filter that they've trained over time. I used to filter spam out of my email inbox that way, it worked pretty good.

jamesrcole 6 days ago

You talk about it as if doesn't exist anymore. If you're not aware, it still exists.

ChoGGi 6 days ago

In some sense it doesn't exist anymore. At the very least, the withered corpse is a far cry from what it once was.

AtlasBarfed 6 days ago

Score 5 funnies absolutely ruined /dots discussions

Thiez 6 days ago

Slashdot allowed you to configure scoring, so you could assign 0 or even negative points to 'funny'.

dotancohen 7 days ago

I think that the classical phrasing is "less is more".

At least, that's how my bash pager has it in the manpage.

johnisgood 7 days ago

You are right!

killerstorm 6 days ago

I'd like some markdown support:

  * Triple ticks for code ```

  * Bullet lists
Two spaces to mono space is somewhat offensive

int_19h 6 days ago

The single most annoying thing is the inability to somehow use a single line break to start a new line. It makes it very tedious to copy/paste things (that are not code) when quoting them.

Shorel 6 days ago

Textile is the syntax of a Jedi Developer.

Not as clumsy or random as a Markdown; an elegant weapon for a more civilized age.

lo_zamoyski 6 days ago

The "tech progressive" mindset cannot comprehend the idea that something cannot be improved or shouldn't be "enhanced". It is too close to the abyss.

freedomben 6 days ago

Also, don't want to overlook the fact that people have to justify their jobs. If you are employed as a designer, and you were to tell your employer that The app is in good shape and doesn't need any design work, you are putting yourself out of a job. Now scale that up to an entire team of designers, or even a department with a chief designer, and you have a bunch of people. Primary incentive is to continually change things. I don't think it's a coincidence that bigger apps from companies that are big enough to hire Full-Time designers are constantly churning their UI.

I don't mean this against designer specifically. I've seen plenty of software engineers that do the same thing. Hell, I've caught myself doing the same thing. It's just part of being human, but recognizing our human nature and not doing dumb things because of it is an ideal to shoot for in my opinion.

pixl97 6 days ago

Hmm, I have an idea for HN on the next April 1st.

EasyMark 6 days ago

I want a pickup truck that is designed like HN. The slate may be the answer

cgio 6 days ago

A minimalist pickup truck could be a bicycle. Depends on whether you really need a truck at all.

freedomben 6 days ago

This seems like a relatively bad approach in general. An even more minimalist bicycle can just be your legs, depends on whether you really need a bicycle at all. A more minimalist pair of shoes would be sandals, or even more minimalist is just going barefoot and building callouses on your soles. You also don't really need to look stylish, so a more minimalist set of clothing can just be a sheet that you wrap around yourself. I don't find this to be a useful line of thinking.

saagarjha 9 hours ago

If walking gets you to where you want to go, then what's the issue?

xarope 6 days ago

or perhaps, from a space and utility perpective, a cargo trike? I don't think a bike could handle a desk, even a foldable/collapsed one from ikea, whereas a cargo trike probably could.

71bw 6 days ago

And then you're like the meme that popped up recently somewhere on Twitter about some guy using his cargo bike to move bricks. Only took him 12 hours and 4 trips to do something anyone sane would do in 1 hour and 1 trip

quantadev 6 days ago

I mean you could technically balance a sheet of plywood on your back on a bicycle, but it seems like it would become impractical at any speed above 30mph just due to aerodynamic...uh...lift.

c22 6 days ago

Last time I did this I rested the sheet good on one pedal and rode side-saddle. It worked all right. YMMV--helps to be going downhill...

jorvi 6 days ago

Dark mode. Sure, Dark Reader exists but many mobile browsers don't support it.

Annoyingly enough it's been talked about for years but it never gets implemented, despite only three colors really needing a swap: background to dark sepia or just dark gray, and text to white and off-white.

exitb 6 days ago

You need to add controls, as some people would like it set up differently than their OS. You need to store the setting. You need to consider people without accounts. You need to put a bit on thought into the color scheme, as this website is after all known for its color. In the end, many people will complain, regardless of how well you do.

jorvi 6 days ago

I can virtually guarantee that the amount of people getting annoyed at being flashbanged by HN is larger than the amount of people that would complain about a dark mode.

For users without an account you just stick to prefers-color-scheme. For users with an account you add a setting 'disable dark mode'

Dark Reader has autodetection so those users won't be a problem either.

And if you really wanna keep to the identity of the site, the top bar doesn't even really need a color swap.

It really is less of a conundrum than you think.

WorldMaker 6 days ago

> You need to add controls, as some people would like it set up differently than their OS.

The Browser also has controls. Good Browsers let you set your browser-wide choice differently from your OS-wide choice. Great Browsers let you pick per-site overrides directly, as a standard user setting in a consistent location in browser controls. I realize a lot of UX designers have come to much prefer the "add more controls" approach over the "teach a person to fish" / understand how your OS and browser controls work as the user of the site approach. I realize why a lot of UX designers will always prefer that approach, because teaching people is hard and it is easier to cut complaints off at the pass than answer complaints with "use your browser's settings".

But seriously, it should be fine to release a dark mode in 2025 that only responds to `prefers-color-scheme: dark` and leaves it to users to understand their OS and Browser tools. It irks me a lot more when sites like Wikipedia and Bing and Google ignore `prefers-color-scheme: dark` by default and makes you dig for some dumb website-specific control (that's in a different place on every website) just to set it to whatever they call "System default" that means "trust the Browser's prefers-color-scheme, I know what I'm doing". UX designers have taken something that should be natural and automatic and made it more complex and more confusing just because a small handful of users complain that they don't understand their OS and Browser Settings tools.

throwaway2037 6 days ago

If only colour swap is required, can you use a Greasemonkey script?

jorvi 6 days ago

And how would you propose running Greasemonkey on a mobile browser?

jjav 5 days ago

> Dark mode.

The idea of "Dark mode" as a "feature" annoys me more than it probably should. Because it highlights how proper separation of content and presentation has been ruined by the so-called modern web, by modern web devs that don't get it.

The website is supposed to provide content, not presentation. Presentation is a user-agent feature. If you want to read a site with bright yellow font on a purple background, that should be your decision and yours alone. Configure your user agent with that color scheme and done.

By hardcoding presentation into the content, the "modern" (regressed) web removes functionality from the user. So now the user is relegated to begging the developers to implement particular color schemes like "dark mode", which doesn't make any sense.

steve_taylor 5 days ago

The web was like that for about the first 10 minutes. In 1996, the "modern" web accepted that web pages were almost always going to incorporate appearance and made it sane by standardising CSS.

ksec 6 days ago

Dark Mode. And Follow User would be two feature I have been using for years with other tools.

jedberg 6 days ago

Follow user is antithetical to the idea of HN -- content should be upvoted because of what it says, not who said it.

But I agree dark mode would be nice.

skydhash 6 days ago

I believe HN's HTML structure is simple enough to overwrite with custom CSS on the browser end.

jedberg 6 days ago

Sure, but I use at least five different browsers for HN, some on my phone. That’s a huge pain.

Being able to check a profile box would be a lot easier.

freedomben 6 days ago

Genuinely curious, why do you use so many different browsers for HN?

jedberg 6 days ago

Fair question. I use HN Replies, which emails me when people reply to me. On my computer, if I click the link in the email, it opens in Chrome. But on my computer my normal browser for HN is Safari. I use separate browsers for different things on my computer, so Safari is for HN and reddit, Chrome is for Google apps, like gmail etc., and Firefox for everything else. So sometimes I also get into HN via Firefox if I'm there an happen to type the URL or get a link.

Then on the phone, Safari is again the default browser, but if I click a link from the gmail app it opens in mobile Chrome.

So to use a plugin to change anything, I'd have to have the plugin on all five browsers.

0xpgm 6 days ago

Comments by people with more points to their name are (or at least used to be) promoted higher, which naturally leads to more upvotes.

So there's still an element of who says it that matters

dang 6 days ago

Comments have never been ranked differently on HN based on karma.

bloopernova 6 days ago

https://gist.github.com/aclarknexient/c39c83f2f97c3c6b1c307c...

These go in your ublock origin "my filters" section. Enables Dark Mode through CSS, and another filter restricts the width of comments.

quantadev 6 days ago

A 'Block User' feature would be nice. We don't have that feature do we? HN is full of trolls who fly just below the radar of what level of rudeness it takes to get kicked off.

nickpeterson 7 days ago

Also the lack of needing to make money helps a lot.

mike_hearn 6 days ago

I'd say that's the main thing. People hate ads, HN uses unobtrusive text ads. The moderation isn't that a competitive advantage, IMO. Slashdot's was better, mostly because it had measures to stop moderation abuse whereas HN seemingly doesn't. It's just a plain old up/down system with the added filip of a "super down" button, for those who are really committed to banning their opponents. I read with showdead turned on because perfectly reasonable comments are so often greyed out or dead. That used to happen much less on Slashdot because there were far fewer people with moderation rights and the bad ones got filtered out via metamod.

Maybe now it's been ported to Common Lisp it'll be easier to add features.

mousethatroared 6 days ago

"HN uses unobtrusive text ads"

HN has ads? I've been on some 2011 and I have never seen them...

tim333 6 days ago

Although those aren't ads in the sense that people pay for them?

In terms of paid advertising I guess the whole of HN kind of advertises YC who fund it.

aziaziazi 6 days ago

Also, self promotion in comments - often as "shameless plug" - like in any other platform that let you write public text:

https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...

crystal_revenge 6 days ago

It's almost irrelevant now since Reddit is basically just a gigantic bot farm, but I was always annoyed that Reddit would aggressively remove self promotion in most subs while clearly running major PR campaigns under the guise of organic content.

Hacker News is the opposite and the better for it. If you're openly promoting your work, awesome! If you're doing anything to attempt to manipulate the platform for PR reasons, you can bet you will be punished for it.

I never understood why Reddit, which always tried to give off the "for the little guy" vibes was so rabidly against anyone promoting their own work.

taneq 5 days ago

> I never understood why Reddit, which always tried to give off the "for the little guy" vibes was so rabidly against anyone promoting their own work.

Reddit hasn't been 'for the little guy' for a decade, that's why they have to try so hard to give off those vibes.

> Reddit would aggressively remove self promotion in most subs while clearly running major PR campaigns under the guise of organic content.

Yep, this is why they do this. They're removing competition (in the form of ads they weren't paid for) to boost their product (ads they were paid for).

freedomben 6 days ago

Seriously. It's often taken to absurd levels there. There have been several times when I went to Reddit answer a question about my own project that someone was asking, and my comment got downvoted or moderated away for self-promotion even though I was just answering the question. Ironically, omitting a disclaimer about it being my project will typically let the comments slide by, but that seems like the opposite of what you want. I prefer people to declare their biases up front so that I can evaluate their statement based on That context and on its merits. I personally love it when someone comments on something that they do.

freedomben 6 days ago

I think hn handles this perfectly. In my opinion. If the comment is a shameless plug that adds no value, it will get downvoted quite quickly. If it's adding value to the conversation, and (usually) as long as the commenter isn't was pretending not to be integrated, it stands.

tedunangst 6 days ago

You didn't notice they were ads.

mousethatroared 6 days ago

Never realized there were stories i couldn't comment.

Then again, Im not in CS so the job by boards posts are never interesting to me

jazzyjackson 6 days ago

Usually it's just "so and so is hiring" (not to be confused with the who wants to be hired threads) weaved in to look like just another submission

taneq 5 days ago

I always thought those were a feature. I figured they were paid recruitment, they also seemed to be relevant to most of the community here, win win!

jt_b 6 days ago

They're the ones you can't comment on.

oblio 6 days ago

> "super down" button

The flag button?

palmotea 6 days ago

> IMO. Slashdot's was better, mostly because it had measures to stop moderation abuse whereas HN seemingly doesn't.

Really? IIRC, Slashdot's moderation was garbage, remember penis-bird, GNAA, goatse?

mike_hearn 6 days ago

You're talking about false negatives, not false positives. People have different tolerances for these kinds of errors.

But yes, I remember that to see that stuff you had to expand the down-modded comments.

That stuff was also a product of its time. Slashdot had the strong free speech ethos of the early internet, so CmdrTaco had a policy of never deleting comments unless they broke the site somehow or there was a legal process requiring it. Sometimes that meant very new stories would get these comments and they'd be visible before they got modded, but if you browsed stories that had been active for a little while you wouldn't see them.

One downside of a sophisticated moderation system on a site designed for programmers is that some people take it as a challenge. The reason Slashdot trolling was a bunch of dumb memes rather than e.g. commercial ads is because a lot of bored teenagers found spamming it a good way to learn web programming. The systematic nature of the moderation meant that it was a system to beat, a game to conquer. Hence the brief influx of "page widening posts" and other technical hacks. But I don't know if you'd see the same stuff today. The culture has changed, there are much better ways to learn programming and way more opportunities now. And you don't have to be fully automated. CmdrTaco had a strongly systems-oriented streak, but the problem on HN is hardly ever the actions of dang and the other paid moderators, it's really abuse of the overly simple system by other users that's a problem. You could have both good paid moderators and stricter controls on user moderation.

zoklet-enjoyer 6 days ago

Turns out those GNAA guys are actually white supremacists https://en.m.wikipedia.org/wiki/Weev

pram 6 days ago

You just reminded me of the beautifully rendered, colored penisbird ascii art dipshits would spam on IRC lol

philwelch 6 days ago

Most of that was downmodded and hidden by default though.

andai 6 days ago

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. —Antoine de Saint-Exupéry

throwawaymaths 7 days ago

your comment assumes that features and functionality are a good thing. "worse is better" does not apply here.

"worse is better" is people putting up with footguns like this in python, because it's percieved easier to find a python job:

    def fun(a = []):

HN is very much "less is better", not "worse is better".

zoogeny 7 days ago

I'm not sure what you mean? The literal quote from the Wikipedia article on "worse is better" is:

> It refers to the argument that software quality does not necessarily increase with functionality: that there is a point where less functionality ("worse") is a preferable option ("better") in terms of practicality and usability.

For that reason, I think I am applying the term precisely as it was defined.

The irony of my comment, which dang picked up, is that the original idea was a criticism against Lisp, suggesting that the bloat of features was a part of the reason its adoption had lagged behind languages like C.

1. https://en.wikipedia.org/wiki/Worse_is_better

90s_dev 7 days ago

You're both saying the same thing: fewer features = higher quality.

Swiss army knives are not as good at being screwdrivers as screwdrivers are.

quinnirill 6 days ago

In general: yes. But I’ve certainly had to use swathes of screwdrivers that are worse at being screwdrivers than my Swiss army knife is. Same I believe applies here: there’s a relation, but it’s nuanced. The same screwdriver is a better screwdriver when carried in a hand than in a toolbox full of other high-quality tools, but worse for everything else.

throwawaymaths 6 days ago

huh. til i actually thought "worse is better" is more recent than that but it stems from an era where feature count was the measure of quality. how times have changed!! thanks!

7thaccount 6 days ago

I've written Python for 14 years and have never seen code like that. It certainly isn't a perfect language, but this doesn't look like a common concern.

People write a lot of Python, because the language is easy to get into for a lot of non computer-science folks (e.g., engineers and scientists) and the ecosystem is massive with libraries for so many important things. It isn't as conceptually pure as lisp, but most probably don't care.

bsder 6 days ago

> I've written Python for 14 years and have never seen code like that.

Exactly because it's a footgun that everybody hits very early. I think the Python linters even flag this.

The fact that default arguments in Python get set to "None" is precisely because of this.

int_19h 6 days ago

For this particular case, a better candidate is usually empty tuple () since it's actually iterable etc, so unless you need to mutate that argument...

The bigger problem is with dicts and sets because they don't have the equivalent concise representation for the immutable alternative.

Arguably the even bigger problem is that Python collection literals produce mutable collections by default. And orthogonal to that but contributing to the problem is that the taxonomy of collections is very disorganized. For example, an immutable equivalent of set is frozenset - well and good. But then you'd expect the immutable equivalent of list to be frozenlist, except it's tuple! And the immutable equivalent of dict isn't frozendict, it... doesn't actually exist at all in the Python stdlib (there's typing.MappingProxyType which provides a readonly wrapper around any mapping including dicts, but it will still reflect the changes done through the original dict instance, so to make an equivalent of frozenset you need to copy the dict first and then wrap it and discard all remaining references).

Most of this can be reasonably explained by piecemeal evolution of the language, but by now there's really no excuse to not have frozendict, nor to provide an equally concise syntax for all immutable collections, nor to provide better aliases and more uniform API (e.g. why do dicts have copy() but lists do not?).

bsder 5 days ago

At this point, the biggest problem simply seems to be that the size of "Python Core" has outstripped the number of maintainers.

I helped shepherd a bug fix into Python that was less than a dozen lines, dead simple, completely obvious, sorely needed and still took 3 years and a summoning of Guido, himself, to get it shoved through. Because there was no designated maintainer for that section of code, people were absolutely terrified of touching the code even though it was completely obvious that the fix was backwards compatible. It finally hit the latest Python and a bunch of other projects immediately removed their workarounds for the bug.

If it was that difficult to get a super small, super obvious bugfix through, trying to get a "frozendict" into the language is going to be a Sisyphean task.

int_19h 4 days ago

There's a lot of changes going on in CPython in the past few releases, so a frozendict wouldn't be a big one comparatively speaking.

The bigger problem is that there was already a PEP (https://peps.python.org/pep-0416/) about that, and it was rejected for wonderful reasons such as "multiple threads can agree by convention not to mutate a shared dict, there’s no great need for enforcement" and "there are existing idioms for avoiding mutable default values".

tredre3 6 days ago

It's a common need to have an empty array be the default value to an argument. In any programming language, really. I don't know what to make of the fact that you've never seen that in the wild.

Maybe you were blessed with colleagues, for the past 14 years, that all know about how dangerous it is to do it in Python so they use workarounds? That doesn't negate the fact that it's a concern, though, does it?

dannymi 6 days ago

There's always tension between language simplicity (and thus cognitive load of the programmers) and features. Compare Scheme with Common Lisp.

The idea in Python is:

1. Statements are executed line by line in order (statement by statement).

2. One of the statements is "def", which executes a definition.

3. Whatever arguments you have are strictly evaluated. For example f(g(h([]))), it evaluates [] (yielding a new empty list), then evaluates h([]) (always, no matter whether g uses it), then evaluates g(...), then evaluates f(...).

So if you have

def foo(x = []): ...

that immediately defines

foo = (lambda x = []: ...)

For that, it has to immediately evaluate [] (like it always does anywhere!). So how is this not exactly what it should do?

Some people complain about the following:

    class A:
        x = 3
        y = x + 2
That now, x is a class variable (NOT an instance variable). And so is y. And the latter's value is 5. It doesn't try to second-guess whether you maybe mean any later value of x. No. The value of y is 5.

For example:

    a = A()
    assert a.__class__.x == 3
    assert a.x == 3
    a.__class__.x = 10
    b = A()
    assert b.x == 10
succeeds.

But it just evaluates each line in the class definition statement by statement when defining the class. Simple!

Complicating the Python evaluation model (that's in effect what you are implying) is not worth doing. And in any case, changing the evaluation model of the world's most used programming language (and in production in all countries of the world) in 2025 or any later date is a no go right there.

If you want a complicated (more featureful) evaluation model, just use C++ or Ruby. Sometimes they are the right choice.

greiskul 6 days ago

> foo = (lambda x = []: ...)

> For that, it has to immediately evaluate [] (like it always does anywhere!). So how is this not exactly what it should do?

It has a lambda there. In many programming languages, and the way human beings read this, say that "when there is a lambda, whatever is inside is evaluated only when you call it". Python evaluating default arguments at definition time is a clear footgun that leads to many bugs.

Now, there is no way of fixing it now, without probably causing other bugs and years of backwards compatibility problems. But it is good that people are aware that it is an error in design, so new programming languages don't fall into the same error.

For an equivalent error that did get fixed, many Lisps used to have dynamic scoping for variables instead of lexical scoping. It was people critizing that decision that lead to pretty much all modern programming languages to use lexical scoping, including python.

shwouchk 6 days ago

dynamic variables (esp default) when you are collaborating with many people. when you you know the code well they are incredibly useful

dannymi 6 days ago

>It has a lambda there. In many programming languages, and the way human beings read this, say that "when there is a lambda, whatever is inside is evaluated only when you call it".

What is inside the lambda is to the right of the ":". That is indeed evaluated only when you call it.

>But it is good that people are aware that it is an error in design, so new programming languages don't fall into the same error.

Python didn't "fall" into that "error". That was a deliberate design decision and in my opinion it is correct. Scheme is the same way, too.

Note that you only have a "problem" if you mutate the list (instead of functional programming) which would be weird to do in 2025.

>For an equivalent error that did get fixed, many Lisps used to have dynamic scoping for variables instead of lexical scoping. It was people critizing that decision that lead to pretty much all modern programming languages to use lexical scoping, including python.

Both are pretty useful (and both are still there, especially in Python and Lisp!). I see what you mean, though: lexical scoping is a better default for local variables.

But having weird lazy-sometimes evaluation would NOT be a better default.

If you had it, when exactly would it force the lazy evaluation?

    def g():
        print('HA')
        return 7

    def f(x=lazy: [g()]):
        pass
^ Does that call g?

    def f(x=lazy: [g()]):
        print(x)
^ How about now?

    def f(x=lazy: [g()]):
        if False:
            print(x)
^ How about now?

    def f(x=lazy: [g()]):
        if random() > 42: # If random() returns a value from 0 to 1
            print(x)
^ How about now?

    def f(x=lazy: [g()]):
        if random() > 42:
            print(x)
        else:
            print(x)
            print(x)
^ How about now? And how often?

    def f(x=lazy: [g()]):
        x = 3
        if random() > 42:
            print(x)
^ How about now?

Think about the implications of what you are suggesting.

Thankfully, we do have "lazy" and it's called "lambda" and it does what you would expect:

If you absolutely need it (you don't :P) you can do it explicitly:

    def f(x=None, x_defaulter=lambda: []):
        x = x if x is not None else x_defaulter()
Or do it like a normal person:

    def f(x=None):
        x = x if x is not None else []
Explicit is better than implicit.

Guido van Rossum would (correctly) veto anything that hid control flow from the user like having a function call sometimes evaluate the defaulter and sometimes not.

9dev 6 days ago

That’s a very academic viewpoint. People initialize variables with defaults, and sometimes, that default needs to be an empty list. They are just holding it wrong, right?

owl57 6 days ago

Most people writing any language without a linter are holding it wrong.

When a linter warns me about such an expression, it usually means that even if it doesn't blow up, it increases the cognitive load for anyone reviewing or maintaining the code (including future me). And I'm not religious — if I can't easily rewrite the expression in an obviously safe way, I just concede that its safety is not 100% obvious and add a nolint comment with explanation.

9dev 6 days ago

My point was that no matter the conceptual purity or implementation elegance, if a language design decision leads to most people getting it wrong–then that's a bad decision.

owl57 6 days ago

But it's not about that. I don't like this decision either, but the other side of the trade-off is not just about some abstract concepts or implementation, it's about complexity of the model you need to keep in your head to know what will a piece of code do. And this has always been a priority for Python.

dragonwriter 6 days ago

> That doesn't negate the fact that it's a concern, though, does it?

Yes, the fact that most people learn very early the correct way to have a constant value of a mutable type used when an explicit argument is not given and that using a mutable value directly as a default argument value uses a mutable value shared between invocations (which is occasionally desirable) means that the way those two things are done in Python isn't a substantial problem.

(And, no, I don't think a constant mutable list is actually all that commonly needed as a default argument in most languages where mutable and immutable iterables share a common interface; if you are actually mutating the argument, it is probably not an optional argument, if you aren't mutating it, an immutable value -- like a python tuple -- works fine.)

59nadir 6 days ago

I ran into this particular problem specifically because I wrote a ton of Racket that had this exact pattern and didn't see why Python should be any different. It really is a head scratcher in many ways the first time you run into it, IMO. I'm not sure I would immediately catch exactly what was going on even a decade later after I first discovered it.

Spivak 6 days ago

Python made a choice to have default values instead of default expressions and it comes with positive and negative trade-offs. In languages like Ruby with default expressions you get the footgun the other way where calling a function with a default parameter can trigger side effects. This kind of function is fine in Python because it's unidiomatic to mutate your parameters, you do obj.mutate() not mutate(obj).

So while it's a footgun you will be writing some weird code to actually trigger it.

0xDEAFBEAD 6 days ago

>In languages like Ruby with default expressions you get the footgun the other way where calling a function with a default parameter can trigger side effects.

Seems fine to me. If the default expression causes side effects, then that's what I would expect.

>This kind of function is fine in Python because it's unidiomatic to mutate your parameters, you do obj.mutate() not mutate(obj).

I first wrote Python over 10 years ago and I never learned this.

How would you idiomatically write a function/method which mutates >1 parameter?

int_19h 6 days ago

It's just plain wrong. For example, next() is a builtin function which mutates the iterator passed to it. And, in general, given that Python doesn't have extension methods or anything similar, if you want to write a helper that works on mutable objects of some type, it'll have to be a free function.

Spivak 6 days ago

next() is just sugar for iter.__next__()

A common case where you would have a free function which mutates its parameter would be a function which takes a file handle but it's also the case that you wouldn't have a mutable default for this value.

int_19h 4 days ago

It doesn't change the fact that it's a function that mutates its parameter, even if it eventually calls a method to do so. And, furthermore, it is idiomatic to call next(iter) rather than iter.__next__(), even when no default value is expected.

biorach 6 days ago

They are referring to a convention, not a language restriction.

If you want to mutate two parameters just pass them to a function like you normally would.

It's sloppy and a bad habit, I would not let it pass a PR in production code. Probably OK for a throwaway script.

jaza 6 days ago

Ah yes, the ol' default empty list Python gotcha, it bit me I think about 10 years ago, and ever since, sadly I've written code like this so many times it's not funny:

    def fun(a = None):
        _a = a if a is not None else []

smokel 7 days ago

The ugliness scares most people away, or at least it doesn't accidentally lure them in.

marssaxman 6 days ago

Some of us genuinely like the way it looks.

froh 6 days ago

indeed. I love it. no frills, just contents.

encom 7 days ago

HN is like 4chan, but house-broken.

krapp 6 days ago

A lot of people claim that but I've never seen evidence of the existence of a vast number of people who would be using Hacker News if only it had more bells and whistles. Craigslist is "ugly" too, and plenty of people use it.

I think it's more likely that most people (even most tech-adjacent people) simply don't know this place exists, or don't care, since no one is sharing links to Hacker News on mainstream social media and nothing goes viral here outside of already established HN-adjacent circles.

7bit 6 days ago

I like Hackernews. I like the simplicity. I don't bother with better AI. I prefer it that way and I acknowledge that the look and feel of Hackernews does not suite everyone.

But I don't value the look and feel of Hackernews, because it drives people away -- as if these people are of lesser value. That is just elitist and gatekeeper mentality.

dang 5 days ago

The people I don't want to drive away are younger cohorts who would be a great fit for the community but who may be put off by the ancient form factor.

https://news.ycombinator.com/item?id=44101473

jaoane 6 days ago

There is absolutely nothing wrong with gatekeeping. There are people who you definitely want to keep away.

b00ty4breakfast 6 days ago

folks forget, or never figured out, that community-building is a thing that requires a degree of curation; you wouldn't want your sloppy alcoholic uncle showing up to your business brunch (or whatever the hep cats do these days...) but he may be a welcome addition to your new years eve party. That doesn't mean you are "gatekeeping"

DaSHacka 6 days ago

> That is just elitist and gatekeeper mentality.

This sounds good in theory until you realize just who it is that is being "gatekept".

Peruse through any sufficiently large Discord server or the comments on a YouTube Shorts / Instagram Reels video to see what our fellow "valued internet compatriots" are up to.

I, for one, have had enough of dealing with neuron-fried dopamine addicts and literal children from those aforementioned circles to last me a lifetime, I'd prefer HN doesn't become (more) like that.

There's always Reddit for those who prefer a community with the front gates blasted wide open.

drweevil 6 days ago

I find aesthetically pleasing, tbh.

jt_b 6 days ago

HN's aesthetic has grown on me honestly!

whyowhy3484939 6 days ago

The heavy, thick irony of these people running their own platform on as little technology as possible and depending heavily on human input.

It's like they know somewhere deep inside that "mo tech" is not helping anyone.

dang 6 days ago

There's a less cynical interpretation of that which is not so far from the case.

hbsbsbsndk 6 days ago

There's a few levels going on here:

- technologists and startup wannabes feeling like HN is "underground" because of the stripped down aesthetic and weird tech stack

- out of touch VCs who are successful because of money and connections but want to cosplay as technical

- the end users of the startups, who are fed the enshittified products funded by the VCs and created by the technologists

chipsrafferty 6 days ago

It's not ironic whatsoever.

jgalt212 6 days ago

I think HN has some pretty sophisticated automated and human-in-the-loop moderation features that few other sites possess, or throw as much resources at. Because HN is not ad-supported it does not fall victim to tragedy of the commons.

-__---____-ZXyw 6 days ago

Maybe this was tongue-in-cheek in a way that eludes me, but in case any innocent and curious bystanders are as confused as me by your comment, I'm not sure "Worse Is Better" refers to what you think it does. It isn't about "features and functionality", it's about how ease of implementation beats everything else. I can't see how that applies here, or what your comment means in that light.

Here's the original essay -- https://www.dreamsongs.com/RiseOfWorseIsBetter.html

This is a good little overview entitled "Worse is Better Considered Harmful" -- https://cs.stanford.edu/people/eroberts/cs201/projects/2010-... -- in which the authors argue for "Growable Is Better".

In summary - it's about ease of implementation trumping all else. C and Unix are memorably labelled "the ultimate computer viruses".

raverbashing 7 days ago

Honestly it's not "worse"

But I think HN built on what Reddit got right (at least old reddit) and also on a context of more online/faster interactions as opposed to Slashdot that brought some of the old forums structure and on a context of slower and more meaningful (ahem, for the most part) interactions. Hence why moderation was more precise, upvotes had color and you still had things like user signatures

In a way, users and posts on HN are "cattle", not pets ;)

donnachangstein 6 days ago

The genius of Slashdot's moderation system is that it forced you to be fastidious with how your limited mod points were allocated, only using them on posts that really deserved them.

As opposed to tearing through a thread and downvoting any and everything you disagree with.

Slashdot encouraged more positive moderation, unless you were obviously trolling.

The meta-moderators kept any moderation abuse in check.

It's sad to see we have devolved from this model, and conversations have become far more toxic and polarized as a direct result of it. (Dissenting opinions are quickly hidden, and those that reinforce existing norms bubble to the top.)

I believe HN papers over these problems by relying on a lot of manual hand-moderation and curation which sounds very labor intensive, whereas Slashdot was deliberately hands-off and left the power to the people.

emeril 6 days ago

I miss slashdot when it was at its peak decades back

unsure why precisely it descended so much

not crazy about HN's approach but the quality of the discourse here is so high through whatever mechanism, I don't much care

bawolff 6 days ago

I remember slashdot being full of "M$ is teh evill111!!" and other childish nonsense. At the end of the day what matters is the results, and i much prefer the discusions on hn than /.

MetaWhirledPeas 6 days ago

For HN, replace M$ with Musk and you'll still see parallels. Although to be fair HN is much more even-keeled than most commenting systems, like Ars and Electrek.

Slashdot is struggling a bit these days. The lower the comment count, the worse the moderation, so it's a bit of a snowball effect. The UI could use some help; there are many who don't want it to change at all, but it would be nice if an alternate UI were available, hitting the same API.

vacuity 6 days ago

> For HN, replace M$ with Musk and you'll still see parallels.

I think HN leans towards deriding both MS and Musk (see any thread on MS and FOSS). In any case, I think that part of being well-spoken is that you speak out against severely bad actors often. It's never useful to reflexively criticize something, but people may contemplate and still decide they're right. Making a comment is the bare minimum of accountability for bad actors who should know better. It may not be to your taste that HN is such a platform, but that's not up to your decision any more than it is mine. There are many problems from a society that struggles to speak well or ill as a subject deserves, which is to say to speak the truth when it should be spoken, and not to speak mistruths except in exceptional circumstances. It would surely be best if one reasoned critique solved the problem and we never would hear of it again, but alas.

MetaWhirledPeas 6 days ago

I use comments as a barometer for general sentiment, and what I'm seeing is that it's much more popular to repeat aggressive condemnatory statements than it is to analyze and provide counterpoints. This is not a surprise but I expect better of HN (and on most topics, HN provides this).

I don't expect HN commenters to change their minds necessarily, but I do wish they would elevate posts with more consideration and objectivity, and less low-effort outrage.

vacuity 6 days ago

Certainly, but sometimes I'm just in the mood for "I'll take what I can get". Probably not the best position, but I haven't found it effective to try to change everyone's minds all the time.

bawolff 6 days ago

> For HN, replace M$ with Musk and you'll still see parallels. Although to be fair HN is much more even-keeled than most commenting systems, like Ars and Electrek.

I don't really see it. /. had this basically every single thread and the criticism was very not substantive. Musk is unpopular here, but the criticism at least has a bit more meat to it and is not on every single post.

Karrot_Kream 6 days ago

HN is the same with Big Tech and ads.

On HN Meta is one step away from going bankrupt and being sued into oblivion. Meta’s Earnings Reports tell a very different story.

I feel like HN fits the same shape in tech as Slashdot did and I’m not happy about it.

perching_aix 6 days ago

How are you determining the causative relationship?

soapdog 6 days ago

I don't think that was what made HN prevail against similar sites that were popular in the past. In my opinion, it is the fact that it is tied to Y Combinator and lots of startups/founders that made it stick. Something that is not technical at all.

jaza 6 days ago

Not me! For a number of years, I was like "what's with that domain, never heard of ycombinator, oh well, can't be bothered reading up on it right now, anyway, great content here, and nice minimal interface, I'll keep coming back".

udev4096 6 days ago

A lot of people on HN do infact hate YC and pretty much everything VC

baq 6 days ago

I'm still missing being able to read only +5 insightful comments after 20 years.

I'd expect Slashdot's point systems and meta moderation to make a comeback in the LLM slop world we live in currently, but nobody knows about it anymore. Steam kinda rediscovered it in their reviews, perhaps even was inspired by it (I hope...)

Tijdreiziger 6 days ago

Dutch tech news website Tweakers.net basically has this. Comments are moderated on a scale from -1 to +3, and then you can choose to expand only +2 and up.

spockz 6 days ago

I have it set to 2 by default which helps but can also be annoying on fresh posts as unmoderated posts are also hidden. And then if there is a +2 post it totally only makes sense in the context of the tree so now I’m manually unfolding the parent comments.

All of this to say that one feature brings in a whole set of additional complications. Less is more.

busymom0 6 days ago

Can you explain how that works? I visited the site but don't understand their language.

akomtu 6 days ago

HN's dry text-only design is what repels most of the problems. Mods only polish it a bit.

Aurornis 7 days ago

> and heavy moderation.

I don’t think there is heavy moderation in the traditional sense. It’s primarily user-driven, aside from obvious abusive behavior. The downvote and flagging mechanisms do the heavy lifting.

The heuristics that detect a high ratio of arguments to upvotes (as far as I can tell) can be frustrating at times, but they also do a good job of driving ragebait off the front page quickly.

The moderators are also very good at rescuing overlooked stories and putting them in the second chance pool for users to consider again, which feels infinitely better than moderators forcing things to the front page.

It also seems that some times moderators will undo some of the actions that push a story off the front page if it’s relevant. I’ve seen flagged stories come back from the dead or flame war comment sections get a section chance at the front page with a moderator note at the top.

Back in the Slashdot days I remember people rotating through multiple accounts for no reason other than to increase their chances of having one of them with randomly granted moderation points so they could use them as weapons in arguments. Felt like a different era.

90s_dev 7 days ago

> I don’t think there is heavy moderation in the traditional sense.

It seems to be a combination of manual and automated moderation (mostly by dang but he has more help now), using the kind of over/under-engineered custom tools you'd expect from technophiles. I've wondered a lot about the kind of programming logic he and the others coded up that make HN as curious as it is, and I have half a mind to make a little forum (yet another HN clone, but not really) purely for the sake of trying to implement how I think their moderation probably works. If I went through with this, I'd have it solely be for Show HN style project sharing/discussion.

mdaniel 6 days ago

> (mostly by dang but he has more help now)

https://news.ycombinator.com/item?id=43558671 for those who missed it

90s_dev 6 days ago

Matt's right, guys.

90s_dev 6 days ago

I'm pretty much decided on making the Show HN clone even if nobody uses it. Because I know it's a good idea and I believe in it:

* For every N=round(10) years software experience, you can click submit N10 times.

* You must* provide a link and year proving your earliest project or employoment.

* Max 256 submissions per day for everyone total.

Should be a fun experiment. Email me if you want an early invite.

ted_dunning 6 days ago

How do people with experience that predates the internet prove that?

90s_dev 6 days ago

They'll find a way.

marssaxman 6 days ago

Somewhere in my garage there's a box containing a physical package for one of the first pieces of published software I ever wrote. I wonder if there's a date printed on its CD-ROM?

smt88 6 days ago

HN is heavily moderated by humans. They've discussed it before. They're machine-assisted, but heavily involved day-to-day.

gchamonlive 6 days ago

Maybe it's an effect of not having to compete with other outlets.

andsoitis 6 days ago

Το λακωνίζειν εστί φιλοσοφείν

To be spartan is to philosophize.

thaumasiotes 6 days ago

I'm curious why λακωνίζειν needs to be nominalized and φιλοσοφείν doesn't.

andsoitis 4 days ago

λακωνίζειν gets nominalized when you want to discuss the concept itself (to act like a Spartan/speak laconically)

φιλοσοφείν often remains as an infinitive because it's describing an activity someone does or wants to do (to philosophize)

chairmansteve 6 days ago

Slashdot sold out to Conde Nast. That killed it. It was very well designed.

quantadev 6 days ago

"Worst and First beats Perfect and Last"

     - Every Venture Capitalist Ever.

rmason 6 days ago

The exception to that rule was Google. Which coincidentally might have been one of the best VC investments of all time.

quantadev 6 days ago

Google was just the right idea at the right time. Ranking pages based on how many other pages link to it wasn't a brilliant idea, it was just the most obvious thing to do next. It was an algo that you could basically implement in a weekend. Tons of tech companies are just this. Something done at the right time, that was super easy to implement, by people capable of getting others to try it.

wltr 6 days ago

What makes HN work is being popular. Nothing more. Stop praising mediocrity.