Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Why do so few people major in computer science? (2017) (danwang.co)
109 points by andsoitis on July 15, 2023 | hide | past | favorite | 291 comments


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.


I think this article may be outdated.

It was published in 2017. By 2019, the NYTimes was publishing articles like this, about the shortage of spaces in classes for people interested in CS: so popular students literally could't sign up.

https://www.nytimes.com/2019/01/24/technology/computer-scien...

Here's an article from 2023, about a 12x increase (!) in CS enrollments at UC Berkeley from 2011 to 2021. The trend at other unis was also strongly, like double-digit percentage increase yearly, up.

https://eighteenthelephant.com/2023/02/12/10-double-the-numb...

I think there was a brief cultural moment where for whatever reason - uncool? nerdy? math anxiety? - CS wasn't where you'd expect it to be, in terms of enrollment. But the culture changed & now it's very popular.


Yes. The actual numbers of graduates with CS degrees:

  2013-14 2014-15 2015-16 2016-17 2017-18 2018-19 2019-20 2020-21
  55,271  59,586  64,402  71,416  79,597  88,638  97,054  104,874
Source (same as TFA): https://nces.ed.gov/programs/digest/d22/tables/dt22_322.10.a...

Remarkably, it's the field with the highest growth from that table, by far.


CS enrollment booms and busts. It was booming just before 2001, and then it was something no one wanted to do for a few years, then it was booming before 2008, and then...again...it fell out of favor for a few years before coming back again. This happened in the 70s, 80s, and 90s as well. It isn't just a culture change, we are simply in a cycle.


According to the article, the peak was between 2004-2005 (I guess all the people who went into CS before the dotcom bubble exploded graduated then).

Which means we're due for possibly the biggest cohort of fresh CS grads in about 3 more years. Fun times


"Peak CS" was last year.

Not every school has peaked, but many have.

It will drop for the next 5 to 10 years.

(FAANG hiring freezes will disincentive students...)


Enrolment sure, but the charts show that more people graduate years after the bubble.

Meaning last year may have been the largest CS enrolment class, but we won't see the largest fresh graduate class for a few years still


The peaks are local (ML joke?). Every boom bust cycle the peaks getting higher...


MSc EE here, self taught in the 8 Bit era. When deciding for EE vs. CS the decision was for something ‚real‘ and not so theoretical. Also I felt the field moved so fast a lot non-math content would outdate quickly. Then only worked with computers doing software all my career.

Most of what I learned in universities I forgot. What stuck around and I still leverage today was appreciation for quantities and statistics. Understanding of basic dynamics in linear vs. non-linear systems. A vague feel for frequency and transition responses. An appreciation for materials, their limitations and trade-offs involved in their selection. Not much but very useful and valid forever.

When hiring I admit I prefer engineering and physics majors over CS (provided they can code) as former often seem to have more focus on results outside the box while CS are more focuses on the insides. The key to good software with impact are getting the requirements right and that needs negotiations with people outside of the box and making trade-offs.


In my country, both EE and CS colleges offer a study of (what is basically) robotics. We have 'informational days' every year, where older highschoolers visit the colleges, and the colleges prepare informational packages, some intro briefs, labs prepare demos, and soon-to-be college stuents are shown around the building and labs.

EE robotics had demos of real, industrial robots, 100k+ eur machines, filling glasses from a bottle, making pancakes, sorting stuff etc, while the CS labs had most of the robots based on some lego-like kit where the robots were clearly toys and made just for education.

Technically it doesn't matter, it's all math, metrices, rotations, axes, sensors, feedbacks, derivations and integrations of numbers etc. but the difference of "real" vs "toys" was obvious.


The article is off the mark.

Software development isn't high status field. All of IT is just seen as an army of pee-ons whom you only need when something is wrong, and want them to disappear when the fire is put out.

People out there are fed up with slow computers that have become incomprehensibly complicated, and the vast ocean of garbage that is the Web.

When people are introduced to programming, there is a mountain of shit there now between them and their first hello, world.

The products, tools and the whole scene of computing must be uninspiring and discouraging to newcomers.

It's hard to imagine what people outside of our field associate with "computer science". Like, what do they imagine the content of a CS degree to be. Their view is directly influenced by their everyday experience.

CS? That's four years of in-depth-studying that churning toilet bowl full of shit that has to do with why I can't connect to my Wi-Fi printer half the time? Or why Facebook feeds garbage into my timeline? Like, ewww ...


>It's hard to imagine what people outside of our field associate with "computer science".

Money. That's what normal people associate with computer science. They don't understand what it is but they are well aware of the pay scales.

>Software development isn't high status field.

It wasn't before the money arrived. It is now.


Money is connected to status but status isn't simply a linear function of money.

These people potentially make decent money:

- self-employed bathroom tiler

- drug kingpin

- pornographer


yeah... no. Just look at Musk, Zukerberg and Bezos. They're worth over 100 billion and are the rockstars of the industry (probably the most well known people known in industry by normies) and they have zero social status. Normies don't respect techies no matter how much they make. I would argue techie don't even respect techies.


What does "social status" even mean in this context?

And the reason people like Musk, Zuckerberg, and Bezos are unpopular is because of their activities, comments, and things like that. That is: specific concrete things, not general "because they're a techie" kind of stuff.


Zuck collects private information and uses it to sell advertising. Elon runs a car company.

What do they have to do with CS?


Musk made his money from paypal, now owns twitter and own Tesla which is known for their software.

Zuck... I mean you're kidding right? Facebook literally wrote their own c++ strings that's optimized for their specific use case, made their own php interpreter, have open source c++ libraries, etc.

Also I just don't think normies differentiate between tech in general and computer science.


>Software development isn't high status field.

Even if you are mediocre (or not even that) you can get a job that pays more than most jobs do. That counts a lot.


It's still not high status.


If you make money, work anywhere you want, do whatever you want with your money, you are high status.


You are objectively correct, and it should be high status. But it isn’t. For the normies we are just a bunch of nerds.

Real high status is law, medicine, etc.


> Real high status is law, medicine, etc.

Is that still true? For what group are those professions high status? I feel like it's a thing the previous generation brags about to their peers, but I have a pretty cynical view on the state of justice (in the States, anyway) and thus on lawyers for participating in it. Yes, it's a difficult profession to get into, but that's not enough at least for me to perceive it as high status.

If by "medicine" you mean doctors in particular, and not clinical researchers or nurses, I have to similarly disagree; similarly to getting a J.D., it requires a ton of work to earn an M.D., but in my mind the highest-status subgroup in medicine (not to downplay the amount of education that's required, because it is almost equal to what's required to be a doctor) is nursing.


If morticians and embalmers made $200K, would anything change?


“people who go to college decide on what to major in significantly based on two factors: earning potential and whether a field is seen as high-status”

Ya no wonder I wouldn’t like CS with these peers.

You have to be a nerd and supremely interested in status and money apparently. I don’t know many like that. Makes me think of Zuck and Elon. But they are minorities in the grand scheme. Maybe the author is exactly right, right here, why CS falters.


It would do us all good to burry the "nerd" stereotype. You need to be dedicated to the craft to become a good software engineer. And it is probably true, that many are not really dedicated, but in it for the moneys. Status can be high, but in any non engineering groups of people can also be pretty low, so it depends. Whenever I see self-lauding status chasing blog posts, I can smell the no-dedication. Too much politics in that game, too little hard work for understanding computer things.


I don’t understand what you mean. I understand „nerd“ as someone who passionately sits with their toys (computers, other tech) and tinkers for fun on hours end.

I understand hard work in a professional context, but the constant learning and tinkering that „nerds“ display stems from fun and curiosity.


Of course, inside the profession, one often prides oneself with that label. But look outside of the profession and the connotation gets closer to the dictionary meaning of the word "nerd".

Many people, who do not understand the most basic computer things, still think of "nerds" as "monkeys" sitting at a computer all day, doing something less relevant, not "having a life". Most people don't understand the profession of computer jobs. They see it as something inscrutable of dubious value. (And to be fair, often the greater picture our software serves to achieve is of dubious value.) It is not really like many other jobs, of which you could explain roughly to the next person on the street how the job is done. Before for example a software engineer gets to explain how some code they wrote works, the other person has long zoomed out. And before one gets to explain that it is a craft and what the art about it is, most people have fled. Not many are willing to listen to what fascinates a "nerd".

With that lack of understanding often come tendencies to wanting to associate with other people, rather than that person, whose job one does not even understand. And those "nerds" they have weird interests anyway, right? One couldn't engage in social activities with them, right? You may say those are superficial people and you may be right. But the world is full of such people.

In the end "nerd" is just a bag of stereotypes, that don't apply as often as most people think. Perhaps a "geek" is a friendlier word.


I think your vocabulary is out of date. Nerd and geek are synonyms in common tongue and neither carry much weight to them anymore. You like Marvel? You're a nerd. Ignore that they're one of the most successful brands in the world now


I don't think it's entirely true. Students are told, over and over, to follow their passions. They're inspired by charismatic teachers. They pick up weird ideas about which fields will have good career prospects. Parents who "push" more employable options, are ignored. Having two college-age kids, and knowing many more, all I can figure out is that it's utterly a crap shoot.

Also, nobody at the high school level has any idea what CS is. I had a bit of a leg up (in 1982) because my mom had taken a bunch of CS courses, and was teaching programming at a nearby community college. But she thought I'd be better off studying a traditional field. I chose math, and taught myself to program.


Because parents are old and don't know what's profitable these days. Don't think my parents even knew there was a lot of money in CS.


I'd say yes and no. For instance I'm a parent, and I'm also involved in hiring tech workers, so I'm aware of what's in demand. I'm not that old.

When I started college in 1982, I'd argue that nobody knew. For instance, at that time my parents were also mid-career in STEM. Well, my mom was teaching programming at a community college, and her students were getting jobs after 1 year of her course. Based on where we lived, near Detroit, most of them were getting hired up by the car companies.

But I don't believe anybody knew what was going to happen next. My mom thought that programmin was too easy to spend time learning at the college level, and that the market for programmers would soon be flooded. What happened next was the personal computer. I was keenly interested, but at my college, the CS majors used a mainframe computer. Most expected to work for banks, insurance companies, utilities, etc.

Non-STEM parents, sure. I'll grant you that. I'm lucky to have been raised by two scientists. But they weren't thinking about money when they talked to me about careers and college majors.


Is the passion thing new? I don't remember it when I was in school in the 90s. My only passion was not to be poor anymore.


Mathematics has a lot more prestige because it is exotic for the average person. Most people associate computer science with computers, word, excel etc.

Imho, SWE and “Computation Science” should be separated.

You can treat the former as a computer oriented form of engineering, making it rigorous and produce SWEs that are actually good, and in the latter, you can put all the theoretical things and treat it as the branch of math it rightfully deserves to be.


Interesting, I went to college to study computer science because I liked computers and programming. Then I switched to philosophy. Then did some math and cs in grad school.

> Ya no wonder I wouldn’t like CS with these peers.

Yeah I'd switch out of cs again to avoid those peers :)

Though in the proper setting I would have loved sticking with cs as an undergrad.


"Isn’t it reasonable to expect that people with an aptitude for math, physics, and engineering will also have an aptitude for CS?"

You would expect that but it is not the reality. I've seen many students that were excellent at math, but just could not get their head around CS. I'm not sure why this is and having asked some of them, they also couldn't explain it. They just couldn't 'see' it, and found creating the programs very hard.

Meanwhile they breezed through math classes that most CS minded students failed or found extremely hard (over here in the old days CS was a specialization of a Math degree before it became a degree in its own, so the CS undergraduate curricullum was very heavy on math)


I'd be really curious to see a non-anecdotal exploration of this thesis. (My own anecdata points in the opposite direction.) I ran across this study via random googling: https://www.researchgate.net/publication/318649651_Correlati...

Concluding paragraph:

"Therefore, the data tabulated is sufficient to allow this study to draw several conclusions and inferences. First, it is reasonable to conclude that Mathematical ability of the students could be the basis of admissions for BSCS program. Second, students who performed well in math can, therefore, performed (sic) well in programming courses. Third, the Mathematical ability could be a predictor of student performance in programming courses."

Of course, it'd be nice to see some other studies confirming/disconfirming this conclusion.


I think this is because of too many abstractions. I think CS education should begin with assembly language and automata theory.


There’s very little competent teaching of CS in high school, and very few teachers with CS degrees.

Most graduating high school students don’t really know what CS is, so choosing a CS major feels risky.


We had a rockstar teacher who really cared about CSci in a mid-size high school in a mid-size state. He should have been poached by a more prestigious school but stayed there his whole career.

I think my junior class had legitimately 50% go straight on to become CSci majors. I was lucky and I feel lucky.


High schoolers shouldn't really be taking CS.

I get that that's a hot take for HN, but they need more time learning the basics of critical thinking, communication, and emotional intelligence before learning what the hell time and memory complexity are.

I think we should be teaching kids how to code but the science side of it can stay put in higher learning. We're terrible at teaching young adults it, let alone children.


Critical thinking, communication and emotional intelligence can be gained by experience and achievement in technical subjects including Computer Science, as well as other ways.

I don’t propose to require CS in high school but it’d be great if it was an high quality option for more people. Lots of people do AP math, and many of them could do well with CS as an alternative if it was available. Also, some other people who are better programmers than mathematicians (like me) would benefit from this option.

Sadly, the number of good CS grads that would choose to teach at high school will stay very small as long as other opportunities are so much more attractive.

I agree that a lot of college CS teaching is not very good, for similar reasons.


High schoolers would benefit from intro CS, like they would benefit from more algebra and gettin to calculus by their sophomore or junior year. They would also benefit from learning how to code, which is something they are much more likely to get excited about and it should be relatively easier to find teachers for. There is just more profit in teaching coding, and expense in teaching CS, but CS would be useful.


> but they need more time learning

They don’t need more time. They need a serious curriculum.


It's a good place for learning programming though, and then they have a solid practical foundation to apply the abstract CS concepts to.

Unfortunately I think it's about the same, not many teachers, let alone good ones.


I went to a tech/engineering magnet school in the early 2000s and the one CS class that was offered had a teacher that had never programmed. We never even got to loops by the end of the semester.


This is my instinctive reaction too. I had no idea what programming entailed until I had to do some computational modules in my maths degrees. I imagine most kids of pre-university age are the same. How can we expect them to shoot in the dark?

Ontop of this, the author is way too contractual about people's degree choices. He completely ignores various other factors:

- What career do I think I'd enjoy and be good at?

- What am I actually interested in learning about?

- What are my school, friends and parents recommending?


There’s not teaching of law or medicine in high school either, should we start cramming that down students throats to depress wages in those fields too? Of course not, lawyers and doctors are smart enough to see through that facade.

High schoolers should be taught how to cook, how to exercise, how to think for themselves, and basic history and math. Anything above that like Calculus is a huge waste of time if they don’t know how to fry a fucking egg.


Yup. I had a CS teacher who taught python for one term. At the time, what I took from the experience was that Computer Science is not for me. Now looking back I realize said teacher just wasn't a competent programmer (and Python 2 sucked).


Guess I was very fortunate to have a lecturer/prof who worked on Python core, but said in the lectures, that he was not supposed to teach us one programming language, but programming in general. I have often wondered where I would be, if he had not introduced us to things like Prolog, Racket and others, next to of course Python and C.


> In general, I would push on people to explain not just what the problems are in the industry, but how they deter college students from pursuing a major in CS.

I think one of the major reasons is not that many people are interested in it. We like to sit and invert binary trees all day, so we naturally assume everyone else should be just as excited about this wonderful activity; and if they are not, something is wrong, we should worry, and figure out some way to trick them to switch majors.

Imagine what programming looks like to a kid: "Oh wow, sitting all day looking at text on a screen? I can't wait to do just that for the rest of my life!". Compare that to being a doctor, a construction worker, nurse, engineer, or even a lawyer. Any of those other professions just look a lot more exciting.


Definitely not biased here but idk the prospect of building whatever u want and seeing it immediately realized seems pretty exciting. And all u have to do is hack at ur keyboard lol. I’m just struggling to envision construction work being more “exciting”


Construction sounds reasonably exciting in many similar ways to CS. You can build something, see it progress, and be proud that you built the final thing. It's just physical labor instead of hacking at a keyboard.


Construction requires high upfront capital.


Workers have to buy their own tools I guess? Suppose that makes sense if you're on contract. How much is that? I've seen kits for like $200 or so, I imagine a worker would want better stuff but maybe like $1000 then? Is it more? Or are you talking about floating the money for parts? Wood and concrete and tile and what not?


Sure, I am the same way, I’ve programming since I was teenager and always enjoyed it. But at the same time I realize that doesn’t look like a fun and exciting thing for most kids.


> engineer

Mostly sit all day looking at text on a screen. Diagrams if you're lucky.

> lawyer

Sits all day looking at text on a screen.


lawyer

Sits all day looking at text on a screen.

This is the reality but not the perception people have. Most people’s exposure to lawyers is from shows like Better Call Saul. What’s funny is that if they paid attention to the show, they’d see real work being done, in the form of endless hours of looking at documents.

But those scenes are all done as montages with sexy music, so people don’t realize how boring they can be.


All of those professions (except construction perhaps) would probably involve lots of sitting and staring at screens, but that’s not what kids think they are. The engineer gets to design a thing, then gets to see it built. The lawyer does lots of paperwork but kids think of the trial when they argue their case in front of judges and jurors and win.


My first CS class saw half drop the class by the end. By the end of my second CS course it was similar. Probably 75% of people taking CS courses stopped taking them by the end of my freshman year.

A smaller contingent dropped out in the later years, but still by the time I was at the 400 level, class sizes were quite small.

Other sciences were like this (but not Biology or Psychology for some reason).


When I studied 50% dropped out after first year. Most after the first semester. It was solely because the course was very math heavy.


About half had dropped when we got to pointers in Turbo Pascal.


Hah! Feel like we were in the same program.

The pointer abstraction is the first big mental leap in CS.


Outside of the academic track, most work in CS or IT, etc is a craft, a trade skill. Apprenticeship programs are more appropriate and if you squint at advice directed to youths interested in a career in IT, it all sounds like roll-your-own apprenticeship programs.

I often catch flack for this view, but I think it's that crafts and trades are considered lower status. Anyone doing the work to keep things running and improving them where they can is doing honest labor.


Here in Germany it wouldn't get you flack, there's several vocational tracks for programmers and I've worked with a lot of people who didn't go through academia and they were just as good at writing software, sometimes better than peers simply because they did it for longer professionally.

Academic CS programs make sense for people who want to go into research, the sciences, or theory heavy application, but I never understood the inflated college programs across the pond.


Germany pulled off a vocational school miracle that North America still can’t figure out. Here (in Canada and the U.S.), skilled trades workers are heavily looked down upon as low status.

Indeed, if you actually talk to people working in a lot of them you’ll hear stories about alcoholics and drug addicts who barely manage to show up to work. You’ll have 1-2 highly experienced, highly skilled trades workers who can get all the work done, and the rest are useless trouble-makers.

This perception bleeds over into the public eye and the entire field is treated with disdain. Even higher level trades like electricians are caught in it, and so it’s seen that going to vocational school is low status so there must be something wrong with you. The problem is entirely cultural!


In Germany it depends on how you look at it, at the more conservative / "traditional" companies (which is still a lot of them, including almost everything I hear about outside Berlin/Hamburg) programmers without degrees aren't looked down on relative to programmers with degrees, but programmers as a whole are looked down on compared to even the lowest managers (who probably have a postgraduate degree), and aren't trusted to do anything themselves. It's more that degrees aren't valued at all for programmers, than a widespread belief that someone without a degree can still make good decisions.


Is accounting a craft/trade?


After passing the CPA exam, I had to work under a licensed CPA for a year in order to be issued my license. I felt that most of what I learned that applies to real-world issues was acquired while working during that year.

The CPA exam was a mix of practical information and a bit of unnecessary gatekeeping in my opinion. I felt that I had already learned most of that information during my undergrad degree and that my graduate degree was overkill. Having to spend more time studying for the exam after two degrees and then spend a year working under someone was too much in total. I believe that accounting is a craft that can be learned while working under a master. I feel similar about my software engineering career now.

My experience with all of the credentials to become a CPA is a big reason why I decided to self-teach computer science rather than pursuing another degree. I recognized that if I studied the fundamentals and then worked underneath someone highly skilled, I would be able to build up my skill set as a developer. So far I think that direction has worked out.


Most of it is. The job is called "bookkeeper"


I question the value of my CS degree to be honest. I haven’t used any of the advanced mathematics to the point that I’ve forgotten al of it, and any of the CS topics that I do touch on has been cursory at best. Anything major has al been stuff I learned on the job.


I loved my CS degree. It let me deepen my understanding of programming in quite a few ways, introduced me to circuit drawing/embedded devices, AI, robotics, all kind of peripheral areas I would have never had an opportunity to engage with deeply.

That said, there are about 70,000 reasons I can think of why someone would want to do something else for those 4-5 years.

The first job I got out of college also wanted me to quit college and work full-time about 2 years before.. I knew full well I was getting the degree as a hobby.


Yeah exactly, Master's level degree is almost entirely unnecessary. I've seen lots people drop out past Bachelor's once they figured out that the degree is just a hobby, and a little bit of a status symbol. They wanted to earn instead. This was around 2014.


Yep. Got my bachelor's and stopped. Still don't see a reason to go further. Bachelor's is enough for green card and to be hired. Rest is interview skill.

If I do go further.. it would be for fun. I did enjoy uni. But maybe not so much for the classes.


Because it's hard and uncertain. You can spend hours and days on a problem and not be sure of finding an answer. You need to be driven by a passion to overcome the obstacles.

When my son was studying Electrical Engineering, he told me a story about how, at the beginning of every semester, a student would ask the professor if there was any programming involved in the course. The class would heave a huge sigh of relief if the answer was no.

It's not that students were stupid. Rather, they had a big course load, were pressed for time, and could not afford the bottomless time hole of programming assignments. They knew that the time they invested in lab work or math assignments, would surely result in success. Not so with programming bugs.


When I studied CS, I saw a number of people enter the degree for the job prospects but then come to realise that they hate programming. This carried on even into my first year or two at work.

It is one of those things that people either love or don't.


