Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

People go into CS to get jobs in software engineering. This is misguided.

CS is really a mathematics major, if you become a good engineer in the process of getting a CS degree it's purely accidental on the part of the CS department. It's like getting an astrophysics degree in hopes of getting a job in the telescope industry.

Universities should really emphasize software engineering as a major rather than CS. CS is great, don't get me wrong, you'll come out of that program with a galaxy brain for problem solving. In addition, there's definitely overlap between the two areas. However, it's often totally irrelevant to the real work in the software engineering industry.



Some context for what I am about to say: I read mathematics at university (in US terms I am a "math major") and have worked as a software engineer for almost 30 years; being around for the rise of the Internet, mobile phones and cloud computing; most of which I have spent at US big tech companies. I am an also fellow of a mathematics academic institution here in the UK.

Without hesitation, computer science is certainly not a mathematics major.

Having some knowledge of some aspects of a subject, doesn't make you qualified in that subject. At least, not at the university level.

Mathematics is an enormous and ancient subject. The maths that a CS student is exposed to is really a very small sliver of a few topics; applied to certain uses. Many other subjects (almost all numerate ones) have a similar relationship to maths.

Consider economics: aspects of it also make use of (applied) mathematics, but no one could seriously make the claim that an economics major, even one who has extensive capabilities in numerical modelling, is basically a mathematics major.

Theoretical CS could be described as "a form of applied mathematics"; but Theoretical CS is only a component of a CS degree; and, from what I see with young graduates today, a decreasingly smaller part of it (I am not making a value judgement - just an empirical observation).


I think you're essentially both correct/insightful here, just fall on opposite semantic choices. Yes, software engineering continues its creep into CS curricula. So is the rigorous sub-branch of mathematics called CS being unduly polluted? Or has the CS discipline itself changed meaning? I personally tend toward the latter, as language is a constantly shifting hodgepodge of subjective conventions. But that's just like, my opinion, man.


From my observations of being in the industry so long, I would tend to agree that the content of computer science degrees has changed since the 80s and 90s.

I should have made a clearer distinction between theoretical computer science and a computer science degree.

Theoretical computer science is a topic in applied mathematics but a computer science degree isn't, typically composed only of classes in theoretical computer science. The extent to which it is varies from course to course and from university to university. In much the same way as in a mathematics degree there are pure maths topics (number theory, analysis, graph theory etc.) and applied topics.


Your opinion is, like, fine.

I expect that eventually we'll have "applied CS" and "pure CS", as with mathematics. And statistics. And possibly architecture. (In engineering, pure engineering is "engineering science", it seems.)

"Eventually" is doing a bit of work there. It might take a hundred years.


This already sort of exists. Someone in another comment references their degree in “Computer and Information Science”, which is more practical and less math heavy than CS. And I believe several of the University of California schools offer degrees in “Game Design”.


This varies depending on the university.

