From full-stack to machine learning, these are the best jobs in software engineering