In CS, no doubt, we often end up on the other end, where a single term means different things in different contexts and beginners may get confused at our reuse of terminology. Often the reuse gives some metaphorical understanding to the newcomer, even if it largely leads them astray in the details.
I've lamented this for a long time, but on the other side, I doubt if mathematicians would ever get sufficient recognition if their names weren't immortalized thus, since they can't get patents on their works. They totally deserve recognition. Would you even remember Leonard Euler if his work was named factually? Most of us I guess have no idea who came up with sin/cos/exp/log etc. I'm glad for the names of these functions, but lament the loss of knowledge about the one (or many) who discovered them.
Longer names are a candidate .. along the lines of "Einstein's theory of general relativity". "Euler's relative prime counting function" .. but they too will likely, depending on familiarity, collapse over time.
edit: If I want to talk about distance in a curved space, we already have a well named "Geodesic distance".
That depends on your native language, though. For Non-English speakers sounds no different than 'Shell sort'.
I don't think it really "proves the point", though, except for the point that sometimes names are confusing. So maybe it would be nicer if someone had happened to consider whether a specific naming might be confusing, but that's not the same as "names that aren't directly descriptive are automatically bad".
[1]: https://en.wikipedia.org/wiki/Filter_(signal_processing)
I remember when Duff's Device was a neat trick; does anyone still use it these days?
Edit: a neat trick, not a bear trick.
rank (adj):
1. (of vegetation) growing too thickly and coarsely.
2. having a foul or offensive smell. very unpleasant.
3. (especially of something bad or deficient) complete
and utter (used for emphasis).Yes, I included that one as a joke. "git" is a British slang term. Linus once quipped that he names all his projects after himself.
https://en.wikipedia.org/wiki/Linus%27s_law
>In software development, Linus's law is the assertion that "given enough eyeballs, all bugs are shallow".
>The law was formulated by Eric S. Raymond in his essay and book The Cathedral and the Bazaar (1999), and was named in honor of Linus Torvalds. [...]
>Validity
>In Facts and Fallacies about Software Engineering, Robert Glass refers to the law as a "mantra" of the open source movement, but calls it a fallacy due to the lack of supporting evidence and because research has indicated that the rate at which additional bugs are uncovered does not scale linearly with the number of reviewers; rather, there is a small maximum number of useful reviewers, between two and four, and additional reviewers above this number uncover bugs at a much lower rate.[4] While closed-source practitioners also promote stringent, independent code analysis during a software project's development, they focus on in-depth review by a few and not primarily the number of "eyeballs".[5]
>The persistence of the Heartbleed security bug in a critical piece of code for two years has been considered as a refutation of Raymond's dictum.[6][7][8][9] Larry Seltzer suspects that the availability of source code may cause some developers and researchers to perform less extensive tests than they would with closed source software, making it easier for bugs to remain.[9] In 2015, the Linux Foundation's executive director Jim Zemlin argued that the complexity of modern software has increased to such levels that specific resource allocation is desirable to improve its security. Regarding some of 2014's largest global open source software vulnerabilities, he says, "In these cases, the eyeballs weren't really looking".[8] Large scale experiments or peer-reviewed surveys to test how well the mantra holds in practice have not been performed.
>Empirical support to the validity of Linus’s law [10] was obtained by comparing popular and unpopular projects of the same organisation. Organizations like Google and Facebook are known for their quality standards. Popular projects are projects with in the top 5% number of stars (7,481 stars or more). The bug identification was measured using the corrective commit probability, ratio of commits detected to fixing bug. The analysis showed that the popular projects had more bug fixing ratio (e.g., Google’s popular projects had 27% higher bug fix rate than Google’s less popular projects). Since it is unlikely that Google lowered its quality standard in it most popular projects, this is an indication of increased bug detection efficiency in popular projects.
Citation needed, especially for Facebook. The parts I saw are full of vile hacks, committed by an endless stream of new clueless devs --- young developers are of course better by the dictum of Mark Zuckerberg. I'm curious how his code looks or if he ever wrote anything substantial.
Common enough (though there's a diversity of pronunciation and spelling of the name), though for any practical purpose probably "edit distance" works better. (And Hamming distance would probably be better called XOR distance or something.)
Funny coincidence, there was a comment on HN the other day when someone called Euclidean distance "bird distance", and everyone agreed it was a great coinage. I think "Manhattan distance" is similarly evocative, and no less precise than any alternative.
Gaussian noise.
The list in physics could go on for quite a long time. Terms like "gaussian noise" are used as short versions to describe something that would need an entire paragraph if described in a verbose way, as if the reader did not understand the fundamentals of the concept.
At least Gaussian noise is easily googled.
Often the closest thing we do to the whole 'Thurston maps are Thurston-equivalent to polynomials, unless they have Thurston obstructions' thing is that we qualify our statements about programming entities by the programming language or platform to which the statement applies. So you might reasonably have a statement like 'A JSON value consists of an array of JSON values, a map of string keys to JSON values, or a primitive value', which sounds just as self-referential as the Thurston example, but because it's called a JSON value, not a Crockford value, it sounds less conceited.
But back in 1909, it was also the name of the guy who signed the patent. Whose company name was his surname.
I meant it followed the branding pattern, so it happened the brand was derived from the name.
> ... Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it as an umbrella for my activities.
http://www.eng.tau.ac.il/~ami/cd/or50/1526-5463-2002-50-01-0...
Just because it's a common practice does not mean it's good.
Those are trivial concepts though. The article brings up "perfectoid spaces", as if to suggest their superiority to "Scholze spaces", yet neither name gives any clue as to what they are:
In mathematics, perfectoid spaces are adic spaces of special kind, which occur in the study of problems of "mixed characteristic", such as local fields of characteristic zero which have residue fields of characteristic prime p.
A perfectoid field is a complete topological field K whose topology is induced by a nondiscrete valuation of rank 1, such that the Frobenius endomorphism Φ is surjective on K°/p where K° denotes the ring of power-bounded elements. [1]
Oh, okay. See, the problem is that modern mathematical structures are built on top of centuries of prior work. Computer science, on the other hand, is still in its infancy as a field.
I hope Computer Science divorces from Math, and takes its own path to more logical naming of things and less useless symbols used in it.
That's silly. Computer science is a subfield of math. All computer scientists working in research are mathematicians by training. You won't get anywhere at all if you try to enter the field without a mathematical background.
There isn't a lot of theory-building in algorithms, compared to the more traditional fields of maths, but the combinatorics are formidable.
I agree on your first point though, I think the concepts named after people are usually so abstract that the hard part is to really understand the concepts, not to remember the name.
I wonder what Alan Turing would say about this.
On more serious note... Most people confuse software engineering with computer science.
Computer science is a branch of mathematics, software engineering might not be.
Oh and by the way, there's a bunch of mathematics and logic (again, a branch or mathematics) into language recognition and compilers...
Edit: think that many prominent computer scientists were/are mathematicians: think of Donald Knuth or Claude Shannon, for example. They laid the ground for other stuff to happen.
He grew up in a world where he could only beg an hour a week of compute time off the Americans so his community put a remarkably high emphasis on software quality and clear semantics.
And that’s really what advanced mathematics is all about: clearly communicating otherwise intractably complex ideas by letting the symbols do the work.
I agree, and I think you nailed the point perfectly.
The point that the article misses completely.
Thank you.
I rather enjoyed that!
I think there's truth to it though, even at as high a level of situations where you have logic that leaves you thinking 'ok, this works... but it doesn't actually make sense' where something's hard to understand or debug because it's got tangled up into a functional but illegible mess.
Programming is math. I’m not sure why this bothers people so much. When you cross a bridge and it’s able to keep standing, you don’t feel gratitude to math? When you write any program, you should feel the same gratitude.
Engineering is not a subfield of math either, it merely uses math as a tool. As a field, engineering evolved in parallel with math, only borrowing mathematical methods when their suitable applications were discovered.
Computer Science is a subfield of math because it was developed by mathematicians as a direct descendent of algebra and the study of algorithms, which date back to the ancient Babylonian and Greek methods for division, computing the GCD of two numbers, finding square roots, etc.
Your classification seems as reasonable as any, but the lines seem fairly arbitrary to me.
Those topics might seem to have nothing to do with math but all of their components have mathematical underpinnings. Algorithms, data structures, complexity theory, and even the physics of end-to-end latency, colour perception, etc.
There probably are some people out there, working in these fields with only a high school math background, but I'd imagine they're exceedingly rare. Anyone who's completed a CS degree has done their fair share of math.
(I think there is a discussion to be had about making the distinction "CS" vs "theoretical CS" as the GP comment does, or if it should be "CS" vs some other term ("computing"? feels a bit general))
Computer science was developed by mathematicians as a study of algorithms, procedures for computing, and methods of abstraction. In the words of Hal Abelson, computer science is not a science and it's not really about computers in the same sense that geometry is not about surveying instruments [2].
Numerical methods and algorithms are fields of math as old as geometry, especially if we focus on the Babylonian or Chinese styles.
Hermann Grassmann sought to formalize arithmetic, not wishing to assume them as granted. In doing this, he also connects recursion, induction and the natural numbers (he would have known of recursion from its early application in the theory of combinatorics). Peano, Dedekind, Frege, Zermelo and many others would also work on the foundations and axiomatization of mathematics and deduction. Computing began as a side-effect of attempts to formalize just how far such an approach could be taken. The Turing Machine arose to tackle Hilbert's Entscheidungsproblem. The lambda calculus as an approach to the foundation of mathematics. Functional programming languages were originally part of tools meant to study formal mathematical objects while Logic programming sought to apply ideas from formal logic and the axiomatization of mathematics to automatically search for programs.
Dedekind said: "In speaking of arithmetic (algebra, analysis) as a part of logic I mean to imply that I consider the number-concept entirely independent of notions or intuitions of space and time, that I consider it an immediate result from the laws of thought."
What we find is computing reaches right to the foundations of mathematics. Whenever we try to systemize thought, we end up with ideas which seeming inevitably also lead to the foundation of computation.
(Mostly joking. Mostly!)
It is not. Applied Computer Science has as much common with math as Chemistry does with math.
I view theoretical computer science as mostly self-masturbatory, to the point that is very very divorced from real life applications and is benefiting very little to us.
Also the market has spoken as well. Someone with CS degree, and 5 years of experience can command a higher salary than someone that took 5 years to get his/her phd in CS. A phd degree is not seen as valuable, mostly because it is not seen as beneficial and it is very divorced to reality of applied computer engineering.
The computer science that helps big companies get more control is the most useful by this metric. Oh look big data and AI are popular. Programming language theory to help create less buggy programs is less so.
You wouldn't have complexity analysis of algorithms, with which most of us don't need to directly involve ourselves, but you do apply its results when choosing an algorithm based on the knowledge that was originally obtained through that analysis. Or if you're not choosing your algorithms, at the very least someone who chose them for your platform did.
You probably wouldn't have lossless data compression (and an understanding of it) at its present level without someone having done mathematically-based work on things like arithmetic coding [1] and range encoding [2]. Again, you probably don't write that code yourself (I haven't), but it's there.
The list goes on.
A PhD degree isn't really a good investment in terms of just salary in almost any field that I can think of. That just means work that's closer to (and directly applicable for) direct revenue streams tends to pay better than work that's further away from them. That doesn't directly mean work that's further away from revenue streams is less valuable down the road; it just means there's less certainty about its ability to help generate revenue, and that there are more steps, more interim work and a greater financial risk involved. While most businesses don't, and shouldn't, bother, that doesn't mean they might not benefit at some point if someone else does it. "The market has spoken" is a shortsighted way of looking at these kinds of things.
Sure, there are areas of theoretical computer science that are more similar to pure maths in terms of abstraction and applicability, and which are pretty much a pure intellectual pursuit. They are very far from engineering or applications. But theoretical work in CS is broader than that, and some of it underlies much of what we have in the practical world.
It's also true that most of software development and engineering work don't really require involvement with much of the theory, partially because someone else is already doing that work within the platform, and partially because most business software is actually theoretically more or less trivial.
Still doesn't mean the theoretical side is useless, because not all software is trivial.
Unnecessary gatekeeping. There’s a lot of engineering-oriented research that has nothing to do with math.
"Research in history involves developing an understanding of the past through the examination and interpretation of evidence. Evidence may exist in the form of texts, physical remains of historic sites, recorded data, pictures, maps, artifacts, and so on."
Pretty much every field in the social sciences and humanities requires their undergrads to take at least one course in statistics. Sure, these students may complain about it but they need to be trained to not make common statistical errors in their publications. Unfortunately, they still do, which highlights the importance of mathematical education even in these fields.
And in quicksort, we have Hoare’s and Lomuto’s partition schemes. Not that “quicksort” is actually particularly descriptive.
We also have Timsort.
> Even the name "Boolean", could be changed to "Conditional"... and be even more readable
Booleans aren't conditionals, conditionals in crisp binary (or, as it is commonly known, “Boolean”) logic operate on booleans (conditionals in fuzzy or nonbinary crisp logics do not.)
And Shellsort!
Unfortunately, we rely on idioms and made-up terms for lots of complicated concepts, but I don’t believe that narcissism is to blame. I believe the magnitude of the number of concepts we need to know about overall is gargantuan, so much so that words would get overloaded if we tried to describe everything accurately. Which would be more confusing than it is now.
Also, you’re assuming a minimum context of knowledge when you say something like “Shortest Path” is a better name for Djikstra’s algorithm. What if you don’t know what a graph is, or know what a graph is but don’t know what a path is? How is Shortest Path any less opaque? There’s no lowest common denominator of knowledge, so having agreed upon terms in a given domain is the only way to remain precise.
"Boolean" and "conditional" are semantically very different, the difference is significant.
The "there can be more than one" is specifically why it's important to call the algorithm Dijkstra. It's possible to look it up in Google or in a textbook and immediately find the algorithm in question. Generic terms don't have that property.
Calling this narcissism does everyone a significant disservice.
It’s not even really narcissism.
Here’s the original paper describing what is now called Dijkstra’s Algorithm: http://www-m3.ma.tum.de/foswiki/pub/MN0506/WebHome/dijkstra.... Note that the algorithm isn’t called that anywhere in the paper. In fact, it’s not even named.
When other people want to discuss that work, they need to call it something, and some natural solutions are “an algorithm proposed by Dijkstra” and, subsequently, “Dijkstra’s Algorithm”, as you can see in this contemporary paper. https://www.ams.org/journals/qam/1970-27-04/S0033-569X-1970-...)
As that second paper shows, you can’t really call it “the Shortest Path Algorithm” because others were developing other approaches for similar problems. “Shortest Path, Assuming All Edge Weights are Non-Negative and You Can Afford to Search Blindly Without a Heuristic, Algorithm” doesn’t really roll off the tongue either.
a) It'd need to be called that by Dijkstra himself to be even arguably narcissistic and
b) The qualifier "Dijsktra's" is important because there are other algorithms for finding a shortest path (Bellman-Ford, Floyd-Warshall, A*), with different trade-offs (Bellman-Ford is slower, but can handle negative weights; Floyd-Warshall gets you all pairs and may be better when the graph is dense). Accordingly, I think the grandparent's suggestion of purely descriptive names isn't feasible.
Definitely not. The term conditional is used for statements of the form “if X then Y”, in computer science as well as logic/philosophy.
Consider coming up with a descriptive name for LLL basis reduction (where LLL is the initials of the 3 authors) or some other advanced algorithm.
Someone more educated in CS might be able to give better examples.
ah, my pet peeve. When I invent my language, a "bool" is going to be a set, closed under the operations "union" and "intersection".
if you want conditionals, you can use zero and nonzero, the way things were always intended.
It's rather that others start calling the concepts by the person's name when discussing the concept or algorithm, after it has been introduced by that person in an article or elsewhere.
It would be good not to accuse others of narcissism when there's actually no narcissism involved.
Edit: omitted part that wasn't constructive
I readily acknowledge that literally is often used when a sentence is figurative; that's not the same thing. For literally to be used to mean figuratively the utterer would be worried that, but for the presence of "literally", the sentence might be understood to be literal.
I contend that the role "literally" usually plays is that of an intensifier. I believe it plays that role through ordinary application of hyperbole: the utterance "X is literally Y" is usually meant as "X is very Y; X is so Y it is almost as if it were literally Y; but of course you understand that it was not, in fact, literally Y - we're all reasonable people here."
In much the same way, when someone says "You left me waiting for days" and it's been a handful of minutes, we don't say "'days' sometimes means 'minutes'" - we say that people exaggerate.
I recognize that I'm disagreeing with at least one dictionary; I believe they got it wrong.
And I won't claim that there is literally no single person who in fact uses "literally" to mean "figuratively" - but I have never encountered such an example and I believe it to be rare enough that we can consider it an error, even in a descriptivist treatment.
1. The Romans spoke Latin 2. Catholic church based in Rome, did everything in Latin 3. Between tithes and indulgences, church got rich and powerful 4. The rich and powerful keep learning Latin to keep up to date with news from the other rich and powerful
They are much more descriptive and easy to remember, even though the Algorithms can be complex themselves. Event the name "Boolean", could be changed to "Conditional"... and be even more readable. Also, Dijkstra algorithm can be generalized to "Shortest Path Algorithm" (there can be more than one).
Math, and physics to some degree, have become self-referential to the point that start becoming more esoteric magic black books to beginners...
While CS was born out of Math folks, and unfortunately has adopted some of the same esoteric symbolics, I hope Computer Science doesn't follow that path on the long term, otherwise it will become divorced from day to day real life applications.
Let me give you a clear example:
Now, imagine if we called Double Linked Lists as "Darombolo lists", or whoever invented it. (I made up that name), Double Linked List is very easy to visualize and remember. "Giacomo Darombolo List", is not, and just adds to 'must cram/memorize' things to make things work.....
I personally don't like "cramming" useless trivia in order to work in my field. I hope Computer Science divorces from Math, and takes its own path to more logical naming of things and less useless symbols used in it.
It is like the whole field suffers because the authors' Narcissism, that they must name things after them.