Roman numerals by and large were not used for calculating, but for recording calculations. Those calculations were done (as the very word “calculate” suggests) using pebbles or other tokens, on some kind of counting board.
The point of Roman numerals is to be as direct as possible a representation of the state of the counting board. They are a serialization format.
Think of it as the JSON (or s-expressions if you like) of the ancient world. You don’t run your algorithm by writing and rewriting JSON literals over and over with pen and paper. They are just a record; your computation is done using a different automatic tool.
When someone writes down the state of a graph structure as a big nested JSON literal, you don’t laugh at them for having a uselessly unwieldy written expression.
> C has destroyed our ability to advance the state of the art in automatic optimization, automatic parallelization, automatic mapping of a high-level language to the machine.
"Progress" in CS remains fad-driven pop culture churn.
GC (and "memory safety" more generally) was not invented to solve the problems of C after C somehow revealed them solving the problems of e.g. Fortran. C variously sidestepped and ignored the work on program analysis including GC and memory safety for various commercial, aesthetic, and incidental reasons. Similar things are the case for C++ (vs. e.g. Object Pascal / Simula), Objective-C and Swift (vs. Smalltalk and Self), JavaScript and PHP (vs. nearly everything).
Lisp from 1959 stacks up incredibly well against Python today. Fortran still autovectorizes better than most modern languages. Pascal remains better to teach structured programming, we just don't teach that much anymore (and you can tell just by grabbing a half dozen loops at random and trying to figure out how well their conditions capture their invariants). Languages don't get better over time. They do get marketing budgets unimaginable before the 90s ("thanks" largely to Sun and Java for kicking this off), and for the past 20 years or so weird personal identity arguments on top of that (probably somehow Perl's fault).
Python is better.
You also don't have to write out type signatures 99.9% of the time after declaring a type, the compiler can infer them. People in the Haskell community tend to write out signatures for functions because it makes it easier to understand, but it's pretty rare to see a type signature in the body of a function.
That's not to say thinking in Haskell is always as natural or more natural than Python, but I'd argue that immutability and laziness more than types can require a lot more mental effort that can feel like fitting square pegs into round holes for certain problems. When it comes to types (at least Haskell vs. Python), I'd say it's much more a matter of personal taste.
Arabic numbers are like this (no child immediately ‘groks’ Arabic numbers), and Haskell notation is making the same case. Haskell abbreviates abstract structures so that they become fluid.
If focusing on notation is a problem, then we should all have grown up to use our fingers for counting, not Arabic numerals.
First of all programming without thinking about it (i.e. instinctively) is arguably not even possible. But let's be generous and assume that it is somehow.
Are you seriously trying to argue that it's possible to program in a complex programming language which not only requires types, but almost requires encoding complex relationships in them without involving the "higher faculties of the brain"? This is such an extraordinary claim that it requires evidence to even consider it.
Other languages almost always require more thinking and design upfront, even when doing exploratory programming.
I do not think that this is true for python any more than it is true for haskell for example.
def square(x):
return x * x
square x = x * xToo much inertia is invested in them now but I wonder if a yet easier representation exists. For example, I know that there was a brief push to use quaternions in physics.
I find it insanely difficult - but as you note, a lifetime of arabic numerals, and a lack of skill in appropriate tools (eg. an abacus) will skew that comparison.
> ... but it’s not much easier until you’ve memorized all 50 unique sums of one-digit numbers.
This doesn't feel right.
I don't think I have memorised the sum of all pairs of 1-digit numbers - but contemplating this now, it's impossible for me to be sure. I'm not sure where multiplication kicks in for breaking down larger numbers into quotient and divider for me, let alone 'most people'.
Given the maximum value (sum) of two x 1-digit numbers is 18, a naive assumption is the permutations don't really number 50 (I get 45) - and given that roman numerals didn't have a zero, a fairer comparison would be [1-9][1-9] (36 unique combinations)
Either way, in any counting system there's presumably a similar 'memorisation' gate you have to pass for the fundamental set. With roman numerals there was historically 7 I think - I, V, X, L, C, D, M - and summing those wouldn't be anywhere near as straightforward as summing sets of single-digits, so I don't think the comparison of this requirement is as skewed against arabic numerals as you suggest.
I also use the term “memorize” pretty loosely—I remember that memorizing times tables was a thing but not so much for plus—but addition is simple enough that most people can kind of intuit what 7+4 heuristically if they’re sat down and forced to do arithmetic as small children for long enough. (Also I’ve never had the patience for memorization; I just rely on my brain to cache things that I use frequently and it ended up working for times tables. Also other things.)
But I do want to acknowledge that Arabic numerals make multiplication nearly as easy as addition, which is a staggering achievement over Roman numerals.
Though I will say, on the other hand, that the Romans weren’t that stupid and neither were their medieval successors prior to the adoption of Arabic numerals. They could add things up and we’ve discussed in a parallel thread how that algorithm works. The Roman numeral system isn’t as optimized informationally—let’s not underestimate the sheer awesomeness of seamlessly expressing numbers as large as 108730026190037365462849562635965—but that would be useless to most cultures that used Roman numerals.
I would even question one more thing. To someone who doesn’t know a numeral system to begin with, do Arabic numerals actually make addition harder? I mean, very small children (and programming languages like JavaScript if you accidentally express one number as a string) sometimes make the mistake of thinking 11+8=118, but in Roman numerals that’s just like saying XI + VIII = XIVIII, which is also wrong, but not as wrong as 118. A Roman child could easily be taught no, that’s XVIIII since V’s go before I’s, and then maybe reduce to XVIV. A child today is like, “wait wtf are places?” Roman numeral users never have to learn the concepts of places, carry, or borrow, which honestly sounds like a good trade off for a civilization that doesn’t have to do multiplication and division that easily.
OTOH do we memorise any of the x+1 combinations? I hope we don't, but perhaps we do. I genuinely can't say at this point. I was trying to work out how I processed sums such as 8+7 earlier, and concluded that so far I can tell, I work out the difference of one of those numbers from 10, subtract it from the other, then it's a very simple addition - ie that becomes 10+5. But I'm now unsure if that's what I do as a general rule, and am even less sure what other people may do.
Times table I vaguely recall learning by rote in formative school, but that's an awfully long time ago, and trying to self-analyse my mechanisms for multiplications is highly challenging. It feels like I try to move those back to multiples of 10 or 100, again, too.
I recall reading aeons ago that the only intuitive interface is the nipple - beyond that, everything is learned. So what makes for an intuitive or sensible mathematical representation of things is probably so arbitrary as to be pointless arguing about. It feels that the kinds of things we do, day to day, with numbers, that base-10 arabic number system is optimum, but that may simply be the lack of exposure to a better system.
Your method for summing 8+7 is what I think I do for things like 7+4 (since I can visualize 7 as “three less than 10” and 4 as “one more than three” all in the same thought to reach 11), but for 7+8 my brain noticeably spits out 15 immediately and only a moment later does it actually do the processing you mention.
If I can tell it sums to more than 10, I break it up mentally into [larger number] + [smaller number] = [larger number] + ([smaller number] - remainder) + remainder, where [larger number] + ([smaller number] - remainder) = 10
You could break it down further by just memorizing what each digit less than 10 is when you add 1. Then you can do addition like 5 + 4 = 1 + 1 + 1 + ... = 2 + 1 + ... = 8 + 1 = 9. Then you'd only have to memorize 9 things (10 if you include 0). I guess this assumes that you know the order numbers go in though, whereas memorizing all of the combinations doesn't require that.
And yeah, you can get by with less memorization and more counting, but eh...either you’re taught not to do that or you do enough arithmetic that your brain just caches the whole table eventually anyway.
MCMLXVII + LXV
M CM L X V I I + L X V
M CM L X V I I L X V
M CM L L X X V V I I
V+V=X, L+L=C, C+CM=M so MMXXXII. Convert everything to decimal if you wanna check my work.
Note that converting CM to DCCCC is actually pretty unnecessary since you can just combine CM and C to make M instead of having to count up lots of C’s. A computer algorithm would be simpler by reducing CM to DCCC but adjusting for human fallibility, allowing for CM + C = M makes things a little easier.
Also note that this method scales to any number of sums, not just adding two numbers together.
Addition in Roman numerals is dead simple: you do it by just bunching symbols together. The only difficulty is subtractive notation, which wasn’t really used in Ancient Rome.
MCMLXVII + LXV
= MCCCCCCCCCLXVII + LXV (canonicalize)
= MCCCCCCCCCLXVIILXV (concatenate)
= MCCCCCCCCCLLXXVVII (sort)
= MCCCCCCCCCLLXXXII (combine, VV => X)
= MCCCCCCCCCCXXXII (... keep combining, LL => C)
= MMXXXII (... C{10} => M, nothing left to combine)
= MMXXXII (optionally, look for ways to re-write with the subtraction rule)- seeing L + L = C and converting CM to M ( basically striking L L and C )
- then V + V = X, ( striking Vs and add an X)
Then write whats left:
MMXXXII
Then try to re-write.
Great quote. I wonder if this process will continue with adoption of duodecimal numbers.
By relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more advanced problems, and, in effect, increases the mental power of the race. Before the introduction of the Arabic notation, multiplication was difficult, and the division even of integers called into play the highest mathematical faculties. Probably nothing in the modern world would have more astonished a Greek mathematician than to learn that ... a large proportion of the population of Western Europe could perform the operation of division for the largest numbers. This fact would have seemed to him a sheer impossibility ... Our modern power of easy reckoning with decimal fractions is the almost miraculous result of the gradual discovery of a perfect notation. [...] By the aid of symbolism, we can make transitions in reasoning almost mechanically, by the eye, which otherwise would call into play the higher faculties of the brain. [...] It is a profoundly erroneous truism, repeated by all copy-books and by eminent people when they are making speeches, that we should cultivate the habit of thinking of what we are doing. The precise opposite is the case. Civilisation advances by extending the number of important operations which we can perform without thinking about them. Operations of thought are like cavalry charges in a battle—they are strictly limited in number, they require fresh horses, and must only be made at decisive moments.
John Allen Paulos discusses the power of notation in his book Beyond Numeracy:
A German merchant of the fifteenth century asked an eminent professor where he should send his son for a good business education. The professor responded that German universities would be sufficient to teach the boy addition and subtraction but he would have to go to Italy to learn multiplication and division. Before you smile indulgently, try multiplying or even just adding the Roman numerals CCLXIV, MDCCCIX, DCL, ANDMLXXXI without first translating them.
Numbers may be eternal and invariant, but numerals, the symbols used to represent numbers, are not, and the above anecdote illustrates how easy it is to take for granted the Hindu-Arabic numerals we use today. The history of numeration systems is a long one extending from prehistoric times to the adoption in the Renaissance of our present system. The heroes of the story are the nameless scribes, accountants, priests, and astronomers who discovered the principles of representing numbers systematically.