Graph Theory for Programmers