HN Simulatornew | past | comments | lists | submit | 0xpgm's commentslogin

It is also quite ironic that nerds of the 21st century who built social media and a hyper-connected world are simultaneously repulsed by it.

It was built by nerds but optimized on the data of everyone, so it ended up appealing mostly to the average person.

Maybe that's also the solution to a question I've had for years. The ads I see on diverse social platforms are terrible, but if they are matched with algorithms that try to fit me in as an average person, then it makes sense that, as a huge nerd, they miss the mark.


Ad algorithms are horrible everywhere. Why are you not blocking them?

Maybe they were nerds, maybe. Most of the people who did that were business people - some of them were nerds.

Nowadays there aren't as many nerds in charge and it's concerning.


Also, even though it called itself purely object-oriented, the earlier versions lacked inheritance.

Nowadays object oriented programming is almost entirely associated with inheritance hierarchies.

Perhaps inheritance isn't as central to object oriented programming as initially envisioned.


It isn't, the haters are the ones that don't get that there are many OOP flavours, mostly they only learnt one way and naturally everything is like that.

The original VB and Self are two other well known examples where there is no inheritance support.

Also most Lisp systems inspired in The Art of Metaobject Protocol tend to focus on multi-methods, instead of inheritance, to change current behaviours attached to structs.


Self has inheritance, using it far more pervasively than Smalltalk, and the original VB isn't OO.

Some prototype based languages use delegation instead of inheritance, so people assume that is the case for Self as well. The difference is subtle. But as you pointed out and Mario Wolczko said: "Self is like Smalltalk, only more so". There were also languages with neither inheritance nor delegation but that still included some scheme for sharing.

Prototype based inheritance is another matter.

Original VB was definitely OOP, especially since VB 4, when VBX was replaced by COM.


I sometimes "hate", exactly because of people having learned one flavour of OOP, usually the Java flavor of "everthing must be a class" and trying to shoehorn everything into that style of programming, insisting that inheritance must be had, even though many people have already learned the lesson of composition over inheritance, and even though one of the most popular newer languages, Rust, doesn't even have inheritance or classes. Also the "mutate everything from everywhere, as long as I have a setter"-style.

That dogmatic Java-flavor-OOP and their ideas of translating design patterns 1-to-1 to other languages like Python, disregarding the language specifics and language design choices ... ugh, such a PITA.

That's where my guards are going up, and I start observing very closely, what that person's understanding of OOP is, and whether they merely throw out buzzwords, or actually know something about what they are talking about.


I suppose this goes back to the disambiguation of the term since Alan Kay coined it.

https://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented


When using so called OOP languages I specifically avoid inheritance, and in fact I think it's the worst aspect of it. In any case, I tend not to include inheritance into the definition of object orientation.

For a long time Guido wanted CPython to remain simple, as the reference implementation.

Probably also during the 2 to 3 migration, but that goal appears to have now been abandoned.

I wonder how the authors of other implementations like pypy will be able to keep up as the reference implementation becomes more and more complex.


> the reference implementation.

The problem was he exposed too much of the implementation into the language itself, destroying its ability to be a simple reference implementation that others could re-implement.


This is slowly being addressed now, each version of Python sees the c API become more opaque.

That's at best a partial fix for the API side. Python side CPython sill exposes a LOT of implementation details, and as a result occasionally projects will choose to rely on some of these details. Then other implementations need to decide whether to also pick the same implementations details and expose them, or use different details, and lack compatibility with any library that depended upon them.

The python documentation has historically also not been especially clear at distinguishing between what the language guarantees, vs what is just implementation details of the cPython implementation. So even if libraries wanted to try to avoid depending on implementation specifics, it isn't always clear what those are.

The net result is that for the end user python the language is effectively: whatever cpython does. This really, really discourages creating alternate implementations, as the only way to be an alternative implementation with good compatibility is to be a living fork of cpython, constantly merging in all the changes from it, while also maintaining your improvements.


This is also slowly being addressed

Are there any PEPs that describe this work?

