| I come from a CS background and learned a lot from studying CS, it definitely gave me a strong foundation and changed the way I view and understand computing. I learned most of the topics mentioned in this document while in school, and although they are all valid, they are not enough for real world needs. ~90% of CS undergraduates will end working as or with engineers, and in 2019 here are the skills that are indispensable: 1) understand popular protocols used in WWW (http, ssh, ftp, etc) 2) version control (Git). Understand pull-requests and the process of collaboration in a team 3) problem solving - how to breakdown problems, and how to overcome them when you reach a wall (use known algorithms when possible) 4) design patterns (learn as many as you can) 5) frameworks: MVC, angular, dependency injection, etc 6) communication skills 7) how to organize work, how breakdown big tasks into small easier-to-accomplish pieces 8) understand deadlines 9) write tests (unit-test, integration-test, etc) 10) understand that “good enough” sometimes is all you need (still try to fix it later :) ) |
As an engineering manager I find that a consistent difference between good engineers and great engineers is that great engineers can tell me how long something will take even when they haven't done something just like it before. That doesn't mean they can perfectly forecast how the hours will be spent -- no one could do that -- but they know how to figure things out, know how to build in some buffer, and know how to go heads down and crank when absolutely necessary, and as a result they can consistently hit deadlines.