<p>Trying to plan out what my junior and senior year would look like if I got into UIUC’s CS program (trying to backwards-plan for an optimal community college curriculum.) Assuming I complete all my GenEds and a few degree requirements at community college, here’s what I got:</p>
<p>Fall 2015
MATH 415 – Applied Linear Algebra
CS 210 – Ethical and Professional Issues in CS
CS 233 – Computer Architecture
CS 241 – System Programming
CS 373 – Theory of Computation Spring 2016
MATH 463 – Statistics and Probability I
CS 242 – Programming Studio
CS 357 – Numerical Methods I
CS 411 – Database Systems
CS 421 – Programming Languages and Compilers Fall 2016
CS 425 – Distributed Systems
CS 426 – Compiler Construction
CS 473 – Algorithms
CS 465 – User Interface Design
CS 427 – Software Engineering I Spring 2017
CS 433 – Computer System Organization
CS 440 – Artificial Intelligence
CS 461 – Computer Security I
CS 477 – Formal Software Development Methods
CS 428 – Software Engineering II</p>
<p>Is that too many upper-level CS stuff for each semester? If so what would be a more realistic distribution? I can take more semesters if necessary.</p>
<p>Ummm…I don’t quite see why you would need more than 3 CS courses per semester. A typical CS curriculum is:</p>
<p>Object-Oriented Programming 1
Object-Oriented Programming 2
Discrete Structures
Computer Organization
Algorithms
Data Structures
Theory of Programming Languages
Operating Systems</p>
<p>Plus 6 to 8 elective CS courses. The usual total is around 40-45 credits or 5-6 CS credits per semester. Since you only take one CS course for your first 2 or 3 semesters, you balance that with 2 or 3 CS courses at junior/senior level.</p>
<p>I don’t see where you need 5 courses/semester. On top of that…</p>
<p>1) Don’t need both CS-421 and CS-426. For one, CS-421 will give you probably all the compiler knowledge you need and also there aren’t but 5 damn compiler design jobs in the whole USA.</p>
<p>2) You don’t need CS-427, CS-428 and CS-477. All you need is a basic knowledge of a structured approach to software development. Each employer will have their own tailored software engineering approach. Take CS-427 and call it a day.</p>
<p>3) Unless you plan on doing research in Automata Theory, CS-373 is pretty close to useless in an employer setting.</p>
<p>Any CS major worth his salt should know about the content you might expect to see in CS-373. Hopefully that’s a required course; if not, good thinking making that an elective. It doesn’t matter whether employers care about it. You should care.</p>
<p>Assuming you take both 373 and 421 and/or 426, take 373 before 421 and/or 426.</p>
<p>Compiler design won’t be directly useful for many industry jobs, but it does touch on many areas of CS – low level computer architecture issues, theory of languages and automata, general software issues, etc… Presumably, that is why it is often recommended for those intending on graduate school. However, there can be situations in industry where you may need to write a parser for a non-trivial input language, so compiler design knowledge can come in handy for that.</p>
<p>The concepts most commonly seen in industry include:</p>
<p>Algorithms and complexity
Operating systems
Networks
Software engineering (one overview course is usually enough)
Databases
Security</p>
<p>Of course, additional electives can be applicable to specific types of industry jobs.</p>
<p>I should be able to chunk 3 classes on this list (think I over-counted some elective requirements, but I’m gonna talk to the college to figure that out), so I think I’d get rid of 426, 440, & 461, and change 477 to 476 - Program Verification. All the others mentioned as potential cuts are requirements.</p>
<p>That being said, I’m still left with 3 of 4 semesters containing 4 CS classes each. Should I probably plan for another semester or two? </p>
<p>I was planning on completing all my GenEds at community college, but I’m thinking about adding another year to my plan and distributing the course load.</p>
<p>It looks like the actual upper division requirements for UIUC CS (CS track) are:</p>
<p>Math 415, 416, or 426 (linear algebra)
Math 461 or 463 (probability)
CS 373 Theory of Computation
CS 357 Numerical Methods I
CS 421 Programming Languages and Compilers
CS 473 Algorithms
Technical electives: Four additional 400-level courses chosen from the following: any CS courses numbered 410-489 or 498, ECE 425, ECE 462, ECE 470, MATH 413, or CI 435
Senior project/thesis: CS 499, CS 492-493, CS 492-494, CS 427-428, or CS 427-429</p>
<p>It looks like you have some lower division courses listed in your UIUC schedule which are presumably not available at any community college near you:</p>
<p>CS 210 Ethical and Professional Issues in CS
CS 233 Computer Architecture
CS 241 System Programming
CS 242 Programming Studio</p>
<p>Most of the courses are 3 credits each, so a normal schedule would have 5 courses per semester.</p>
<p>If possible, I’d suggest taking the algorithms class as early as possible in the sequence. Aside from other subjects making liberal use of algorithms (such as compilers), many, perhaps most software companies put great weight on algorithm knowledge, so early exposure to it can help with internships.</p>
<p>The theory of computation class would be good if you are interested in studying CS theory (NP-completeness, Turing machines, etc.).</p>
<p>Theory of computation (CS 373 (required)) is beneficial if taken before any compiler courses (CS 421 (required), CS 426 (optional)), since the theory about finite state machines, push down automata, and the like is the basis of lexing and parsing computer languages by compilers.</p>
<p>Switch to Computer Engineering immediately. Courses like Numerical Methods and Theory of Computation are the best ways to become unemployable :P</p>
<p>edit: I’ll elaborate. I feel like there are only so many practical courses that are absolutely necessary. Given that you’re going to learn a lot on the job anyways, you might as well take the time in college to explore the theoretical underpinnings of CS that you might never again have the chance to study.</p>
<p>I wouldn’t think courses like numerical methods would make you unemployable, but I can see how courses like theory of computation could. </p>
<p>I am taking both this semester, theory of computation is required, numerical methods is an elective. Since my school is close to Wall St. my professor is always using examples from finance in numerical methods. Our TA for numerical methods also said she always uses a bunch of the techniques we learned in class for her animation research.</p>
<p>Don’t see why people dislike the idea of taking one theory of computation course. It is not a high workload course, nor is it particularly difficult if you like math and are good at it (which you should be if you are majoring in CS), so it is not like it adds much more work to a CS major degree program. If you are concerned about concepts more directly applicable to entry level CS employment, there are plenty of other CS courses that you can take that include those concepts.</p>
<p>CS majors should take courses in the theory of computation for the same reason that engineers should take courses in calculus and differential equations (edit: higher-level subjects like PDEs might be a better or fairer comparison here). If you don’t feel that it’s important for computer scientists and software engineers (or traditional engineers) to know <em>why</em> things work - only <em>what</em> things work, and <em>that</em> they work - then by all means, that’s certainly a point of view, just not one I find particularly satisfying.</p>
<p>As has been said earlier in this thread, you probably only need the first Software Engineering course and focus the rest of your electives to get a solid technical grounding. That being said…once you’re in industry (and not somewhere that is research heavy) and move above grunt level, software engineering is the MOST important thing to know. Most people learn it from their employer, and there are many employers who are either terrible at it or just ad hoc in their methods. Projects will fail because of poor SE processes. So if you ever want to go to grad school for CS, focus on SE. For now, get as thorough a technical education in CS that you can.</p>
<p>UIUC offers a software engineering certificate in addition to the BS in Computer Science for undergrads, and that’s what I’m planning to fulfill with this plan (SE I & II are required.) Should I not go for that?</p>
<p>If I understand UIUC’s requirements correctly, the SE courses (CS 427-428 or 427-429) would substitute for some other type of senior project in one or two courses (CS 499 or 492-493, or 492-494); one of the choices is required for CS majors. Based on the catalog descriptions:</p>
<p>499 is undergraduate academic research
492-493 or 492-494 involves solving “typical commercial or industrial problems”
427-428 or 427-429 are more about software engineering methods</p>
<p>“It is assumed that students in the Software Engineering Specialization program will not take the senior project but will take (CS 427 & 428) instead.”</p>
<p>Description of CS 427 - Software Engineering I:
“Software process, analysis and design. Software development paradigms, system engineering, function-based analysis and design, and object-oriented analysis and design. Course will use team-projects for hands-on exercises.”</p>