CS Electives to take

<p>Hey everyone!</p>

<p>I was wondering which tech electives I should take before I graduate for Computer Science. Operating Systems and "Data Structures & Algorithms" are required courses. I have read a few threads on this before and compiled a list of courses that are possible choices:</p>

<p>CSE 355 - Introduction to Theoretical Computer Science
Course description: Introduces formal language theory and automata, Turing machines, decidability/undecidability, recursive function theory, and complexity theory. </p>

<p>CSE 450 - Design and Analysis of Algorithms
Course description: Design and analysis of computer algorithms using analytical and empirical methods; complexity measures, design methodologies, and survey of important algorithms. </p>

<p>CSE 420 - Computer Architecture I
Course description: Computer architecture. Performance versus cost tradeoffs. Instruction set design. Basic processor implementation and pipelining. </p>

<p>CSE 466 - Computer Systems Security
Course description: Countermeasures to attacks to computer systems from miscreants (or hackers) and basic topics of cryptography and network security.</p>

<p>CSE 434 - Computer Networks
Course description: Distributed computing paradigms and technologies, distributed system architectures and design patterns, frameworks for development of distributed software components. </p>

<p>CSE 412 - Database Management
Course description: Introduces DBMS concepts. Data models and languages. Relational database theory. Database security/integrity and concurrency.</p>

<p>CSE 468 - Computer Network Security
Course description: Practical network security exposure and hands-on experience about basic concepts, case studies, and useful tools.</p>

<p>BTW, I would like to get into Software Development, but I am still open minded when it comes to other fields of software engineering. So, which courses should I take that will prepare me for an internship or an entry-level position? Also, if you guys would recommend other elected besides these, what would they be? Thanks!</p>

<p>450, 434, 412, and 466 (maybe also 468*) would be most applicable for general industry software jobs. 420 could help in hardware jobs or software jobs close to the hardware.</p>

<p>*Check the actual courses to see how much they overlap.</p>

<p>It is odd that core classes such as Computer Architecture I, Design and Analysis of Algorithms, and Database Management are not required</p>

<p>^ At most schools I’ve seen, Database Systems is not a required course. Computer Architecture and Analysis of Algorithms definitely should be, though.</p>

<p>What Lightnin wrote… I would avoid the network classes only to the extent that too many of those may end up putting you more into the ‘network admin’ rather than ‘coder’ bucket of resumes (regardless of reality). </p>

<p>Definitely the database class. I’m doing some complex database + PHP work now and of course with half a dozen undergrad and grad database classes it’s child’s play for me, while for my colleagues who cringe at the thought of SQL anything it might as well be assembly language. </p>

<p>Also definitely architecture class. I’m amazed as to how many coders out there assume all the computing resources in the world… Then when they get to work on a Raspberry Pi type processor…</p>

<p>In my days, 2 database classes were a requirement… One was the typical DBMS / SQL and data design type class (Ingres, yea!) and one was combining databases and high level languages to build complex applications (Ingres + C-QUEL or some such, or Oracle + PRO*C (?), and the like. We used IDMS and Cobol I think, but that was 30 years ago).</p>

<p>

</p>

<p>It may be worth checking whether network and security courses have more of a CS flavor or an IT flavor. For an intended software developer, the CS-flavored ones are definitely useful, since many CS programs deal with networks, and almost all have to deal with security.</p>

<p>Take Algorithms, Database and any of the network courses.</p>

<p>I know I sound like a broken record, but MOST software jobs revolve around the manipulation (programming/data structures), distribution (networks) and storage/retrieval (databases) of DATA.</p>

<p>Make sure that you can at least secure those type of jobs first (to secure paying your bills and keep a steady paycheck), THEN try for the more exotic/fun (but less jobs) CS areas like A.I., and others.</p>

<p>Go for your CS preferred areas first for jobs and use that programming/database/networks positions (including network admin if necessary) as the Plan-B.</p>

<p>For my money, you should absolutely endeavor to take these courses:</p>

<p>CSE 355 - Introduction to Theoretical Computer Science
Course description: Introduces formal language theory and automata, Turing machines, decidability/undecidability, recursive function theory, and complexity theory. </p>

<p>CSE 450 - Design and Analysis of Algorithms
Course description: Design and analysis of computer algorithms using analytical and empirical methods; complexity measures, design methodologies, and survey of important algorithms. </p>

<p>CSE 420 - Computer Architecture I
Course description: Computer architecture. Performance versus cost tradeoffs. Instruction set design. Basic processor implementation and pipelining. </p>

<p>CSE 434 - Computer Networks
Course description: Distributed computing paradigms and technologies, distributed system architectures and design patterns, frameworks for development of distributed software components.</p>

<p>If you had to drop one of those, I’d say lose computer architecture. If you have to lose two, lose theoretical CS as well. If you are only looking for one, you really absolutely must take algorithms.</p>

<p>Is your program ABET-CAC accredited? I find it hard to believe that more of these aren’t required courses.</p>

<p>I’ll assume you’re more interested in getting a job than getting a Masters or Ph.D. in CS.</p>

<p>If I had to pick one class, I’d pick the database class. If I had to pick two, then I’d add the computer networks class.</p>

<p>Computer security is a niche field. If that’s interesting to you, go ahead and take it, but most jobs won’t require it or deal with it.</p>

<p>CSE 355 and 450 are nice-to-knows. It’s unlikely you’ll use that knowledge on the job.</p>

<p>I took computer architecture in school over 30 years ago. Back then, programmers still needed to understand the inner workings of computers, but that’s not so much the case these days. Still, I couldn’t imagine having a CS degree without understanding computer architectures.</p>

<p>In any event, if you really need to learn something and didn’t take it in school, you can always pick up a book.</p>

<p>

</p>

<p>Most software developers apparently do not care about security, or know enough about writing code without security bugs, which is why there are so many security bugs discovered every week in commonly used software.</p>

<p>Of course, one of the irritations that a software developer encounters is finding a major security bug, but also finding that fixing it breaks crucial backward compatibility. It would be better if software developers were security-aware from the earliest stages of writing the software.</p>

<p>ucbalumnus, you’ve never actually worked as an engineer on a software project, have you?</p>

<p>Your assumption is incorrect. I currently work in software and have done so for years.</p>

<p>I’ve worked at some recognized companies and government organizations… and can pretty much corroborate ucbalumnus’'s observation on how much software developers know about security. My minor focus in graduate school was in computer security, and even though I’m aware of plenty of issues, I rarely give much thought even to mundane considerations.</p>

<p>Good developers I’ve worked with have often given security even less thought. It’s frightening to think that the single greatest protection most software has is that bad people would have to do a little work to do bad things. Frightening as it may be, it’s the truth.</p>

<p>First, I would like to apologize to everyone that posted on this thread that gave advice; I haven’t logged on since I created this thread.</p>

<p>Second, thank you to everyone shared their experiences and advice. </p>

<p>I agree that it is weird for these classes to be electives, but I’ll make lemonade with these lemons. I found out I have 6 electives I need to take and the CSE 355 course I mentioned earlier is a core class I have to take anyways. So, I plan on taking the rest for the 6 electives as soon as I get the chance.</p>