<p>I know these weren’t particularly directed at me, but I’ll share some thoughts.</p>
<p>
No, Abstract Algebra is not exactly the same as Linear Algebra. First off, while courses in Linear Algebra usually involve some proofs, it can be taught as a service course to engineering majors and focus more on applications in calculus and differential equations. Abstract Algebra is usually a required course in undergraduate curricula and treats algebraic structures such as groups, rings, fields, etc., as well as properties of operators and relations. Studying Abstract Algebra can be useful for further study in CS in areas such as cryptography or theoretical computer science and formal language theory. Study in Linear Algebra can be useful for things like computer graphics and numerical analysis. The take away is that these courses differ significantly both in covered material and (often) in delivery.</p>
<p>
Again, the answer is not really. Number theory usually refers to advanced arithmetic treatment of the set of natural numbers. A classic problem in number theory is Fermat’s last theorem: are there solutions over the natural numbers to the equation a^n + b^n = c^n for n > 2? This was only (fairly) recently proven using quite advanced mathematics. Numerical methods and analysis generally refer to similar things: the design and application of computational techniques for calculating certain things of interest. Classic examples of the kinds of things done in numerical analysis include numerically solving differential equations via, e.g., Runge Kutta methods. Combinatorics (or “discrete math”, more generally) deals with things like enumeration, graph theory, decision theory, etc. All of these areas are certainly of great interest to aspiring computer scientists and software developers, although only combinatorics really needs to be treated in any depth (understanding something about graphs, trees, counting, etc. is indispensable).</p>
<p>
All of the math topics you have listed are certainly within the realm of what a computer scientist/software engineer might find useful. Of them, I would say that combinatorics and abstract algebra are probably the most aligned with software development, followed by linear algebra and number theory, followed by numerical analysis/methods and differential equations. Note that to study numerical analysis/methods, typically both linear algebra and differential equations will be indispensable. Generally speaking, the more math you take as a CS major, the better off you are. Taking math courses not only teaches you about the content of the course, but it increases mathematical maturity, which may be the most important benefit of courses like differential equations (which is not all that compatible with the content of core computer science topics).</p>
<p>
I normally encourage CS students to take something vaguely resembling the following core CS curriculum (either through the school’s core or through electives):</p>
<p>Data Structures & Algorithms
Operating Systems
Computer Organization / Architecture
Computer Networks
Programming Languages
Formal Languages/Automata Theory / Theoretical CS</p>
<p>Given the courses listed above, it seems like this could receive fairly decent coverage, provided the right electives were chosen (note: I would not recommend taking a second course in algorithms at the expense of missing out on a course on formal languages or theoretical CS). Computer Networks and Operating Systems seem to be the only missing data points, otherwise.</p>