Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

exploring mathematics of/in computer science [closed]

I have been working for two years in software industry. Some things that have puzzled me are as follows:

  1. There is lack of application of mathematics in current software industry.

    e.g.: When a mechanical engineer designs an electricity pole , he computes the stress on the foundation by using stress analysis techniques(read mathematical equations) to determine exactly what kind and what grade of steel should be used, but when a software developer deploys a web server application he just guesses on the estimated load on his server and leaves the rest on luck and god, there is nothing that he can use to simulate mathematically to answer his problem (my observation).

  2. Great softwares (wind tunnel simulators etc) and computing programs(like matlab etc) are there to simulate real world problems (because they have their mathematical equations) but we in software industry still are clueless about how much actual resources in terms of memory , computing resources, clock speed , RAM etc would be needed when our server side application would actually be deployed. we just keep on guessing about the solution and solve such problem's by more or less 'hit and trial' (my observation).

  3. Programming is done on API's, whether in c, C#, java etc. We are never able to exactly check the complexity of our code and hence efficiency because somewhere we are using an abstraction written by someone else whose source code we either don't have or we didn't have the time to check it.

    e.g. If I write a simple client server app in C# or java, I am never able to calculate beforehand how much the efficiency and complexity of this code is going to be or what would be the minimum this whole client server app will require (my observation).

  4. Load balancing and scalability analysis are just too vague and are merely solved by adding more nodes if requests on the server are increasing (my observation).

Please post answers to any of my above puzzling observations. Please post relevant references also.

I would be happy if someone proves me wrong and shows the right way.

Thanks in advance

Ashish

like image 835
Ashish Sharma Avatar asked Dec 28 '09 19:12

Ashish Sharma


People also ask

How mathematics is used in computer science?

Math matters for computer science because it teaches students how to use abstract language, work with algorithms, self-analyze their computational thinking, and accurately modeling real-world solutions.

Is a branch of mathematics with close connections to computer science?

In recent decades, discrete mathematics has numerous applications in computer science, it is used in programming languages, software development, cryptography, algorithms etc. It includes various topics such as graph theory, set theory, probability theory and many more.

Is Exploring computer science hard?

The short answer is “yes.” Search any list of majors to study, and you'll likely find that computer science tops the list as one of the most challenging disciplines to learn. Compared to other fields of study, pursuing a career in computer science requires both technical and analytical skill sets.

Can I study computer science without maths?

'No' you can not study computer science without math's. But some Universities allow only studying components of computer science and short courses in programming, software or web development.


1 Answers

I think there are a few reasons for this. One is that in many cases, simply getting the job done is more important than making it perform as well as possible. A lot of software that I write is stuff that will only be run on occasion on small data sets, or stuff where the performance implications are pretty trivial (it's a loop that does a fixed computation on each element, so it's trivially O(n)). For most of this software, it would be silly to spend time analyzing the running time in detail.

Another reason is that software is very easy to change later on. Once you've built a bridge, any fixes can be incredibly expensive, so it's good to be very sure of your design before you do it. In software, unless you've made a horrible architectural choice early on, you can generally find and optimize performance hot spots once you have some more real-world data about how it performs. In order to avoid those horrible architectural choices, you can generally do approximate, back-of-the-envelope calculations (make sure you're not using an O(2^n) algorithm on a large data set, and estimate within a factor of 10 or so how many resources you'll need for the heaviest load you expect). These do require some analysis, but usually it can be pretty quick and off the cuff.

And then there are cases in which you really, really do need to squeeze the ultimate performance out of a system. In these case, people frequently do actually sit down, work out the performance characteristics of the systems they are working with, and do very detailed analyses. See, for instance, Ulrich Drepper's very impressive paper What Every Programmer Should Know About Memory (pdf).

like image 72
Brian Campbell Avatar answered Sep 23 '22 22:09

Brian Campbell