I've seen a lot of rulers that actually don't have a mark at 0 and instead go right to the edge as 0. Typically they are worn down, being made of wood, so the accuracy of the first inch is dubious. To ensure the distance is correct, sliding the ruler down one unit is a good idea. So, my ruler starts at 0 but my measurements start at 1.
It really depends on what you're measuring. Good luck measuring the distance from a corner if you can't get 0 to touch the end.
Tape measures are almost always designed with this in mind, so you can hook the end over an edge, or butt it up against something and the measurement will be accurate both ways, since the metal end can slide in or out by just the right amount.
Rulers measure cardinal quantities and not ordinal ones. There is no cardinal numbering scheme that starts at 1, all of them "start" at 0. For ordinal numbering schemes, the symbols are arbitrary anyway and you can start with whatever you want. It's equally valid to start with 1, 0, -1, A, or "aardvark". The only benefit to picking 1 as the start is to make it easier to count with your fingers while picking 0 lets you easily convert an ordinal quantity to a cardinal one.
When playing games with the kids, we start at 0 being the position you are currently in, then count from there.
e.g. in snakes and ladders, if you are on spot 30 and roll a 5, tap spot 30 and say "zero", then spot 31 is "one" etc.. till you are at spot 35 saying "five".
Teaches the kids about zero and avoids miss counts from the younger ones counting their current position as "one"
i wish the people making buildings around here knew that. some start at floor 3, others at 5. some start at 0. others at 2. every building has its own story. you need to understand the building before you can understand your position in it.
And then he texts back 'where are you?' And then she texts back 'the first table' and he replies 'umm I'm here too. But I don't see you' confused she asks him ' table 0p?' And then '01*?' He says 'no, 00.' Releaved she says 'lol I am at table 01' he chuckles 'I am at 00, I'll go find you'
Later they get married and have kids. But relationship collapses and it ruins both of them and they cannot find the heart to love anyone again. Their children grow up broken and struggle through life. Some get arrested end up in prison, all of them repeatedly fall into a series of toxic relationships for the rest of their lives.
If the walkway goes inside the building, then yes. And the walkway usually leads directly to the second floor, because the airplane door is 3 metres above the ground.
Inside the building it's the first floor, even if it's exactly at the sea level altitude. Outside the building it's the ground. Basement levels start at minus one, there is no zeroth floor.
they were never meant to be together, they would confuse the hell out of each other. Imagine they have two kids and she says pick kid[1] from the school, then what?
The problem is that they both are contextual and can mean any position in a list/array. The starting index or starting offset is generally zero, but could be one, depending on the language used.
Aren't those two the same thing? At least in C-style arrays, which might not be how they're handled under the hood, but is at least how most languages present it to the programmer.
There is no such thing as "zeroith". Does not matter which numbers you slap on the tables, the one with the lowest number will always be the first. The word "first" has nothing to do with indices, it's just an antonym for "last".
I kind of brought this up in another comment, that "first" and "1st" aren't really the same thing. Which is confusing when you extend that to fourth/4th five/5th. I don't generally see someone write "zeroith", but I'll see "0th".
There's no such thing as "zeroith" because it's called "zeroth — being numbered zero in a series"
This works for building storeys, this would work equally well for tables. The only reason this is not used often is because the series are rarely zero-based in anything that doesn't also want to equate index and offset.
You're right that first may be read as "opposite of last", that would add to the confusion, but that's just natural language not being precise enough.
Edit: spelling
Edit2: also, if you extend that logic, when you're presented with an ordinal number, you would need to first check all the options, sort them, and then apply the position you're asked, that's not really how people would expect ordinal number to be treated, not me, at the very least
This could be why Obiwan wound up a hermit? (Programmers of my generation at least talk about "Obiwan errors" because his name sounds like "off-by-one".)
I feel like the joke would've landed better if it said "first". I know it's pronounced the same way, but I'm gonna argue anyway that there's a subtle difference. I've heard 0th used in cs to describe what was at the 0-index, so in that context 1st would be"second", but "first" generally means "nothing before it". English is weird. I wonder if anyone knows whether the word "first" or "1st" came 1st (lol)?
Ordinal vs. cardinal. It's "first" not "onest", right? Even the ancient proto-Germanic speakers could tell there's a difference. (In fact, it's basically a contraction of "foremost", and has nothing to do with numbers; their weak numeracy was an advantage on this topic)
If we weren't implicitly choosing 1-indexing it would be 1nd for "second" (and still not "onend" or something). That breaks down once you get to third and fourth, though.
Yup. We should really zero-index century names and years AD/BC as well, but we don't. If we were still using Roman numerals it would be no big deal, but we rarely do, so there's a confusing clash. I'm not sure if it was this programming humour community or another where I had a big exchange on the topic before.
I suppose you could have some kind of positional system that's one-indexed, so 999AD = 1111999AD, and 2000 would be written 2111, but you'd have to completely redo the way arithmetic works, and that defeats the point a bit. And, the new 999 would not be our 999, because it's effectively base 9.
That's because the word "first" in first() uses one-based indexing. In true programmer fashion it would have been called zeroth() but that is wholly unintuitive to most humans.
I maintain that the element with the lowest index is called the "zeroth" element in zero-based indexing and "first" in one-based indexing. The element with index N is the Nth element.
No, there is simply no such thing as "zeroth", that's not how ordinal numbers work. If I have the following numbered list:
Foo
Bar
Baz
The first item is "Foo" which is indexed 5. It is not the fifth item, because the item indexed 5 comes first in the list, so the item indexed 5 is the first item. Ordinal numbers don't refer to index, they refer to order.
Okay, I will admit, you got me there. I did confuse indexing with numbering. From now on I will use the term "numbering" instead.
It is entirely how ordinal numbers work in zero-based numbering. There is no "right way" for ordinal numbers to work. You can create a valid ordinal numbering system starting from any integer, or just some other ordered list. You cannot assume one-based numbering is "correct" and use it as an argument against numbering beginning from any other number.
I encourage you read up what is meant by "zero based numbering" because you and everyone else who has replied to me has tried to use "but that's not how it works in one-based numbering" as an explanation for why I'm wrong. This is as nonsensical of an argument as trying to say i (the imaginary unit) is not a number because it's not on the number line. It's only not a number in the domain of the real numbers. Similarly, zero-based numbering is only nonsensical in the context of one-based indexing.
Zero-based numbering would number "foo" as the zeroth element, "bar" as the first element, and "baz" as the second element. "zeroth", "first", and "second" are labels representing ordinals. Your list has a length of 3 (which is a cardinal quantity unrelated to ordinals).
Although, I would like to point out, it is perfectly valid to construct an ordinal labelling system that assigns "fifth" to the element with the lowest index, "sixth" to the next, and so on. That system is mathematically coherent but it is just troublesome to when it comes time to convert ordinal numbers (such as the index of the last fence-post) to cardinal numbers (such as the length of fence to buy).
But this is now getting into the weeds of pure mathematics and most people here are engineers.
Foo is both the first and fifth item - Foo is the first item in that segment (or slice if you're a weird golang programmer) but it is also the fifth item in some sir-not-appears-in-this-film list that is responsible for the odd numbering. If I said "I just finished the fifth item on our todo list" you'd mark off Foo because that's clearly what I was referring to.
Places can have two labels (or more!) and, for bonus points, zeroth is a thing because we both know what that word means.
Most humans wouldd never write the word first followed by (). It absolutely should have been zeroth(), and would not cause any confusion amongst anyone who needed to write it.
It absolutely should not have been named zeroth() because the reasoning for that is purely pedantic and ignores WHY arrays are 0 indexed. It's not like the people in the early days of writing programming languages were saying "the zeroth item in the array" - they would refer to it using human language because they are humans, not machines. Arrays are 0 indexed because it's more efficient for address location. To get the location in memory of an array item, it's startingAddress + (objectSize * index). If they were 1 indexed, the machine would have to reverse the offset.
Function/Method names, on the other hand, should be written so as to make the most sense to the humans reading and writing the code, because the humans are the only ones that care what the name is. When you have an array or list, it's intuitive to think "I want the first thing in the array" or "I want the last thing in the array)," so it makes sense to use first and last. That also makes them intuitive counterparts (what would be the intuitive counterpart to "zeroth"?).
My argument is purely pedantic. Pedantry is the lifeblood of programmer "humour".
I'm not arguing that we should adopt zero-based numberingin real-life human applications. I am arguing that in zero-based numbering, the label "zeroth" refers to the same ordinal as "first" in one-based numbering. I am poking fun at the conversion between human one-based numbering and computers' zero-based numbering. That is why I am saying it should be called zeroth(); because human language should adapt to match the zero-based numbering their tools use. Whether I actually mean what I say—well, I leave that up to you.
It does not matter why indexes start from zero in computing. The memory offset argument is only salient if you are using it as an argument for why computers should use zero-based numbering. It is not an argument against the properties of zero-based numbering itself.
Function/Method names, on the other hand, should be written so as to make the most sense to the humans reading and writing the code
Of course—that’s why we have such classics as stristr(), strpbrk(), and stripos(). Pretty obvious what the differences are there.
But to your point, the ‘intuitive’ counterpart to ‘zeroth’ is the item with index zero. What we have is a mishmash of accurate and colloquial terms for the same thing.
Indexes start from zero because they're memory offsets, but array[0] is still the first element because it's an ordinal number, not an offset. It's literally counting each element of the array. It lines up with the cardinality—you wouldn't say ['A', 'B', 'C'] has two elements, despite array[2] being the last element.
Zero-based indexing redefines the meaning of the labels "first", "second", "third", and so on. It adds a new label, "zeroth", which has the same ordinal value as "first" in one-based indexing. The word "first" does not mean "the element with the lowest index" in zero-based indexing.
If you are using a zero-based numbering system, you would absolutely say that array[2] is the final element in the array, that element having the ordinal label "second", and yet the length of the array is 3 (cardinal). There is no fundamental connection between the ordinal labels "zeroth", "first", "second", and "third" and the cardinal numbers 0, 1, 2, and 3. The similarities are purely an artefact of human language, which is arbitrary anyway. You can make an equally mathematically valid ordinal numbering system that assigns "third" to the element with the smallest index, "fourth" to the next-smallest, and so on. That ordinal numbering system is mathematically coherent and valid, but you're just causing trouble for yourself when it comes time to convert those ordinals (such as array indexes) into cardinals (such as memory locations or lengths of fencing to buy).
You can make an argument for why one-based numbering is more convenient and easier to use, but you cannot use the notion that zero-based numbering doesn't make sense given the assumed context of one-based numbering as an argument for why zero-based numbering is invalid.
I encourage you read up what is meant by "zero based numbering" because you and everyone else who has replied to me has tried to use "but that's not how it works in one-based numbering" as an explanation for why I'm wrong. This is as nonsensical of an argument as trying to say i (the imaginary unit) is not a number because it's not on the number line. It's only not a number in the domain of the real numbers. Similarly, zero-based numbering is only nonsensical in the context of one-based indexing.
It does not matter why indexes start from zero. The memory offset argument is only salient if you are using it as an argument for why computers should use zero-based numbering.
Yeah, fair enough. To my mind I guess I don't think of array indexes as an example of actual zero based numbering, simply a quirk of how pointers work. I don't see why one starting from zero has anything to do with the other starting from zero. They're separate things in my head. Interestingly, the article you linked does mention this argument:
Referencing memory by an address and an offset is represented directly in computer hardware on virtually all computer architectures, so this design detail in C makes compilation easier, at the cost of some human factors. In this context using "zeroth" as an ordinal is not strictly correct, but a widespread habit in this profession.
That said, I suppose I still use normal one-based numbering because that's how I'm used to everything else working.
No, what I said is true if you use zero-based numbering. But when communicating with others in English, the label "first" refers to the element with the smallest index. In zero-based numbering, the label "zeroth" refers to the element with the lowest index. It's just not the default in English, but you can definitely use zero-based numbering in English if you're willing to edit the configuration files.
She is right, using 0 index for physical stuff is stupid.
Your rulers start at 1? That sounds annoying.
I've seen a lot of rulers that actually don't have a mark at 0 and instead go right to the edge as 0. Typically they are worn down, being made of wood, so the accuracy of the first inch is dubious. To ensure the distance is correct, sliding the ruler down one unit is a good idea. So, my ruler starts at 0 but my measurements start at 1.
That's why decent rulers have a 0 and a margin:
It really depends on what you're measuring. Good luck measuring the distance from a corner if you can't get 0 to touch the end.
Tape measures are almost always designed with this in mind, so you can hook the end over an edge, or butt it up against something and the measurement will be accurate both ways, since the metal end can slide in or out by just the right amount.
OMG! I genuinely thought all the tape measures I have handled were a little broken.
Just shave down the rulers margin!
Rulers measure cardinal quantities and not ordinal ones. There is no cardinal numbering scheme that starts at 1, all of them "start" at 0. For ordinal numbering schemes, the symbols are arbitrary anyway and you can start with whatever you want. It's equally valid to start with 1, 0, -1, A, or "aardvark". The only benefit to picking 1 as the start is to make it easier to count with your fingers while picking 0 lets you easily convert an ordinal quantity to a cardinal one.
Your job is to move apples from one bin to another. You pick up the first one and set it in the other bin, and say "zero."?
There's another way to think about it which I actually use. Look in the empty bin and say "zero", then move an apple and say "one".
When playing games with the kids, we start at 0 being the position you are currently in, then count from there.
e.g. in snakes and ladders, if you are on spot 30 and roll a 5, tap spot 30 and say "zero", then spot 31 is "one" etc.. till you are at spot 35 saying "five".
Teaches the kids about zero and avoids miss counts from the younger ones counting their current position as "one"
Touchè
é
ë
No, it's still touché.
Works for floors!
Not on this side of the pond. We typically don't have a ground floor, that's just the first floor.
i wish the people making buildings around here knew that. some start at floor 3, others at 5. some start at 0. others at 2. every building has its own story. you need to understand the building before you can understand your position in it.
if a building is built into a hillside in the uk and has exits on floors 2 and 5, which would be the ground floor?
it’s floor 5 from monday to wednesday, and floor 2 from thursday to sunday
My intuition would be floor 2, as it is the lowest floor to the ground that isn't underground
Blame the restaurant for having a table identified as zero
Why? It seems exactly as valid to me, and more valid if you like positional numberings of your physical stuff.
You just count the number of times you departed from an item in order, rather than the times you arrived.
Guy is wrong. Went to 0th table. She asked for 1st table.
And then he texts back 'where are you?' And then she texts back 'the first table' and he replies 'umm I'm here too. But I don't see you' confused she asks him ' table 0p?' And then '01*?' He says 'no, 00.' Releaved she says 'lol I am at table 01' he chuckles 'I am at 00, I'll go find you'
Later they get married and have kids. But relationship collapses and it ruins both of them and they cannot find the heart to love anyone again. Their children grow up broken and struggle through life. Some get arrested end up in prison, all of them repeatedly fall into a series of toxic relationships for the rest of their lives.
username checks out
Or.... or..... hear me out.... one of them turns around on their chair, and says "hey there".
They were at the corner
In the UK it's called a ground table.
So it was a spelling mistake? They're actually The Knights of The Ground Table!
They dance whenever they're gable?
do you also have minced tables there?
When you get off an airplane, do you say
"Its great to be back on solid first floor of the earth."
?
If the walkway goes inside the building, then yes. And the walkway usually leads directly to the second floor, because the airplane door is 3 metres above the ground.
OK but what about going onto the ground?
Like, in your garden, is that the first floor of the planet?
Inside the building it's the first floor, even if it's exactly at the sea level altitude. Outside the building it's the ground. Basement levels start at minus one, there is no zeroth floor.
Exactly, the idea that you go up a floor because there's a roof over your head is very silly.
She was a lua girl, he was every other programming language guy. It was not ment to happen.
She liked embeddded apps
And he liked desktop displays
What more can I say?
Hey, don't forget the Matlab people
And R!
And abap
And Julia!
Don't wanna state the obvious, but it looks like they still ended up staring at each other for the rest of the evening.
They have shown that they still love each other, so hope they can work with their one irreconcilable difference.
I love the idea that they're at two adjacent tables, each one staring at the other wondering why they hate them.
They hate each other because they are intolerant to one another's index choices
If you love me meet me at first floor
Americans 😢 British 🤷♂️
explanation
Exactly what this reminded me of. Thanks.
The Major: "Fighting retreat at first light"
Me alone in the trench the morning after next, woken by German voices: "Oh no!"
It’s for the best
That is why my restaurant will number tables by UUID.
A much better idea than when I tried to organize my restaurant with hashtables.
It was too much for the waitstaff, who had to reindex the floor plan every time they added or removed a plate.
On the plus side, delivering the right food was always O(1).
they were never meant to be together, they would confuse the hell out of each other. Imagine they have two kids and she says pick kid[1] from the school, then what?
Edit: oh wait you said two kids, nvm
Hol' up!
I think children go in dictionaries so you can look them to via name (key).
One kid's getting garbage collected either way
The real punch line is that in a cafe run by programmers, esoteric rules are in full force, but tables 0 and 1 are no where near each other.
Hey, if she thinks 1 is 1st index then you
doggeddodged a bullet and deserve better.Happy now all you English majors.
😳
🐕🐕🐕
🙅 zeroth, first, second, third
👉 Zerost, onest, twost, threest
I'm the twost two that's ever twoed.
Good luck standardizing English
Englist*
Northern England just got a new nickname.
maybe she's a lua developer
Wouldn't it be nice if documentation used the words index and offset consistently?
The problem is that they both are contextual and can mean any position in a list/array. The starting index or starting offset is generally zero, but could be one, depending on the language used.
i wonder why people haven’t made a language that starts indexing at 2 yet. maybe some day
Maybe this could be a feature in brainfuck or COBOL.
god i hope so
Dreamberd starts array indexing at -1 instead of 0 or 1.
https://github.com/TodePond/DreamBerd
what a beautiful language
Aren't those two the same thing? At least in C-style arrays, which might not be how they're handled under the hood, but is at least how most languages present it to the programmer.
Yes they are presented in the programmer wrong. The first thing in memory should have offset 0 and index 1
DROP TABLE 01;
Dangit Bobby!
I still mess this up for lists in Python...
This would work better as Nth floor of a building
1st table is not equal to table 01 because there no 0st table
0th (only first gets the -st ending; only second gets its end)
Isn't the guy at the zeroith table?
There is no such thing as "zeroith". Does not matter which numbers you slap on the tables, the one with the lowest number will always be the first. The word "first" has nothing to do with indices, it's just an antonym for "last".
I kind of brought this up in another comment, that "first" and "1st" aren't really the same thing. Which is confusing when you extend that to fourth/4th five/5th. I don't generally see someone write "zeroith", but I'll see "0th".
First and 1st are certainly different symbols for the same concept
The spelling for the index before the first is zeroth, no need to insert an extra vowel
And here I thought people write "1st" because they are lazy and want to press 3 keys instead of 5.
There's no such thing as "zeroith" because it's called "zeroth — being numbered zero in a series"
This works for building storeys, this would work equally well for tables. The only reason this is not used often is because the series are rarely zero-based in anything that doesn't also want to equate index and offset.
You're right that first may be read as "opposite of last", that would add to the confusion, but that's just natural language not being precise enough.
Edit: spelling
Edit2: also, if you extend that logic, when you're presented with an ordinal number, you would need to first check all the options, sort them, and then apply the position you're asked, that's not really how people would expect ordinal number to be treated, not me, at the very least
Americans also index their building floors from 1
A two storey American building has floors 1 and 2, where elsewhere they might be ground (zero) and 1.
Not only them, and I'm not here to blame 😅
Indeed, however the Americans stand out in the anglosphere
Canada sad.
They always forget about us.
Which standard does Canada use?
That's a problem when you get to the fourth.
Yes, and if he texted "Hey, I'm at the zeroith table" and the woman replied with the sibling comment then you know to run far and run fast.
This thread is a great example of why they don’t like to let (most) software developers talk to the customers.
IS THIS Love Advice From the Great Duke of Hell??
(it's a webcomic, I loved the story)
I love how they're looking at each other
God yes, you can clearly see from the background scene that while at different tables they can clearly see each other. All this bickering is madness
Easy solution: Switch to table UUIDs.
This could be why Obiwan wound up a hermit? (Programmers of my generation at least talk about "Obiwan errors" because his name sounds like "off-by-one".)
It clearly says 1
Even if the table is correct the instruction needs to be more precise. Is it table header or table body and in which table column?
Plot twist, neither cared about the table number
One went to the first table produced, the other to the first table placed
What more can I say
No, NO! She said the FIRST table. Not table ONE. Why are women like this???? /s
I work with juniper switches 0 is my 1
Fuck juniper fr though
Nonbinary
Why the fuck would you spell it "1st" if it's not 1?
Edit: Which is not pronounced "onest". I think people might be missing the point here; I'm actually a fan of zero indexing.
I feel like the joke would've landed better if it said "first". I know it's pronounced the same way, but I'm gonna argue anyway that there's a subtle difference. I've heard 0th used in cs to describe what was at the 0-index, so in that context 1st would be"second", but "first" generally means "nothing before it". English is weird. I wonder if anyone knows whether the word "first" or "1st" came 1st (lol)?
Ordinal vs. cardinal. It's "first" not "onest", right? Even the ancient proto-Germanic speakers could tell there's a difference. (In fact, it's basically a contraction of "foremost", and has nothing to do with numbers; their weak numeracy was an advantage on this topic)
If we weren't implicitly choosing 1-indexing it would be 1nd for "second" (and still not "onend" or something). That breaks down once you get to third and fourth, though.
Interestingly, we've got the same glitch in the Gregorian calendar, where the year 0 doesn't exist. So the 21st century started in 2001…
Yup. We should really zero-index century names and years AD/BC as well, but we don't. If we were still using Roman numerals it would be no big deal, but we rarely do, so there's a confusing clash. I'm not sure if it was this programming humour community or another where I had a big exchange on the topic before.
I suppose you could have some kind of positional system that's one-indexed, so 999AD = 1111999AD, and 2000 would be written 2111, but you'd have to completely redo the way arithmetic works, and that defeats the point a bit. And, the new 999 would not be our 999, because it's effectively base 9.
They said 1st as an abbreviation of first (it's a normal abbreviation 1st, 2nd, 3rd ... 7th abbreviate first, second, third ... seventh)
Sure, but you have to see how it's an own goal if you're showing up to table 0.
Bullshit.
Every programmer knows that
'A'in['A', 'B', 'C', 'D']would be the 0th item; the first item is'B'That would be wrong in every technical sense. You're saying that
.first()would skip the 0th item.First = leftmost.
That's because the word "first" in
first()uses one-based indexing. In true programmer fashion it would have been calledzeroth()but that is wholly unintuitive to most humans.I maintain that the element with the lowest index is called the "zeroth" element in zero-based indexing and "first" in one-based indexing. The element with index N is the Nth element.
No, there is simply no such thing as "zeroth", that's not how ordinal numbers work. If I have the following numbered list:
Foo
Bar
Baz
The first item is "Foo" which is indexed 5. It is not the fifth item, because the item indexed 5 comes first in the list, so the item indexed 5 is the first item. Ordinal numbers don't refer to index, they refer to order.
Okay, I will admit, you got me there. I did confuse indexing with numbering. From now on I will use the term "numbering" instead.
It is entirely how ordinal numbers work in zero-based numbering. There is no "right way" for ordinal numbers to work. You can create a valid ordinal numbering system starting from any integer, or just some other ordered list. You cannot assume one-based numbering is "correct" and use it as an argument against numbering beginning from any other number.
I encourage you read up what is meant by "zero based numbering" because you and everyone else who has replied to me has tried to use "but that's not how it works in one-based numbering" as an explanation for why I'm wrong. This is as nonsensical of an argument as trying to say i (the imaginary unit) is not a number because it's not on the number line. It's only not a number in the domain of the real numbers. Similarly, zero-based numbering is only nonsensical in the context of one-based indexing.
Zero-based numbering would number "foo" as the zeroth element, "bar" as the first element, and "baz" as the second element. "zeroth", "first", and "second" are labels representing ordinals. Your list has a length of 3 (which is a cardinal quantity unrelated to ordinals).
Although, I would like to point out, it is perfectly valid to construct an ordinal labelling system that assigns "fifth" to the element with the lowest index, "sixth" to the next, and so on. That system is mathematically coherent but it is just troublesome to when it comes time to convert ordinal numbers (such as the index of the last fence-post) to cardinal numbers (such as the length of fence to buy).
But this is now getting into the weeds of pure mathematics and most people here are engineers.
Foo is both the first and fifth item - Foo is the first item in that segment (or slice if you're a weird golang programmer) but it is also the fifth item in some sir-not-appears-in-this-film list that is responsible for the odd numbering. If I said "I just finished the fifth item on our todo list" you'd mark off Foo because that's clearly what I was referring to.
Places can have two labels (or more!) and, for bonus points, zeroth is a thing because we both know what that word means.
Most humans wouldd never write the word
firstfollowed by(). It absolutely should have beenzeroth(), and would not cause any confusion amongst anyone who needed to write it.It absolutely should not have been named zeroth() because the reasoning for that is purely pedantic and ignores WHY arrays are 0 indexed. It's not like the people in the early days of writing programming languages were saying "the zeroth item in the array" - they would refer to it using human language because they are humans, not machines. Arrays are 0 indexed because it's more efficient for address location. To get the location in memory of an array item, it's startingAddress + (objectSize * index). If they were 1 indexed, the machine would have to reverse the offset.
Function/Method names, on the other hand, should be written so as to make the most sense to the humans reading and writing the code, because the humans are the only ones that care what the name is. When you have an array or list, it's intuitive to think "I want the first thing in the array" or "I want the last thing in the array)," so it makes sense to use first and last. That also makes them intuitive counterparts (what would be the intuitive counterpart to "zeroth"?).
My argument is purely pedantic. Pedantry is the lifeblood of programmer "humour".
I'm not arguing that we should adopt zero-based numberingin real-life human applications. I am arguing that in zero-based numbering, the label "zeroth" refers to the same ordinal as "first" in one-based numbering. I am poking fun at the conversion between human one-based numbering and computers' zero-based numbering. That is why I am saying it should be called
zeroth(); because human language should adapt to match the zero-based numbering their tools use. Whether I actually mean what I say—well, I leave that up to you.It does not matter why indexes start from zero in computing. The memory offset argument is only salient if you are using it as an argument for why computers should use zero-based numbering. It is not an argument against the properties of zero-based numbering itself.
Of course—that’s why we have such classics as
stristr(),strpbrk(), andstripos(). Pretty obvious what the differences are there.But to your point, the ‘intuitive’ counterpart to ‘zeroth’ is the item with index zero. What we have is a mishmash of accurate and colloquial terms for the same thing.
explode('brain', 'ai')Indexes start from zero because they're memory offsets, but
array[0]is still the first element because it's an ordinal number, not an offset. It's literally counting each element of the array. It lines up with the cardinality—you wouldn't say['A', 'B', 'C']has two elements, despitearray[2]being the last element.Zero-based indexing redefines the meaning of the labels "first", "second", "third", and so on. It adds a new label, "zeroth", which has the same ordinal value as "first" in one-based indexing. The word "first" does not mean "the element with the lowest index" in zero-based indexing.
If you are using a zero-based numbering system, you would absolutely say that
array[2]is the final element in the array, that element having the ordinal label "second", and yet the length of the array is 3 (cardinal). There is no fundamental connection between the ordinal labels "zeroth", "first", "second", and "third" and the cardinal numbers 0, 1, 2, and 3. The similarities are purely an artefact of human language, which is arbitrary anyway. You can make an equally mathematically valid ordinal numbering system that assigns "third" to the element with the smallest index, "fourth" to the next-smallest, and so on. That ordinal numbering system is mathematically coherent and valid, but you're just causing trouble for yourself when it comes time to convert those ordinals (such as array indexes) into cardinals (such as memory locations or lengths of fencing to buy).You can make an argument for why one-based numbering is more convenient and easier to use, but you cannot use the notion that zero-based numbering doesn't make sense given the assumed context of one-based numbering as an argument for why zero-based numbering is invalid.
I encourage you read up what is meant by "zero based numbering" because you and everyone else who has replied to me has tried to use "but that's not how it works in one-based numbering" as an explanation for why I'm wrong. This is as nonsensical of an argument as trying to say i (the imaginary unit) is not a number because it's not on the number line. It's only not a number in the domain of the real numbers. Similarly, zero-based numbering is only nonsensical in the context of one-based indexing.
It does not matter why indexes start from zero. The memory offset argument is only salient if you are using it as an argument for why computers should use zero-based numbering.
Yeah, fair enough. To my mind I guess I don't think of array indexes as an example of actual zero based numbering, simply a quirk of how pointers work. I don't see why one starting from zero has anything to do with the other starting from zero. They're separate things in my head. Interestingly, the article you linked does mention this argument:
That said, I suppose I still use normal one-based numbering because that's how I'm used to everything else working.
I've been a software engineer for almost 20 years now. 'A', at index 0*, is the first thing in the array.
* well, unless you're using some language that actually is not zero-indexed. I think LUA is one?
That's because you use English, a language where ordinals traditionally begin at one.
So, based on
You're saying I can't be a programmer because I speak English?
Calling index zero the first is correct, but risks misunderstandings such as in the op comic
That is why many call index zero the zeroth index
No, what I said is true if you use zero-based numbering. But when communicating with others in English, the label "first" refers to the element with the smallest index. In zero-based numbering, the label "zeroth" refers to the element with the lowest index. It's just not the default in English, but you can definitely use zero-based numbering in English if you're willing to edit the configuration files.
1st would be 'B', first is 'A'
If you want to be both wrong and confusing
If you want to use correct English and be clear don't use ordinals: Say "index 0, index 1" etc
Save ordinals for contexts without indices: the first time through this loop, the last record"