tamtam402 said:
Undergrad mathematical knowledge, or undergrad physics knowledge? Both fields interest me a lot, and I can do a double major in CS + either math or physics. I love these 3 fields almost equally, so I figured I would study the thing that complements CS the best.
Sorry for my bad english btw.
Depends on what you want to apply you're CS knowledge to. I'll list a few examples:
1) Video games
For this maths and physics would be beneficial. Let's say you model light. You have models that are dead simple (like ambient light aka sun light modeling) to raytracing and radiosity models. Same for geometry. You go from simple collision detection models in a plane (signed distance between point and respective plane) to convex hulls in any dimension (although you only typically use 3). Also think about writing camera systems: some use splines, springs + damping, quaternion interpolation on the unit sphere. And this is the tip of the iceberg. These million plus line monstrosities are very complicated
2) Data driven software
Apart from the particular sensory fields (visuals,audio) you will need to have good data driven software that's extensible and backwards compatible. Something like an XML container data structure is a good step in this direction.
3) Flow control
This is one thing that you should think about when you're writing programs or reading them. This is especially important with multi-core / highly parallel / independent hardware type systems where devices can work independently and fire off events independently.
Back in the day (and even now) our program would be nested in some infinite loop until some exit combination broke it and returned control back to the shell. While that probably won't change, what will change is that programs will more than likely move from one where you write heaps of do loop while not broken to the "register an event with the systemwide event handler" and hook the appropriate message.
On top of this you're event handler (if it is smart) could for example launch the callback in a different thread and monitor the time taken and if it is taking too long it can kill it. So if you did this and offered the ability for your program to be modded through DLL's then yeah you could in a way "debug" offensive addons.
4) Systems design
By systems design I don't mean the UML crap that software engineers do. When you design a system (any system) there are always going to be a few things that you should have especially when you are planning to have an application that can easily be extended. Some include it to be A) Data driven and B) Component Based
If you want to learn about this kind of thing your best bet is to look at the different standards of Microsoft's different technologies. If you don't like Billy G, then check out something like CORBA from the Object Management Group. I would however recommend that you look at the COM design (Component Object Model).
In relation to that things like Class Factory Templates, Interface Registration, Resource Templates, Some kind of interface that allows script language compatibility, and other metadata paradigms will help you get an idea of how to build rigid and robust systems with templates that will last a long time.
I'm just throwing some things out there since I don't know exactly what you're interests are or where you'd like to go with it.