Answers.Body: <p>The relation of math and CS is an important question but also fraught and contentious and therefore tends to tendentious rather than balanced discussion.
  It's particularly hard to discuss because one will inevitably have biases.
  And yet as I said it <em>is</em> important.</p>
  <p>The Dec 1989 <a href="https://dl.acm.org/doi/10.1145/76380.76381" rel="nofollow noreferrer">position paper</a>
  On the cruelty of really teaching computer science
  by Edsger Dijkstra and the subsequent discussion by eminent computer scientists is a good starting point to see how diverse (and emotive!) the views on this can be.</p>
  <p>As a summary Dijkstra says that</p>
  <ul>
  <li>Computing is a radical novelty</li>
  <li>We generally understand the new — novelties — in terms of the familiar old for which we institute <em>metaphors</em></li>
  <li>But when the novelty is radical the metaphors become shallow and confuse more than they illumine</li>
  </ul>
  <p>So far so good!</p>
  <p>But then he goes on to suggest that the metaphor of &quot;engineering&quot; is unhelpful and that the metaphor of math is the correct one.</p>
  <p>Naturally he finds disagreement on that count!</p>
  <hr />
  <h1>Added later</h1>
  <p><a href="https://www.lesswrong.com/posts/gfAkp2wMy4zHrAfic/goedel-s-legacy-a-game-without-end" rel="nofollow noreferrer">This</a> just came my way — a nice roller-coaster showing the deep historical connections between math and CS.</p>
  <p>Note: I'm in no way discounting that your experience of studying CS from die-hard mathematicians must have been dystopic. It's just v hard to get this right even for conscientious teachers!</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-07-02T01:22:35.303Z
Answers.Text: I am not a math fan, but I don't know of much else that actually serves as good preparation for learning computer science and the discipline of developing programs. What else exercises those aspects of mentation?
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-07-02T02:44:22.507Z
Answers.Text: @ScottRowe : There's math and math and math (and math) — mostly disjoint.  This question-answer already has 3 : <1> Classical math suffered by the OP <2> Formal methods and proving programs championed by Dijkstra <3> [History of CS math](http://blog.languager.org/2015/03/cs-history-0.html) {Cantor Hilbert Gödel Turing}. There's also <4> the standard discrete math of university CS courses. All these are nearly disjoint! Can write more... But the OP is not really asking 
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-07-02T06:50:43.180Z
Answers.Text: @ScottRowe : I mentioned 4 disjoint math-s above. Ironically forgot to mention the one most relevant to your question: <5> the math that removes the gap between math and CS — usually called functional programming (if the adjective "functional" were changed to "mathematical" that would be clearer). See [FP in CS education](http://blog.languager.org/2015/06/functional-programming-moving-target.html)
  which is a follow-up to 
  [FP timeline](http://blog.languager.org/2015/04/cs-history-1.html)
   (Yeah those are my writings )
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-07-02T10:53:45.683Z
Answers.Text: Maybe we should call it *'maths'* - haw haw haw! Anyway, I don't recall the sources, but I did extensive reading about schooling and mental development (Piaget, etc), and the consensus was that Mathematics was the best "gymnasium equipment" (ironic use of a word with two opposite meanings) for developing higher mental functioning - Formal and Post-formal. But, and it's a big one, people become better at any sort of thinking that they work at for a long time, while leaving ability in all other kinds of cogitation the same. General Education must consist of "many particulars" (Heraclitus).
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-27T07:58:51.947Z
Answers.LastActivityDate: 2020-07-02T09:06:51.893Z
Answers.LastEditDate: 2020-07-02T09:06:51.893Z
Answers.UserDisplayName: Rushi
Answers.Body: <p>I am sorry to hear about your negative experience. It sounds like you did find work that you enjoy and are good at.</p>
  <p>Over 30 years ago I graduated from a publicly funded
  university in the US with &quot;Bachelor of Science, Engineering - Computer Science&quot;. I had also attended a privately funded university which had the Computer Science curriculum under the Mathematics Department. The degree program under Engineering included courses in Digital Design, Operating Systems design, a Compiler development project and some networking. (And of course, lots of Calculus, which I did poorly at, having no interest in math, and very little incentive.)</p>
  <p>The program of study was not really about teaching how to write software, but instead: writing software while learning about how computer systems are designed and function. So, any programming skills were acquired in passing. There were no great tools and frameworks then, like Git and so on. We sat at individual machines, in the loop of Edit, Compile, Test, using text editors, and floppy disks to store our work.</p>
  <p>When I got a job, it was during a recession and I ended up at a software company with about 100 people, whose main product was built in COBOL. (They redeveloped it twice while I worked there, in a 4GL, then as a web product.) I wrote and maintained PC software, but later worked on the server end of the web product. I found that my education had primed me with lots of ideas that were useful where I worked. I could analyze and solve problems that other people in the company did not have the background for.</p>
  <p>Personally, I think that there is a place for this sort of 'university' education, and being a generalist in software design and systems-level concepts is a great thing. But I also think that being able to get a job and support yourself is too. There should be a training program for becoming &quot;just a coder&quot; as people disparagingly say. Well, lots of people just 'work', they don't all have to be innovators.</p>
  <p>Surprisingly, being a systems-level programmer who can develop complex and unusual programs and tools is not all that useful in the real world, apparently, because people don't see it, recognize it. Even churning out new stuff does not mean it will be used. Business processes and considerations stymie a lot of innovation. Perhaps there should be a university for business process improvement? Programmers work hard at &quot;Getting Stuff Done&quot;. Someone should really be making use of all that output.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-07-02T01:16:44.367Z
Answers.Text: Examples of problems solved: 1) Getting binary data through a Mux by escaping XON-XOFF with DLE. 2) Creating a pair of DOS TSRs to share modems over a Novell network using IPX. 3) Helping design a "Data Exchange Methodology" before XML existed, with many major features of XML. 4) Developing a multi-threaded and multi-process database transaction server using HTTP and ODBC, before the Apache web server was multi-threaded. 5) Various small projects which involved creating Domain Specific Languages to simplify deploying flexible / scripted solutions. (Compiler design course comes in handy...)
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-07-02T00:54:00.183Z
Answers.LastActivityDate: 2020-07-02T00:54:00.183Z
Answers.UserDisplayName: Scott Rowe
Answers.Body: <p>Short answer: yes.</p>
  <p>Disclaimer: I'm an Associate. Pr. of Computer Science in a University in France. We have several undergraduate and graduate programs that lead to bachelor and master's degree of Computer Science.</p>
  <p>As the degree is about Computer Science, we do teach software engineering (among other topics : databases, networking, logic, architecture, compilers, ...).
  Some applied program are very applied (the students are working in a company for the duration of their studies, switching every two or three weeks between their company and the lectures at the Uni).</p>
  <p>A computer science curriculum where one learns about software development is quite standard (from working with several colleagues from around the world I now that such things exist in the US, UK, most of Europe, Asia, Australia, …).</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-26T22:37:36.537Z
Answers.LastActivityDate: 2020-06-26T22:37:36.537Z
Answers.UserDisplayName: Kim Nguyễn
Body: <p>In short: Does learning how to make software, have its place inside universities? If so which parts of it?</p>
  <p>I was studying in a university in Russia. I don't want to name its name and location. I wanted to become a software developer. Following some people's advice I entered a faculty that was mostly about math. All its teachers are mathematicians. So most of our subjects were just different kinds of math. There also was some programming but much less. I was told by other students and teachers that how I pass Calculus and Algebra exams was the most important thing and that programming exams were unimportant at all. Many different teachers and students were saying that &quot;a university does not need to teach programmers&quot;. They say that &quot;it's not science&quot; and &quot;it's nothing but craftsmanship&quot;. During a defense of diploma people sometimes ask programmers something like &quot;That's all interesting but that's not math so why it's a diploma work?&quot;</p>
  <p>When I talked with people who were actually working as software developers they were saying that &quot;If you don't how to fix problems with Linux and don't know a single architecture pattern then as a programmer you are really nothing&quot;. They also said that &quot;I wouldn't hire a developer who doesn't tell me that HP-UX is a bad OS when I mention it&quot;. In university we spent a single lecture on patterns(and not even all students but some) and none on Linux and other operating systems. And I knew literally nothing about HP-UX. I had to learn 90% of my skills myself via books, online-tutorials and documentation.</p>
  <p>In our country IT is a very popular industry. Because of that the math faculty students are 90% wannabe programmers. Teachers really hate that as they want math to be popular again. They say that &quot;computer science ate math&quot;(That's citation of a teacher during a lesson, &quot;Информатика съела математику&quot;). The teachers despise us programmers. The employers in Russia prefer candidates with a degree but will gladly accept those without it. The students try to pass all exams only to have the degree, they don't care about subjects at all. They forget everything when they come out of a room after an exam. It's seems like students and teachers declared war against each other.</p>
  <p>I left university without any degree. Now I work as JS-developer. I myself participate in interviews to hire new developers. I ask them about things like Single Responsibility Principle, how to write clean code and how to create indexes in SQL. I know that SRP is not a law of physics, it comes without a good scientific proof. But I need it from by workers.</p>
  <p>The question is how do Universities in other countries approach teaching software development? Do they actually target it? Is actually becoming a real software developer that will be respected by employers and not a scientist is a valid goal for a university student?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-06-24T16:31:24.630Z
Comments.Text: Computer science is not software development.
Comments.UserDisplayName: Jon Custer
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-06-24T18:30:42.460Z
Comments.Text: You can flag it for moderator attention with a request to migrate. That should work. But please, check if there is no obvious duplicate already there.
Comments.UserDisplayName: Anton
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-06-26T13:13:58.820Z
Comments.Text: @JonCuster, Computer science is not software development, but _studying_ and _modeling_ how large software systems are made, _theorizing_ about and _experimenting_ with new techniques for making software,... Those sound like reasonable "academic" pursuits to me.
Comments.UserDisplayName: Solomon Slow
Tags: <mathematics>
Title: Software development vs universities and scientific papers
ThreadText: # Software development vs universities and scientific papers
  
  (Asked by: username_0 on 2020-06-24)
  
  In short: Does learning how to make software, have its place inside universities? If so which parts of it?
  
  I was studying in a university in Russia. I don't want to name its name and location. I wanted to become a software developer. Following some people's advice I entered a faculty that was mostly about math. All its teachers are mathematicians. So most of our subjects were just different kinds of math. There also was some programming but much less. I was told by other students and teachers that how I pass Calculus and Algebra exams was the most important thing and that programming exams were unimportant at all. Many different teachers and students were saying that "a university does not need to teach programmers". They say that "it's not science" and "it's nothing but craftsmanship". During a defense of diploma people sometimes ask programmers something like "That's all interesting but that's not math so why it's a diploma work?"
  
  When I talked with people who were actually working as software developers they were saying that "If you don't how to fix problems with Linux and don't know a single architecture pattern then as a programmer you are really nothing". They also said that "I wouldn't hire a developer who doesn't tell me that HP-UX is a bad OS when I mention it". In university we spent a single lecture on patterns(and not even all students but some) and none on Linux and other operating systems. And I knew literally nothing about HP-UX. I had to learn 90% of my skills myself via books, online-tutorials and documentation.
  
  In our country IT is a very popular industry. Because of that the math faculty students are 90% wannabe programmers. Teachers really hate that as they want math to be popular again. They say that "computer science ate math"(That's citation of a teacher during a lesson, "Информатика съела математику"). The teachers despise us programmers. The employers in Russia prefer candidates with a degree but will gladly accept those without it. The students try to pass all exams only to have the degree, they don't care about subjects at all. They forget everything when they come out of a room after an exam. It's seems like students and teachers declared war against each other.
  
  I left university without any degree. Now I work as JS-developer. I myself participate in interviews to hire new developers. I ask them about things like Single Responsibility Principle, how to write clean code and how to create indexes in SQL. I know that SRP is not a law of physics, it comes without a good scientific proof. But I need it from by workers.
  
  The question is how do Universities in other countries approach teaching software development? Do they actually target it? Is actually becoming a real software developer that will be respected by employers and not a scientist is a valid goal for a university student?
  
  **Tags:** mathematics
  
  > **Comments:**
  > **username_1**: Computer science is not software development.  
  > **username_2**: You can flag it for moderator attention with a request to migrate. That should work. But please, check if there is no obvious duplicate already there.  
  > **username_3**: @username_1, Computer science is not software development, but _studying_ and _modeling_ how large software systems are made, _theorizing_ about and _experimenting_ with new techniques for making software,... Those sound like reasonable "academic" pursuits to me.  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_6 on 2020-06-26. Score: 5 | Accepted answer
  
  Short answer: yes.
  
  Disclaimer: I'm an Associate. Pr. of Computer Science in a University in France. We have several undergraduate and graduate programs that lead to bachelor and master's degree of Computer Science.
  
  As the degree is about Computer Science, we do teach software engineering (among other topics : databases, networking, logic, architecture, compilers, ...).
  Some applied program are very applied (the students are working in a company for the duration of their studies, switching every two or three weeks between their company and the lectures at the Uni).
  
  A computer science curriculum where one learns about software development is quite standard (from working with several colleagues from around the world I now that such things exist in the US, UK, most of Europe, Asia, Australia, …).
  
  
  ---
  
  ### Answer by username_4 on 2020-06-27. Score: 4
  
  The relation of math and CS is an important question but also fraught and contentious and therefore tends to tendentious rather than balanced discussion.
  It's particularly hard to discuss because one will inevitably have biases.
  And yet as I said it *is* important.
  
  The Dec 1989 [position paper](https://dl.acm.org/doi/10.1145/76380.76381)
  On the cruelty of really teaching computer science
  by Edsger Dijkstra and the subsequent discussion by eminent computer scientists is a good starting point to see how diverse (and emotive!) the views on this can be.
  
  As a summary Dijkstra says that
  
  * Computing is a radical novelty
  * We generally understand the new — novelties — in terms of the familiar old for which we institute *metaphors*
  * But when the novelty is radical the metaphors become shallow and confuse more than they illumine
  
  So far so good!
  
  But then he goes on to suggest that the metaphor of "engineering" is unhelpful and that the metaphor of math is the correct one.
  
  Naturally he finds disagreement on that count!
  
  ---
  
  # Added later
  
  [This](https://www.lesswrong.com/posts/gfAkp2wMy4zHrAfic/goedel-s-legacy-a-game-without-end) just came my way — a nice roller-coaster showing the deep historical connections between math and CS.
  
  Note: I'm in no way discounting that your experience of studying CS from die-hard mathematicians must have been dystopic. It's just v hard to get this right even for conscientious teachers!
  
  > **Comments:**
  > **username_5**: I am not a math fan, but I don't know of much else that actually serves as good preparation for learning computer science and the discipline of developing programs. What else exercises those aspects of mentation?  
  > **username_4**: @username_5 : There's math and math and math (and math) — mostly disjoint.  This question-answer already has 3 : <1> Classical math suffered by the OP <2> Formal methods and proving programs championed by Dijkstra <3> [History of CS math](http://blog.languager.org/2015/03/cs-history-0.html) {Cantor Hilbert Gödel Turing}. There's also <4> the standard discrete math of university CS courses. All these are nearly disjoint! Can write more... But the OP is not really asking   
  > **username_4**: @username_5 : I mentioned 4 disjoint math-s above. Ironically forgot to mention the one most relevant to your question: <5> the math that removes the gap between math and CS — usually called functional programming (if the adjective "functional" were changed to "mathematical" that would be clearer). See [FP in CS education](http://blog.languager.org/2015/06/functional-programming-moving-target.html) which is a follow-up to  [FP timeline](http://blog.languager.org/2015/04/cs-history-1.html)  (Yeah those are my writings )  
  > **username_5**: Maybe we should call it *'maths'* - haw haw haw! Anyway, I don't recall the sources, but I did extensive reading about schooling and mental development (Piaget, etc), and the consensus was that Mathematics was the best "gymnasium equipment" (ironic use of a word with two opposite meanings) for developing higher mental functioning - Formal and Post-formal. But, and it's a big one, people become better at any sort of thinking that they work at for a long time, while leaving ability in all other kinds of cogitation the same. General Education must consist of "many particulars" (Heraclitus).  
  
  ---
  
  ### Answer by username_5 on 2020-07-02. Score: 1
  
  I am sorry to hear about your negative experience. It sounds like you did find work that you enjoy and are good at.
  
  Over 30 years ago I graduated from a publicly funded
  university in the US with "Bachelor of Science, Engineering - Computer Science". I had also attended a privately funded university which had the Computer Science curriculum under the Mathematics Department. The degree program under Engineering included courses in Digital Design, Operating Systems design, a Compiler development project and some networking. (And of course, lots of Calculus, which I did poorly at, having no interest in math, and very little incentive.)
  
  The program of study was not really about teaching how to write software, but instead: writing software while learning about how computer systems are designed and function. So, any programming skills were acquired in passing. There were no great tools and frameworks then, like Git and so on. We sat at individual machines, in the loop of Edit, Compile, Test, using text editors, and floppy disks to store our work.
  
  When I got a job, it was during a recession and I ended up at a software company with about 100 people, whose main product was built in COBOL. (They redeveloped it twice while I worked there, in a 4GL, then as a web product.) I wrote and maintained PC software, but later worked on the server end of the web product. I found that my education had primed me with lots of ideas that were useful where I worked. I could analyze and solve problems that other people in the company did not have the background for.
  
  Personally, I think that there is a place for this sort of 'university' education, and being a generalist in software design and systems-level concepts is a great thing. But I also think that being able to get a job and support yourself is too. There should be a training program for becoming "just a coder" as people disparagingly say. Well, lots of people just 'work', they don't all have to be innovators.
  
  Surprisingly, being a systems-level programmer who can develop complex and unusual programs and tools is not all that useful in the real world, apparently, because people don't see it, recognize it. Even churning out new stuff does not mean it will be used. Business processes and considerations stymie a lot of innovation. Perhaps there should be a university for business process improvement? Programmers work hard at "Getting Stuff Done". Someone should really be making use of all that output.
  
  > **Comments:**
  > **username_5**: Examples of problems solved: 1) Getting binary data through a Mux by escaping XON-XOFF with DLE. 2) Creating a pair of DOS TSRs to share modems over a Novell network using IPX. 3) Helping design a "Data Exchange Methodology" before XML existed, with many major features of XML. 4) Developing a multi-threaded and multi-process database transaction server using HTTP and ODBC, before the Apache web server was multi-threaded. 5) Various small projects which involved creating Domain Specific Languages to simplify deploying flexible / scripted solutions. (Compiler design course comes in handy...)  
  
  ---
  
  