Live data from Hacker News

Let's stop counting centuries

dynomight.net

241–250 of 449 posts

Re: Let's stop counting centuries

#241
post #146
post #123

Earlier quoted context omitted.

Just to make sure I understood this, that would be used as "17th settecento" to mean 1700s right? (This Xth century business always bothered and genuinely confused me to no end and everyone always dismissed my objections that it's a confusing thing to say. I'm a bit surprised, but also relieved, to see this thread exists. Yes, please, kill all off-by-one century business in favor of 1700s and 17th settecento or anyth…

Think of it as the 700s, which is a weird way to refer to the 1700s, unless you are taking a cue from the common usage. That’s just how the periods are referenced by Italian art historians.

> That’s just how the periods are referenced by Italian art historians.

And Italian people in general.

Re: Let's stop counting centuries

#242

Earlier quoted context omitted.

It's not counter-intuitive at all, it only seems that way because people are now used to languages with zero-based indexing. That's almost entirely because of the C language, which used pointer offset arithmetic with its arrays. Outside of that machine context, where an array is a contiguous block of RAM that can be indexed with memory pointers, there's no particular reason to do offset indexing. 1-based works just f…

> 1-based works just fine It really doesn't. You can make it work obviously but you end up with much less elegant code, with +1 and -1 all over the place. E.g. for accessing a row of a matrix you get [width (i-1)+1, width i+1) instead of the far saner [width i, (width+1) i) Generic code also becomes much more awkward.

Both are less elegant in different scenarios. In many business scenarios with zero-based indexes, you need i+1 everywhere because no-one talks about the e.g. the zeroth year of a company's operation.

Neither is a true one-size-fits-all solution. They're different kinds of indexes that serve different purposes. The choice of zero-based everywhere is an engineering tradeoff, nothing more.

Re: Let's stop counting centuries

#243
The article does not really resolve the ambiguity with 2000s which usually means 2000-2009, not 2000-2099.

That said, in Finnish language people never count centuries. It's always "2000-luku" and "1900-luku", not 21th and 20th.

Re: Let's stop counting centuries

#245

> The issue, of course, is that “counted centuries” are off by one from how we normally interact with dates—the 13th century starts in AD 1201. There’s a simple solution. Avoid saying “the 18th century”, and say “the 1700s” instead. Besides being easier to understand, it’s also slightly shorter. The kind of person who cares and reads about "the Xth century" can also trivially understand the date range involved. The k…

My high school history teacher taught me a trick. Just subtract 1 from the century to get the correct year. I never remember if it's subtract or add though, so I'm trying both with 21th century and see if I'm right first.

Re: Let's stop counting centuries

#246
post #234

Earlier quoted context omitted.

You can change the world if you make it easier to meet a need enough people have. Persuading everyone they're holding it wrong is not that.

"You can change the world if you make it easier to meet a need enough people have" True and should not be forgotten in this debate. But clear communication is a need many people have.

[deleted]

Re: Let's stop counting centuries

#247

Earlier quoted context omitted.

> We do the same with people's ages. No, we don't. When we refer to 'the first year of life', we mean the time from birth until you turn 1. Similarly, you'd say something like 'you're a child in the first decade of your life and slowly start to mature into a young adult by the end of the second decade', referring to 0-9 and 10-19, respectively.

On your sixth birthday we put a big 5 on your cake and call you a 5 year old all year. Can't say I've ever had to refer to someone's first year or first decade of their life, but sure I'd do that if it came up. Meanwhile, 0-indexed age comes up all the time.

The number we put on the cake represents the number of "years old" (i.e. the number of birthday anniversaries) not the number of birth days someone had (obviously). Zero year-olds are 0, one year-olds are 1, ...

Re: Let's stop counting centuries

#248

Earlier quoted context omitted.

I feel like the Romans had an excuse for that mistake. Not sure about Lua.

I don't think it is a mistake for Lua. The convention to zero-index arrays is not sacrosanct, it's just the way older languages did it (due to implementation details) and thus how people continue to do it. But it's very counter-intuitive, and I think it's fair game for new languages to challenge assumptions that we hold because we're used to past languages.

Zero-based arrays are counter-intuitive for a while, but if you deal with a lot of data, you typically realize that it's a small price to pay to make manipulation much easier in many contexts. For instance, if you have a ring buffer of size N and an unwrapped position P, the wrapped position is:

Zero-based: P % N

One-based: ((P - 1) % N) + 1

It might seem trivial, but each +/-1 is an opportunity for confusion and a bug nest. With zero-based arrays, it's often the case that the only required +/-1's are when producing and consuming human-readable one-based text.

The next stop on the zero-based epiphany train is the realization that a convenient way to store a range is a { first, first_past } tuple. The size of the range is (first_past - first). The whole-array range is { 0, size }, while a simple empty range is { 0, 0 } (zero is often the default initialization, simplifying things further.)

Both elements are indices, so they can be similarly manipulated, compared and range-checked, making many 'if' clauses easier to think about and verify. If there is a bug, it often ends up being harmless because of the arithmetic properties of this scheme.

Once you start dealing with multiple ranges, the advantages are even more obvious. Two ranges are adjacent iff (first_a == past_b || first_b == past_a). The intersection of two ranges is { max(first_a, first_b), min(past_a, past_b) }, which is nonempty iff they overlap. An array of M adjacent ranges is stored as a uniform (M+1)-tuple.

This realization has become so second-nature for me that I'm probably overlooking four or five even better examples here.

Re: Let's stop counting centuries

#249
post #243

The article does not really resolve the ambiguity with 2000s which usually means 2000-2009, not 2000-2099. That said, in Finnish language people never count centuries. It's always "2000-luku" and "1900-luku", not 21th and 20th.

> This leaves ambiguous how to refer to decades like 1800-1809. For these you should ~~specify the wildcard digits as “the 180*s” manually~~ write out the range. Please do not write “the 181st decade”.

I think it wouldn't be wrong to say "the 1800s decade" or "the primus 2000s" or "the alpha 1900s"

Re: Let's stop counting centuries

#250
A bit disappointing, as I was expecting something far more disruptive like an alternative calendar that makes century as a notion a useless tool.

I wish we had some calendar with a departure point far less anthropocentric. So instead of all the genocides of Roman empire, each look at a calendar would be an occasion to connect to the vastness of the cosmos and the vacuity of all human endeavors in comparison to that.

Post reply on HN