문제

Is Computer Science science, applied mathematics, engineering, art, philosophy? "Other"?

To provide background, here is Steven Wartik's blog posting for Scientific American titled "I'm not a real scientist, and that's okay." The article covers some good topics for this question, but it leaves open more than it answers.

If you can think of the discipline, how would computer science fit into its definition? Should the discipline for Computer Science be based on what programmers do, or what academics do? What kind of answers do you get from people who've seemed to think deeply about this? What reasons do they give?

도움이 되었습니까?

해결책

There are two distinct IT disciplines:

  • Computer Science - is the discipline study of computers and computation using the scientific method.

  • Software Engineering - is the discipline of designing and implementing software following proper engineering principles.

The two overlap somewhat, but the distinction is really about desired outcomes of science versus engineering. The desired outcome of a scientific discipline is knowledge. The desired outcome of a engineering discipline is things that work.

So to answer your question:

Is Computer Science science, applied mathematics, engineering, art, philosophy? "Other"?

Computer Science is Science ... when done properly. However, like other disciplines CS has overlaps with Mathematics, Engineering, Physical Sciences, Social Sciences, Philosophy and so on.

I would also add that what most programmers do is neither Computer Science or Software Engineering. It is more like what a craftsman does.

And sad to say, neither academic Computer Science or the Software Engineering profession are as rigorous as older science and engineering disciplines. (There are fields of Computer Science that are traditionally rigorous; for example, the ones with a strong mathematical basis. But for many fields, it is simply too hard / expensive to do proper scientific studies on the questions that really matter.)

다른 팁

Programmers rarely "do computer science". They mostly use results of "software engineering", which is an engineering discipline, obviously.

Other than that, Computer Science is Applied Mathematics. If you compare CS with something indubitably belonging to applied maths, you'll notice a lot of resemblance.

Computer scientists design and study ways of computation (algorithms), taking most of theory from Mathematics (logic, graph theory, combinatorics, etc)—and contributing to it at the same time. Just like the rest of applied mathematics.

They evaluate properties of these models and algorithms theoretically, and carry on modeling experiments (write test programs). Like applied mathematicians simulate flow of liquid in tubes on clusters, computer scientists use computers to experiment with implementations of their algorithms. The results of these experiments go directly into production: either to an oil refinery or to a software for stock analytics.

In the university I finished there isn't even a special department for computer science: among other, non-computer domains, computer science chair is a part of Department of Applied Maths.

Computer Science is a term which these days cover many, many things:

  • The master craftsmen doing work for others based on their experiences with their tools (and having apprentices etc).
  • The tool smiths inventing and creating new tools for the craftsmen
  • The researchers developing new alloys and other materials - like plastic - for the tool smiths.
  • The theoretical scientists figuring out how stuff works so the alloymakers know how their tools work.

Note how all the above have distinct naming instead of just "computer scientists". The difference is just that Computer Science is too new for naming to settle.

First of all, it is computing science. This deals with mathematics behind computation.
There are other disciplines that are more oriented towards engineering.

The difference is the same as any related science and engineering disciplines. One is about accuracy, other about precision. Computing science is theoretical, others are the science applied to problems: branches of engineering.

Computer science is applied and experimental mathematics.

Computer science is a branch of applied mathematics that deals with the design and application of computational automata. Software engineering is the proper subset of computer science that deals the formalized design and construction of code for the von Neumann architecture. The von Neumann architecture is only one way to implement a computing machine. For example, the machine used to crack Enigma-encoded messages was not a von Neumann machine.

Software engineering is a practitioner discipline. Computer science is research-oriented discipline. Most computer scientist undergrads end up in software development because research requires one to hold at least a masters degree, which enforces the belief that computer science is a glorified programming certificate.

The discipline most accurately called "Computer Science" is, in most universities I've checked, an applied science, similar to engineering disciplines; if you major in it, you receive a "BS" or "MS". Texas Tech's CS degree was offered by the Engineering college. The discipline, as taught, is mostly theoretical; you learn the concept of Turing machines, DAs/NDAs, and other fundamental concepts that the "day-to-day" programmer doesn't really have to keep rattling around in their skull. You also get a pantload of higher math; the Texas Tech CS degree, and I'll bet many others as well, pretty much hands you a Mathematics minor to go with it. To that, most university's degree tracks add in a hefty dash of practical low-level application; you learn an assembly language, a 3rd-gen language, you explore computer graphics, operating systems, and even a good bit of electrical engineering/digital design.

However, most people who code for a living are not "computer scientists"; they are, strictly speaking, "software developers" or (when you add in analysis/design) "software engineers"; that job is much less hardware-level (though you have to know the basics of that), much more systems analysis, design and straight-out coding. Many universities have a different track just for that; at Texas Tech it was called "Management of Information Systems" and it was a Business degree (BBA/MBA). That track was lighter on higher math (what you had to know about algebra and differential/integral calc was squeezed into two semesters of "business math", and didn't include vector/tensor calc, linear algebra, etc), much heavier on financial math (a semester each of stats and finance, with two each of accounting and economics). Lighter on operating systems, heavier on "stack" technologies such as databases, web servers, networking and general systems administration. Lighter on low-level languages, circuit design and AI, heavier on 3rd and 4th-gen languages, systems analysis and project management. I got this degree from Texas Tech and by the time I'd left I'd had at least a semester each of Java, VB, C# and web languages (HTML/CSS/PHP), plus a year of OOA&D and various other courses in IT project management.

Which is better in the real world? I got the MIS BBA, my brother got the CS BS, and we're both employed at roughly the same salary level (adjusting for cost of living) as senior software engineers. He had to learn a lot of the required OOA&D on the job, as well as spin up pretty quickly in C#/Java from his basic C++ knowledge. For my part, I wish I had the two semesters of conceptual algorithm study that he got while I was stuck in business management courses (yes, MIS is a "Management" degree, but I've found that 99% of my knowledge of how to manage and not manage other people has been learned by example).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 softwareengineering.stackexchange
scroll top