11
$\begingroup$

Why is stuff like

  • database administration

  • Linux administration

  • network administration

etc. not prioritized? I used to think programming is the end of the road, but I realized there is much more to computer science than software development. I know the "Stockholm syndrome" and we'd say "They're easier to learn than programming", but that's not my concern. What I am saying is when we say "final year project" in computer science, why does it have to be a software? Why not other stuff? Not everyone can be a software developer even if they work really hard for it which was the case for me. I can code, but I can't develop software.

I wish I had realized it sooner. Why is it like that?

$\endgroup$
10
  • 13
    $\begingroup$ To me they are definitively not the same field, even if they are close. What you refer to is more IT related. When you're a developer you can with minimal effort get into those topics, when you're into IT related topics, you can't really become a developer because you will lack the necessary basis that you would have learned while becoming a developer. $\endgroup$
    – YCN-
    Commented Mar 8 at 8:43
  • 20
    $\begingroup$ This sounds a bit like asking why a degree in nuclear physics doesn’t cover how to safely operate a nuclear reactor or a radiotherapy machine. There’s some overlap, but the specific skills in question need knowledge well beyond the degree field to be good at them. $\endgroup$ Commented Mar 9 at 17:57
  • 3
    $\begingroup$ Other educations teach those things. Computer science gives the principles and you are expected to be smart enough to pick up the actual details on your own. $\endgroup$ Commented Mar 10 at 10:36
  • 16
    $\begingroup$ After reading the title and before reading the question, i thought this question would be about why so much programming is taught instead of "real" computer science like algorithms ;) $\endgroup$
    – Carsten S
    Commented Mar 10 at 20:48
  • 11
    $\begingroup$ You may be more interested in an IT degree instead of a CS degree. They're two very different courses. In my humble opinion a CS graduate is specifically expected to be able to create software that an IT graduate can use to perform their jobs. $\endgroup$
    – slebetman
    Commented Mar 11 at 4:02

8 Answers 8

21
$\begingroup$

The realm of computing encompasses a vast array of fields, each specializing in various aspects of computer technology, from software development to hardware engineering, and beyond. Importantly, none of these fields (except for some the math that became computer science) existed before computers.

The list of computer fields is growing constantly, and new subspecialties are emerging. Software Engineering is turning into an entire field that is separate from programming. Machine learning has transformed over the last ten years from a side curiosity within computer science to its own entire subfield. Cloud engineering has become a new and separate area.

There are probably more than a hundred distinct fields at this point - far too many to enumerate here, and not a useful exercise, since which fields are in and out would be subject to reasonable debate, and the list is getting bigger all the time.

The term "Computer Science" still has an unfortunate double usage, with some people referring to the theoretical, mathematical underpinnings of computation, and others referring to programming. (I personally think of programming as a distinct field that once emerged from computer science, but has since grown its own independence.)

As others have pointed out, the areas that you are targeting are under the auspices of IT, which is also a vast field that is splintering into subfields. There are programs to study IT, and certifications to gain. The three specific areas you mentioned are often grouped together - you can spend your whole life working in that arena, and make a great difference to people by creating and maintaining reliable infrastructure that allows them to do whatever it is that they need to get done.

If you're not great at making software, that isn't really a hindrance - go and pursue some IT certifications and work. It's not computer science, but it is an important field in its own right, and can bring quite a lot of satisfaction.

$\endgroup$
33
$\begingroup$

Why are stuffs like

  • database administration

  • linux administration

  • network administration

etc not prioritized?

Because they are only tangentially related to Computer Science. Programming is more closely related to Computer Science, but the two are still very different and distinct. I challenge you to read through a dozen or so typical questions on Stack Overflow and Computer Science Stack Exchange or even Theoretical Computer Science Stack Exchange and analyze their differences.

Computer Science vs. Programming

Computer Science is a really bad name, because it confuses a tool with the object of study. It has been said that Computer Science is really a misnomer, and is akin to calling Astronomy "Telescope Science" – just because computers can be used to investigate information and processes doesn't mean that they are somehow inherent to that science, just like the fact telescopes can be used to investigate planets and stars doesn't mean that telescopes are somehow inherent to astronomy.

Computer Science isn't about computers. It is about Computation.

