What are some necessary skills a programmer must have? (Aside from, obviously, programming)