This premise destroys the whole argument for me: "I consider this a puzzle because I think that people who go to college decide on what to major in significantly based on two factors: earning potential and whether a field is seen as high-status."

Based on my personal experience in the late 2000s, this was not true at all. People majored in CS because they liked solving the logic puzzles CS represents regardless of salary or stays


> Based on my personal experience in the late 2000s

I think this time period is a slight outlier - for our parents the dotcom bust was recent memory and a lot were discouraged from going into the field. Mostly only those who really wanted to, like for the logic puzzles you suggest, went ahead anyway.


Persons who are interested in software development probably got started in their teens whilst still in school. So faced with taking on a huge student debt and delaying their career or start earning a good income straightaway makes the latter far more appealing. Besides, CS is seen to be a theory heavy course rather than practical software engineering.


Having done all the theory and math, the pain is real when trying to explain a cool concept or why a piece of tech did something the way they did to a junior-ish dude who did some other degree or a boot-camp who doesn't care and doesn't need to care either. Worse is doing grad studies in CS, unless you are willing to move to one of a few specific locales for your area of specialization, there is no point at all in continuing.


> Having done all the theory and math, the pain is real when trying to explain a cool concept or why a piece of tech did something the way they did to a junior-ish dude who did some other degree or a boot-camp who doesn't care and doesn't need to care either.

This is a really underappreciated perspective. Few things are more disheartening than wanting to share understanding of a neat CS concept and have it fall on deaf ears.

Given enough experience and depth of knowledge, there comes a time where the gulf becomes insurmountable.


I have a good dynamic with my dad for this, I share theoretical CS stuff which he never studied with him, and he shares OOP design pattern stuff which always went a bit over my head with me.


> Besides, CS is seen to be a theory heavy course rather than practical software engineering.

The theory is important. You can often tell the difference between someone that's been through it and someone that hasn't.

It's not just a copy and paste job without implications.


I would slightly modify the statement: Someone who has been through it can often tell the difference between someone who has been through it and some one who has not.

To the outside it is often a case of: "But this works too!"


IME people who learned the theory can adapt to new situations much better. Those that just learned a single set of skills like, say, Python web backends become lost quickly if they need to do something different, like optimise some multithreaded C++ service. And often in our jobs these types of things do come up, you can’t always get a specialist to cover every single type of work.

Of course this could be mostly correlation, perhaps the type of people that seek degrees also enjoy learning more broadly in general.


> like optimise some multithreaded C++ service. And often in our jobs these types of things do come up

What are the jobs where this kind of thing comes up? I've never had to do anything with multithreading or C++, and I'd estimate that the jobs where that stuff comes up is a tiny minority. I think it'd be cool to encounter these kinds of problems, but it just seems more like a niche thing to me these days.


Game development, and really anything that needs fast native code.


Anecdotally, pretty much everyone in my CS degree program also started programming in their teens.


I believe CS degrees shouldn't focus too much on industry skills. Sure it is good to have some engineering focused courses that are likely to be useful in long term(C programming, design patterns), but most courses should be theory heavy.

If you take any specific domain of CS, there are only going to be few hundred good professors on that topic at most in entire world. Them spending their time on teaching undergrads industry skills is wasteful IMO.

Profs should focus on creating next generation of researchers. Bootcamps/Corps/Youtubers should focus on next generation of developers.


When I enrolled at Rose-Hulman, in 1981, I wanted to be a professional programmer, but I KNEW there was no money to be made it it, as everything was shareware/public domain. I majored in EE instead. I ended up dropping out (it proved too expensive), and became a programmer anyway, without a degree.

It seems to me that a formal CS education is wasted on those who don't have the urge to code in their spare time, and only get into the field for the money.

Also, despite the annoying claims of many that they are "engineers", most people in the field are programmers with title inflation. Actual engineering requires far more attention to detail, and just plain drudgery than we programmers can put up with. You can't automate your job away if you're an actual State Licensed Professional Engineer... lives are on the line.

[Edit/Expand] Would you blindly trust a program an engineer whipped up in his spare time to do all the appropriate checks on a design, instead of requiring him to check the math? Of course not.

Actual Engineering demands far more rigor than programming. Strong agree with the comments of shrimp_emoji

On the other hand, we're free to make build systems, and do whatever we want to make our jobs easier, because lives aren't on the line. [/Edit]

So, no actual state license, no actual need to get a CS degree, why spend the money?

Now, if you're going to be an actual State Licensed Engineer, a formal 4 year degree is worth the money.


Lots of weird opinion in this statement, maybe insecurity from never getting your degree? Software has proven to automate things just as important as “real engineering” in many fields. Hospitals, power grids, entire financial systems.


As hard as CS is, I think any type of "engineering" is harder and that actual engineers are a way different breed than software engineers. Software, as a practice, is also the wild west compared to actual engineering disciplines which require licensing and have a much closer relationship to the phrase "regulations are written in blood".


I was a "real engineer" for several years before learning to code and switching to software and found that software was harder and required a greater attention to detail, skill, depth of knowledge, and so on.

I've found that your sentiment that software engineering is less rigorous is common among those that haven't done "real engineering" though.

There is some truth that in software you have the option to push out risky code and have it fail and then course correct quickly, while in "real engineering" you can't take risks like that because there is a higher potential negative severity/outcome but that depends on the cost of software downtime and bugs.

In "real engineering" you can also develop models and test things in a safer environment before the equivalent of "pushing out to prod" but often the feedback loop is longer, and so you have more time to consider your test, but that doesn't mean that reasoning about that system is any harder, or easier necessarily.


> There is some truth that in software you have the option to push out risky code and have it fail and then course correct quickly, while in "real engineering" you can't take risks like that because there is a higher potential negative severity/outcome but that depends on the cost of software downtime and bugs.

I'm sure you could be like Albert Hofmann for Chemical Engineering, or Electroboom for EE


I, too, was a "real" engineer before transitioning into software. I think you are right with your analysis. "Real" engineering, as practised by people in the industry, is neither harder nor more rigorous than real world software engineering. I wonder where this idea comes from. I read that very often here on HN.


For me, the reason I give so much respect to Engineers is that they have a profession, a set of rules they are willing to stand up for, and not violate. The law supports them in this manner. Perhaps my respect is misplaced, I'll never know for sure.

The application of the rules and procedures reliably, every time, every day, for every little change, just seems so damned boring and yet terrifying. Knowing that if you're wrong, one or perhaps many people will die, is a strong incentive to do things right.

Take the walkway collapse caused by a seemingly small change to make construction easier[1]. Or, the institutional failure when Engineers are over-ridden by management with spread-sheets who don't actually understand the problem at hand.[2]

But... The day in, day out grind, it's so tempting to be clever and creative, and do the thing that programmers do all to often when they write code so cleaver they can't debug it. Give in to the temptation once, and someone else could die.

What a grind... It's like being an accountant with a sword dangling over your head.

Engineering is about being methodical and prudent, not about being the sharpest tool in the shed.

[1] https://en.wikipedia.org/wiki/Hyatt_Regency_walkway_collapse

[2] https://en.wikipedia.org/wiki/Space_Shuttle_Challenger_disas...


"Actual" engineering might have greater stakes in terms of "blood", but I have a hard time believing they are harder.

There are equations well known for hundreds of years on how to design a bridge that doesn't collapse. And the fact that most bridges don't actually collapse is not mainly due to the ingenuity of the engineer that built it, but rather, allowing liberal margins of errors for safety. If you use materials twice as strong as the minimum requirement, things don't break if you made a 50% error in your calculations.

In fact, I'd be very concerned if "actual engineering" is hard. Given that most people are mediocre in ability ("licensing" is just about formal requirements, whether one can jump through the hoops, as opposed to actually being super smart), it's really scary if building a bridge or a building is "hard".

On the other hand, building robust yet complex software is actually hard. There's no software equivalent of "just spend more money on materials to allow for a 10000% margin of error to ensure it doesn't break". Spending more money stops working at a certain point, for example, hiring more people doesn't work, per Mythical Man Month; spending more effort on handling edge cases don't always work, because writing more code with minimal utility means an even less maintainable project in the long run. Correct code almost has to be "mathematically perfect" in order to be small, simple-as-need-be, and robust. And then even if your own code is 100% error free, you have potential bugs all the way down from frameworks, compilers, to even the CPU (eg. Spectre).

Software development definitely has one of the highest skill ceiling among the trades that I know of. Sure this doesn't apply to whoever wrote your CRUD app, but think about it -- let's say you're thinking of building a skyscraper that requires extremely difficult engineering (whatever that means) to properly build, nothing short of the most brilliant engineer would be capable of planning and executing the project, any mistakes would lead to a complete collapse of the building... would you want to proceed with this project?

Yet people start software projects like these for fun. Precisely because it doesn't necessarily have to involve "blood".


Why is it we always see these gatekeeping comments on every thread about software engineering? It’s as if we can’t accept that words can have different meanings and if millions of people are using a word a certain way then perhaps that meaning is also valid.


In some states, you can go to jail for calling yourself an engineer without the state licensure. Words have multiple meanings, but "Engineer" is a title, not just a word.

---

Why the gatekeeping? Because Software "Engineering" isn't really what most of those with the title are capable of doing.

Let's talk about Electrical Engineering for a moment... a typical house in the US has many circuits supplying 120 volts at 15 amps, 60 Hz. You can plug any combination of loads into any of the outlets, and, if they are installed and maintained properly, you won't damage the wiring in the walls, nor are you likely to start a fire.

This is accomplished with engineering (the design of breaker panels, outlets, etc) a strict set of rules, (the electrical code) licenses for the electricians, and state inspection of the circuits before they are put into use.

---

