what programmers should know