I found a website saying that calculus and linear algebra are necessary for System Programming.
System Programming, as far as I know, is about osdev, drivers, utilities and so on. I just can’t figure out how calculus and linear algebra can be helpful on that. I know that calculus has several applications in science, but in this particular field of programming I just can’t imagine how calculus can be so important.
The information was on this site:
http://www.wikihow.com/Become-a-Programmer
Edit: Some answers here are explaining about algorithm complexity and optimization. When I made this question I was trying to be more specific about the area of System’s Programming. Algorithm complexity and optimization can be applied to any area of programming not just System’s Programming. That may be why I wasn’t able to came up with such thinking at the time of the question.
15
I would imagine its not very important if you’re writing non GUI utilities on top of a modern operating system without working on its internals. Its probably a different story if you are working on changing a modern operation system or developing a new one.
If you’re working with video hardware or a bare metal windowing system, you’re going to need knowledge of linear algebra to efficiently update graphics. I haven’t looked myself, but I bet you could find examples in the source code for X, KDE and Gnome.
If you’re working with hardware regarding digital signal processing then calculus will be very important. I imagine there are some devices which do their heavy lifting with the system’s CPU instead of a local microprocessor and these often interface to analog electrical systems.
Also calculus plays an important role in performance analysis besides just linear algebra when attempting curve fitting to the data.
2
SomeKittens’ comment is right on the money: You need calculus and linear algebra because those courses change the way that you think and the way that you understand the world. Linear algebra is all about mapping from one domain to another; calculus covers the way functions behave. They’re powerful tools themselves, but the techniques you learn when studying those fields also become part of your mental picture of the world.
You also need those courses because people will expect you to be able to think in those terms. I don’t often see my colleagues taking the derivative of a polynomial on their white boards, but I do often see sketches of functions with the tangent drawn at some interesting point, or the area under the curve shaded. We don’t care enough about the actual values to bother calculating them, but understanding about how the values change is essential, and it’s part of everyday conversations.
Any undergraduate computer science degree will require calculus, linear algebra, statistics, logic, and other math courses not because programmers need to apply the techniques directly on a regular basis (although they might, depending on what they do), but because you need that knowledge to understand the material that comes later.
3
I’ll go ahead and say that I don’t think calculus or linear algebra are likely to be important for systems programming.
I certainly think calculus and linear algebra are worth learning in general — I’m a math guy! And, as other answers point out, there is some indirect relevance, as performance analysis and algorithm design can use advanced math. However, I don’t think systems programming is any more dependent on those kinds of math than most other fields that aren’t generally thought of as mathematical.
3
I suspect it’s true around the edges. System programmers have to be far more concerned about performance and reliability, so algorithm analysis might be important, and calculus is sometimes needed for proofs of Big-Oh analysis. Subjects like queuing theory and discrete optimization (that’s mathematical optimization not code optimization) can a play a role too. However I think those would mostly apply to folks working on the bleeding edge of operating systems and network protocols, not so much the person working on the USB 3.0 driver.
1
Your definition of Systems Programming pretty well aligns with the answer in Wikipedia.
If you think about what it’s providing – ie. a software interface into hardware, then it starts to make sense why calculus and linear algebra are handy skills to have.
Abstracting out that low level interface requires you to understand how the device operates. Electronics devices are still bound by the laws of physics. Calculus and linear algebra provide a means to model the behavior of the device. Modeling the device lets you provide a service into its functionality.
That having been said, those two fields are not the end-all be-all for Systems Programming. I know quite a few EE’s who didn’t do as well with calculus and linear algebra but can still explain what the device is doing fairly succinctly.
3
General web application and/or administrative programming doesn’t involve much application of linear algebra or calculus, but many specialist fields do. If you deal with geometry you’re bound to run into linear algebra. Most physics programming also deals with both algebra and calculus. As well as just about anything having to do with waveform manipulation, such as sound and radio programming.
In general it is more important to understand discrete mathematics which, amongst other things, deals with set theory, graph theory and formal (boolean) logic which is useful in many applications like information management, databases and other places where data and/or logic combine.
In the case of Systems programming I don’t see that many applications.
2
As others have mentioned, any mathematics courses in university can sharpen your problem solving and deductive reasoning skills. These are important to almost anyone.
But sometimes knowing some linear algebra can be helpful, particularly for some pretty good business ideas.
System Programming, as far as I know, is about osdev, drivers, utilities and so on. I just can’t figure out how calculus and linear algebra can be helpful on that.
With calculus it’s pretty easy, as soon as one takes a closer look at the course contents. It is closely related to algorithm complexity, Big-O notation – stuff like that, pretty fundamental in programming.
Equations are what you get when estimating algorithm complexity. Three-level nested loops from 0
to N
are N3, two-level nested loops are N2, one is N. Evaluation you get could look like (N3 + 2 * N2 + N) – that’s an equation.
Now, if you want to better understand how quickly execution time will grow when N increases, this is closely related to derivatives / differentiation. Other parts of calculus you may find helpful are limits and asymptotic analysis – these will lead you to understanding Big-O notation, better scoring at programming interviews and possibly, better doing systems programming.
- You are assigned to design file allocation table, what data structure are you going to use? Assuming that there are many small files which are rarely modified, what would be preferable? Assuming a relatively small amount of large files that are always appended at the end, are you going to use the same structure? How would you decide?
As for Linear Algebra, here programming applications shoot at you from the very first picture.
If you ever will have to deal with raster graphics (eg in video drivers), pictures like above will be coming at you in your worst nightmares.
- How come that test #12345 shows missing pixel? did I do something wrong implementing Bresenham? could it be just a mistake in test design not properly accounting for rounding errors?
2