how to improve logical thinking for software developers