Most people, especially non-tech technical people, could crash through the TCP article and come out the other side with at least a high level understanding of it.
Most people, even technical ones, could not even get through the first line of the rees article, heck the first statement of the article. And then if they try, they need to know about algebraic rings. And digging into rings becomes totally intractable. None of the words or symbols in any of the articles track to anything even many technical people can grab onto. And this pattern is all over the place in mathematics.
It's not about mastering the difficulty of a topic or it's relative depth, it's about how abstract and removed from anything tangible it is. Anything with math it is always seemingly impossible to get a foothold on the idea anywhere within 10 degrees of explanation. Hell you cannot even clearly understand the problem that is being solved, or anything within 10 degrees of that.
As mathematician, I actually agree. We could do a lot more to communicate ideas in a way non-experts can understand.
For instance, most people are familiar with polynomials. Take a polynomial in x (with integer coefficients) and substitute x for 5t everywhere. So for instance, 2x^3 - 8x + 3 becomes 250t^3 - 40t + 3.
The Rees algebra Z[5t] (here Z is the integers) is then just the set of all polynomials you can get this way.
If Wikipedia introduced it like this, I don't think most people would have a problem understanding.
The concept is not (at least not always) actually that complicated, like others are implying. It's our communication that is lacking.
As a hobby mathematician, I agree. I know quite a bit about rings and ideals, but I don't understand much from the article on Rees algebras. Wikipedia has a lot of articles on mathematics that are explained badly, I prefer to find information elsewhere, typically I ask an AI for a good introduction on a subject (and usually that links to PDFs with over 100 pages that keep me going for hours).
And Wikipedia is particularly bad for this. It is a good reference for things I already learned, but for learning, if I am not able to get to a professor, I find math/stack overflow to have many more examples and explanations, and sometimes for an overview YouTube lectures. And really for concrete things like polynomial rings over R, I often found starting up Mathematica and just playing around with some computation is sometimes useful. (Forget about p-adic things tho).
I sometimes think it would be good to rename some of the things that have historical names to mnemonics more descriptive than a proper name. But that would be difficult.
I'm sure you're right that there's poor terminology, and Wikipedia math is certainly daunting. But in general the many mathematical exposition PDFs scattered across the Internet are beautifully written by careful, intelligent people. I'm a software engineer who's spent many hours reading them and also trying to do graduate classes as an adult. It's unfortunately common on Hacker News to encounter people who think that "I'd be good at math if only they used code to explain it" or "I'd be good at math if it used better terminology/notation".
The truth is that math is hard: few other subjects have anything close to its crazy conceptual breadth and depth, with hardish concepts being built upon hardish concepts in many layers.
I've had quite some success during my CS BSc math classes with inventing/using verbose but clearer notation and rewriting things more explicitly, programming things up, playing with Mathematica etc.
For example, Fourier is more clear to me as: F{t -> sin(t)} = omega -> (...) instead of F(sin(t)) = (...). Or D{x -> x^2}(x) = 2x instead of (x^2)' = 2x
Abuse of notation is very common, like using f(x) both as the function and as the return value at some input x etc. For example, the chain rule is often notated in a way that hides a lot. Math uses so many single letter variables, uses huge formulas instead of factoring out parts and using multiple lines, math people don't seem to appreciate namespaces and dislike nested variable scoping etc.
It's not magic that makes everything super easy, but it helps.
I agree with this - real analysis and functional analysis with have the cognitive complexity of three months worth of the cognitive of software puzzles in each weekly problem set.
Definitely agreed. I have a bachelor's in math and took an abstract algebra course as part of it. I also took a couple computer science courses in college and work as a data engineer. My only real exposure to networking is from an AWS cert I did years ago.
I can tease apart the Rees Algebra article one bit of half remembered terminology at a time and come out of it feeling like I just barely understand what the topic even is.
I can read the TCP article and feel like I have a thorough overview of the topic and could explain it at a high level to someone else.
Yeah, as a scientist I can read most Science or Nature articles in most fields, and get a rough idea. Not every piece of jargon, but I can understand roughly what they did, read the graphs and figure out the result. A friend sent me his maths PhD and I did not understand a single sentence.
That's not because the nomenclature is bad, it's because the concepts in advanced mathematics are further from our familiarity zone. In other words because it's hard.
This is perhaps more a comment on Wikipedia's coverage of mathematics. They have some general guidelines in their manual of style, but it's really hard to write math articles in a way such that something like the Rees algebra without defining 1000 thinks beforehand.
To understand the definition of the Rees algebra, you would need to define, mostly in order: sets, groups, abelian groups, rings, ideals of rings, algebras over rings, direct sums of rings, adjoining things to rings, etc.
This is just to understand the definition; to understand its significance in algebraic geometry (which I have no idea of), there are a thousand more definitions.
The issue with trying to understand a concept in math is there is a massive directed acyclic graph of prerequisites leading to these concepts, and one needs to traverse this graph in the right order. Unfortunately, knowing the right order is almost tantamount to understanding the concept itself.
> Most people, especially non-tech technical people, could crash through the TCP article and come out the other side with at least a high level understanding of it.
I agree with you here, but what's special about tech is that many of us learned all these terms fully casually while using computers as children and teenagers, which would be much less common for a chemist. That makes programmers see a lot of things as computer literacy that most people have rather than specialized knowledge.
My argument is that all the vocabulary for computer science are things. Even if they are virtual, they are tangible. You can draw a picture and label a box "bytes".
Nothing in the ChatGPT conversation is tangible. It's all in the realm of concepts.
A ‘Byte’ is not a concrete thing and the fact you think it is speaks to the degree to which you have immersed yourself in a mental model which thinks of ‘information’ as if it is a real concrete thing, to the extent that you don’t even realize the levels of conceptual abstraction you needed to build in order to internalize what a ‘byte’ is.
Over a wire it sends pulses of electricity which you can see with an oscilloscope.
Heck there is a standard for tcp/ip over short wave if you want to hear the bytes being transmitted. More widespread, those of us familiar with dial up modems are also aware that network traffic can be carried as actual sound.
Or fiber optics where network traffic is flashes of light.
Or IR transmissions, use your phone camera and you can see data being sent over the air. Not tcp/up but physical blinking lights sending digital data.
All of these are, actually, a long way removed from the ‘stream of octets’ which TCP delivers between applications.
All the Wikipedia actually means by ‘stream of octets’ is ‘sequence of numbers between 0 and 255’. TCP is a protocol concerned with sending a message encoded as a sequence of such numbers from one computer to another, over a packet-based network (i.e. one where it can only send limited bursts of information at a time); and it helps make sure that the original number sequence is able to be reassembled, in the right order, and makes sure that all the pieces have arrived.
The fact that people have tried to explain ‘octet’ concretely by pointing to RAM chips or flashes of light in a fiber really points to the fact that a lot of computer people just mentally gloss over a lot of the things that are virtualized at lower levels in the stack.
Yes, those are physical manifestations of ‘bits’. But not necessarily the ones TCP is concerned with.
We often designed various protocols and other stuff in IT as per 'lets come up with some simple chat to validate things and go ahead', or principle of least complexity (apart from classics like IBM and Microsoft but they were done specifically to make vendor lock in as big as acceptable). Its also ie in telco protocols - designed around trivial Hello handshakes, I can explain protocols like that to a child and it would grok it. Not great for advanced security but thats another topic. Or SSL handshake which is way more modern.
Math just represents this reality on most abstract level, it doesn't care if complexity for some human brains is trivial or almost fractal-like.
Something like TCP is an engineering concept rather than a CS concept. It's not entirely surprising that it's easier to grok. There's also certainly no shortage of hard to understand stuff in eg. Physics
Such a small sentence and yet it means very little to me. I understand some constituent pieces, but I don't understand what Z is here other than a 'ring' and I don't really grasp how t^-1 converts this into a generalized family of algebra. It would take me a lot of effort to understand this and use it practically. I find that fascinating because it really is such a small statement that seems perfectly cromulent, but there's a lot packed in there that someone like me is totally missing.
I suppose there may be similar concepts in computer science, but nothing comes to mind that ever stumped me. To be frank, the field has been relatively accessible to me because it hasn't been too challenging. Not sure if that's a personal aptitude thing or it is genuinely simpler.
Z is the ring of integers, t is a formal variable allowing us to discuss polynomials whose coefficients are in some ring. That’s what R[t] means: the ring of polynomials of the formal variable t with coefficients in R. Adding in t^-1 lets us include inverted terms like 2t^-3.
An algebra over a ring (call it S so we don’t confuse it with R from the previous paragraph) is a like a vector space over S, with the added structure that you can multiply elements of the algebra together (vector spaces only let you add their elements together). So for example the collection of even integers 2Z is an algebra over the ring of all integers Z. The collection of all polynomials with integer coefficients, Z[t], is another algebra over Z.
This is a great example of how dense language gets in math. There are tons of concepts hiding in the unstated background. Many are quite simple to explain individually, but there are so many of them that an outsider won’t know where to start to tease them apart. There’s a good reason to do it this way though; it would take a very long time to say anything in math without ever increasing levels of information density.
Absolutely agree. All formal statements (like mathematical ones) are going to have some level of assumed background. And as the assumed background expands, the language naturally becomes more information dense.
As for your specific questions, I believe Wikipedia does a great job of answering two of them for a layperson:
For the others, I’ll say that a formal variable is just a symbol (literally, like the letter t). With such a symbol, we can construct polynomials like 2t^2 - t + 3. Also, there’s no need to only use integers as the allowed coefficients; you can use any ring you like instead.
An “algebra over the ring R” is what I was attempting to define in my comment above. The algebra is “over” R if we can multiply an element of the algebra by an element of R. The useful analogy here is scalar multiplication in a vector space: you can multiply a vector by 2 to double it or -1/2 to reflect and shorten it. More generally, it makes perfect sense to consider some more general version of vectors which can be scalar multiplied by elements of any ring R.
Fair enough! At a super high level, a ring is just a collection that has a similar structure to what you’re used to “numbers” having. That is, you can add, subtract, and multiply them. Not divide! If we restrict ourselves to just whole numbers then 2/3 is not allowed. We also require that something like 0 and 1 have to be there. “Like zero” means 0 + x = x for every x in your collection, and “like one” means 1x = x for every x. And lastly, we require that the distributive property holds.
Examples include the set of whole numbers (Z), the rationals aka fractions (Q), the reals (R), complex numbers (C). These are all infinite rings, but there are also finite rings such as the set of whole numbers modulo a fixed number n, denoted Z/nZ. For instance, Z/2Z has only two elements, namely 0 and 1, with rules like 1 + 1 = 0. There are also polynomial rings, like Z[t], whose elements are all polynomials with integer coefficients (e.g. 3t^3 - t - 2). You can add, subtract, and multiply such polynomials and the result is more polynomials, so this collection is indeed a ring.
> But... what is a ring? What is a formal variable? What is a vector space? What does "algebra over the ring" mean?
All these terms were taught to computer science (and of course math, physics, ...) students as part of getting their degree in computer science, because these concepts are important for many algorithms.
Having studied CS and maths to post-grad, I think you exaggerate. Although a CS course might use these tools, they didn't in my experience go into explaining or defining them. The only use of linear algebra I can remember was in analysis of recurrence relations for algorithms, and for some graph theory. And I had one CS course on multivariate generating functions (formal variables) but most CS students would have been terrified of that. Abstract algebra is also used in combinatorial or search algorithms, but they would never use terminology like "ring".
> Having studied CS and maths to post-grad, I think you exaggerate. Although a CS course might use these tools, they didn't in my experience go into explaining or defining them.
I studied computer science (and mathematics) in Germany. I am very certain that this was taught to computer science students, even though (compared to the lectures for math students) the lecturer did not get very deep into these topics.
> most CS students would have been terrified of that.
This is a feature, not a bug. :-)
Seriously: In Germany, the "math for ..." lectures often are intended to be "weed-out lectures" so that students who simply are not qualified for their major get to quit their degree course fast (either by realizing that the degree course is too hard for them, or by (typically) failing math exams so that they get exmatriculated), so that they don't waste many semesters on a degree course which they simply are not suited for.
Do you think weed-out courses are a good thing? If these courses are so important, they should be taught in a way that students can understand. If they made it to college, and can program, they're clearly smart and motivated.
> If they made it to college, and can program, they're clearly smart and motivated.
You clearly write from the perspective of the US-American university system.
In Germany, basically everybody can enroll into a computer science program at a university, assuming the person has a Abitur (Allgemeine Hochschulreife) certificate (these terms are difficult to translate into English) from the grammar school [1]. So, "have it made to college" is like "not having been a complete failure in school". [2]
So, making it to the university is no achievement in Germany, and also no sign of motivation either.
> If these courses are so important, they should be taught in a way that students can understand.
These courses are taught in a way that students can understand, but not in a way where you can afford to slack off.
It is basically a consensus in Germany that a university is clearly a wrong place for you if you are incapable of closing knowledge gaps on your own (for example by reading books from the library), and you don't have the self-motivation to sit over the lecture material for hours to finally understand it.
So yes, I would say that among the possible options, weed-out courses in mathematics are in my opinion likely the least bad one.
---
[1] In years where there was an insane demand for places at the university to study computer science such as during the dot-com bubble, there were some restrictions (numerus clausus), but for computer science, this was always the exception to the rule.
[2] There exist good reasons for puns like "Abitur: nichts gerafft und doch geschafft" (Abitur: Didn't get a thing, yet still passed) or "A-bier-tur" (a portmenteau of "Abitur" and "beer", which suggests that even pupils who are more into drinking than learning typically get their Abitur certificate).
I studied a lot of abstract algebra in college and grad school and I’m surprised that rings and algebras would come up in a CS degree. What algorithms topics used those concepts? Something about polynomials?
Algebra is useful because graphs are algebraic objects, and a lot of CS is about graphs, in particular search/planning. But no, I never saw rings mentioned except for generating functions, which are used for analysing recurrence relations.
For example in search algorithms where you want to search a space without visiting state nodes twice. Each state in the search space is produced by the sequence (a product of) of operators from the start state: elements of a monoid (or group if actions are invertible) which define the primitive steps. Trivial example being generating all permutations of a list. More interesting, enumerate all graphs with some property with pathwidth at most k, by adding one edge or vertex at a time. So now you want to know the structure of this group so you know which sequences of elements simplify and don't need to be tried, and you want to canonicalise each state to throw out duplicates.
And you can think in terms of orbits: if there are some symmetries then you might want to factor by the symmetry group and only visit one node in each orbit, grouping states into orbits with a single representative state.
See eg. Pochter, Zohar and Rosenschein, Exploiting Problem Symmetries in State-Based Planners.
Thanks for the reply, this is very illuminating. I never got to this depth in algorithms. I’m but a humble programmer with a math background, but no CS degree.
- The Samuelson–Berkowitz algorithm is best understood in terms of general rings
- The Faddeev–LeVerrier algorithm and determinant calculation using Gaussian elimination work on rings with specific properties (for the Faddeev–LeVerrier algorithm the restriction is on the characteristic of the ring, for Gaussian elimination the ring must be an integral domain (ideally a field)).
* Ring-learning with errors (for post-quantum cryptography and homomorphic cryptography). Here, a specific ring is the central object.
* Number-Theoretic Transform (NTT): Basically a generalization of the Fourier Transform to the ring Z_n. Important for arbitrary-precision integer arithmetic
* Chinese Remainder Theorem. Often only formulated for the ring Z, but it can be generalized to larger classes of rings. Used for example in Shamir’s scheme for secret sharing (cryptography)
* The theory of BCH and Reed-Solomon codes uses a specific ring
* The AKS Primality Test (a really deep result in computational number theory) uses the ring Z_n[X]/(x^r-1).
---
Algebras:
Very often, a ring is constructed from another ring. Examples:
* the polynomial ring R[X_1, ..., X_n]
* The ring of (square) matrices over a ring R
So, using algebras in algorithms often means: "we want to make use use of this additional structure that our (more sophisticated) ring has)". (Associative) R-algebras formalize this concept of "ring with additional structure".
To just give one algorithm for polynomials:
* Buchberger algorithm for computing a Gröbner basis
Other examples:
* Clifford algebras for a lot of geometric problems (special case: quaternions (a 4-dimensional \mathbb{R}-algebra) for rotations in \mathbb{R}^3).
* If you are willing to also consider semi-rings (in this case: tropical semi-rings): the Floyd-Warshall algorithm for finding shortest paths and the Viterbi algorithm for finding the most likely sequence of states in a Hidden-Markov Model (HMM) can very elegantly formulated using the matrix semiring over the tropical semiring.
> The tropical semiring has various applications (see tropical analysis), and forms the basis of tropical geometry. The name tropical is a reference to the Hungarian-born computer scientist Imre Simon, so named because he lived and worked in Brazil.[1]
I'm convinced half the reason people find CS terminology more accessible and Math terminology less so, is that CS terminology tends to be named after stuff, and Math terminology tends to be named after people, and ... sometimes whether the place they lived is a tropical place.
> I'm convinced half the reason people find CS terminology more accessible and Math terminology less so, is that CS terminology tends to be named after stuff, and Math terminology tends to be named after people, and ... sometimes whether the place they lived is a tropical place.
In my opinion: a lot of math terminology is much older than computer science terminology, so the origin of the names of many concepts in math is much more obscure for today's people than CS terminology currently is (and least if you are not into history of science/math).
On the other hand, in my observation a lot more terms in computer science are based on obscure (often pop-cultural) puns. I guess in 50-100 years these CS terminology might seem even more obscure for then-contemporary people than math terminology is today.
(At least some) error-correcting codes are based on polynomials over finite fields. I couldn't say much more, but it's at least intuitively plausible since e.g. an nth degree polynomial is defined by any n+1 points, so if you know say n+1+p ("p" for "parity") points, you can lose up to p and still recover the polynomial.
It's a class with an array of integers in it with .length() == t - 1 and the same methods as Matrix.
In lean4, even without mathlib4, TCP/IP is way more code than a Rees algebra.
Math uses dense notation that is gigaoverloaded, and the disambiguating context was historically the leisure and proximity to have someone explain what the lexemes even mean.
lean4 is proving to be very revealing as an uncorruptible referee on a lot of things, including the relative difficulty of computer science and complex analysis.
-- A Rees algebra over ℤ[t⁻¹] is this.
-- That's it. That's the whole thing.
structure ReesAlgebra where
coeffs : Array Int -- integers, indexed by grade
-- grade k means the coefficient sits at t^k
-- negative indices are the t⁻¹ part
-- The "algebra" part: you can add them
def ReesAlgebra.add (a b : ReesAlgebra) : ReesAlgebra :=
⟨a.coeffs.zipWith b.coeffs (· + ·)⟩
-- And multiply them (convolution, same as polynomial multiplication)
def ReesAlgebra.mul (a b : ReesAlgebra) : ReesAlgebra :=
sorry -- it's Array.foldl over index pairs (i,j) summing into slot (i+j)
-- exactly how you'd multiply polynomials in a job interview
-- That's the entire mathematical content of
-- "The Rees algebra is an algebra over Z[t^{-1}]"
--
-- Compare: a minimal TCP SYN handshake in Lean4 would be
-- ~200 lines before you even get to retransmission.
--
-- The notation is the gate, not the math.
That's false. Z[n] in rings does not mean "an array of integers of length n", it means the subring generated by Z union with {n}, where n is an element of some other set. For example:
Z[i], the Gaussian integers, is the subring (of C) generated by Z union {i} where i is the imaginary unit in C, the complex numbers. The Gaussian integers correspond to the integer grid-points of the complex plane, if you want to visualize them.
A formal polynomial over Z is an array of integers with addition and multiplication defined as in the spec above, derived from the ring operations and the normal rules of exponents of variables.
You are comparing TCP a relatively basic topic in the grand scheme of computing with Rees_algebra which is fairly specialized, we could take a simpler topic more foundational and clearer to understand and compare them.
I can understand that this feels like one is so much more complicated part of it is also how the articles were written, wikipedia is not known for quality maths explanations.
But beyond that this comparison to me feels unfair.
Let's take Euclidean algorithm or just modular arthimetic for example what a lot of computing even is based on I feel like that's a fairer comparison. No?
Perhaps that's too easy but I just find this specific comparison very unfair to both Math's intuitive-ness and Computing's complexity. Perhaps I am the one being delusional.
I think you are snagging on thinking this is an observation about difficulty, time-to-mastery, or mental firepower requirements. It's not.
It's a plain observation that math exists on mostly it's own path with little to zero overlap with our lived experiences. If mathematics was a vector, it would have similar magnitude to other vectors, but it's direction would be much more removed from the typical knowledge pack, forcing you to get really close to the origin before you can "hop" over to that math vector. Other "knowledge" vectors, by virtue of being more bunched up, are closer together much further up, if that poor analogy at all makes sense.
Mathematics has a lot of knowledge points that do connect to the "real world" very deeply, but perhaps the nature of their linkage to other mathematical pieces of knowledge is best left to the mathematicians. But we can still use the pearls of wisdom that come out of the process.
Very true, I feel like the sense that Computing is easy comes from the inherent closeness of our lives experiences to it. Everyone uses a Phone they see ram understand memory, can understand process and processing.
compare to
>https://en.wikipedia.org/wiki/Rees_algebra
Most people, especially non-tech technical people, could crash through the TCP article and come out the other side with at least a high level understanding of it.
Most people, even technical ones, could not even get through the first line of the rees article, heck the first statement of the article. And then if they try, they need to know about algebraic rings. And digging into rings becomes totally intractable. None of the words or symbols in any of the articles track to anything even many technical people can grab onto. And this pattern is all over the place in mathematics.
It's not about mastering the difficulty of a topic or it's relative depth, it's about how abstract and removed from anything tangible it is. Anything with math it is always seemingly impossible to get a foothold on the idea anywhere within 10 degrees of explanation. Hell you cannot even clearly understand the problem that is being solved, or anything within 10 degrees of that.