Abstract algebra: A computational approach