- Graph theory is pretty algebra-heavy, and graphs are everywhere.
- Static analysis, in particular abstract interpretation, relies heavily on vector spaces and various algebraic structures.
- All the "highly functional" structures (you know, monads and the like) are an off-shot branch of algebra.
- Patch theory (git, darcs and other versioning systems that rely on patches). You get nice stuff if you use algebraic properties (such as having your patch commutes and things like that).
Linear algebra is a subfield of abstract algebra, and lots of general theorems about what classes of matrices are diagonalizable, or what their eigenvalues look like, etc. are within the purview of abstract algebra. These types of results are relevant to many algorithms, e.g., page rank.
Aside from that, I think abstract algebra is quite a beautiful field in its own right. Two books I would recommend are Artin's Abstract Algebra (as an intro) and Lang's Algebra (more advanced, good bridge into the category theory perspective).
[0] https://www.amazon.com/Algebra-Chapter-Graduate-Studies-Math...
Developing an intuition for all those things is best accomplished by studying abstract algebra.
Also, algebraic properties are important. I've got a background in applied algebra, and I think that has informed my programming. And I think that making programmers aware of algebraic properties of their code, and communicating some of those properties to the compiler, may be worthwhile.
The language Fortress [4], which he was one of the language designers of, allowed one to explicitly provide the compiler with such information - you could say that a certain operation was distributive or associative for instance, and the compiler could then do some refactorings and optimizations taking this knowledge into account.
[1] https://en.wikipedia.org/wiki/Guy_L._Steele_Jr.
[2] https://youtu.be/ftcIcn8AmSY
[3] https://youtu.be/ftcIcn8AmSY?t=1m59s
[4] https://en.wikipedia.org/wiki/Fortress_(programming_language...
[0] https://news.ycombinator.com/item?id=13803843 [1] https://www.cs.ox.ac.uk/files/3395/PRG72.pdf
a) arithmetic as applied to 'Classes'. Eg overloading arithmetic operators that work on custom classes -- is, in a way, what abstract algebra does .
b) Interval arithmetic. For example alen algebra applied to arithmetic of time intervals
c) relational database theory as relates to various ways to construct functions on relations.
d) type theory (see https://homotopytypetheory.org/book/ )
e) combinatorics and linear programming (basically being able to express recursive and generative constructs, and reason about them).
If I understand correctly, groups are the basis of some error correction codes.
Monads are used for many things in functional programming.
There are languages that overflow from hardware integers into some kind of BigNum automatically. Those languages are not finite rings. (Well, OK, they're finite in the sense that eventually the memory space will be exhausted...)
Edit: Crypography is specifically associated with algebraic number theory.
Abstract algebra is also used in algebraic geometry, which also comes into play with facial recognition software, and maybe with fingerprinting as well.
But anyway, check this out: http://chris-taylor.github.io/blog/2013/02/13/the-algebra-of...
There's alot of category theory implicit in these ideas. You can learn the abstract approach later on, after you have seen a bunch of examples.
-cryptography
-algebraic coding theory
-Burnside's lemma
-molecular symmetry
-design of software for parallel processors
-lattices and Boolean algebras applied to logic, circuit theory, and probability
-Galois theory