There are some languages, for example German, French, and Italian, where the scientific discipline makes no reference to computers at all: in German, it is called Informatik, in French informatique, in Italian informatica – all are a neologism based on information and the Greek suffix -ik, formed similar to mathemetics. In Spanish, it is called ciencias de la informática (similar to German, French, and Italian) or ciencias de la computación: note the subtle difference to English, it is the science of computation, not the science of computers. Danish uses the terms datalogi (a neologism formed by combining data with the -logi suffix as in geology, meteorology, metrology, etc.) for the stricter sense of the science of information, data, computation, and processes, and informatik for a broader inter-disciplinary view of the effects of "datalogi" on society, politics, humanity, and the broader world in general; what might be called Social Informatics in English.

As you can see, in many languages, there is a clear distinction made between "Informatics" and computers. It is a rather unfortunate accident of history that the language which confuses the two also happens to be the lingua franca for it.

I always thought it was a little harsh and arrogant, but there is a kernel of truth in what my Informatics professor said in the first lecture: "if you expect to learn programming, the trade school is on the other side of town". We did, in fact, do some programming: we constructed Turing Machines, wrote some λ-calculus expressions, constructed some Petri Nets, NFAs, DFAs, PDAs, and Mealy machines, we wrote some WHILE and LOOP language code (teaching languages designed to teach the difference between bounded and unbounded loops), some Gofer (a teaching variant of Haskell), some MIPS assembly, some Python, some GJ (Martin Odersky's variant of Java with parametric polymorphism), and probably many others I forgot. But it was all in service of teaching a specific concept, such as the difference between primitive-recursive and general-recursive functions.

Computer Science is the science of computation, information, data, and processes. Computers and programs are tools which can be used to study Computer Science, but they are not its subjects. Designing a new routing protocol will definitely involve computer science, but configuring a switch does not. Designing a new data structure for efficient storage and retrieval of databases from SSDs will involve Computer Science, but configuring PostgreSQL does not. Replacing Linux's task scheduler with a starvation-free variant will involve Computer Science, but configuring logging does not.

I'm not saying any of these are not important, quite the opposite. But they are not Computer Science, so why should they be taught as part of Computer Science? Knowing how to change a tyre is also an important skill, but that doesn't mean it should be taught as part of a Chemistry degree.

What I am saying is when we say "final year project" in computer science, why does it have to be a software?

If your final year project is writing software, I would argue you are not studying Computer Science, you are studying programming. There is nothing wrong with studying programming, nor is there anything wrong with studying database administration, Linux administration, network administration, or other IT topics, but it's just not Computer Science.

I would expect a final year project in Computer Science to be something like designing a new data structure or a new algorithm, proving properties of an algorithm or data structure, etc. A final year project in Computer Science can, of course include a program which demonstrates or exemplifies the subject matter. For example, a ride sharing app, for which you prove a certain optimality property for its matching algorithm. But simply writing a program does not demonstrate understanding of Computer Science.

$\endgroup$
1
15
$\begingroup$

All of the things you mention aren't really CS, but rather management of various kinds. CS is a theoretical field at base, and some "vocational" programs will teach the applied things that you have mentioned. A CS program makes you a creator, not a manager if done well.

A CS database course is theoretical, probably dealing with the data structures used to efficiently store and retrieve large amounts of data. But it isn't about administering a database and managing servers and security, and such.

A CS operating systems course will discuss principles of implementation of an OS, such a Kernel processes. It may focus on a linux like structure, but is probably more general. Micro Kernels are (to me) an interesting thing, unlike what you see in linux.

A CS Networking course will discuss things like compression, encryption, bandwidth, network topologies, and on and on, but isn't about administering networks, by which you likely mean administering a single node in a network and dealing with servers, outages, attacks, and such.

CS is about the future of things. Its intent is to prepare people to create new things, not manage existing things. Vocational programs are for the latter.

And, coding is a tool used in all of these things. It isn't the main purpose, but it is how we create things in CS, so is an essential skill. It isn't that it is "prioritized" actually, but without it you have no tool to create anything. (Well, math is a pretty good tool also for this.)

It might better be said that a CS program prioritizes "algorithms" (algorithmics) rather than programming. Algorithms are a higher level way of thinking. Algorithms are often implemented in programs, and programs are used for testing, but they are, at base, highly conceptual.

All of the subfields mentioned here depend on specialized efficient algorithms for their proper action and usability.

$\endgroup$
1
  • 1
    $\begingroup$ Right, abstraction and implementation require each other, else you just have "one hand clapping". I like your sentence: "CS is about the future of things." $\endgroup$
    – Scott Rowe
    Commented Mar 10 at 22:41
7
$\begingroup$

Other answers have explained how these Information Technology fields are separate from "Computer Science", and deserve their own curricula. I'm going to give a somewhat different view.

I have been a programmer for many decades, and my undergraduate education (in the early 80's) was in computer science and software engineering. But during my career I have had many roles: software developer, system/network administrator, and customer technical support.

In all these professions, I found that my CS/programming background was an important contributor to my success. It's important to understand how computer systems work in order to be able to manage and support them. I've had colleagues who didn't have similar background, and they often learned to do things by rote, without really understanding why they worked; acting without understanding makes you less flexible and creative.

Furthermore, programming comes up all the time in various IT roles. As a system administrator, you often have to write scripts to automate your processes. In tech support, I would write programs to reproduce problems or test solutions, and I would often read the code of the software I was supporting to find the cause of a problem and figure out how to work around it.

In my opinion, a solid base in programming is important for a career in any other computer-related field. While it's possible to be effective without it, I don't think you can excel at them.

$\endgroup$
5
  • 2
    $\begingroup$ Programming=/=software development. I too can script. $\endgroup$
    – achhainsan
    Commented Mar 10 at 13:52
  • 2
    $\begingroup$ Yes. It is more important to have ideas about what to build than to be great at building it. Successive Approximation will refine a possible answer, but it will not tell you how to get started. Doing things "by rote" is not creative or productive. If someone doesn't have enough background, they won't be able to come up with new solutions, or even reuse old solutions from someone else. $\endgroup$
    – Scott Rowe
    Commented Mar 10 at 22:34
  • $\begingroup$ @barnyard9, but programmers = software developers. I'm not sure there is any widely accepted distinction, but where software development differs from merely scripting is typically in the amount of business analysis and conceptual design required. $\endgroup$
    – Steve
    Commented Mar 14 at 12:55
  • 1
    $\begingroup$ @Steve Writing scripts is programming, but that doesn't make a script writer a "programmer", just as constructing a treehouse doesn't make you an architect. Scripts written by non-programmers may be minimally functional, but they're often cringeworthy to a "real programmer". $\endgroup$
    – Barmar
    Commented Mar 14 at 15:10
  • $\begingroup$ @Barmar, I agree you don't become a programmer just because you write one script or put a few formulas in Excel. There has to be something substantially occupational about it. $\endgroup$
    – Steve
    Commented Mar 14 at 17:30
5
$\begingroup$

From Wikipedia (but you can get very similar definitions from anywhere):

Computer science is the study of computation, information, and automation. Computer science spans theoretical disciplines (such as algorithms, theory of computation, and information theory) to applied disciplines (including the design and implementation of hardware and software). Though more often considered an academic discipline, computer science is closely related to computer programming.

Database administration is a rather different discipline to Computer Science. In fact you can approach it with no comp sci background.

Network administration, similarly, can be approached without any comp sci background. It is a different discipline.

Even Linux administration can be done without being able to code, although it would help.

If you can code, by definition you are developing software - so maybe there is a language or terminology barrier here.

$\endgroup$
3
  • 1
    $\begingroup$ You can approach software development w/o CS background. $\endgroup$
    – achhainsan
    Commented Mar 8 at 3:36
  • 1
    $\begingroup$ yes of course, @barnyard9 - I didn't say otherwise $\endgroup$
    – Rory Alsop
    Commented Mar 8 at 10:09
  • 1
    $\begingroup$ @barnyard9 Yes, you can, but you'll always lag behind. $\endgroup$
    – Gábor
    Commented Mar 9 at 16:55
2
$\begingroup$

It is not

(at my university)

Also the stuff you list is all "administrative" tasks. Aka something that has littel to no place in an academic education.

My bachelor only had one programming class required, and looking back that was instrumental because you can't really just drily talk about how software engineering works without having done any of it (even though coding is just a fraction of it, it is the most necessary part of it).

And then you need to be able to code for the higher courses. You don't learn it there but it is assumed that you can do it, similarily to the ability to write.

Except for some practical courses or focused-on-programming courses (like object-oriented programming patterns) it is absolutely not overemphasized and you can graduate your bachelors without actually being able to program perfectly fine (semi-cheat your way through one single easy exam)

But let's go back to the stuff you'd like to see: the admin stuff you list is the equivalent to jus coding. That's not what you study for. "just coders" come from a couple of weeks bootcamps, software engineers come from multi year degrees. Similarily your admin stuff is learned (in Germany) in a practical education, not at university/college. Because that's what it is.

$\endgroup$
2
$\begingroup$

As a CS graduate who has spent most of his career programming, I feel you. There are a lot of factors playing into the answer. Here are some of my favorites:

  • Nowadays, someone interested in spinning up or maintaining a database, network, or Linux instance for work should get a degree ending with "Information Systems."
    • At my university, we had the Computer Information Systems degree, but I've seen other schools with Business Information Systems and Management Information Systems.
    • If you didn't realize this issue early in your college career, then your counselor is partly to blame. They should have warned you.
  • Another answer talks about the linguistics of the term "Computer Science," so I'll briefly touch on that:
    • The roots of Computer Science go back to the WWII and early Cold War eras, where the field was heavily pioneered by Americans and Brits (who both speak English). So the English term for Computer Science actually predates what we now call a computer. Back then, a computer was a person performing computations.
    • Other languages picked up their equivalent terms over the next several years/decades, largely with less baggage.
  • Early computer science dealt with the study of what kinds of computation that a machine could carry out. This study is unavoidably linked to programming. After all, when you want to prove out a new algorithm, data structure, or computability limit, writing a program is the most straightforward tool you have for that.
    • Remember, SQL, Linux, and networking were all developed in the 1970s, a full generation after computer programming.
  • The world of computers moves too fast for the legacy university system. Consider this: It takes a university department years of debate and research to develop changes to their curricula standards. That's fine for pretty much every other field, but in the world of computers, the things that could be studied changes significantly while creating the standards for the department.
    • Even in the other sciences, which change faster than the arts, things don't move so fast that a class curriculum is basically outdated by the time it sees print.
    • This rate of change naturally pushes the academic study of this field towards things that don't change so quickly, like algorithms, data structures, security fundamentals, core hardware architectures, machine languages, etc. Imagine a person learning all the intricate details of Java in the year 2005 (which would have seemed reasonable at the time). That would have been useless information only 15 years later, long before that person retired.
    • I should note that I don't disagree with how colleges/universities handle this issue, nor do I think that Computer Science degrees are useless. I've personally found it very helpful to understand hardware fundamentals, programming paradigms, and the like, despite the fact that I rarely use those knowledge sets directly now that I'm in my career.

There are other pieces to the puzzle that your question tugs at, but these are the pieces that have resonated with me as I've talked with others in the 10 years since I graduated. Hopefully something here was useful to you. GL!

$\endgroup$
2
$\begingroup$

Computer Science basically follows a "make your tools" approach:

  • There have been people who just wanted to publish some books and found typesetting to be lacking, so they had to develop TeX first (Donald E Knuth).
  • Others were not content with the state of programming, so they conceived a new language (Niklaus Wirth, and many others).
  • Even large operating systems are in the reach of a single dedicated developer (Linus Tovalds).

Nowadays you don't have to build all tools yourself anymore - that was quite different when I started - but nevertheless you can do so. Or read the code of existing software (if it is open source), find and fix errors, and thus contribute.

In contrast, just administering tools which others conceived is considered to be a much more simple occupation. No need to go to university to do that. Here in Germany we have the Fachinformatiker, it's a recognized occupation requiring formal training (like hairdresser or electrician) - but not a degree.

In addition, administration of black box "products" has a comparatively short half-value period... most products I worked with then are obsolete and forgotten now. The knowledge and experience in building systems is not.

$\endgroup$
2
  • 1
    $\begingroup$ Knuth developed TeX (not LaTeX BTW) as a side-project. I don't think he would consider it an important part of his computer science output (though it is undoubtably his most influencial contribution to sciences, and probably took up a good chunk of his time). $\endgroup$ Commented Mar 11 at 10:28
  • $\begingroup$ @leftaroundabout you are absolutely right, I commingled TeX with LaTeX - the name associated with LaTeX is Leslie Lamport, while TeX is written by Donald E. Knuth! $\endgroup$
    – jvb
    Commented Mar 12 at 9:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.