Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

This question already has an answer here:

In the final year of my class, we have

  • Distributed Systems
  • Visual C++
  • Design of Unix OS
  • Neural Networks and Fuzzy Systems
  • Java 2 Enterprise Edition

What according to you guys, should be the perfect combination of courses a student opt in his/her CS curriculum?

share|improve this question
what is your interest? –  Tech Jerk Sep 3 '10 at 8:32
I'm sorry, Computer Science and Engineering. –  tsudot Sep 3 '10 at 12:18
add comment

marked as duplicate by Graham Lee, gnat, ChrisF Apr 11 '13 at 7:41

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

6 Answers

up vote 2 down vote accepted

I think that computer science courses should be mathematical and theory intensive, while engineering courses should be more applied.

Topics covered in a computer science curriculum should include discrete mathematics, at least single variable calculus if not multivariable calculus and differential equations, statistics, automata theory, graph theory, complexity theory, analysis of algorithms, algorithm design and implementation, and data structure design and implementation. Electives would include topics such as computational sciences (biology, physics, chemistry), machine learning, computer vision, image processing, artificial intelligence, design of programming languages, compiler design, security (cryptography as as example of an important topic), and operating systems.

Software engineering should include the same mathematical background - discrete mathematics, calculus (at least single variable), and statistics. Other courses should be requirements engineering, architecture, design, testing, process, software usability/HCI, and formal methods. An overview of computer engineering (hardware, digital logic, digital circuits, etc) and computer science (automata theory, formal languages) should be required. There should also be room for a sequence of mathematics, computer science, and or computer engineering electives as computer science is the foundation of software engineering (in the same manner that physics is the foundation of mechanical engineering) and computer engineering is relevant to anyone developing software on low-level systems such as microcontrollers. Software engineering electives should include different types of software systems - distributed, concurrent, enterprise, web, embedded, real-time, along with additional courses on specific process models and methodologies (agile, CMMI).

I have no experience with computer engineering, so I can't comment on that. I would suspect that such a program would focus on hardware, low-level programming (assembly, C, maybe C++), embedded systems, and computer architectures.

However, all programs should have room for a number of liberal arts and free electives. I feel that these, in most cases, should be used for communication, business, and social science (psychology, sociology, ethics) courses. It's important to get out of the technical world and learn about how people interact and how businesses function so that you can be more effective at work.

You might be interested in my university's Computer Science, Software Engineering, and Computer Engineering curricula. I used these and my own research into the boundaries of CS/SE/CE to answer this question.

share|improve this answer
add comment

Following set of topics are good enough for Computer Science Courses

  • Operating Systems + Lab
  • Computer Networks + Lab
  • Database Systems + Lab
  • Algorithms Design, Analysis and Complexity + Lab
  • Data structures and Object Oriented Programming Concepts + Lab
  • Computer Organization and Architecture
  • Compiler Design and Analysis + Lab
  • Finite Automata and Formal Languages
  • Principles of Programming Languages
  • Software Engineering
  • Computer Graphics
  • Management Information Systems
  • Information Security + Lab
  • Artificial Intelligence
  • Graph Theory & Discrete mathematics
  • Micro processors + Same Lab
  • Software Quality Assurance
share|improve this answer
Good list here. –  Chris Sep 4 '10 at 19:03
add comment

Well, I'm only in my second semester Computer Science (Informatik in German), but I do know the required courses which I can post.

1st Semester:

~Computer Architecture (ARM Processor) - Assembly programming, understanding Low-Level architecture (e.g. Stack, Barrel Shifter, Registers, etc)

~Technical Computer Science (Hardware-oriented. Building RAM, understanding Memory organization, electricity (Ohm's Law, etc), transistors and the physical components of hardware)

~Mathematics (Combinatorics, Discrete Mathematics)


~Programming I (Basics up to Linked-List and BSTs in C++)

2nd Semester:

~Microprocessors (Intel X86 or ARM) - Hardware programming with C and ASM. This is where we start learning how to analyze Hex Dumps and programming the actual hardware. Haven't taken the course yet, but it's regarded as the hardest course of the first four semesters.

~Mathematics (Analysis and Probability)

~Theoretical Computer Science (Analysis of Algorithms, Turing-completeness, etc)

~Programming II (Self-Balancing Trees, Algorithms, Data structures)

3rd Semester:

~Operating Systems (Windows or Linux)

~Software Engineering

~Math III


4th Semester:

~Computer Graphics (OpenGL with C++)

~Web Applications

~Distributed Systems

I think it's a fairly healthy mix. We start with low-level programming (a huge plus when I read about Java schools) and go progressively higher each semester. In my mind, this is a very good curriculum and I can wholly recommend it (so far).

share|improve this answer
+1 Dude your school sounds awesome. –  Terrance Oct 20 '10 at 19:03
add comment

It could be in one of the classes you mentioned, but there should be a class that contains some sort of capstone project. By that, I mean a large, complicated project that must be completed by a team.

share|improve this answer
add comment

To me this answer really depends on your specialization. Most schools that I know of do not offer general CSE degree but usually a few different such as Hardware, software, networking. Therefore, it comes down to what specialization.

share|improve this answer
add comment

computer science and engineering courses:

  1. Operating Systems
  2. Computer Networks
  3. Computer Organization and Architecture
  4. Software Engineering
  5. System Software
  6. Computer Graphics
  7. Management Information Systems
  8. Artificial Intelligence
  9. Graph Theory & Discrete mathematics
  10. Micro processors
  11. Software Quality Assurance
share|improve this answer
how does this answer the question asked? consider editing your post to explain this in more details –  gnat Apr 11 '13 at 6:58
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.