I find that I’m spending more and more of my time studying computational algebra, which makes me incredibly happy. When I was a student at Caltech I took an abstract algebra class–which I did miserably at, because the material was presented without motivation. Computational algebra has the advantage of covering much of the same material I didn’t get the first time around–but this time, with a motivating reason which allows me to actually have a model for what the different types of objects really represent.
As a side note, I find it extremely interesting how much a background in object-oriented programming helps in understanding group theory. In a way, a group, a ring and a field are all essentially like interfaces: declarations of objects and operators which observe certain well-defined properties, but with different types of objects that can be plugged into our operators. For example, we could define a ‘group’ as a set of objects and an operator:
template class Group { public: virtual Element add(Element, Element) = 0; };
Then the Group Z of integers is:
class Integer: public Group { public: inline int add(int a, int b) { return a+b; } };
And the group ZN of integers from 0 to N-1 (which represents a finite integral group) could be represented by:
class IntegerN: public Group { public: IntegerN(int m) { fModulo = m; } inline int add(int a, int b) { return (a+b)%fModulo; } private: int fModulo; };