Understanding Surface Hopping Algorithms And Their Applications In Condensed Phase Systems