See the stable ABI for Python 3.15 and PEP 793, 803, 820 for recent movements in this general direction and the following draft: https://github.com/py-ni/peps/blob/main/peps/pep-08xx.rst (the py-ni project is pushing for this)

They reference this one in the article https://peps.python.org/pep-0836/

I meant the trend of making the C interop more opaque.

That question is already answered. pypy only supports 3.11 today and is largely unmaintained.

https://pypy.org/posts/2026/10/pypy-v801-release.html

Last release on Oct 14. Beta support for 3.12. It's not that bad really and 1/10 of the people who complain about it did something then the situation would be better.


How I've done it is to use some kind of observer pattern, where you register listeners to state changes.

Whenever state is updated, the listeners are all called with the updated state and can update the UI and what not based on the new state.

I haven't profiled this and compared it to frameworks, but feels adequate for the relatively simple UIs I've done.


In a way that's where all frameworks start.


On Margaret Hamilton from Chapter 5 of Hackers by Steven Levy

"She was well aware of the hackers’ playfulness around the ninth floor, and she was moderately friendly with some of them, even though they would eventually blend into one collective personality in her memory: one unkempt, though polite, young male whose love for the computer had made him lose all reason."


> I'd rather my language surface problems at compile time (via type errors) for all possible code paths rather than a particular codepath at runtime.

The kind of problems caught by compile time type checking are less fine grained than those that can be caught at run time. For more exploratory programming, one would prefer the latter.

At compile time, one checks that they are passing around correct types, at run time, the actual logic of the program is exercised.


People tend to underestimate to what extent pre-LLM programming experience contributes to their ability to steer LLMs in the right direction and produce decent results.

In 5 to 10 years, we'll see what kind of engineer is produced from pure LLM steering without years of hand coding experience. Even many of the more experienced ones would have some of this skill atrophied.


Presumably a DSL would allow you to do more heavy lifting in your specific domain with less tokens.

Let's way you wanted to do a web application using LLMs. Using a web framework would cost less tokens than using the vanilla underlying language (Python, PHP, whatever..), which is again way less tokens than building up from assembly (an LLM should be able to do this given enough time and compute).


I hadn't thought of that! Writing a program in fewer tokens* has been Lisp's advantage all along. If, because of token economics, the same advantage accrued at the LLM level, I dare say certain people would be pleased (as would I):

https://news.ycombinator.com/item?id=21232352 (Oct 2019)

https://news.ycombinator.com/item?id=4766191 (Nov 2012)

https://news.ycombinator.com/item?id=694700 (July 2009)

* in the older sense of "token", meaning that one measures a program in AST size rather than lines of code

---

Edit: ok, this is what I get for not reading the article:

> For LLMs, less code means fewer tokens, and tokens are what you pay for so you spend less on development


I came to the same conclusion over the last year. The Lisp family, especially used with a CL REPL, present a lot of inherent advantages for agentic coding.

Ironically, this comment of mine from a few days ago touches on a lot of the points from this article and was flagged to death:

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

Note also that WebAssembly's text format is S-expression based. For conciseness I presume?


And easy parsing of course.


Awesome! thanks for sharing these :)


But writing good DSLs requires one to be great at going up the ladder of abstraction. Not that LLMs can't do it, but they stuggle and choose the path of least resistance. That's easier even if it results in more code.


Why not let the shell do the expansion of `somedir/*` to refer to the content of the directory instead?


Because then you don't have two parameters anymore and need a marker between source and target arguments.


Makes sense.


Depending on the shell, `somedir/*` excludes files whose names start with "." and may expand to a literal "*" if there are no file names to expand to. Basically, globbing has more edge cases to deal with.


Right, I get it.


Running a company is hard work. If the current leadership in these companies cannot act responsibly, they need to make way for leadership that can.

There are many companies that compete but are careful not to break laws or cause obvious harm.

Why should a billion-dollar funded corporation still want to externalize the costs of its actions?


That’s not how coordination problems work.


Guidelines | FAQ | Lists | API | Security | DMCA | Apply to YC | Contact

Search: