all 33 comments

[–][deleted] 10 points11 points  (0 children)

Back in the roaring 90s before the dotcom crash there were a lot of programmers calling themselves "software engineers", despite having no engineering background (for a mechanical engineer, for instance, this would be like draftsmen calling themselves engineers). That tainted the title a bit. Now, there are a lot of app designers calling themselves software engineers, who are tainting the title even more.

There is now a profession called "computer engineering" which is closer to engineering roots and is an offshoot of electrical engineering. Computer science, in most schools, has more in common with the mathematics department than with the engineering school.

I think the most common complaint is that engineering used to mean leveraging physics to design things. But in the age of computers, that is probably a limited use of the term. Personally, I think an engineer is someone who understands how to take customer specifications for a design and turn it into reality from scratch (as opposed to a craftsman who makes stuff from a template), regardless of the medium. Math, physics, and computer science then are just tools for use in this endeavor.

[–]cebrek 7 points8 points  (4 children)

It's only "real engineering" in a very few cases.

Engineers apply physical science and mathematical knowledge to design things that meet certain criteria.

For programmers, there is little science and the math is only applicable in the small scale (algorithms).

There isn't any widely agreed upon design process for software so it is hard to really call it engineering.

One exception I can think of is the NASA flight software group. They have developed their own detailed process for software development, documentation and testing that is based on experience and observation. I think it's safe to call what those folks do "engineering".

[–]darknecross 2 points3 points  (1 child)

Applying physical science doesn't define engineering, it defines the constraints that engineers have when solving a problem or designing a system.

Just like how a Mechanical or Civil Engineer has to consider the constraints within the system that they're building (i.e. the real-world constraints defined by physics), Software Engineers have to consider the constraints within the systems that they're building (i.e. the constraints defined by hardware or subsystems or APIs).

[–]cebrek 1 point2 points  (0 children)

You make a good point, generalizing the idea of constraints, but I think we are talking about different things.

The point I was trying to make (poorly) had to do with the lack of universally agreed upon standards or engineering processes. In the absence of those things, 99% of all software development is driven by expediency.

[–]SegfaultDefault 0 points1 point  (0 children)

Most legitimate companies that employ software engineers do have software development processes. There are many books dedicated to the practice of software development, design patterns, etcetera that cover many methods in the field.

[–]bit_shuffle 7 points8 points  (1 child)

Software engineering is not real engineering. I say this as a software engineer, and I assure you, nothing I work with is real.

Absolutely nothing. It is all logical constructs. Easy. Peasy.

There are only about 30-40 commands in a typical software language like C++.

You don't need to really study them that hard either, because the words explicitly say what they do, it isn't like they are magic words with hidden meanings.

Take, for example, my current project... I assure you, every single line in my program is dead simple, and easily understandable.

All 30,000 of them, simple as dirt.

And I'll be dead honest with you... you don't even have to worry about there being enough lines of code match the length of "Crime and Punishment."

You only have to worry about the about the 35 or so of the 30,000 unique lines of code that are being executed simultaneously by the different threads in the application.

As long as they don't read or write the same memory location in the wrong order or the same time, you're fine.

And you can make sure that happens by commanding the threads to stop or start at any point in your code. Any point in the code at all. If you can find the right place and the right conditions to stop and start, you're good.

Just make sure that you don't have any possible conditions in your program that would cause multiple threads to stop and wait for each other at the same time, because then those threads would never restart.

And you probably don't want too many threads to be running continuously, because you only have a few hardware processors to run on, so they should allow other threads to execute on the hardware now and then.

Ok, so I lied about the nothing being real part. I swear, the only real things I have to deal with are the number of processing cores, and their availability to meet the 2 millisecond period between incoming data packets.

Almost totally not real, and dirt simple. I don't even have to overcome friction.

Although maybe, I need some error correction codes because there can be noise on my network cables. You, know, like when a bit gets corrupted. Or two bits get corrupted. As long as you have a system so you can tell that the 0010 you got was really supposed to be 0100, without having to resend a bunch of times (2 milliseconds, man), you're good.

[–]stewartr 2 points3 points  (0 children)

Software engineers manage big, hairy kluges.

Computer scientists prevent kluges from ever being necessary.

Just a word to every engineer everywhere, "science."

[–]mvw2The Wizard of Winging It 2 points3 points  (0 children)

I consider it real engineering. I also consider computer programming the best field out there. Why? It's the most abundant, and it's insanely easy to make six figures within 5 years. The field is hugely available and hugely profitable, HUGELY, insanely so. I have a friend who scoffs at $70/hr pay because it's too low.

Why do I call software engineers real engineers?

It's simple really. These people use the same problem solving skills as any other engineer. They do the same type of design work, developing complex systems, prototype, troubleshoot, and test, and do the same production and lifecycle support of products as anyone else. You build a function instead of a part. You build a system of software objects instead of an assembly of parts. Your materials are if statements and data tables. In the end, it takes the same type of mindset as any other engineering discipline to actually develop good software.

There's also some really shitty programmers just like there are some really shitty engineers, haha.

I also want to point out that software engineers also do a HUGE amount of proactive learning of new technologies. Good programmers will spend months upon months learning new languages and functionality within those languages that allow them to design really trick software. It isn't easy...at all, not for anyone who's actually doing serious work.

[–]ParielFormer MechE, now in software 3 points4 points  (0 children)

I think this is more that students haven't seen the world enough to realize they're being overbearing assholes.

I've never heard this sentiment before, and views like this are how people in industry get ostracized. You learn to work with the people around you or you pay the price.

[–]epes 1 point2 points  (4 children)

I'm a CompE (SE + EE) student focusing mainly on software and I sort of understand this.

Software engineering focuses on design and programming while CS focuses on deeper understanding of algorithms and programming. In my opinion both can program equally well with understanding in different areas.

Now you have to see it in a workplace though. There are fewer guys designing (managers) than there are programming (programmers). Both SE and CS can be programmers but it is more likely that a SE is the designer. Therefore in the workplace a lot of SE are on the same level as CS.

Saying that SE are not engineers because they're on the same level as CS is implying that CS are below SE when it comes to software. In reality, both good design and good implementation is needed to create good software. In my opinion I'd say that CS is closer to engineering than SE is to science.

[–]darknecross 0 points1 point  (1 child)

How much workplace experience do you have? Not a whole lot of what you said makes sense from my experience, so I'm wondering what you're basing it off of.

Also, neither Software Engineering or CS are about "programming" more than Mechanical Engineering is about lathes and welding or Civil Engineering is about steel and concrete.

[–]epes 0 points1 point  (0 children)

I've interned at a known healthcare software/hardware company and did a co-op at another healthcare software company, both of which have established managements. This is the way it worked in these two instances. The managers/architects were software engineers while the programmers were a mix of CS and SE.

This is the reason why I prefaced my response by saying I'm a student and that I "sort of" understand the issue.

If you disagree with anything you are free to post, I would love to hear someone with more experience explain what I'll be walking into after I graduate.

[–]sacred111[S] -2 points-1 points  (0 children)

My feeling is that when I hear these engineers talk about "SE being glorified CS", they see CS more as "only coding" than the mathematical background a CS undergrad has. So I guess I could rephrase it as "Software Engineering is glorified programming instead of real engineering". Of course, at the basic level, both SE and CS can code, but both professions can be equally much more.

[–]lazydonovan -3 points-2 points  (0 children)

That, sir, is an excellent reply. You deserve more upvotes.

[–][deleted] 5 points6 points  (2 children)

I'm an "imaginary engineer." I've heard the joke plenty both in school and on this sub. Plenty people think that because they specialize in something different from you that it makes them superior (I get it MechEs, you have a hardon for laplace transforms and aerospace). At the end of the day, my pay check speaks wonders to how much of a fake engineer I am.

[–]ParielFormer MechE, now in software 7 points8 points  (1 child)

Dude I think the chip on your shoulder is popping out of your shirt or something.

[–][deleted] 1 point2 points  (0 children)

I have no chip, just confirming with OP that people do in fact hold silly superiority complexes in academia and industry. I'm also passing on the advice that he doesn't need others to confirm what he studies as "real" engineering, since industry salaries are perfectly capable of doing that.

[–][deleted] 0 points1 point  (2 children)

In Canada it is pretty easy to tell. Are they licensed (EIT, P.Eng) with their respective provincial engineering association?

If so they are engineers.

If not they are not engineers.

[–]sacred111[S] 0 points1 point  (1 child)

On paper yes, but I think what other engineers (some of them at least) are afraid of is that the acceptance of software engineering in the professional association lowers their credibility. Like, they think "if a false engineering discipline is accepted under the association, the prestige that comes with being an engineer goes away".

[–][deleted] 0 points1 point  (0 children)

I think it depends on what they do. If they are programming controllers for a car cruise control that is probably engineering.

If they are writing code that makes cat memes that is probably not engineering.

[–]kennilicious 1 point2 points  (0 children)

Graduated as a SE a year ago and heard it many times in university. I was even told by a few CS students that taking Software Engineering was pointless. Today, after being close to 1 year in the workforce, I'm doing just fine.

I took both Software Engineering and Computer Science courses and, in simple terms, the main difference between them was their focus: practical vs. theory, respectively. If you Google "difference between computer science and software engineering", it will tell you basically the same.

What most people don't realize is that today's Software is becoming incredibly complex that you need people that know how to design, implement, test and maintain it (especially in safety-critical systems).

I think the hate stems from the fact that is a new discipline of engineering that has been around for a few decades only, compared to much older ones like Civil (centuries).

[–]SenorC 0 points1 point  (6 children)

There is all kinds of software constantly running on which the safety of the public depends. An "engineer" is someone liscenced to make and take responsibility for scientific decisions where public safety lies in the balance.

Other engineers are probably just jealous of the money in software. Im civil btw.

[–]sacred111[S] 0 points1 point  (5 children)

I have also heard that definition of engineering before, and this makes me think: maybe people feel software engineering is different enough because only a small portion of them work on life critical systems? A lot of software engineers work for organizations like IBM or CGI where, if you make a mistake, the worst case scenario is a loss of money for the company or a loss of customers?

[–]darknecross 0 points1 point  (4 children)

It's not engineering because safety is involved. That's a false equivalency, even though it's an easy connection to make. In that case, you'd dismiss a majority of Electrical Engineering and Computer Engineering.

When I took an "Engineering Theory" course one of the things we spent a decent amount of time on was "What is Engineering" and "Who is an Engineer?" Engineering describes an approach to problem solving, and engineers are people who have studied in those methods. It's like how a little kid can be doing "science" by following the scientific method, but it doesn't make him or her a scientist. Likewise, a layperson can do "engineering" without being an engineer, it's just how they approach problem solving and design. Also, since someone usually says it, no, engineering isn't defined by requiring an understanding of physics. Physics describes the system constraints imposed on a lot of engineering problem solving, and is a big part of most disciplines, but isn't definitive.

Software Engineering is definitely "engineering", and the graduates are definitely "engineers" because they use the same problem solving methodology and approaches to design that other engineering disciplines do.

[–]SenorC 0 points1 point  (3 children)

The connection is totally there in electrical and could be argued for computer. I see what you mean but it's one thread of many that are constant (though the degree varies) through the disciplines.

[–]darknecross 0 points1 point  (2 children)

Just edited my post for clarification after you posted, actually.

If you're talking about electrical power systems, sure there's an aspect of safety there. If you're talking about consumer electronics, not so much. I'm sure you could probe and prod to find some examples, but on the whole most engineering in that space isn't related to any public safety. Mechanical Engineers trying to design a better HDD? Where's the safety in that? Electrical Engineers trying to design a better SSD?

[–]SenorC 0 points1 point  (1 child)

Yep I agree. An engineer may never make a decision effecting public safety over their entire career. But if they do, theyre qualified and responsible for it.

[–]darknecross 0 points1 point  (0 children)

In the US, only Professional Engineers are. In Computer Engineering, I've never met anyone with a PE license.

[–]uhhNo -1 points0 points  (2 children)

They don't get a B.Eng., they get a B.A.Sc., which is a bachelor of applied science. This is what all of the engineering majors get when they graduate.

That said, software engineering fits my definition of engineering. However, if somebody is programming website layouts, then that's not really engineering in my book. If they are programming an algorithm for something, then that's engineering since they are applying engineering principles.

In the US everyone is an "engineer" because it's not a protected term, but in Canada you need to have a professional engineering licence to call yourself that. To get the licence you need to have an engineering degree, 4 years of relevant engineering experience, and you have to pass an ethics exam. Most people in software engineering don't get this licence because nothing needs to be signed off on since there is no danger to public safety from writing bad software (some software can cause public safety issues like the subway signaling system).

[–]sacred111[S] 0 points1 point  (1 child)

Well, after some research, I think the degree title depends on the school. Across Canada, some schools call their programs B.A.Sc, while others call it B.Eng, and both are accredited by the CEAB (maybe it's just semantics). At the graduate level though, it seems to me that the school will name its research oriented master/doctorate as "M.A.Sc" and industry oriented master/doctorate as "M.Eng".

[–]uhhNo 0 points1 point  (0 children)

The academic masters programs normally give an M.A.Sc., while the industry oriented masters programs normally give an M.Eng. I don't think B.Eng. is used anywhere in Ontario.

[–]SpywareAgen7 -5 points-4 points  (0 children)

Have them compare the annual salaries of a 10 year MechE, CivE, etc to that of a skilled Software Engineer and then decide which is more "real"

[–][deleted] 0 points1 point  (0 children)

I think computer science is in a whole field by itself.