I’m interested in going into cloud computing/software engineering. I need 5 CS electives above the 400-level. Which of the following would be the most important/useful for not just the job market, but for also building up a nice, well-rounded CS mindset?
http://www.engin.umich.edu/college/academics/bulletin/courses/eecs
I was thinking about taking these 5:
EECS 477 - Intro to Algorithms
EECS 481 - Software Engineering
EECS 482 - Operating Systems
EECS 484 - Database Management Systems
EECS 588 - Computer and Network Security
It looks like you picked out a good list - I only have a few suggestions /notes.
- Algorithms and OS's are a must. No matter what, keep those. Check out EECS 586 though - it may be better to get more depth in Algorithms if you feel ready.
- Software Engineering and Databases will be good practice, but you could possibly go without.
- The odd man out to me seems to be Network Security - have you taken a networks class before?
I would recommend replacing Network Security with one of the following:
EECS 489. Computer Networks - the better networks option to start probably, and it will go into security a bit. If you have taken a networks class before, replace this recommendation with the Network Security option.
EECS 490. Programming Languages - it will really let you understand the theory and use of languages, which is helpful both practically and to be a well-rounded CS student
EECS 492. Introduction to Artificial Intelligence - A really interesting and growing subject - if there’s a breakthrough, AI could become a very big part of many development projects.
EECS 493. User Interface Development - if you want to do any front end development, I would highly recommend this. Most CS students focus on the problem solving and forget about the users - UI/UX design and research makes a huge difference in people’s lives, even if the algorithms and core doesn’t change. Having knowledge in that area can be a big plus.
Enjoy!
If you can keep them all and add 489, that would be a pretty solid list of courses whose concepts are widely applicable in industry jobs. Note that 489 is listed as a prerequisite for 588.
490 would be useful if its content is not embedded in other courses (usually by experience with varied programming languages in other courses).
If you want to touch on all of hardware, software, and theory in one course, see 483 (compiler construction).
Those 5 are an excellent choice. As I always say, most software jobs revolve around the:
Manipulation (Programming)
Distribution (Networking)
Storage/Retrieval (Databases)
Of DATA!
…and those 3 areas must run over an operating system. So there is your list.
I’ve had some experience with a few AI courses now, and I have to stress that you have to be very mathematically savvy and definitely know every detail from past courses, such as data structures and some fundamental algorithms. It’s a fun course.
^ I’m currently taking AI and took machine learning last quarter. What you said is very true, and the emphasis on abstract math caught me off guard for machine learning…but at least it prepared me for AI, which doesn’t emphasize math quite as much as machine learning did (at least with this professor).
Still, both machine learning and AI are very interesting and fun courses, if a bit hard to wrap your head around at times, and I’d recommend a course in one or both if you can.
Besides that recommendation, your elective list looks solid to me.