Remix.run Logo
harimau777 2 days ago

It seems to me that in other areas of tech, companies generally hire electrical engineers, mechanical engineers, civil engineers, etc. On the other hand, software companies feel that they don't need to hire computer scientists.

Then periodically there is a discussion on Hacker News that boils down to "all of the other engineering disciplines can make reliable predictions and deadlines; why can't software?" or "why is this company's code so shoddy?" or "why are we drowning in technical debt?".

Perhaps the these are all related?

bckr 2 days ago | parent | next [-]

Is your working definition of a computer scientist similar to a civil or electrical engineer?

To me, a computer scientist is someone who studies computation. They probably have the skills to figure out the run times of algorithms, and probably develop algorithms for solving arbitrary problems.

A software engineer is what I would call someone who can estimate and deliver a large software application fit for purpose.

pphysch 2 days ago | parent | next [-]

I agree with this. A reason there is so much crappy software is because companies are hiring fresh CS grads expecting them to do real software engineering work. And they end up hacking it like they hacked it through school.

CS programs have gotten better at teaching real SWE skills, but the median CS grad still has ~zero real SWE experience.

harimau777 2 days ago | parent | prev [-]

Theoretically, I think that the ideal situation would be for a Computer Scientist to be someone who performs fundamental research in computation while a Software Engineer (I think that something like Computer Engineer would be a better term) applies computation research. Analogous to the relationship between a Physicist and an Electrical Engineer.

However, as the terms are currently used, I see Computer Scientist as analogous to Electrical Engineer. On the other hand, it seems to me that Software Engineer is used to suggest that developers don't need to know the theory behind computation.

Therefore, I currently think that the way "Software Engineer" is used respresents a lot of what's wrong with current software development.

jdougan 2 days ago | parent [-]

What would be the computing equivalent of an Engineering Physicist?

chamomeal 2 days ago | parent | prev | next [-]

The definition of “software engineer” is SO broad though. If you’re maintaining a database/flight controller/cloud service, etc, you probably need real comp sci knowledge.

Hacking together an internal tool with laravel? Doing vanilla CRUD for a client’s web app? Probably not! No amount of comp sci knowledge will help you configure the millionth nested layer of Wordpress plugins.

So much “software engineering” is just plumbing. Connecting things to other things with a little bit of business logic in between. Honestly my job is plumbing, most of the time.

Terretta a day ago | parent | prev | next [-]

> [P]eriodically there is a discussion on Hacker News that boils down to "all of the other engineering disciplines can make reliable predictions and deadlines; why can't software?" or "why is this company's code so shoddy?" or "why are we drowning in technical debt?".

You'd find those also have more trouble with predictions when machinery needed for the goal hasn't been delivered before.

While most software jobs today are a bespoke configuration of a solved problem, the practice of software development is new enough to remember when most software was to solve a physical problem in a new digital way. Discovering/inventing are predicted on the search space being unknown in advance, making discovery and invention unlikely to be estimated accurately.

Note, though, most software today has already been writting, and the lack of predictable delivery is because the process doesn't rigorously enforce a "first, apply known/solved software" approach.

If, in software, materials use was third party inspected and certified as it is in physical or electrical engineering, you'd find software get more predictable.

2 days ago | parent | prev | next [-]
[deleted]
AnimalMuppet 2 days ago | parent | prev | next [-]

In other areas of tech, companies hire electrical, mechanical, and civil engineers, and not, say, physicists.

Software engineers are analogous to the other engineers. Computer scientists are analogous to the physicists.

Or take chemicals. When the question is "how are the outer-shell electrons distributed", you hire a chemist. When the question is "how do we make the stuff in multi-ton quantities without blowing up downtown", you hire a chemical engineer.

Part of the answer to your question is that schools are producing computer scientists and not software engineers. (It's not the whole answer, but it's part of it.)

harimau777 2 days ago | parent [-]

The difference as I see it is that electrical engineers are expected to have a deep knowledge of advanced mathematics, EM fields, semiconductors, control theory, electronics, etc. However, software engineers are not expected to have a deep knowledge of algorithms, category theory, formal languages, etc.

Effectively, companies treat Software Engineers like Electricians not like Electrical Engineers.

ahartmetz 2 days ago | parent [-]

More like they hire electricians but expect them to do electrical engineering. In a way, despite the name, a rigorous discipline of software engineering doesn't really exist yet. Or it does (cf. "The Right Stuff", Space Shuttle software), but the tradeoffs for that kind of rigor are not or don't seem favorable.

ahartmetz 2 days ago | parent | prev [-]

They are related to the discipline being quite new, I think.I have seen little correlation between studying computer science and being able to program well. That might also have something to do with the generally atrocious quality of CS teaching in Germany. Professors try so hard to avoid "dirty practice" in favor of doing quasi-mathematics that they ignore interesting and fruitful fields because (get this!) not only does practice follow theory, but vice versa as well, maybe even more so.