Where I got my degree, a degree was 120 credit hours and typically 30 credit hours of that would be in your major. For economics, there were those 30 credit hours and also a requirement for calculus (a dummied down calculus class that didn't require trig) and an upper level stats class.

For CS, there were 30 credit hours of CS and an additional 30 credit hours of math. You end up with a major in CS and a minor in math. Looks like it would have taken 3 more upper level math classes to do a double major.


Agree - at Oxford, the CS degree is essentially all algorithms and mathematics, and any coding you do is largely incidental.


When I did a CS degree at a Scottish university in the 1980s it definitely felt that the core of the course was maths (both engineering maths and a lot of different theoretical CS subjects) and while we did a lot of programming that was really only there to explore the concepts. There was very little emphasis on how to write code or good development practises - you were expected to pick those up by yourself as you went along.

My only real criticism of the course I did that it was just maths and CS for four years - which meant there was very little flexibility for people to do other things for the people who wanted to change subject.


Yep! And some universities, like The University of Waterloo, allow you to get either a Bachelors of CompSci or a BMath. And almost everyone at Waterloo agrees that the BMath one is harder and better. They also offer a software engineering course that is also difficult, but with a lot more focus on getting computers and software development closer to the ideal we have in structural engineering. I.e., let's treat these things like the live saving machines they are, and not as something we can move fast and break.


That's the rub; no one actually wants to hire "software engineers", for all that that's the job title.

They want programmers, who will write code they can sell as quickly and cheaply as possible. Trying to raise a software engineering discipline to the standard of the real engineers would leave you with an employee too expensive to do what his professional ethics wouldn't allow him to.


Maybe for smaller companies, or if this were 2012. Not sure about this now for FAANG. Engineerieg processes are deeply prioritized these days.


This doesn’t track with my experience in industry whatsoever. In fact, those sorts of “low ethics” programmers are arguably the biggest hiring risk, and large amounts of effort and dollars are put into avoiding hiring them.


> Trying to raise a software engineering discipline to the standard of the real engineers would leave you with an employee too expensive to do what his professional ethics wouldn't allow him to.

Nah. The vast majority of software projects are of the lower echelon variety e.g., the slapdash shopping cart web apps. Considering JavaScript is still the language of choice in that realm, engineering rigors can’t exactly be of any real consideration.

No, it’s not the expense keeping real engineering away, it’s the culture.


Also most of what "software engineers" are asked to work on are not engineering problems. There are of course exceptions, but the vast majority of positions labelled "software engineer" aren't doing anything that would really be called engineering. You are just wiring frameworks together to achieve some goal and reading the documentation to figure out how to make it work.


> Mathematics is an enormous and ancient subject. The maths that a CS student is exposed to is really a very small sliver of a few topics

I would say the same is true of most undergraduate math majors.

The Computer Science program was part of the College of Science and Mathematics at my university (not the School of Engineering). The stated goal of the program was to give students enough of a theoretical background in math and computer science to pursue an advanced degree in CS. Most students probably had other ideas, but that was the way the curriculum was structured. And there was enough overlap between Math and CS majors that most CS majors ended up with enough credits for a dual CS/math degree pretty much by accident.

To be clear I am under no illusion that meeting the minimum requirements for a math degree makes me a great mathematician. But neither were the majority of “pure” math majors in our classes. In fact, I would say the CS students tended to be stronger in math, as that was the more competitive major at my university.


Undergraduate Math degrees should cover a much wider range of mathematical topics. Many schools don’t have enough students to offer many courses exclusively for Majors so that often blurs the lines.

Topology and a few others may make the cut, but it’s much easier to share requirements with other programs so a Math degree may include courses that are required or attract students from a Physics, CS, Engineering, Music, Economics, Chemistry, Philosophy, History, etc degrees.

Depending on how you set it up “History of Mathematics” could attract students from several different majors which means you can offer it more often etc. But the same applies in reverse so CS programs can end up with more overlap than ideal.


Yes, when we design mathematics degree courses, there is, of course, only so much of the overall subject that can be covered.

However, the definition of a mathematics major is, I think we'd agree, "someone who has majored in mathematics". So, regardless of how much of the corpus we manage to cover, having a degree in mathematics means that you majored in mathematics (if I am understanding US terms correctly).

The original post was, I think, equivocating a degree in computer science with being a mathematics major. Which could be regarded as being incorrect, perhaps pedantically, merely by definition alone.

However, also, I am making a distinction (although I wasn't very clear, I admit) between theoretical computer science (the topic) and a computer science degree. It is generally accepted that theoretical computer science is a topic in applied mathematics, but it doesn't then follow that having a computer science degree means that you are a mathematics major.

Computer science degrees have theoretical computer science (the topic) as a component; the extent to which that component makes up the degree syllabus varies greatly from university to university and, perhaps, has also changed over time.


> The Computer Science program was part of the College of Science and Mathematics at my university (not the School of Engineering).

And what we need is for CS and Software Engineering to split, with Software Engineering being part of the School of Engineering. (Similar to the way Chemistry is split from Chemical Engineering.) And we need Software Engineering to be ten times as large as Computer Science. (Of the people who get CS degrees, 90% of them are going to work as software engineers, not as computer scientists.)


I actually really value my CS education, and think a rigorous mathematical education is useful for any analytical profession. Both in terms of being proficient at math, which has tons of practical applications, and for developing analytical and abstract reasoning.

I’m curious what sorts of things would you like to drop from a CS degree, and add to a computer engineering degree?


It's mostly what I'd add.

To me, software engineering is about creating larger-scale software that adequately meets the need, and doing so as efficiently as possible - which is not to say that it's efficient. When there's six steps in the communication path between the need and the programmer, how do you minimize the amount of time the programmer is implementing the wrong thing? This is a far bigger problem than choice of language or algorithm, but I doubt you'll ever find it in a CS curriculum. I might even say it's the fundamental problem of software engineering - or perhaps of software engineering management.

Along those lines, they should teach clarity of writing technical information, and ability to read less-than-stellar technical information.

"That adequately meets the need" - that's not perfection. How do you evaluate and triage bugs? How do you manage the bug list? For that matter, how do you even know what bugs you have? Testing strategy should be part of a software engineering curriculum.

Working with a version control system. They might get that in a CS degree, but probably around the edges and by accident. For a software engineering degree, they should get it in some depth and on purpose.

I don't know what I'd cut to make room for that kind of thing. But I think that kind of thing needs to be there for an actual software engineering degree.


> a rigorous mathematical education is useful for any analytical profession

This is already the case with classical engineering degrees. The majority of undergraduate engineering coursework is science, calculus, or some form of applied mathematics specific to the discipline you're majoring in.


My large state school had a computer science degree, and a computer engineering degree. The latter being much more mathematically rigorous, and in the college of engineering, not college of science (and sort of adjacent to an electrical engineering degree). It’s noticeable in the grads it puts out too. If you need a programmer that can handle and understand math, get one with the engineering degree.


I largely agree about the major in the USA. I disagree though that the study of what can be computed is anything other than a discipline of mathematics. Computing science itself never requires stepping outside discrete mathematics, which of course means the majority of math just isn’t necessary to do theoretical work or write correct programs. But then what mathematician today has mastered the entire field? It’s too big, you have to focus.

However, there’s considerably more to it than that. With a few rare exceptions, the overwhelming majority of CS programs in the USA are “telescope science” and not astronomy. One of the more telling, and to my mind obnoxious, evidences of this is how even in the academy the CS types literally appear to believe that “formal” means machine checkable while at the same time balking at learning basic first order predicate calculus to actually specify what is to be computer by a given program. Clearly they are studying the machine and not the mathematical sub-discipline.

I emphasize the USA, because having done many many FAANG technical interviews there is a discernible pattern of graduates from continental European CS programs being considerably more mathematically literate.


I, unfortunately, wasn't very clear, in my original comment, that I am making a distinction between theoretical computer science (the topic); and being a computer science major.

Theoretical computer science is generally regarded as a topic in applied mathematics. However, it doesn't follow that, therefore, a computer science major is basically a mathematics major.

Theoretical computer science (the topic) is a component of a degree in computer science. How large of a component it is varies greatly from university to university and, perhaps, has changed over time.


> Without hesitation, computer science is certainly not a mathematics major.

Properly taught it definitely is.

The issue here is that an average undergraduate mathematics major in the USA learns a ridiculously low amount of mathematics so I guess a CS one does even less. I did more maths during my two years of prépa in France that the American who majored in mathematics I met during my postgraduate study.


BSc CS is an accredited degree in the US. It is very math heavy. Most of my peer graduated with minors in mathematics. Majority of us did discrete mathematics for most of our degree and numerical analysis in electives. Abstract algebra if you took advanced crypto courses. I don't know a whole lot about diffyQ but I can swing it if I read a book.


schools vary widely in the USA, so, no.


That’s why I said average but, anyway, I did my postgraduate in Oxford where most of the American didn’t come from middle of nowhere universities and they were all frankly disappointing in mathematics. My two cents.


> an enormous... subject

I think you're getting to the crux of the point. A few years in university (for undergrad) is not nearly enough time to cover the entirety of mathematics. The sheer fact of time constraints requires a survey and a selection of a fraction of the field for study.

I would argue that economics degrees are also, essentially, math degrees for the same reason. Neither economics degrees nor computer science degrees will cover the same topics as a "pure" mathematics degree (or else they would simply be known as mathematics degrees), and I will grant to you that they are "applied" math degrees if I must. But the point remains: a "pure" math undergrad degree cannot include all of mathematics, and thus is perhaps best renamed as theoretical mathematics, commensurate with branding economics and consumer science as "applied".


When I tried CS my freshman year in the 00s, the degree was one course away from a math minor; it was basically a given that a CS major would leave with a minor in math. And like the parent said, one of my professors emphasized that computers were to comp sci what telescopes are to astronomy. So perhaps they are not as educated as a Mathematics PhD, but it is more than taking a python course.

Even at the time, however, there were divisions in the faculty about the core curriculum, since we had two graduate CS tracks: software engineering and theory.


As a CS Major, who doesn’t know how he passed linear algebra, I agree. CS is close to a minor in Math, when I attended only ~4 extra math classes were needed to qualify.


It depends on where you went to school and where it came from in the school.

I went to large state school where the CS department was part of and eventually split off from the math department at some point. Their original degree was computer science and applied math. It was very much “math with computers” when I was there 25 years ago.

I imagine things have changed a lot, but schools have a variety of approaches and states of transition that are probably difficult to know about.


economics makes heavy use of statistics, so it is an unfortunate example to use for "what is math"


Good points. I actually did my Ph. D. in software engineering after getting my computer science master degree a bit over 20 years ago. Software engineering as a discipline is a bit of an oddball science as it is a bit stuck between typical hard / math driven scientific fields like mathematics and physics and other scientific fields like sociological, economics, etc. The core issue is that software engineering involves people and processes. Mathematical proofs don't really work all that well for that kind of stuff and you need to reach for scientific methodology from other fields to study it properly.

A lot of computer scientists actually struggle with this and don't fully get it. As a result, software engineering education isn't all that great in a typical computer science curriculum. One reason is that most computer scientists actually lack the experience of having worked in large software companies and don't actually know a lot about how that works. It's something I realized while doing my Ph. D. in this area and I fixed it by leaving academia. I learned a lot since then.

One thing I learned is that a lot of good software engineers exist that never studied computer science. I know people with physics, geology, micro biology, philosophy degrees that ended up working as software engineers and that are very good at what they do. Most scientific work involves some level of programming these days. So, it's quite common to meet people with some python or even machine learning experience that never studied computer science. Things like formal methods, linear algebra, etc. are useful to know of course for some things. But you don't need to have a any of that to learn python, javascript, or any of the other popular languages. In the same way, knowing a lot about type systems is nice if you build compilers or design your own languages. But you don't need to know much about that to use a language.


> One reason is that most computer scientists actually lack the experience of having worked in large software companies and don't actually know a lot about how that works. It's something I realized while doing my Ph. D. in this area and I fixed it by leaving academia. I learned a lot since then

This was me exactly. I started a Ph. D. simultaneously with two other students and our supervisor had us working on separate aspects of a common overall problem, each of which required a lot of software development, in C, because we were chasing performance. The supervisor had an academic background and all of us had only just graduated. Needless to say this was a total disaster and we never even managed to complete our separate parts let alone integrate a usable system. I bailed out and got an M.Phil for my efforts, but on the basis of the experience managed to get the job that I wanted, so it wasn't a complete write-off.

As soon as I encountered some actual software engineers in a well structured research department, I realised how bad our approach in Uni had been. My job involved a similar problem area, and using better tools (Common Lisp on a Lisp machine) I managed to build in about six months what I had failed to do in three+ years in academia.

My thoughts on the feudal nature of the Ph.D system at my Uni are a whole separate post!


I would enjoy a summary of that separate post!


> But you don't need to know much about that to use a language.

On the other hand, without the formal underpinning there is an enormous risk you assume your intuitions are correct about stuff where it turns out there's just unyielding mathematics (or occasionally physics) that disagrees. The formal instruction would either outright tell you about that or at least give you the right lenses to see for yourself.

For example it's not at all rare to see programmers who think about floating point as just the Real Numbers, because they superficially resemble real numbers you've seen - but it's not, it's the modulo integers again but wearing a trench coat. Formally it's obvious we're not getting the Real Numbers, Almost All of which aren't even computable. But without that formal underpinning people have nasty surprises.

People's intuitions about concurrency and parallelism are all wrong too. Amdahl's law matches reality but doesn't match how people intuitively expect this to work out. The insight that makes Rust and several modern languages work (that you can't incur a data race if you don't have multiple references and mutation) is not at all intuitive.


It's a theoretical risk; you mitigate it by just having smart people that have a good analytical mindset that can learn. As it turns out, the most important thing you learn in university is the ability to acquire new skills; not any particular skills. That ability is not unique to computer science.

Another thing is that languages and tools that require a lot of formal background are a hard sell in industry because it means having to hire more scarce and expensive people. It's a reason that functional programming was a hard sell for a long time until languages got good enough that normal people could figure it out. Scala was an early example that did not quite get that right maybe. Too difficult for people without a CS degree and a good understanding of type systems. Indeed the whole language became a bit of a playground for type system nerds. It got a bad reputation for being hard and a bit over engineered.

Javascript and python, both of which now have some level of functional programming support, are much easier to pick up by other people. Which is why those languages are so popular. Any high school kid can work with this. I currently have a couple of summer interns in my team. These two languages are what they know.


> and don't actually know a lot about how that works. It's something I realized while doing my Ph. D. in this area and I fixed it by leaving academia. I learned a lot since then.

Well said.


> It's like getting an astrophysics degree in hopes of getting a job in the telescope industry

Which seems perfectly reasonable? I reckon most astrophysicists could work in the “telescope industry” just fine, and their background in astrophysics would prove pretty useful. And likewise, CS graduates are perfectly suited to difficult engineering jobs. I’d rather hire a smart CS grad with no knowledge of FactoryFactoryFactory than the reverse.


Having an astrophysics degree would certainly prove useful in the telescope industry, but most telescopists don’t need an astrophysics degree.


An astrophysicist doesn't necessarily know a lot about optics, for example.




That's, ahhh, kind of obvious and missing the point about the wavelengths more commonly used in modern astrophysics.

A better rejoiner would've have pointed out the optics-like bending and focusing of all wavelengths about gravitational wells, eg:

https://news.stanford.edu/press-releases/2022/05/02/gravity-...

works for more than just the visible wavelengths.


If that was the point you were trying to make, it might have been better to state it rather than link to two articles about radio astronomy and ask “what does optics have to do with telescopes”

Reflective and refractive optical telescopes are still important (and still being built.)


Everything. Light is not only the one in the visible spectrum.


... or RF engineering.


Indeed! I think elecrical engineers cover the largest "area" in today's engineering landscape in terms of both breadth and depth, encompassing applied physics, math, and cs. An electrical engineer can understand and potentially work on converting RF to electrical signals, process them to extract bits, program a computer to decode those bits, and convert those bits into a human consumable format.

Of course each of those areas is filled with decades of progress that requires in-depth expertise, but if there's a discipline that can go deep enough into each of them, it's probably EE.


You can use similar methods and EE skills to look downwards rather than upwards by measuring and differencing not-RF fluctuating sources ...

https://www.ga.gov.au/scientific-topics/disciplines/geophysi...


Whether it’s reasonable or not depends on who’s paying for the unnecessary years of education you just did, and if that involves debt then the consequences of the debt.


> A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot."

– Edsger W. Dijkstra (source: https://www.cs.utexas.edu/~EWD/ewd10xx/EWD1036.PDF)


Another quote from there:

"if we wish to count lines of code, we should not regard them as "lines produced" but as "lines spent": the current conventional wisdom is so foolish as to book that count on the wrong side of the ledger."


I mean, this attitude (and the knowledge that it is held by hiring individuals in computing) certainly explains why the demand is high for CS amongst people who want to do software engineering as a career, but I've also encounter interns/grads from some CS courses where it's clear they've followed this attitude to eschewing practice to such an extent that the graduates are having difficulty.

It turns out in most jobs you do use things like soft skills, version control, SQL, etc. more than number theory, formal verification, Forth or UML.


Yes but do you want a 4 year degree that focuses on those soft skills? I think that is what he was criticizing - certainly what he said could not be construed as applying to actual practitioners in industry.


> CS is really a mathematics major

Not really, and it's not really an engineering major either unless your CS is also part of the engineering school like MIT's is. Compared to mathematics curricula, you are doing a lot less complex stuff, there are few proofs and the classes are much easier than math ones.


Name your school when you make comments like this. At UWaterloo half my classes were proofs. The other half were projects/coding assignments.

If you can’t prove things and don’t cheat, you can’t get a UWaterloo CS degree. Can’t get past first year.


University of Maryland. We didn't do proofs for year 1, we mainly did them for our discrete math and algorithms classes. Our curriculum was very focused on learning theory and coding that up (ie, a regex engine or an interpreter and compiler), not really any proving.


At UWaterloo 2 required first year courses are heavily proof based. One is basically intro to proofs. And second year there’s required graph theory/combinatorics course which are also proofs. 2nd year formal logic. 3rd year algorithms courses are highly proof based as well.

This isn’t a flex tho, cuz there’s so much optional advanced math that isn’t required. Everything in the combinatorics and optimization department at UWaterloo basically. Most of us UW CS grads are normies who didn’t do any of the hardest stuff including me :-)


I graduated UMD in 2007, and I remember some of the upper level theory courses (which I tended to concentrate on) being quite proof-heavy.


UT Austin. Our dept was in the college of natural sciences. The curriculum itself was very formal. The big compromise with industry was to use Java, but other than that it was a pen and paper kind of thing. I thought it was great. The engineering part I learned in industry, but I could have also continued into a phd.


At my smaller state school there weren't really any proofs in the cs degree at all. They ended up having to relax the math requirements even because so many international students (big money for the school) were failing their integral calculus.


Not going to name my school, but had a similar experience.


At Massey University in New Zealand. The CS papers had almost no math.


UW had (still has?) CSE in the college of arts and sciences and Computer Engineering in the college of engineering. CSE and CE shared many classes, CE got to take some EE classes as well as the general engineering pre-reqs. CSE had more flexibility (e.g. take more math classes, but nowhere near what a math major would take!), and no given access to engineering courses. CE was harder to get into than CSE, but CSE was still hard to get into (and probably still is!)...most of the CE graduates back then went straight to the Portland Oregon area to work for Intel (pretty sure that is no longer true!).


Yep! And now the EE department is ECE for electrical and computer engineering, which is a different program/degree than the Computer science and engineering (CSE) programs CE degree. Wild! They also share a building sorta, with ECE having the older portion connected to the newer CSE building via weird mid-floor staircases.

CSE at UW was unique too in being the only program that had a degree in both the college of engineering and the college of arts and sciences, which meant they literally had different deans and budgets, but the same program advisors and such.

Unless something has changed, I believe the original idea was to merge the computer engineering degrees from both departments, not sure how that panned out. I left before it was even ECE!


Huh, ECE is way after my time (I graduated before the new CS building was even completed, Sieg hall for me) but it makes sense. But with most people going into pure software after graduating (hardware jobs don’t pay as well), it doesn’t seem to be the right direction.


Indeed, some universities put CS as a Bachelor of Arts while most put it as a Bachelor of Science, while even other have them both, with the students' option of either.


And I've read that Harvard or MIT uses A. B. instead of B. A. for a Bachelor of Arts.


All of the material is math. Easy math is still math, and people who hate math, or can't do it at all, will have the same problems studying CS that they do studying other types of math.


My CS degree (University of Cape Town) was basically a software engineering degree with a light sprinkling of theory. Basically our only proof that I remember was the the halting problem, and it was really only the basic idea with not much rigor.

We covered data structures & algorithms, concurrency, schedulers and virtual memory but it wasn't very math heavy. We have one full semester on software dev cycle and one for UI and mobile app development. Our final project was a group project to assess applying software dev cycle in a team. As far as I'm aware the CS department has a sizable HCI group.

I remember in first year with Python they taught the students to parse integers with `eval`.


My school was a top engineering school world wide and the CS Eng program was insanely difficult compared to math. When people failed out they switched to math typically. We were heavily theory and proof based, with a strong emphasis on numerical methods, but also with deep systems and architecture components. It depends on the school.

Although my datapoint is 15 years old now. I’ve heard they’ve dumbed down CS at the behest of tech companies looking for base level talent factories.


Since CS as a discipline came up after the rise of modern universities, the question was where to setup the departments. Most universities went with either mathematics or electrical engineering, and I think you can still see the effect of that in their curriculi today. A few also were spun out of business schools or built up from the ground.


It's not the full mathematics major, but double majoring in both CS and Math at my university was common. And a CS major who wanted a Math minor needed no additional coursework.


Back when I majored in computer science, 20 years ago, mine was an equal combination of computer architecture, theory of information, mathematics, and some electrical engineering.


I'd agree it's not really an engineering major. I have an ABET accredited CS degree and the majority of my BSc in CS was done on paper. It was a majority of proofs and mathematics (though, focusing on the discrete side). The amount of programming I did outside of a few select classes was reasonably minimal. Software engineering was an elective. Analysis of algorithms, though, for example was ALL math.


My uni in Poland - CS and software engineering were basically the same things when it comes to Math classes, the difference was mostly in programming classes (we at software engineering had more project based classes and they had a lot of smaller ones)


Yeah, it varies by school. At MIT it's EECS. Sure there's a lot of math but it's hardly a math major.

But I was early on in computers. I took a FORTRAN course for another engineering major and otherwise never used computers undergrad.


As a Math major (who now writes computer software for a living), I agree.


Not all CS programs are created equally. I direct a master's CS program and I wouldn't characterize it as reminiscent of a mathematics major at all. A good portion of the classes available to students are practical applications. The undergraduates have have a software engineering track of a few courses, as well as a capstone where they work as a team with local companies on real software engineering problems. The math department doesn't offer anything like that.

Could you maybe expand on which programs you're talking about, specifically? I'm always comparing other programs to ours. I haven't seen one I'd call "math-adjacent" in a while, as most programs have gone the way that ours has in emphasizing hands-on experience.


I mean, my program had that 12 years ago; it was still math adjacent.

We took intro to cs (boolean algebra), algorithms (definitely math-adjacent), databases (relational algebra), computer architecture (math but with 1s and 0s), theory of computation (finite state machines, context-free grammars, set theory, more algo).

That on top of the math requirements (linear algebra, Calculus, probability & statistics)

Does your program not have those things?


When I think of a math major, I think heavy on the theory, light on the practice.

When I look at CS majors, they are heavy on practice, and these days lighter and lighter in theory with every passing hour.

We have all those things you listed, but they are not emphasized as much. We don’t go into theory as much as we used to because there’s so much more to cover that people want to learn these days.

But as for a list of topics, of course you can fit a lot of CS topics into a “math-adjacent” category. But what I said was about the major not the class topics. There’s more to a major than a union of classes.

In fact I have many math majors in my CS class. There are many CS majors who take math classes. But come graduation time, the CS major will be prepared to go directly into a software engineering role and be a productive member of a team. They will have worked with technologies like git and visual studio extensively. They’ll know half a dozen languages. They’ll have worked with a team on a real software project for 1.5 years.

The math major will not have any of these experiences.

Let me put it this way, as someone with a physics and a cs degree, I would call the physics degree math-adjacent, and the ca degree engineering-adjacent.


>Universities should really emphasize software engineering as a major rather than CS

What constitutes "software engineering" is a lot more subjective than what constitutes CS, partially due to the relative lack of mathematical foundations. At the university I attended, "software engineering" meant waterfall, enterprise-style Java and lots of UML diagrams, arguably it'd make anyone who attended the software engineering degree a worse engineer if they didn't know any better.


Indeed, it seems it would be hard to learn current coding standards without currently being in the industry. Could professors really keep themselves within ten years of current practices if they have a full time job as a professor and aren't coding for the external world in that time?


In Portugal, unless something has changed during the last decades, CS as often described around here, is indeed a mathematics major, badly translated something like "applied mathematics to computers".

Software engineering, or informatics engineering, are 5 year degree[0] with a mix of CS theory, actual practical projects, and engineering.

So at least from the point of view this tiny country, it seems like an issue on how US universities structure their offerings.

[0] - Bologna treaty for EU universities changed this a bit, however universities got around it by now offering integrated masters, allowed former students to upgrade their degrees for legal compatibility, so hardly anyone picks the bare bones 3 years as per Bologna.


Related, people should be more vocal about how much of a mess the Bologna process was, and still is. What you're describing related to those "integrated masters" is just a workaround (one of many) around that mess.


Yeah it's a mess. That being said, it accomplished the main aim which was to facilitate recognition of qualifications across the EU. Given that it was driven by civil servants and academics that's a pretty big success.


I feel like a continent-wide decision that has profoundly affected the lives of tens of millions of people should have been put to some sort of democratic check-up, like a vote.


> I feel like a continent-wide decision that has profoundly affected the lives of tens of millions of people should have been put to some sort of democratic check-up, like a vote.

Also, you vote for this kind of thing both in your national elections and in the European Parliament elections. It's representative rather than direct democracy (I do agree that it should be more direct, but not to the point of a referendum on the Bologna process).


Like a referendum? I dunno, that often doesn't work so well (see California). Most of the time you'd rather have a republican system than a pure democracy.


How has it impacted your life?

Speaking as someone who didn't really notice any difference, I'd like to understand what changed for you.


>CS is really a mathematics major

Depends on what your school considers to be CS. I did two compulsory mathematics papers for my degree and I've heard that in the years since that they've been axed. My resume still says I have a CS degree despite for all intents and purposes studying software engineering.


> However, it's often totally irrelevant to the real work in the software engineering industry.

That's not a problem with the CS degree. I mean it's the same for every industry and degree then.

You study years of law only to spend most of it helping people exchange real estate contracts etc.

The average <any role> often degenerates into a boring repetitive task. The average doctor at a local clinic likely repeats the same diagnosis every day.


Software engineering, as in the subset that wouldn't be included in a hybrid under the flag of CS, is far too short-lived for universities. Not because things are so fast-moving (perhaps they used to for a while but I think that's over) but because progress is more out with the old, in with the new than building on the foundations of predecessors.

Take a look at medicine for example, by far the most practical of the original set of sciences the organisational pattern of universities was designed for: we know almost infinitely more than 100 years ago, but very little of 1920ies medicine would be considered objectively wrong today. The part of software engineering that struggles to fit in with "CS and a bit of coding" from 2003? Much of that knowledge would be considered more harmful than helpful today, even in an org that does mostly legacy maintenance. ("at this point in the waterfall we will have defined the class hierarchy")


They actually do in some countries, where even software engineer is a legal title, not something that one decides to call themselves,

https://guia.unl.pt/en/2020/fct/program/935


Things have cooled down a bit but I recall a time when companies were recruiting software developers who were still in school.

That doesn't happen with medicine. You don't become a cardiologist without doing the whole 10 years of studying. It reminds me of the medieval guild system: quality assurance. But corporations will settle for quantity. They need warm bodies to code and they need it pronto.


I went to a school that was 82% mechanical engineering (or something like that) For a CS degree.

It was common question why we didn’t offer software engineering instead of computer science. The simple answer was an “engineering “ degree required non-applicable physical sciences, like heat transfer and an statics. Interesting, but not applicable to shipping software products.


I did Computer Science (not software engineering) as an engineering classified degree i.e MEng. The key difference is that it included more management and some other modules required to make the degree accredited by the IET to meet the UK-SPEC (UK Standard for Professional Engineering Competence and Commitment) of the academic requirements for CEng (Chartered Engineer). This is pretty common in the UK if you do an "integrated masters" degree which is the path of least resistance to becoming professionally registered.


Ah, going sideways due to your "integrated masters" degree reference.

Before Bologna, all Portuguese engineering degrees with 5 years, with masters and Phd, coming on top with additional 2 and 3 years respectively.

There were exceptions like polytechnics being 4 years, but they were a small subset.

With Bologna agreement reducing the standard set of years down to 3 years, that was felt like a downgrade, and so "integrated masters" degree was born to match the original 5 year degree, and everything remains as it was.

Was it similar in UK?


In my country we have a strong separation between a CS degree and a SWE degree. As a SWE graduate I was expected to know tons of maths, physics, control theory, signals analysis, circuit theory, electronics, telecommunications networks and operative research.

This was roughly half the courses, the other half were the usual stuff like logic circuits, algorithms, operative systems, databases, computer architectures , etc.


Sweden?


Interesting, never thought about that. I did a CS degree.

Universities probably prefer that, given all things considered, it's better to teach NP than heat transfer, because it's more related to computers? Also big tech like to ask about CS stuff in the interviews.


Up-vote for a correct diagnosis, but I disagree with your suggestion. Universities are for training with a solid theoretical foundation. How many traditional engineers actually do integrals by hand, or doctors balance an organic chemistry equation? Trade schools are for majors in specific professions. That's not to say universities should do zero to prepare graduates for industry, but that isn't their primary purpose.


Some CS departments emerged from electrical engineering departments (and some such as MIT and Berkeley are still EECS) while others (Purdue, Stanford) emerged from math departments (and some such as Santa Clara are still departments of Mathematics and Computer Science.)

Purdue seems to have had founded one of the first CS departments (1962) and it was originally part of the Mathematical Sciences division along with Statistics.

In most departments, I that expect systems courses will generally be more aligned with engineering (and industry practice) while theory courses will generally be more aligned with mathematics.

Given the origins of CS, it is disappointing that software practice typically seems to lack both engineering rigor (vs. circuits with predictable behavior) and mathematical rigor (vs. theory with provable results.) The math and engineering parts of CS seem to apply primarily to tiny components rather than the large, complex software systems that people actually build.


> People go into CS to get jobs in software engineering. This is misguided.

> CS is really a mathematics major,

This is true in many departments, and it's wrong imo. The reasons for the math focus are historical and they perpetuated, probably due to the way hiring was done -- the current math-inclined profs hired other math-inclined profs.

But it should change. I would argue that CS degrees should decrease the math focus and should really train for SWE.

Edit: The match-centric major should just be a subfield of CS, say Theoretical Computer Science.


I think the point is they are literally different things.


>Why do we need physics degrees when we can just get more mechanical engineers?


> CS is really a mathematics major

The CS I'm familiar with has aspects of mathematics, engineering, science, and even social sciences. It's a field that studies things related to computers and computing by any means necessary. Most CS programs are narrower in scope, because students only have a few years to study, and studying something in depth is generally better than covering a little bit of everything.


I did a Software Engineering bachelors instead of a C.S. degree. Looking back I wish I did a CS degree. Most of the business of software you can pick up on the job as you go. I wish I used the free time in college to pursue the more mathy aspects of computer science like formal languages, and advanced topics like compiler construction. I think studying those topics would benefit me a lot more in my day to day job today rather than studying various process models that nobody uses in the industry.

I will say tho, one thing I liked about my university was that paid internships at companies in your field was a requirement for graduation. I think this better prepared me more than anything for the job market. And it's something that you can bolt on to really any degree program without major curriculum changes.


I disagree entirely, a cs degree is neither necessary nor sufficient to be an engineer, but to be a truly excellent top tier engineer mastery of all the material in a top cs program is necessary, but not sufficient. If your goal is a job that pays the bills, fine. If your goal is to master your field, you can either be insanely disciplined and learn on your own (as some do) or you can really learn deeply in a cs program and learn deeply the art of software engineering in practice.

Source: I spent the first 10 years of my career without a degree in the valley then got top honors at a top school as a return student, and am a distinguished engineer level engineer at top tech and tech aligned companies.


Regarding the first point, observe that the number of people doing mathematics majors does increase over the time period so that wouldn’t be an explanation for the lack of growth.

Regarding relevance to jobs, I think CS is, de facto, the major that employers see as more relevant in candidates in the US, though I think this is much less about the content and more about CS being seen as more prestigious and selecting for more ambitious/capable students who may make better employees in the long term. I don’t think the reason for the relative decline in the popularity of CS was that students really wanted to do software engineering (but ended up doing physics/math instead).


Universities are historically places you go to study pure academic disciplines. They have not been, historically, “a place you go to study whatever is useful for a job”. Personally, I vote for keeping it that way.


> People go into CS to get jobs in software engineering. This is misguided.

I told my academic advisor I wanted to be a computer programmer, and she put me in CompSci. No one ever told me that that was the wrong discipline. My school didn't even have a Software Engineering program. I had graduated and was trying to find work before I fully realized that my degree had barely taught me anything useful and I was going to have to learn most of it myself.

It's the system that's misguided.


> It's like getting an astrophysics degree in hopes of getting a job in the telescope industry.

If you just want to build telescopes, then you don't probably need any degree. If you want to engineer telescopes, then astrophysics, optical physics, etc. might matter.

We often use the term "software engineer" when we really just mean "programmer". But actually engineering software is going to rely on CS knowledge a lot more than simply programming a computer.


My degree is technically “Computing and Information Sciences”, and my university let me pick a concentration. Computer Science as a concentration seemed very math heavy, so I opted for Information Science, which I would describe as “practical” where CS is “theoretical”.

I missed out on some of the CS concepts I think, like I hadn’t heard the term “Bloom Filter” until I was asked about it in a TripleByte interview… but it’s nothing a free, online course can’t solve.


This doesn’t align with my experience at all. I expect outcomes vary depending on university and what area of “software engineering” one goes into.

My college courses taught me about networking, operating systems, computer architecture, algorithms and data structures, and more. I use knowledge from all these areas on a nearly daily basis in my job as an embedded software engineer.

For the front end developers who studied theory of computing, I agree.


> Universities should really emphasize software engineering as a major rather than CS

They already do, it's called a "systems emphasis". Features cool stuff like data races, scheduling, IPC, consistency guarantees, cache coherence

And wrt this:

> However, it's often totally irrelevant to the real work in the software engineering industry.

I can't imagine someone working in backend and not understanding something basic like how to avoid data races


Without wanting to be a dick, I'd suggest this is a failure of your imaginative ability, not the failure of, well everyone who doesn't understand data races.

There are lots and lots if programmers in the world. Some are focused on UI (even on the backend), some on low-level things like graphics, so on hardware some on libraries, and yes, some on data.

I say this not to pick on you, but to point out that there are lots of universities, with lots of curricula, all called "computer science". The focus of each is widely diverse, and its likely that my CS degree and your CS degree are very dissimilar.


The small accredited school I went to in the late 90s was actually pretty progressive in the degrees. They had the typical CS track we all think about, but they also had a track which was a mix of hard CS and business. Instead of having to take higher levels of math, I took things like finance and economics.

Nowadays they have a software engineering track, data science, and even one focused on entrepreneurship.


> CS is really a mathematics major

It isn't even close.


Ok, thanks for your contribution to the discussion.


Apologies, but I do tire of software and computer science constantly thinking that what they do is math. In my experience, software engineers and computer scientists know very little mathematics, generally speaking.

Why do you think a CS major is like a mathematics major? Just because proofs and logic may be used in some curriculums doesn't make it a mathematics major.


Theoretical CS is hardcore mathematics https://en.wikipedia.org/wiki/Theory_of_computation


That's certainly an area where there is very deep overlap. I'd even say it's just mathematics. But aren't those topics generally covered in just a single course, maybe two, in a CS undergraduate degree?


In pretty bad CS degrees, maybe. Where I'm from, CS is mostly maths and there is a separate software engineering degree for those who want more software and less maths.


Your comment presumes the value of a CS education is that it is viewed and studied through a lens of mathematics. Otherwise you call the program “bad”.

Many people have a different opinion of what CS is. Seems like you enjoy theory, so you went to a program that is heavy on theory. Smart move for you, not the same move others would make for equally smart reasons.

Personally I think all of the theory is fine, but computer science is about doing science. You can do theory science, but there is a wide world of science that needs to be done beyond that. For instance, an HCI researcher may not work much with algorithms, but that doesn’t make them any less of computer scientist, although some jerks might like to think so.

As for programs, most only have a core of 5-7 core required courses, along with a dozen or more other elective and general liberal arts courses. If more than a couple of the required courses are devoted to theory, then it’s probably tailored toward people who know they want that kind of thing. That’s neither good nor bad, but it doesn’t mean that other programs that don’t require more theory are necessarily bad. It may be that they just want to give students a broad overview of the field, and allow them to dive deep into theory with electives.


I genuinely don't think that theory is better. I just think that we shouldn't cram everything related to computers in a single degree. It's not feasible and it leads to overly generalist degrees which I personally don't find very useful (which is totally a personal opinion, not some subjective truth for sure!).

Regarding your example, that's exactly why I mentioned that, where I'm from, we have a software engineering degree that is more common than computer science exactly because people want more practical courses rather than jerking about theory for three years.

We even have a distinction between "Informatique" (computer science but more practical), "Mathématiques et Informatique" (more of a classical computer science course with tons of math theory). I think this is the best way to actually provide a diverse education path for different types of people. Otherwise you get a CS degree that basically sucks imo


Well, that’s just how major evolve. They get so full with stuff until soon enough they pop and out comes another major. It’s how CS was born in the first place.

I can definitely see AI / intelligent systems becoming its own thing. The dean gave us a directive to create new programs, and said that 50% of our CS majors should be graduating with degrees that don’t yet exist in 10 years. So you may actually start seeing more degree types in the area of CS.


> But aren't those topics generally covered in just a single course, maybe two, in a CS undergraduate

I'd say the bulk of my CS degree was discrete maths adjacent to computation theory.

Honestly too much maths made me not like doing the degree (nothing against maths, I like it but I hate the way it's taught)


Theory of Computation itself may be one paper, but an undergraduate CS degree will include much applied mathematics involving logic and combinatorics and so on. I completed a short 3 year degree in CS that included the following papers:

- Algebra and discrete mathematics

- Two papers in data structures and algorithms (including theorems/proofs, using CLRS as the textbook)

- Secure systems (cryptography)

- Programming languages (parser/compiler theory etc)

- Theory of Computation

- Logic

Then I studied machine learning, which is a subfield of AI, which is a subfield of CS. That is a deeply mathematical subject, requiring knowledge of linear algebra and probability.


> Apologies, but I do tire of software and computer science constantly thinking that what they do is math.

Software engineering is as much engineering as it is, say, mechanical and civil engineering: some applications explicitly require it, but others don't.

Computer science has a solid math foundation. Lambda calculus, graph theory, category theory, process calculus, computational complexity,etc etc etc.

This doesn't even take onto account stuff like numerical analysis and applied linear algebra, which is the core of high performance computing.

It all comes down to what exactly you believe math is, and what it really is.


There's no doubt that there's a lot of overlap between mathematics and computer science. Mathematics gave birth to computer science, after all.

But what is under debate is the comment that "CS is really a mathematics major". An undergraduate computer science degree program is no more a mathematics program than an electrical engineering, physics, or statistics or data science one.

But yes, there's no question that mathematics is highly applicable.


Isn't the study of algorithms a substudy of discrete math?


People get CS degrees because the JOBS require CS degrees. Theres nothing misguided on the student's part


Most of what we do in the software industry isn't even really "engineering" in any meaningful sense. I would rather see colleges offer something like a Bachelor of Arts in Software Development for students who want more practical skills.


> CS is really a mathematics major

In some universities, CS is under the Math faculty, like in University of Waterloo (one of the top programs in the world), so there's some official recognition to this idea.


Not sure how other schools do it but UIUC has an engineering CS path and a more math based CS path. I took the engineering path and then became an engineer, it was great.


CS and math does not teach problem solving. It teaches artificial problem solving for non real theoretical cases in a limited context - math and computer science.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: