HN Hall of Fame Weekly email

Parse, Don’t Validate

lexi-lambda.github.io Essays & writing Essays & articles Software engineering Class of 2023-03 Hall of Fame
Screenshot of lexi-lambda.github.io captured 2026-07-20
Page preview · captured 2026-07-20

Resurfaced independently across 5 calendar years, with breakout response in 5 of them.

submissions
9
submitters
9
observed span
2019–2026
peak thread · 270 comments
642 pts
latest 20+ return · 2026-02-10
252 pts

Submission timeline

2007–2026

One slot for every year since HN launched. Height is that year's peak points; orange marks a 100+ point or 50+ comment breakout. Select a bar to open its strongest thread.

First comments on top threads

HN comment order

This is describing what I've known as "Typed Hungarian notation", and have seen a few times before, though I can't seem to find now. The original intent of Hungarian notation was to encode metadata into the variable name - for example, "validData = validate(rawData); showValidData(validData)". The idea was that the prefixes would make it just look wrong to the programmer if someone accidentally used mismatched names, such as "showValidData(rawData)", indicating a likely bug. This notation mutated into the far more…

Izkata·642-point thread·

I like how the author boils the idea down into a simple comparison between two alternative approaches to a simple task: getting the first element of a list. Two alternatives are presented: parseNonEmpty and validateNonEmpty. From the article: > The difference lies entirely in the return type: validateNonEmpty always returns (), the type that contains no information, but parseNonEmpty returns NonEmpty a, a refinement of the input type that preserves the knowledge gained in the type system. Both of these…

This principle is how pydantic[0] utterly revolutionized my python development experience. I went from constantly having to test functions in repls, writing tons of validation boilerplate, and still getting TypeErrors and NoneTypeErrors and AttributeErrors left and right to like...just writing code. And it working! Like one time I wrote a few hundred lines of python over the course of a day and then just ran it... and it worked. I just sat there shocked, waiting for the inevitable crash and…

kortex·389-point thread·

This is very good advice and a great article. It comes up on this site now and then because of it. For those who don't necessarily program in statically typed functional languages: The idea transcends paradigms. You'll find very similar notions in 80's/90's OO literature, for example in Design by Contract. I'm sure one can dig deeper and find papers, discussions and specifications that go further back. I think TypeScript is often written in such a way where you refine…

dgb23·321-point thread·

The first top-level comment from each of the four biggest threads, in HN’s own order. Excerpts are shortened; open a comment for full context.

Breakout years
5

100+ points or 50+ comments

Total points
2042

reference only — not used in Hall rules or ranking

Total comments
997

reference only — not used in Hall rules or ranking

Every submission

DateTitle as submittedByPointsComments
2019-11-07Parse, Don't Validatephonebucket314
2019-11-07Parse, Don’t ValidateFirst breakout · Best threadundreren642230
2021-02-11Parse, Don’t Validatetambourine_man30
2021-03-19Parse, Don’t Validateducaale40
2021-06-26Parse, Don't Validate (2019)melse389270
2023-01-21Parse, Don’t Validatelobo_tuerto20
2023-03-07Parse, Don't Validate (2019)Hall inductiondeclanhaigh398219
2024-07-22Parse, Don't Validate (2019)revskill321102
2026-02-10Parse, Don't Validate (2019)Latest 20+ point returnshirian252172