Hacker Newsnew | past | comments | ask | show | jobs | submit | nlitened's commentslogin

I think screenshots also don't help with stacked views and lazy loading outside the viewport

> You end up rebuilding semantics over and over again (validation, mapping, enrichment), and a lot of failures only show up at runtime.

I think die-hard fans of static typing mostly fail to acknowledge this objective reality and its implications. Every time they encounter this problem again and again, they approach it as if nobody thought of this before, and didn’t develop reliable abstractions to productively work in these environments.


I'm genuinely interested in examples of these reliable abstractions, or at least in some keywords I can look up.

The way I see it, Clojure was created to address most of the philosophical problems highlighted in the article, and its ecosystem has developed under the influence of such ideas.

It embraces the dynamic nature of things. Every program that must do I/O is dynamically typed at the edges - so statically-typed languages must have both the facilities for dealing with dynamic types and static types, and use those differently for "inner" and "outer" parts of the program. The Clojure ecosystem makes it more approachable to work with dynamic data, and as a result, program's parts (modules, even functions) use the same machinery as the program as a whole. What helps, off the top of my head:

1. Immutability of values, persistent data structures, explicit state management - it turns out most of the "problems" with dynamic types are not due to the fact that types are unknown, but the fact that they may change over time. Most of concurrency problems also become irrelevant with immutable values.

2. Powerful data specs/schemas allowing to express full business requirements and constraints on expressible values (not possible with static typing anyway) — making invalid states unrepresentable and actually meaning it.

3. Concise unified model for working with different logical data structures, also nested data structures.

4. Simple asynchronous communication mechanisms and patterns between independent modules of a programs.

5. Rich extensible aggregates of data with namespaced keys as the object model.

6. An ethos of extreme backward compatibility (and tools for achieving and maintaining it) through accretion of novel values/parameters/features, enabling reloadable workflows, which makes it easy not only to redefine functions in code while program is running, but also updating individual programs while interconnected system is running, without breaking things.

The downside is that tools that reduce complexity are not very easy to use for people with less experience, so they cannot be too popular. People tend to overcomplicate, and to be quick to dismiss well-thought-out solutions.


It’s about time we shaft the gatekeepers of talent, and redistribute and socialize the means of art production.

The "Gatekeepers of talent" are generally people who worked very hard to hone a craft. Nothing is stopping you from working very hard to create something.

Yep, that’s the irony, that’s why I’m being tongue in cheek about Marxists’ “seize the means of production”, because people who produce capital also work very hard

In these situations, the non-technical people don’t understand the costs, the technical people don’t understand the benefits. The communication from both sides is needed to find a good cost-to-benefit tradeoff

What you say: I don’t want to take responsibility.

What management hears: I want someone else to take responsibility for me.


> "count" is an incomplete type, the same as "array" is an incomplete type. "count of fruit" would be a complete type, compare to "Array of int64".

Javascript has arrays of unspecified types, and count of items of such arrays. I don’t think your analogy holds


Perhaps the SI system needs generics :)

Ever seen entire countries of people locked up in their homes within a week — for months?


So Instagram and TikTok?


The party needs a modern alternative to FauxNews to manipulate the youth. They've already sunk their claws into TikTok.


Please kill me first


No, rewriting in any language is bad by itself. What Fil-C gives you is that you don’t need to rewrite old programs. You spend zero effort, and immediately your battle-tested program is memory safe and free of any potential future vulnerabilities. With Rust you spend man-years on a rewrite, and as a result you have a new untested program full of subtle bugs, which you need to spend another 10 years of real-world use to uncover.


Joke's on you, I use Java as Clojure with a clacky split keyboard, feels great.


Oh yeah? Well my clacky split keyboard has red lights in it. That means I type faster because science says red light improves bloodflow.


Consider applying for YC's Summer 2026 batch! Applications are open till May 4

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

Search: