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;
};