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?

  • 3
    $\begingroup$ Computer science is not software development. $\endgroup$ – Jon Custer Jun 24 at 16:31
  • $\begingroup$ ...and software engineering is part of computer science, however. $\endgroup$ – DCTLib Jun 24 at 16:35
  • $\begingroup$ This is way too broad. In most cases you can't say anything in general about how universities across a given country teach a given subject. It often comes down to the pedagogical decisions of individual instructors. $\endgroup$ – Nate Eldredge Jun 24 at 17:24
  • $\begingroup$ @AntonMenshov Oh, there was an entire SE for that? It's always so hard to find the right SE site. What should I do? Copy the question there? $\endgroup$ – Gherman Jun 24 at 17:40
  • $\begingroup$ @NateEldredge So what do I do to become a developer in another country? Find a good instructor who is on my side? What if they fire them and find a different one? And the different commissions, the ministry of science and different other institutions may also be against us too sometimes. What if they decide to intervene to stop us? $\endgroup$ – Gherman Jun 24 at 17:45

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, …).

| improve this answer | |

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 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 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!

| improve this answer | |
  • $\begingroup$ 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? $\endgroup$ – Scott Rowe Jul 2 at 1:22
  • $\begingroup$ @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 {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 😆 $\endgroup$ – Rusi Jul 2 at 2:44
  • $\begingroup$ @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 which is a follow-up to FP timeline (Yeah those are my writings 😇) $\endgroup$ – Rusi Jul 2 at 6:50
  • $\begingroup$ 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). $\endgroup$ – Scott Rowe Jul 2 at 10:53

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.

| improve this answer | |
  • $\begingroup$ 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...) $\endgroup$ – Scott Rowe Jul 2 at 1:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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