| ▲ | minraws 9 hours ago |
| This is also true for almost every other field, even within computer science. The only difference is that a lot of people operate at a very surface level without realizing just how much background knowledge they have accumulated. Think about the number of keywords your average SWE is expected to know. It is rather insane. Cache, stack, heap, process, thread, socket, file, tcp, http, tls, websocks, socks, soc2???, deadlock, stack, queue, race, atomic, event loop, coroutine, async, database, transaction, index, replication, sharding, consistency, serialization, DNS, load balancer, container, namespace, and so on. Every sub fields (web/kernel/backend/etc.) has a million/bazillion weird words used in a dozen different contexts and if you read a paragraph of even semi technical software text you will feel like an over stuffed turkey. Even cache could mean the CPU caches, the page cache, a browser cache, a CDN cache, a Redis cache, or imagine the flurry of words we have that have real world meaning. Session, handle, pool, buffer, stream, channel, event, task, worker, or queue. Generally there is some overlapping meaning but often there isn't. |
|
| ▲ | WarmWash 7 hours ago | parent | next [-] |
| >https://en.wikipedia.org/wiki/Transmission_Control_Protocol 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. |
| |
| ▲ | annzabelle 6 hours ago | parent | next [-] | | 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. | |
| ▲ | physidev 4 hours ago | parent | prev | next [-] | | 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. | |
| ▲ | jameshart 6 hours ago | parent | prev | next [-] | | > 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. Careful, I think you might be committing an https://xkcd.com/2501/ error. What even is a protocol? What is a host? What is a ‘stream of octets’? Wiki helpfully tells you octets are also known as ‘bytes’. | | |
| ▲ | lucassz 6 hours ago | parent | next [-] | | 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. | |
| ▲ | avisser 6 hours ago | parent | prev [-] | | 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. | | |
| ▲ | jameshart 5 hours ago | parent [-] | | 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. | | |
| ▲ | com2kid 3 hours ago | parent [-] | | A byte is quite real. On old machines you could open them up and literally point to where bytes were physically stored in memory. Now days of course the chips are small so you have to point to where the multiple gigabyte chips are at. But they are still quite physically. Heck a C pointer points to an actual physical location on your machine, if you ignore the MMU. | | |
|
|
| |
| ▲ | steve_adams_86 7 hours ago | parent | prev | next [-] | | "The Rees algebra is an algebra over Z[t^−1]" 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. | | |
| ▲ | agrounds 6 hours ago | parent | next [-] | | 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. | | |
| ▲ | ChrisClark 6 hours ago | parent | next [-] | | But... what is a ring? What is a formal variable? What is a vector space? What does "algebra over the ring" mean? His point is the terms are dense too | | |
| ▲ | agrounds 5 hours ago | parent | next [-] | | 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: https://en.wikipedia.org/wiki/Ring_(mathematics) https://en.wikipedia.org/wiki/Vector_space 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. | | |
| ▲ | ChrisClark 2 hours ago | parent [-] | | My questions were mostly to agree it's hard to understand, but they were true ignorance. I'm glad you answered them. It finally makes sense to me, and now I realize I didn't even understand "over" in that context. That Ring wiki page though, um, nope... :D | | |
| ▲ | agrounds an hour ago | parent [-] | | > That Ring wiki page though, um, nope... :D 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. |
|
| |
| ▲ | aleph_minus_one 5 hours ago | parent | prev [-] | | > 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. | | |
| ▲ | versteegen 2 hours ago | parent | next [-] | | 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". | |
| ▲ | agrounds 3 hours ago | parent | prev [-] | | 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? | | |
| ▲ | versteegen 2 hours ago | parent | next [-] | | 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. | | |
| ▲ | agrounds an hour ago | parent [-] | | 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. |
| |
| ▲ | aleph_minus_one 2 hours ago | parent | prev | next [-] | | Rings: * Determinant calculation: - 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. | |
| ▲ | ndriscoll 2 hours ago | parent | prev [-] | | (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. |
|
|
| |
| ▲ | 6 hours ago | parent | prev [-] | | [deleted] |
| |
| ▲ | reinitctxoffset 6 hours ago | parent | prev [-] | | 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.
| | |
| ▲ | chongli 6 hours ago | parent [-] | | 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. | | |
| ▲ | reinitctxoffset 5 hours ago | parent [-] | | Cher Monsieur Laurent, comment pourrions-nous espérer obtenir un soutien de la part de ℤ ⭢ ℤ? Les polynomials! Tout est grande! |
|
|
| |
| ▲ | minraws 7 hours ago | parent | prev [-] | | 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. | | |
| ▲ | WarmWash 7 hours ago | parent [-] | | 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. | | |
| ▲ | HPsquared 6 hours ago | parent | next [-] | | 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. | |
| ▲ | minraws 6 hours ago | parent | prev | next [-] | | 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. | |
| ▲ | mabster 5 hours ago | parent | prev | next [-] | | Engineering is very reliant on mathematics and as real world as it gets. | |
| ▲ | 9dev 6 hours ago | parent | prev [-] | | That is one clever metaphor. Thank you, I might steal it. |
|
|
|
|
| ▲ | umvi 7 hours ago | parent | prev | next [-] |
| No, the problem with mathematics is that it is basically its own language separate from your native tongue. You have to learn dozens of symbols and greek letters and such and memorize what their meaning is in the context of mathematics in order to "follow" a mathematical conversation. Mathematics would be much more approachable if it just used plain English like `sum(0, Infinity, my_func)` instead of a big Greek sigma with nested function nomenclature. But on the flip side, mathematics being its own language means that a mathematician from any country can read and understand mathematics from a different country without needing to translate words such as "sum" and "infinity" |
| |
| ▲ | chongli 6 hours ago | parent | next [-] | | Mathematics would be much more approachable if it just used plain English like `sum(0, Infinity, my_func)` instead of a big Greek sigma with nested function nomenclature First of all, no, mathematics would be far less approachable if it did that. Most of the Greek letters used in mathematics don't have a universal meaning, they're context-specific and defined by convention or just prior to use. Second of all, mathematics is optimized for hand calculation on paper, not long-term programming and code maintenance. Writing out long names over and over on a whiteboard gets tiring extremely quickly, so mathematicians prefer to stick to single-letter symbols. | | |
| ▲ | annzabelle 6 hours ago | parent [-] | | To second this, most (non-applied) mathematicians work first with paper and pencil or on a chalkboard, and the act of writing out the symbols is a part of thinking about them. Typing doesn't wire into the brain in the same way. Think of how you learned algebra in school. You wrote out much of what you were thinking, often in ways that would be hard to flexibly format on a computer, and the act of writing your thoughts solidified them in your memory. Mathematicians pretty much universally view typesetting as a distinct step from the thinking part of math, and something you do at the end once you have figured everything out. |
| |
| ▲ | mrpf1ster 7 hours ago | parent | prev | next [-] | | Your translation only makes intuitive sense to you because you are well versed in programming. I suspect if I showed a non-technical person with no background in either math or programming they would think both are nonsense until you explained it to them | | |
| ▲ | rstuart4133 5 hours ago | parent | next [-] | | > I suspect if I showed a non-technical person with no background in either math or programming they would think both are nonsense until you explained it to them I doubt it. Greek letters convey almost no information, whereas (one hopes) the function and variable names are chosen by a programmer to help the reader. The Greek letters used by mathematicians (and physicists) weren't used to convey information, they were used because typesetting, publishing and paper were expensive. They are optimised for brevity over readability. It was a perfectly reasonable trade-off at the time, but times have changed. As an aside, some programming languages (such as APL, and to a lesser extent Perl) did emulate the old Greek letter style. "Line noise" is a typical description of the result. No computer language aimed at software engineers and computer scientists does that now. | |
| ▲ | WarmWash 6 hours ago | parent | prev | next [-] | | The thing is that you basically cannot explain the math like you can the programming. Tables, algos, and variables are all things people can generally quickly grasp. The construction is abstract but the function is tangible. The math is working entirely on abstract objects, using abstract tools, governed by abstract rules. It's just all so desperately far away from anything even technical people have contact with. | |
| ▲ | umvi 7 hours ago | parent | prev [-] | | My example was contrived, I'm sure some smart people could come up with a SQL-esque language that is even more readable to non-technical folks than programming syntax. At a certain point though, your layman has to know the "atomic" (as in, you can't break them down further) mathematical concepts like "functions" and "infinity": `sum function(x) from x=0 to x=infinity` | | |
| ▲ | BlackFingolfin 6 hours ago | parent | next [-] | | I am a research mathematician. In my field (abstract algebra, computational group theory), a sum or some such notation is like the most trivial of trivial things in terms of notation. There are a few things like sums that could in theory be made to "look more like what a computer programmer would expect", but that'd be just a tiny corner of it. And if you think about how summation would look in Lisp or APL (which some smart people use to this day), I am not even convinced your argument for the "sum function" notation being superior holds in general. | |
| ▲ | xyzzyz 5 hours ago | parent | prev [-] | | I'm sure some smart people could come up with a SQL-esque language that is even more readable to non-technical folks than programming syntax. And somehow, none of the thousands of very smart mathematicians have done that, or if they had, it has not seen wide adoption. I recommend contemplating on this: if math could be made easier by changing notation, why hasn't this already happened? | | |
| ▲ | umvi 3 hours ago | parent [-] | | Momentum, mainly. Richard Feynman invented a more intuitive triangle-based syntax for sin/cos/tan/etc but eventually abandoned it and conformed with mathematical norms for the sake of ubiquity. |
|
|
| |
| ▲ | bmitc 6 hours ago | parent | prev [-] | | Capital sigma doesn't always mean sum and certainly lowercase sigma never means sum. If mathematics used plain language, the ability to meaningfully manipulate and understand would go way down. Proofs would become massively tedius. Of course, notation is hard. Any good mathematician should put a lot of work into it. |
|
|
| ▲ | Jtarii 8 hours ago | parent | prev | next [-] |
| None of what you listed is even 1% as intense as the mathematics in the link. Learning anything in maths requires weeks of hard effort, learning enough to be broadly comfortable in how an 8086 CPU works can be done in a weekend. |
| |
| ▲ | ghshephard 8 hours ago | parent | next [-] | | "tcp" can take roughly 3-4 weeks of heads-down dedicated study to have some reasonable familiarity with. Same is true with most of the other concepts. Being able to speak with expertise on that list of topics is 3-4 years of really focused study and work. I think what happens is that people often have passing familiarity with a word or topic and presume knowledge, and years (decades) later they realize they knew almost nothing. I will say that Mathematics is different (for me at least) because unlike the infrastructure computing concepts (IETF type, not IEEE)- which mostly require studying, lab work, and some coding to get your hands dirty - advanced math is just ... really hard. There are IQ issues at play. Obviously a lot of computing turns out to be mathematics - so there is clearly convergence/overlap as well... | | |
| ▲ | Jtarii 8 hours ago | parent | next [-] | | You could get a surface level understanding of TCP, or 99% of topic areas in computing, in less than 4 weeks of study. You could not get a surface level understanding of literally any of the maths in the link in less than 4 weeks of study. The vast majority of what computers do just isn't that complex. I'm not saying it isn't "complex" just that any reasonably smart person can understand how a computer works and still have other hobbies, basically no one can understand phd level mathematics without dedicating their entire lives to it. | | |
| ▲ | wwweston 6 hours ago | parent | next [-] | | Speaking as someone who has run courses designed to take late teens / early 20somethings with a variety of backgrounds and tried to teach them 1st semester programming concepts in two weeks, I think anyone who thinks tcp/ip an easy four week dunk for most doesn’t remember how much they’ve already learned and take for granted. Sure, if you’ve already learned enough groundwork, tcp/ip is accessible in weeks. The same is true of most of the algebraic concepts in play here. And both have rabbit holes you can also spend a much longer time going down (though here I am willing to give the edge to math which offers much greater opportunities for hypergeneralization and new vistas of abstraction along which not only specific rabbit holes but entire new generalizations of both rabbits and holes may be found). | |
| ▲ | minraws 7 hours ago | parent | prev [-] | | This is not true, 99% is very exaggerated claim, but yeah you can learn 50-60% of the field at a surface level in months rather than years. But you can have a surface level understanding of mathematical topics as well, ofc some topics might require deeper understanding, but that's true for both. Any claims of being able to learn 99% of computing in a just 4 weeks even at surface level, is greatly underestimating your own knowledge built over the years perhaps, or perhaps underestimating your own ignorance. | | |
| ▲ | alpinisme 7 hours ago | parent [-] | | The claim isn’t knowing 99% of the field but that 99% of topics are ones you could do a quick-and-dirty crash course and come out with some understanding. |
|
| |
| ▲ | minraws 8 hours ago | parent | prev [-] | | Definitely a lot of people have very surface level understanding of tcp and computer science concepts. I have had folks tell me cache is just cache in actual interviews. When I have asked them to explain the concept to me, but even beyond that I feel like we tend to think less of our own knowledge of topics once we have acquired it. Especially ones acquired over years, alongside other work. |
| |
| ▲ | jebarker 6 hours ago | parent | prev | next [-] | | I second this and would add that it's really easy to catastrophically forget things in math. I'm pretty sure that most CS knowledge I have I will retain at a level where I won't forget the general ideas and re-reading materials can quickly refresh the details. This is not true for advanced math. I did a pure math PhD and my own thesis is impenetrable to me 20 years later. It would take months, if not years, of focused effort for me to regain the understanding. | |
| ▲ | B-Con 7 hours ago | parent | prev | next [-] | | I think one of the key differences is that math is abstract whereas CS is relatively concrete. CS examples are often easy to picture and understand the motivation for. You can use tools to visualize or play around with them and test them. Math gets abstract so fast you have to spend a week of research to even understand the problem statement. The the motivations themselves can be completely unclear until you have a lot of context. I majored in math (B.S.) and upper level math is completely foreign to me. | | |
| ▲ | minraws 7 hours ago | parent [-] | | I think so is upper level CS, there are fields in CS that are foreign to me too, there is a lot of depth in CS, computing is a very deep field for instance ML research although may seem simple isn't quite so intuition based as people make it out to be. Similarly there are dozens of topics where sophisticated research happens where we don't interact with at all as regular software developers. Every slice has so much depth to it, in Maths it all seems like all of it is required at once but in computing it feels like so little is needed to get started which I honestly feel like is failure of our modern education systems. But yes Computers being so easily accessible and compilers, documentation and libraries have made computer science so easy to get started with. Imagine having to implement your own network layer to communicate with someone, you would have had to understand ip, tcp, network layer to an extent like http and etc. and then you finally would have been able to communicate. In maths that's our reality for a lot of the field, there aren't good libraries, interfaces to help skip the unnecessary details. Hopefully AI might solve it I don't know though. It's fun to hope for it. |
| |
| ▲ | siva7 7 hours ago | parent | prev | next [-] | | As a counterpoint, i've worked with enough math PhD's over my career who couldn't wrap their head intuitively around many concepts from software engineering, while others had no problems in doing so even from folks without any stem background. We often undererstimate how much field knowledge we aquire over the years and overestimate how easy it is for others to catch up. | |
| ▲ | minraws 8 hours ago | parent | prev [-] | | Again, you are underestimating how much effort it takes to understand how an 8086 CPU works. There are a lot of foundational concepts that you are simply assuming the person already understands. That may be a reasonable assumption for a CS undergraduate, but the average person does not understand binary arithmetic, registers, memory addressing, instruction execution, calling conventions, or even what a CPU is doing at a meaningful level to even start to understand 8086. Also, understanding an 8086 CPU is not even remotely comparable to the level of mathematics Terence Tao was discussing above. The 8086 is a relatively basic and concrete topic. You can build a workable mental model of it from a finite instruction set, a handful of registers, and a reasonably straightforward memory model. From my perspective folks here on HN and in CS often think they should somehow be able to understand advanced mathematics papers at a glance, merely because they are good at basics of programming or computer science (8086). That is not how it works. Most mathematics is not inherently much harder than computer science; both fields require you to accumulate a large amount of foundational knowledge before advanced material becomes comprehensible. There is an enormous amount of computer science that most programmers are completely unfamiliar with, especially within academic CS: programming-language theory, type theory, formal semantics, compiler theory, algorithmic research, complexity theory, distributed computing theory, verification, cryptography, computational geometry, numerical methods, and so on. Being proficient in one narrow area does not automatically give you the prerequisites for another. A web developer would not be expected to casually understand a research paper on type theory or approximation algorithms without first learning the relevant notation, terminology, and foundational results. Mathematics is no different. The feeling that mathematical writing is uniquely impenetrable mostly comes from encountering it without the years of accumulated context that mathematicians have silently built-up. I can show you a paper about an advanced algorithms or chip design, that is large made up of fundamental cs concepts and general physics and even you likely someone with pretty in-depth understanding of CS would find hard. There are orthogonal subjects, for instance my mathematician friends things I am insane reading so much about weird computing topics, and I find his research in some weird number theory thing completely mind-bending. Try and explain to a lay friend how registers & isa works in-depth with all the details not a hypothetical higher level model so that they can understand the nuance of looking at assembly, limit it to 8086 perhaps, it will take significantly longer than a weekend. Ofc Terence Tao and his level of intelligence is beyond me, I wouldn't compare but general advanced mathematics is not something folks here couldn't pick up if they actually tried to work on it, just give it a shot (though I would recommend don't start with advanced topics build up slowly I think most people can understand most maths papers even the bleeding edge ones within a few months of serious self-study, and won't even feel that it's after a few years, compare that to the time spent learning software and computing 6-8 hours a days for several years)... | | |
| ▲ | Jtarii 7 hours ago | parent [-] | | > There is an enormous amount of computer science that most programmers are completely unfamiliar with, especially within academic CS: programming-language theory, type theory, formal semantics, compiler theory, algorithmic research, complexity theory, distributed computing theory, verification, cryptography, computational geometry, numerical methods, and so on. Being proficient in one narrow area does not automatically give you the prerequisites for another. And the difficult part of all those areas of computing is the mathematics part. Which I think is what I am arguing, mathematics is a fundamentally different type of "difficult" to any other subject. | | |
| ▲ | minraws 6 hours ago | parent | next [-] | | PLT and such isn't math conceptually sure it's all logical maths of some kind but largely it's not maths in the traditinal sense of how we understand maths. Because otherwise if you think about it all of computing is Maths but with computers... I don't think people who read the Wireless Fidelity spec can understand any of it in a weekend or anything even to a rough extent. Similarly with websockets, quic etc. the most you can take away without much prior knowledge is what it does which maps into Maths as well. | |
| ▲ | jakeinspace 6 hours ago | parent | prev [-] | | Every quantifiable science has some amount of math, but it's by definition applied math. I think this was more of a debate between applied and more abstract math. |
|
|
|
|
| ▲ | scubbo 5 hours ago | parent | prev | next [-] |
| I was amused and irritated in equal measure when a senior manager at $LAST_JOB demanded that documents include "no jargon", then went on to use many terms like those you've listed here with no indication of awareness of the contradiction. Just like the famous observation that "anyone driving slower than me is an idiot, and anyone driving faster than me is a maniac" - "jargon" is just any term-of-art that you're not currently familiar with. Attempting to communicate like Up Goer Five is inefficient. The solution is not to ban jargon - it's to: * Cultivate a glossary for any terms that were introduced _within_ the domain/company, which are not in common usage outside * Normalize a culture that does not shame asking what something means |
| |
| ▲ | aleph_minus_one 5 hours ago | parent [-] | | > I was amused and irritated in equal measure when a senior manager at $LAST_JOB demanded that documents include "no jargon", then went on to use many terms like those you've listed here with no indication of awareness of the contradiction. "No jargon" is alwys in reference to some assumed knowledge model. For example, when I claim that my own math texts include "no jargon", this assumes the knowledge of a person who has studied, say, mathematics, physics or computer science. |
|
|
| ▲ | keeda 7 hours ago | parent | prev | next [-] |
| Computer science is not a great example for this. I could ELI5 most of the terms you listed (and I actually have done so for many of them!) This is because it's pretty easy to map these concepts to everyday physical objects. Once a child understands any of those objects in their lives, it's pretty easy to explain in those terms. Like, just the concept of "books" gets you very far. E.g. a file is a like a book, a folder is like a shelf to keep books, a stack is literally a stack of books, a heap is just a place you can pile books in willy-nilly, a database is like a library, a cache is books on your desk versus books in the library, replication is having multiple copies of a book so we can afford to lose some copies, indexing/sharding is like arranging books alphabetically, and so on. Others are trickier but not much: a process is an app that is running on your device, a socket / tcp / http / websocks is a way to exchange information between devices, a namespace is how the name "Tom" in Tom Sawyer is different from "Tom" in Tom & Jerry, DNS is a way to get an address from a name, etc. etc. You'll also notice that many of the terms you mentioned are already derived from well-known real-world concepts like pool, stream, channel, stack, queue, worker, transactions. You can mix those with other everyday concepts to make useful analogies. But I could not even begin making analogies for most topics in Mathematics. I guess this is because advanced topics in Mathematics are just too abstract to map to everyday things. |
|
| ▲ | hgoel 5 hours ago | parent | prev | next [-] |
| Exactly. Everyone should experience having to teach something they're so used to doing that they don't even consciously think about it anymore. It makes it very visible how much we rely on unconscious models of the systems we deal with and how difficult it can be to convey that model. It's why less experienced devs are sometimes mystified seeing a seasoned dev, given a vague description of a bug, guess the cause in code they didn't even write. |
|
| ▲ | auntienomen 6 hours ago | parent | prev | next [-] |
| Yeah. In math at least it's clear that you don't know what's going on. In other fields, it's very easy to think you understand without knowing how much you're missing. |
|
| ▲ | sfink 8 hours ago | parent | prev | next [-] |
| Just be thankful that we don't share the penchant for giving credit to discoverers. Imagine calling a cache a "Murphy/Steinman/Sokolov structure" (made-up names). I mean, we do for some things, especially algorithms (Boyer-Moore). Probably for the same reason the mathematicians do -- there aren't readily available real-world analogies. And I won't even mention the branded future, with its "Google HyperZipper String Search" and "OpenAI/Red Bull speedmaxx distributed consensus algorithm"... |
| |
| ▲ | minraws 7 hours ago | parent | next [-] | | Huffman Coding, Turing Machines, Knuth Devices, Bayesian networks, B-tree (named after Bayer), AVL Trees, so many data structures and algorithms, even relatively new ones like Timsort, Jaccard similarity, MapReduce (thankfully but I have seen people call it Dean-Ghemawatt MapReduce in literature). Well people even name stuff after themselves as well, Fil-C, raylib, etc (I like both Filip and Ray just pointing it out). Aside: If I butchered some spellings I am sorry. :3 | |
| ▲ | 8 hours ago | parent | prev [-] | | [deleted] |
|
|
| ▲ | hyperpape 7 hours ago | parent | prev | next [-] |
| I studied math through college before learning to program as an adult and becoming a software engineer, and I strongly disagree. I don't know how to say this in a way that won't sound insulting, but I don't mean it to be insulting. Programming, even systems engineering, is a surprisingly shallow field. I don't mean that it's easy--it's not, it can be incredibly difficult. Difficult and deep are just different concepts. Difficult refers to how challenged you are. Depth, at least as it appears in math, is closer to a structure where concepts build on each other so that if you don't understand one concept, you can't understand further ones. Programming can be difficult, and it can be intricate, but it is rarely deep in this fashion. Being deep in this way isn't the most important thing. If I go into an area of programming that I don't have a lot of experience in (graphics, or the linux desktop environment), I will not be particularly useful, and it will not be easy. But I'll not experience the same type of impenetrability I experience when I try to read a paper on topos theory. One more way of putting it: people are giving the example of TCP. You can spend a decade learning about TCP (or SQL semantics, or web standards). But what is happening is that you're filling in gaps in your knowledge. Meanwhile, in math, you do four years of undergrad, and even if you're a strong student at a typical university, there are topics that are still years away from you being able to touch them. Computer science is a mix. Parts are deep, parts are shallow. Parts just are math. The odds that I can read a dissertation in computer science are decent. For math, they're much much much worse. |
| |
| ▲ | Planktonne 7 hours ago | parent | next [-] | | > Programming, even systems engineering, is a surprisingly shallow field. I agree, and I don't think we should be at all ashamed of this. The beauty of programming is that we can produce incredibly complex and powerful things by manipulating a small set of simple constructs together. There are only a few core tools--iteration, conditionals, etc.--but they can be snapped together into much more capable configurations. Good programming is the art of deconstructing complex behaviour into these few constructs, and that's really fascinating. | |
| ▲ | AlienRobot 6 hours ago | parent | prev | next [-] | | I agree, and I don't even know math. Most of things that are impenetrable in programming aren't about... programming. They are about some actually complex field like math being applied to programming. For example, a library that does stuff with geometry. You need to know geometry to understand the program, but the program itself will never be complicated. It's the geometry that is complicated. In cryptography, it's not the program that is complicated, it's the field of cryptography. In AI, it's statistics. In graphics programming, math is the most impenetrable part, not programming anything. You can be a very good programmer in the sense that you know how to architect information systems and still fail to write a shader because shader programming requires you to know what a "dot" product is and you haven't heard about that since high school. | | |
| ▲ | hyperpape 5 hours ago | parent [-] | | I'd slightly disagree. Here's an example of a programming task that is incredibly complicated: Your job is to maintain and modernize a system while delivering a constant stream of new features. Your system is several million lines of code, with some multi-thousand line classes, a rulesengine that can trigger nearly unlimited effects at any time, a persistence system that's weirder than anything any of your friends have ever worked with, and hundreds of customers delivering tens of millions in revenue who use the system in incredibly varied ways. You can't stop to rewrite the thing, you can't just throw features out there and pray, because you'll cause regressions and your existing customers will hate you. You have to fix the thing as you're building on top of it. But where I agree is that there's no single deep concept that unlocks it all, it's not like you'll fix it by reading a textbook about it. It's complicated, and it's going to stay complicated, no matter how long you work on it. |
| |
| ▲ | rowanG077 5 hours ago | parent | prev [-] | | [dead] |
|
|
| ▲ | vovavili 7 hours ago | parent | prev | next [-] |
| If we take amateur level of understanding as a threshold, a sum of all of these concepts is not even a fraction of complexity required to understand a single non-trivial concept in mathematics. |
|
| ▲ | stymaar 8 hours ago | parent | prev | next [-] |
| > if you read a paragraph of even semi technical software text you will feel like an over stuffed turkey. That's me when I try reading a trendy computer graphics paper. |
|
| ▲ | scrapcode 8 hours ago | parent | prev | next [-] |
| Also a lot of those are common words that take on a different persona and depth within the field, which can add to confusion. |
|
| ▲ | paulpauper 8 hours ago | parent | prev | next [-] |
| This is also true for almost every other field, even within computer science. The only difference is that a lot of people operate at a very surface level without realizing just how much background knowledge they have accumulated. Think about the number of keywords your average SWE is expected to know. It is rather insane. Nah, math is much harder because there is not just the lingo, but also all the math machinery behind it. Each math definition represents some long process behind it, which builds on another process, etc. The knowledge builds on itself , too much more so than computer science. |
|
| ▲ | Razengan 7 hours ago | parent | prev | next [-] |
| old.reddit.com/r/vxjunkies |
|
| ▲ | jongjong 6 hours ago | parent | prev | next [-] |
| >> Cache, stack, heap, process, thread, socket, file, tcp, http, tls, websocks, socks, soc2???, deadlock, stack, queue, race, atomic, event loop, coroutine, async, database, transaction, index, replication, sharding, consistency, serialization, DNS, load balancer, container, namespace, and so on. ... communication protocol, method signatures, web components, ssh, CSS media queries, HTTP headers, WebSockets, timeouts, ETag, iterables, async iterables, middleware, CI/CD, build, consistent hashing, signatures, JWT, SSO, OAuth, SAML, XML, YAML, JSON, block cipher, ETL pipeline, SQL, SQL transactions (atomic), relational databases, foreign keys, schema normalization, referential integrity, 1-to-1, 1-to-n, n-to-n, document databases, compound indexes, idempotency, offset-based pagination, cursor-based pagination, P2P, Kademlia, structured vs unstructured network topology, message routing, frontend router, message storm, reconnect storm, locality, encapsulation, cohesion, coupling, design patterns, modularity, Big O notation, raytracing, shaders, VPN, VPC, data schema, schema validation, CORS, preflight-requests, CSRF, ASCII, UFT8, CSP, CPU context-switching, BIOS, bootloader, interrupt controller, ports, BIND protocol, BGP protocol, assembly language, big endian, little endian, register, signals, embarrassingly parallel, serial processing, event loop, binary trees, tree rebalancing, graph traversal algorithms, sorting algorithms, string character escaping and encoding, blob, base64, UUID, timestamp, CLI, Bash, unit tests, integration tests, e2e tests, TDD, stateful, stateless, proxy, nginx, haproxy, config, helm file, k8s, staging, git, push, commit, merge, rebase, cherry-pick, pub/sub, diff, honeypot, buffer overflow, pointer, file descriptor, authentication, certificates, TLS certificates, DNS Zone files, A record, CNAME, TXT record, SMTP, POP3, SOCKS5, Sha256, HMAC, Merkle trees, Merkle Signature Trees, Lamport OTS, Winternitz OTS, SPHINCS, lattice-based cryptography, pg-vector, vector embeddings, API, rate limiting, cookies, sameSite, httpOnly, localStorage, XSS attack, SQL injection, fetch API, module preloading, bundling... Barely scratching the surface. I think I could probably keep typing all the technical terms I know for at least 24 hours straight. For most of the topics above, I could probably give a 1 or 2 hour lecture on each one from memory. Some I could give a day-long lecture each. To explain all the terms I know to a basic degree, I would probably need to give a whole year of lectures back-to-back from 9am to 5pm. And I'm just a rank-and-file senior engineer with 15 years of experience. It's also why the vast majority of software systems are insecure. The average senior software engineer doesn't know everything that they need to know to build secure software. Last time I poked around Coinbase APIs on HackerOne, I found a DoS vulnerability in less than 30 minutes. That's Coinbase, not some startup built by a bunch of recent graduates. AI cannot avoid vulnerabilities either since it is trained on average engineer code. There's not enough high quality code available on the entire internet to train AI to implement secure code IMO. As impressive as Mythos may be, it's not enough. I don't even think formal verification would provide protection since sometimes issues with the spec itself can provide an opening for a vulnerability. |
| |
| ▲ | buzzin_ 5 hours ago | parent | next [-] | | Nice list. I like it how you also included some made up terms. For completeness, those are not real: ETag, SAML, CSP, BGP, haproxy, helm file, k8s, SOCKS5, Lamport OTS, Winternitz OTS, SPHINCS, lattice-based, pg-vector, sameSite, httpOnly. (Or, at least, i have no idea what those are ::) | | |
| ▲ | gjm11 4 hours ago | parent [-] | | Apologies if I am simply missing a joke (which I think is true with p~=0.3), but: At least some of these are definitely real things. For instance: "BGP" is the Boundary Gateway Protocol. "Lamport OTS" is a one-time digital signature scheme due to Leslie Lamport. k8s is an abbreviation for a piece of software called Kubernetes. |
| |
| ▲ | minraws 5 hours ago | parent | prev | next [-] | | Coinbase not a startup built by recent graduates... You overestimate Coinbase's engineering rigor. But yes security in modern software systems is a joke. I don't even get paid to fix security bugs everytime I raise them the answer is to slap a sandbox and proxy and call it done. | |
| ▲ | ftjftjft 6 hours ago | parent | prev [-] | | a janitor could do the same though | | |
| ▲ | jongjong 5 hours ago | parent [-] | | They could drag it out by telling stories of situations they faced but information density would be low and repetitive. As someone who cleaned boats professionally for a year in my early days, I'm pretty sure I could convey all I know about cleaning in under an hour. That's very different from one year of back-to-back lectures. Cleaning boats, the learning tapered off after a few weeks. With software, I'm 15 years in and it barely tapered at all and it's much more intense. I've been pulling nights and weekends too. With software knowledge, it would be high information density with little to no repetition. Every piece would provide useful concrete knowledge which would serve to increase technical capabilities and/or security. |
|
|
|
| ▲ | redsocksfan45 8 hours ago | parent | prev | next [-] |
| [dead] |
|
| ▲ | cosmic_cheese 8 hours ago | parent | prev [-] |
| At least a lot of those are common words that allow some level of meaning inference with a little bit of adjacent knowledge, like cache and queue make sense with the barest of explanations because their everyday definitions are still applicable. Many of these terms aren’t entirely opaque until you drill down into specific niches. |