What Every Programmer Needs to Know About Category Theory