Programming is the wild west compared to this. You have no way to run a piece of code on a machine without risking all the data on the machine, and/or all the machines networked to it. Our hardware is sub-standard (RowHammer shouldn't ever have worked), our operating systems give everything ambient authority. It's actually less secure now than it was in 1982, when you at least had write protectable media that the OS couldn't over-ride.

There's no way to take a random executable piece of code and run it safely. There is NO ENGINEERING in software engineering. It's all band aids and bailing wire.


> There's no way to take a random executable piece of code and run it safely.

Right, because there is actual computer science theory that explains why this is difficult.


What CS theory is that?

The temptation is to cite the halting problem, but that's not it.

The Bell-LaPadula model[0] has been proven to be able to provide security, but due to historical accident, you generally can't implement it in Linux, MacOS, Linux, etc al.

The necessary CS theory was developed to make things safe in the 1970s, as I've stated, over and over in various threads here[1-4] and elsewhere on the internet[5], ad nauseum. But we, the programmers, "software engineers", hackers, whatever you want to call us, don't apply those systems, and continue to pile layer upon layer of band-aid to systems that are insecure by design.

It's like building all of your bunkers out of crates of TNT, and wonder why they keep blowing up at the first rifle shot, then concluding you need thicker walls.

[0] https://en.wikipedia.org/wiki/Bell%E2%80%93LaPadula_model

[1] https://news.ycombinator.com/item?id=36717861

[2] https://news.ycombinator.com/item?id=36652789

[3] https://news.ycombinator.com/item?id=36623992

[4] https://news.ycombinator.com/item?id=36442874

[5] https://twitter.com/mikewarot/status/1607769510542544899


Rice’s theorem. btw capabilities are cool but it’s very difficult to actually deploy them to real-world software without accidentally giving things more access than intended.


Rice's theorem can quickly prove that antivirus software is always a waste of time, so that's a plus. It can not, however, do anything to help jailbreak out of a process that has no access to the outside, no matter how evil or clever it (the code in that process) is.

Think of capabilities as cash in your wallet... fairly easy to manage, as long as you can secure the wallet.


In engineering, lives are often on the line, but there are also plenty of areas of engineering where most of the work is also band aids and balling wire. For example, lots of product design isn't safety critical and doesn't need to meet any formal standards. Maybe you don't consider that engineering because it's not rigorous enough - I certainly do though.


> It seems to me that a formal CS education is wasted on those who don't have the urge to code in their spare time, and only get into the field for the money.

It's a hell of an expensive (and difficult!) credential when, these days, it seems you can do the most plentiful && easiest && high paying dev work (web) without it.


I think CS major makes lots of sense if you want to go really deep into research of some advanced field inside it. But otherwise I feel like there's more benefit from minoring in it, self-studying the more practical aspects, and majoring somewhere that gives you field-specific knowledge, which in combination with CS & programming skills makes you rare and valuable.


I can only use my own example, but I'm very much of the idea point 2 in the article hit the nail on its head (there is no need for a CS degree to be a developer).

For example in my own career. Back in the 1990s we used to have so called "technical high-schools" in my part of the world. These had a final year project, and upon finishing it one got an official "technician" diploma (in addition to the normal high school graduation stuff). I was always interested in electronics/computing etc so it made complete sense for me to go there which I did. I already knew few functional programming languages, but I can credit this school for making me finally understand OO programming concepts. I was quite happy that my official title I could put on my cv was "Electronics Technician specialised in Object Programming in C++"

I then got accepted for a CS university course, but before it started I looked for a summer job. Which turned out into a 20+ year long career in IT. During subsequent time I did finish my remote B.Sc,but realistically the only reason why I needed it was not to loose out on future job opportunities that require a CS major. When I graduated I was already 8 years into my career.

So is university pointless if you think you already have all the skills for the job? I wouldn't say that. I did learn _stuff_ during my course, but it wasn't programming that I already knew. I learned some design and math mostly. Also thanks to the "CS major" (despite it only being a B.Sc) I successfully applied for jobs that paid double of what I was getting at the time and I could work for much bigger companies (in my experience smaller businesses care less about formal education and more about what you can do, big companies for some senior positions have a prerequisite like "a CS major" and you can be a programming genius, but your application will get shredded if you don't have that CS major).


When this was written, my school had quadrupled its graduating class size from when I went there...


I worked at a MAANG that shall go nameless. There weren't many people there with CS degrees and scant few with Masters' or PhD's. The other problem with this particular company is there were too much know-it-all egotism swirling around than rigor, curiosity, or interest in career development or regular tech talks. They didn't really respect the tech or nerd out.

Compounding factors:

0. CS is a heavily male major and far fewer men (%) attend college than 25-30 years ago. The only major worse is EE. Finding a woman with EE PhD is like finding a real live US Navy SEAL or a monopole magnet.

1. General university enrollment is down by ~10% since 2010.


1. Computer science is hard.

2. You don’t need a CS degree to be a developer.

3. People aren’t so market-driven when they’re considering majors.

4. Immigrants are taking all the jobs.

5. Anti-women culture.

6. Reactionary faculty.

7. Anti-nerd culture.

8. Skill mismatch and lack of training from startups.

9. Quality gradient.

10. Psychological burn from the dotcom bubble.

11. No pipeline issues anymore.


Can you elaborate on anti-nerd culture?


They just copied in the bullets from the article to save us a click :)


I was hoping somebody would elaborate, the article pretty much says anti-nerd culture doesn’t exist lol


Note: This isn't the TLDR of the article. These are proposed answers to the titular question that the author finds unsatisfactory for one reason or another.


Yea this -- he is trying to disprove those pop culture claims like "immigrants h1b1s taking jobs" or "tech is unfriendly place for women"


[flagged]


The Reddit-ification of HN persists unabated


Take my ycombinator gold, good internet sir.


Have an updoot


> Yeah, no doubt. But aren’t the departments of math, physics, and engineering also filled with nerds, who can expect just as much social derision on the basis of their choice?

They are not filled with obnoxious asshole nerds.


This is my experience as a math student. The CS students and the engineers tend to be the loudest, most obnoxious bunch, right up there with business majors. People studying math or hard sciences tend to be reclusive nerds, rather than obnoxious ones.


Interesting, my experience (as a CS student) was that other CS students trended towards arrogant but reclusive and Physics students were mean, very arrogant assholes. The other sciences were pretty chilled out though. Math students weren't much different from CS students but tended to be a bit nicer, even if arrogant.


I mean I should say (which I had initially thought needed no explanation) that the majority of CS students I've met are pretty cool. It's just that the vocal minority "gigachad tech bros" were nearly all CS students. I think it's that desire to chase wealth and status which draws them to CS.


I graduated in 2018 so maybe I just ended up missing this crowd. In fact I'm not quite confident I know what "tech bro" actually means despite how commonly I see it tossed around. Are they more of a west coast thing?

I would generally stereotype a CS student from my memory as a timid high school graduate with an inflated ego from being "better" at computers than their HS peers, but this feels a bit disaligned with the "tech bros" you describe so I'm curious how things may have changed in 5 years.


I started in Computer Science. It was incredibly dry, and though I wasn’t looking for a training course, I did want to come out with hands on skills such as software engineering and SQL. I ended up flipping to something called Advanced Computing which struck the balance between theory and practice.

As it happens, I subsequently veered into AI and “Deep Learning” before it had the name. That also seemed useless and very theoretical until about a year ago, at which point it became the most important skill in the industry out of nowhere. I might need to dust off the books again!


The dryness of intro courses is underrated. I took CS101 in college (in C++) and it was painfully slow and boring and I could learn just as quickly from the book.

Contrast with my bro who studied ME where they had a toy robot competition in the first month.


Our CS101 course (or maybe 102?) involved building a clone of the board game Carcassonne in Java, which was pretty fun.


In mine we built a minimal deposit system that let people add/withdraw money. Yours sounds more fun for sure.

Where was this?


Indeed. A sprinkle of some of the applied stuff in year 1, (e.g. Software Engineering, AI, Computer Vision) and it might have held my interest. Nearly 20 years later I think that would have been for the best.


In 2007 the president of the University ACM chapter told me not to toy around with languages outside the CS curriculum, and that Ruby was a waste of time. I'm grateful everyday that I ignored his advice.


We learned Ruby in CS. It was in a "sampling of languages" class, which also included Rust (for which I'm very grateful)! Ruby was a cute curiosity, but Rust is a paradigm shift. :p


In the one I took we did Prolog which has not exactly proven useful. I don’t think I ever used anything in that class, unlike most of the rest of the CS classes I took.


Mine was: Python, Prolog, Scheme Lisp. I thought it was great to get exposed to other types of languages that were possible.


At least in Indonesia, computer science degree overall is still popular. Of course, in general the curriculum is pretty math-heavy. Some may say "too theoritical".

In the end... most of us work as software developer/engineer, not computer scientist in the academia. We usually built products for consumers (typically the usual database and networking, not fancy stuff like AI, formal method, high performance cryptography bla bla bla). In this context, well yep "You don’t need a CS degree to be a developer".


Why do so few CS majors end up being professional Software Engineers even including the ones that graduate from top schools like MIT/Stanford/Harvard etc.? Even bigger question - among the few CS majors who do end up being Software Engineers why do so few of them remain Software Engineers 10+ year into their careers? Both of these two observations are based on my own anecdotal experiences but have nevertheless puzzled me for long.


I don't have numbers, but in my experience you are much more likely to work within your degree with a CS degree compared to others.


Applied Physics but found myself in an entirely unrelated analytics job out the gate, boss used to routinely brag about failing his freshman CS courses and still making manager. Happy to be free of that,point is he was convinced in the early 2000s that CS just meant banging at a keyboard and getting an easy salary. I process large sets of scientific data now and routinely come to terms with my ineptitude as a software engineer.


Lots of people I know started off in CS and got weeded out as the college years went on. I doubt more than 10% of those in the first CS class in freshman year actually graduated in CS by the end. The vast majority switch to other majors.

Funnily enough, most engineers I know (mechanical, civil, aerospace, etc) are now coding for a living, sometimes at engineering companies but oftentimes at tech companies.


(2017)


Very much so — this was looking at graduation, so even its most recent data from 2015 represented students who applied to college no later than spring of 2011.

Since then, computer science has certainly been growing: “The number of students nationwide seeking four-year degrees in computer and information sciences and related fields shot up 34 percent from 2017 to 2022, to about 573,000, according to the National Student Clearinghouse Research Center.” https://www.washingtonpost.com/education/2023/05/19/college-...

Even at that rate, colleges cannot meet demand and CS majors are difficult to be admitted to even for the most competitive college applicants: https://www.geekwire.com/2022/it-is-not-acceptable-uw-comput...

The major is so sought-after that as of last year, UIUC has closed computer science for transfer from other majors: https://cs.illinois.edu/admissions/undergraduate/transfer-st...


Even when I was applying in 2004 several colleges had restricted transfers. So I guess it was similar as a result of the dot com boom.


I believe Univ of Michigan has done the same as UIUC. At least that’s what they told my son when he applied


In the UK, most CS degrees are actually Software Engineering, little maths content. There are probably a handful of universities where CS is treated as a branch of maths (top 3 or 4). Any kind of engineering or physics will leave you in a better place to do engineering design work or scientific programming than a CS degree.


At my highschool, which was a prestigious boarding school in the UK, I was told that CS is not a "real" subject and I should study Maths instead.

This is terrible advice. However, I don't think my experience is unique and have to believe that many university applicants were given (and maybe are still given?!) similar guidance.


Even if you're in the mindset that everyone should study a "real" (pure and academic) subject, I'd say CS fits that description fine. It varies by university (probably unlike maths), but there are still plenty of highly theoretical, mathematical, and academic CS courses


There’s multiple explanations for this, all interlinked:

1) CS is not a vocational qualification like Law.

2) Other qualifications are just as good a route into the jobs described. Arguably maths and statistics is a _better_ route. These qualifications also offer more flexibility.

3) Of the standard routes into tech jobs, CS is the lowest status.


Do more people study mathematics and physics than computer science? That was certainly not the case at my university in the 1990s. CS was by far the biggest of the STEM fields.

Maybe it has lost its magic since then?


Because it’s not worth the cost and time commitment unless you can’t read a book or follow one of the numerous excellent free online coursewares from better institutions than wherever you’re going.


I wish we had cheap certifications for computer science topics. I don't want a whole degree, but I wouldn't mind improving in certain areas of cs if I get recognized for it


Many years ago now, but I did electronics as I felt I could already program in several languages by university age and that was my perception of what a CS degree would do for me.


it's the same reason few people are interested in math, most people don't (or want to) think too hard


Is the dropout rate higher among declared CS majors? I only have anecdotal evidence of this.


WAT?


(2017)!!


Some previous discussion closer to the publish date:

3 years ago

https://news.ycombinator.com/item?id=23676331




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

Search: