Answers.Body: <p>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.</p>
  <p>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.</p>
  <p>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.</p>
  <p>The term &quot;Computer Science&quot; 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.)</p>
  <p>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.</p>
  <p>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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-08T14:45:10.493Z
Answers.LastActivityDate: 2024-03-08T14:45:10.493Z
Answers.UserDisplayName: Ben I.
Answers.Body: <blockquote>
  <p>Why are stuffs like</p>
  <ul>
  <li><p>database administration</p>
  </li>
  <li><p>linux administration</p>
  </li>
  <li><p>network administration</p>
  </li>
  </ul>
  <p>etc not prioritized?</p>
  </blockquote>
  <p>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 <a href="https://stackoverflow.com/questions/?pagesize=50">Stack Overflow</a> and <a href="https://cs.stackexchange.com/questions/?pagesize=50">Computer Science Stack Exchange</a> or even  <a href="https://cstheory.stackexchange.com/questions/?pagesize=50">Theoretical Computer Science Stack Exchange</a> and analyze their differences.</p>
  <h1>Computer Science vs. Programming</h1>
  <p><em>Computer Science</em> is a really bad name, because it confuses a <em>tool</em> with the <em>object of study</em>. <a href="https://quoteinvestigator.com/2021/04/02/computer-science/" rel="noreferrer">It has been said that Computer Science is really a misnomer, and is akin to calling Astronomy &quot;Telescope Science&quot;</a> – 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.</p>
  <p>Computer Science isn't about computers. It is about Comput<strong>ation</strong>.</p>
  <p>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 <em>Informatik</em>, in French <em>informatique</em>, in Italian <em>informatica</em> – all are a neologism based on <em>information</em> and the Greek suffix <em>-ik</em>, formed similar to <em>mathemetics</em>. In Spanish, it is called <em>ciencias de la informática</em> (similar to German, French, and Italian) or <em>ciencias de la computación</em>: note the subtle difference to English, it is the science of comput<strong>ation</strong>, not the science of comput<strong>ers</strong>. Danish uses the terms <em>datalogi</em> (a neologism formed by combining <em>data</em> with the <em>-logi</em> suffix as in geology, meteorology, metrology, etc.) for the stricter sense of the science of information, data, computation, and processes, and <em>informatik</em> for a broader inter-disciplinary view of the effects of &quot;datalogi&quot; on society, politics, humanity, and the broader world in general; what might be called <em>Social Informatics</em> in English.</p>
  <p>As you can see, in many languages, there is a clear distinction made between &quot;Informatics&quot; 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.</p>
  <p>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: &quot;if you expect to learn programming, the trade school is on the other side of town&quot;. We <em>did</em>, in fact, do <em>some</em> programming: we constructed Turing Machines, wrote some λ-calculus expressions, constructed some Petri Nets, NFAs, DFAs, PDAs, and Mealy machines, we wrote some <code>WHILE</code> and <code>LOOP</code> 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.</p>
  <p>Computer Science is the science of computation, information, data, and processes. Computers and programs are tools which <em>can</em> 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.</p>
  <p>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.</p>
  <blockquote>
  <p>What I am saying is when we say &quot;final year project&quot; in computer science, why does it have to be a software?</p>
  </blockquote>
  <p>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.</p>
  <p>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 <em>can</em>, of course <em>include</em> 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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-11T20:23:20.153Z
Answers.Text: **Comments have been [moved to chat](https://chat.stackexchange.com/rooms/151977/discussion-on-answer-by-jorg-w-mittag-why-is-programming-so-much-prioritized-i); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed.
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-08T08:34:44.053Z
Answers.LastActivityDate: 2024-03-08T08:34:44.053Z
Answers.UserDisplayName: Jörg W Mittag
Answers.Body: <p>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 &quot;vocational&quot; programs will teach the applied things that you have mentioned. A CS program makes you a creator, not a manager if done well.</p>
  <p>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.</p>
  <p>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.</p>
  <p>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.</p>
  <p>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.</p>
  <p>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 &quot;prioritized&quot; actually, but without it you have no tool to create anything. (Well, math is a pretty good tool also for this.)</p>
  <p>It might better be said that a CS program prioritizes &quot;algorithms&quot; (algorithmics) rather than programming. Algorithms are a higher level way of thinking. Algorithms are often <em>implemented</em> in programs, and programs are used for testing, but they are, at base, highly conceptual.</p>
  <p>All of the subfields mentioned here depend on specialized efficient algorithms for their proper action and usability.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-10T22:41:55.700Z
Answers.Text: 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."
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-07T23:30:13.303Z
Answers.LastActivityDate: 2024-03-07T23:30:13.303Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>Other answers have explained how these Information Technology fields are separate from &quot;Computer Science&quot;, and deserve their own curricula. I'm going to give a somewhat different view.</p>
  <p>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.</p>
  <p>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 <em>why</em> they worked; acting without understanding makes you less flexible and creative.</p>
  <p>Furthermore, programming comes up <strong>all the time</strong> 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.</p>
  <p>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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-10T13:52:12.880Z
Answers.Text: Programming=/=software development. I too can script.
Answers.UserDisplayName: achhainsan
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-10T22:34:41.143Z
Answers.Text: 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.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-14T12:55:26.927Z
Answers.Text: @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.
Answers.UserDisplayName: Steve
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-14T15:10:30.170Z
Answers.Text: @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".
Answers.UserDisplayName: Barmar
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-14T17:30:07.983Z
Answers.Text: @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.
Answers.UserDisplayName: Steve
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-10T13:42:46.610Z
Answers.LastActivityDate: 2024-03-10T13:42:46.610Z
Answers.UserDisplayName: Barmar
Answers.Body: <p>From Wikipedia (but you can get very similar definitions from anywhere):</p>
  <blockquote>
  <p>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.</p>
  </blockquote>
  <p>Database administration is a rather different discipline to Computer Science. In fact you can approach it with no comp sci background.</p>
  <p>Network administration, similarly, can be approached without any comp sci background. It is a different discipline.</p>
  <p>Even Linux administration can be done without being able to code, although it would help.</p>
  <p>If you can code, by definition you are developing software - so maybe there is a language or terminology barrier here.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-08T03:36:56.277Z
Answers.Text: You can approach software development w/o CS background.
Answers.UserDisplayName: achhainsan
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-08T10:09:29.100Z
Answers.Text: yes of course, @barnyard9 - I didn't say otherwise
Answers.UserDisplayName: Rory Alsop
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-09T16:55:40.820Z
Answers.Text: @barnyard9 Yes, you can, but you'll always lag behind.
Answers.UserDisplayName: Gábor
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-07T16:07:36.380Z
Answers.LastActivityDate: 2024-03-07T16:07:36.380Z
Answers.UserDisplayName: Rory Alsop
Answers.Body: <p>Computer Science basically follows a &quot;make your tools&quot; approach:</p>
  <ul>
  <li>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).</li>
  <li>Others were not content with the state of programming, so they conceived a new language (Niklaus Wirth, and many others).</li>
  <li>Even large operating systems are in the reach of a single dedicated developer (Linus Tovalds).</li>
  </ul>
  <p>Nowadays you don't have to build all tools yourself anymore - that was quite different when I started - but nevertheless you <em>can</em> do so. Or read the code of existing software (if it is open source), find and fix errors, and thus contribute.</p>
  <p>In contrast, just <em>administering</em> 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 <em>Fachinformatiker</em>, it's a recognized occupation requiring formal training (like hairdresser or electrician) - but not a degree.</p>
  <p>In addition, administration of black box &quot;products&quot; 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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-11T10:28:17.417Z
Answers.Text: Knuth developed TeX ([not LaTeX](https://en.wikipedia.org/wiki/Leslie_Lamport#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).
Answers.UserDisplayName: leftaroundabout
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-12T09:39:34.433Z
Answers.Text: @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!
Answers.UserDisplayName: jvb
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-10T21:50:11.080Z
Answers.LastActivityDate: 2024-03-12T09:40:38.017Z
Answers.LastEditDate: 2024-03-12T09:40:38.017Z
Answers.UserDisplayName: jvb
Answers.Body: <p>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:</p>
  <ul>
  <li>Nowadays, someone interested in spinning up or maintaining a database, network, or Linux instance for work should get a degree ending with &quot;Information Systems.&quot;
  <ul>
  <li>At my university, we had the Computer Information Systems degree, but I've seen other schools with Business Information Systems and Management Information Systems.</li>
  <li>If you didn't realize this issue early in your college career, then your counselor is partly to blame. They should have warned you.</li>
  </ul>
  </li>
  <li>Another answer talks about the linguistics of the term &quot;Computer Science,&quot; so I'll briefly touch on that:
  <ul>
  <li>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.</li>
  <li>Other languages picked up their equivalent terms over the next several years/decades, largely with less baggage.</li>
  </ul>
  </li>
  <li>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.
  <ul>
  <li>Remember, SQL, Linux, and networking were all developed in the 1970s, a full generation after computer programming.</li>
  </ul>
  </li>
  <li>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 <em>while creating the standards</em> for the department.
  <ul>
  <li>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.</li>
  <li>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.</li>
  <li>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.</li>
  </ul>
  </li>
  </ul>
  <p>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!</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-11T22:22:15.087Z
Answers.LastActivityDate: 2024-03-11T22:22:15.087Z
Answers.UserDisplayName: bobsbeenjamin
Answers.Body: <h1><strong>It is not</strong></h1>
  <p>(at my university)</p>
  <p>Also the stuff you list is all &quot;administrative&quot; tasks. Aka something that has littel to no place in an academic education.</p>
  <p>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).</p>
  <p>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.</p>
  <p>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)</p>
  <p><strong>But let's go back to the stuff you'd like to see:</strong>
  the admin stuff you list is the equivalent to jus coding. That's not what you study for. &quot;just coders&quot; 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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-03-11T12:18:27.827Z
Answers.LastActivityDate: 2024-03-11T12:18:27.827Z
Answers.UserDisplayName: Hobbamok
Body: <p>Why is stuff like</p>
  <ul>
  <li><p>database administration</p>
  </li>
  <li><p>Linux administration</p>
  </li>
  <li><p>network administration</p>
  </li>
  </ul>
  <p>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 &quot;<a href="https://en.wikipedia.org/wiki/Stockholm_syndrome" rel="noreferrer">Stockholm syndrome</a>&quot; and we'd say &quot;They're easier to learn than programming&quot;, but that's not my concern. What I am saying is when we say &quot;final year project&quot; in computer science, why does it have to be a software? Why not other stuff? Not everyone <em>can</em> be a software developer even if they <em>work</em> really hard for it which was the case for me. I can code, but I can't develop software.</p>
  <p>I wish I had realized it sooner. Why is it like that?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-08T08:43:37.567Z
Comments.Text: 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.
Comments.UserDisplayName: YCN-
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-09T17:57:27.850Z
Comments.Text: 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.
Comments.UserDisplayName: Austin Hemmelgarn
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-10T10:36:48.927Z
Comments.Text: 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.
Comments.UserDisplayName: Thorbjørn Ravn Andersen
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-10T10:39:32.827Z
Comments.Text: I was being practical. The way CS/CSE degree are advertised can fool many like me.
Comments.UserDisplayName: achhainsan
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-10T20:48:40.793Z
Comments.Text: 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 ;)
Comments.UserDisplayName: Carsten S
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-11T01:57:00.393Z
Comments.Text: Since the administrative fields you mention provide the infrastructure needed to successfully develop and run software, my comparison would be "why is driving a race car so much prioritized compared to street construction workers and car mechanics?" You may guess that I'm a software engineer. ;-) And true, no race can be won with a mediocre motor, and building a perfect one is an art, like anything that is brought to perfection. But in the end, it is a car with a driver that needs to cross the finish line. All the rest *provides the infrastructure* to that end.
Comments.UserDisplayName: Peter - Reinstate Monica
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-11T04:02:38.013Z
Comments.Text: 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.
Comments.UserDisplayName: slebetman
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-11T04:05:23.423Z
Comments.Text: FWIW, I'd like to note that in my 20 years experience I've had just as many managers who came from CS background as those who came from an BEng background or IT background or even a Business Management background. So if you are only interested in managing software projects instead of writing code then the other degrees may be of more interest to you.
Comments.UserDisplayName: slebetman
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-11T11:59:56.247Z
Comments.Text: Database design and theory is covered on some CS and CS-adjacent degrees. What exactly do you mean by "database admin" - controlling user access, accounts, backups, etc; optimising for specific systems; designing databases; or something else? Some of these are very software-specific so it doesn't make a lot of sense to teach on a general degree, while others aren't very sophisticated.
Comments.UserDisplayName: Stuart F
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2024-03-11T22:51:58.177Z
Comments.Text: Basically, IT is to software engineering what electricians are to electrical engineering or what auto mechanics are to mechanical engineering. (And IT is to pure computer science what auto mechanics or electricians are to theoretical physics.) All of the above (except maybe the pure theorists) have a pretty solid level of technical knowledge, but the former are trained to use and maintain a specific system or class of systems, while the latter are trained to design those systems (or, in the case of the theorists, develop/discover the theory needed to design them.)
Comments.UserDisplayName: reirab
Tags: <programming>
Title: Why is "programming" so much prioritized in a computer science degree?
ThreadText: # Why is "programming" so much prioritized in a computer science degree?
  
  (Asked by: username_0 on 2024-03-07)
  
  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](https://en.wikipedia.org/wiki/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?
  
  **Tags:** programming
  
  > **Comments:**
  > **username_1**: 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.  
  > **username_2**: 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.  
  > **username_3**: 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.  
  > **username_0**: I was being practical. The way CS/CSE degree are advertised can fool many like me.  
  > **username_4**: 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 ;)  
  > **username_5**: Since the administrative fields you mention provide the infrastructure needed to successfully develop and run software, my comparison would be "why is driving a race car so much prioritized compared to street construction workers and car mechanics?" You may guess that I'm a software engineer. ;-) And true, no race can be won with a mediocre motor, and building a perfect one is an art, like anything that is brought to perfection. But in the end, it is a car with a driver that needs to cross the finish line. All the rest *provides the infrastructure* to that end.  
  > **username_6**: 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.  
  > **username_6**: FWIW, I'd like to note that in my 20 years experience I've had just as many managers who came from CS background as those who came from an BEng background or IT background or even a Business Management background. So if you are only interested in managing software projects instead of writing code then the other degrees may be of more interest to you.  
  > **username_7**: Database design and theory is covered on some CS and CS-adjacent degrees. What exactly do you mean by "database admin" - controlling user access, accounts, backups, etc; optimising for specific systems; designing databases; or something else? Some of these are very software-specific so it doesn't make a lot of sense to teach on a general degree, while others aren't very sophisticated.  
  > **username_8**: Basically, IT is to software engineering what electricians are to electrical engineering or what auto mechanics are to mechanical engineering. (And IT is to pure computer science what auto mechanics or electricians are to theoretical physics.) All of the above (except maybe the pure theorists) have a pretty solid level of technical knowledge, but the former are trained to use and maintain a specific system or class of systems, while the latter are trained to design those systems (or, in the case of the theorists, develop/discover the theory needed to design them.)  
  
  ---
  
  ## 8 answers
  
  ### Answer by username_9 on 2024-03-08. Score: 21 | Accepted answer
  
  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.
  
  
  ---
  
  ### Answer by username_10 on 2024-03-08. Score: 34
  
  > 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](https://stackoverflow.com/questions/?pagesize=50) and [Computer Science Stack Exchange](https://cs.stackexchange.com/questions/?pagesize=50) or even [Theoretical Computer Science Stack Exchange](https://cstheory.stackexchange.com/questions/?pagesize=50) 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"](https://quoteinvestigator.com/2021/04/02/computer-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 Comput**ation**.
  
  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 comput**ation**, not the science of comput**ers**. 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.
  
  > **Comments:**
  > **username_9**: **Comments have been [moved to chat](https://chat.stackexchange.com/rooms/151977/discussion-on-answer-by-jorg-w-username_10-why-is-programming-so-much-prioritized-i); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed.  
  
  ---
  
  ### Answer by username_11 on 2024-03-07. Score: 16
  
  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.
  
  > **Comments:**
  > **username_12**: 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."  
  
  ---
  
  ### Answer by username_13 on 2024-03-10. Score: 7
  
  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.
  
  > **Comments:**
  > **username_0**: Programming=/=software development. I too can script.  
  > **username_12**: 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.  
  > **username_14**: @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.  
  > **username_13**: @username_14 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".  
  > **username_14**: @username_13, 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.  
  
  ---
  
  ### Answer by username_15 on 2024-03-07. Score: 5
  
  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.
  
  > **Comments:**
  > **username_0**: You can approach software development w/o CS background.  
  > **username_15**: yes of course, @barnyard9 - I didn't say otherwise  
  > **username_16**: @barnyard9 Yes, you can, but you'll always lag behind.  
  
  ---
  
  ### Answer by username_17 on 2024-03-10. Score: 3
  
  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.
  
  > **Comments:**
  > **username_18**: Knuth developed TeX ([not LaTeX](https://en.wikipedia.org/wiki/Leslie_Lamport#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).  
  > **username_17**: @username_18 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!  
  
  ---
  
  ### Answer by username_19 on 2024-03-11. Score: 2
  
  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!
  
  
  ---
  
  ### Answer by username_20 on 2024-03-11. Score: 2
  
  # **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.
  
  
  ---
  
  