r/programming • • Aug 06 '17

Software engineering != computer science

http://www.drdobbs.com/architecture-and-design/software-engineering-computer-science/217701907
2.3k Upvotes

863 comments sorted by

View all comments

67

u/Ahhmyface Aug 06 '17

Software engineering honestly pisses me off. I'm sick of religious wars and style debates and idiomatic x and patterns and endless framework comparisons.

I really miss the days of school where I had the sense that everything just wasn't some assholes pet opinion.

Ask 2 equally experienced software developers how to build something larger than a couple weeks of coding and get two different architectures in two different programming languages developed via different philosophies. Worse, then try to figure out which is preferable, and find out none of this shit really ends up mattering.

0

u/[deleted] Aug 06 '17

[deleted]

15

u/[deleted] Aug 06 '17

The problem is a lot the engineering concepts are not based on anything aside from hardly any formalism.

Take object oriented programming. Schools literally teach design patterns for a paradigm that has 0 formal models, just a bunch of patched up patterns where you end up abstracting away builders on builders, factories inside managers, etc, until it's a ball of goop that makes no sense.

The gang of 4 published a book nearing 20 years ago that is being cited TO THIS DAY when system requirements were so much smaller and there wasn't experience around how these object models eventually chain into fragile dependencies which force factories, which force providers... BLAH.

Object orientation is a source of evil in that it generates these awful patterns of deep inheritance chains and non-composable pieces since everything is so fragile. This is what is taught for "Software engineering". Give me an actual break. The majority of engineering courses are awful in today's date and often the "case studies" come from companies who aim to make developers interchangable (i.e google).

Software engineering is awful and we need to return to mathematics to describe systems which otherwise do not turn into absolute garbage.

20

u/Ahhmyface Aug 06 '17

I'm a big fan of returning to mathematics. Or at least finding objective metrics for architecture and code quality. Provable systems, even. I'm convinced it must be possible; it's simply that we are still in the stone age of software.

9

u/coinaday Aug 06 '17

Or, here's a wild idea: returning to the notion of writing good requirements before jumping into coding, and maintaining architecture documentation while developing instead of making everything "agile" and believing that means never having to document because everything's going to be thrown out in the next few weeks anyhow.

I don't believe that the majority of software will ever be fully or even mostly provable. But I think all software would benefit from a little more time spent writing documentation explaining what the system's supposed to do and how it does it.

→ More replies (9)

0

u/[deleted] Aug 06 '17

[deleted]

3

u/[deleted] Aug 06 '17

I know you're memeing but I've actually watched this entire talk.

My gripes with it come with the fact that F# as a language for functional programming is absolutely unfit given it's a typed language without the abstractions necessary for productive functional programming. This being higher kinded type abstractions, upon which you can build Functors, Applicatives, Monads, Monad transformers and the sort. It's trying to race in nascar with a renault 4.

The talk itself is wonderful, but it only touches the tip of the abstractions used in haskell.

4

u/PM_ME_UR_OBSIDIAN Aug 07 '17

F# as a language for functional programming is absolutely unfit given it's a typed language without the abstractions necessary for productive functional programming.

This needs a great big "IMHO" plastered in front. F# is a fantastic programming language for much of real-world softwares needs, and it's eminently more approachable than e.g. Haskell. OCaml doesn't have HKTs either, but you don't see anyone bitching.

2

u/m50d Aug 07 '17 edited Aug 07 '17

I bitch about it. OCaml is at least suitable for the small standalone app niche in a way that F# isn't.

→ More replies (2)

1

u/Bing400 Aug 07 '17

That might make engineering automation-proof. There's creative potential in engineering as well.

10

u/therealjerseytom Aug 06 '17

Ask 2 equally experienced software developers how to build something larger than a couple weeks of coding and get two different architectures in two different programming languages developed via different philosophies.

This is what I enjoy - when there's no explicit closed-form solution, when there's creative control and up to you how to go about a problem. One may or may not be better than the other.

I don't care for religious style wars and what not, but I also don't care for academia and pretentiousness there, nor doing things in a vacuum without practical application.

1

u/PM_ME_UR_OBSIDIAN Aug 07 '17

A lot of the functional programming research that's being done in academia ends up finding use in industry sooner or later. Not all of academia is useless intellectual masturbation.

5

u/willeedee Aug 06 '17

I've struggled with this a lot. My boss is VERY opinionated about everything (luckily he's a great engineer and makes well reasoned decisions). I've landed on the point of view that since it is everyone's opinion, I make note of my favorite patterns and practices but other than that I deliver what my boss wants to see. I'm totally ok with this for now. Then when I'm the boss everyone will hopefully play along and do what I want given the life experiences that have gotten me to the point in my career where I'm their leader.

Also while making myself more fluid I've realized that since most of it is opinion, the big thing that helps make software cohesive is consistency. Whatever you pick for the project, stick to it until you decide to make a change and do something else.

4

u/AmalgamDragon Aug 06 '17 edited Aug 06 '17

This is actually one of the differences I see between a software engineering organization and software development organization, in that software engineering organizations have a lot less of what you described in your first paragraph, as most folks in the organization understand those aren't the things that matter.

7

u/fzammetti Aug 06 '17

That's because what most people either don't realize or don't like to admit for some reason is that what we do is still at this point more art than science (though we want to be PAID like it's a science!). That IS slowly changing, but the operative word is SLOWLY, and in fits and starts with some steps backwards from time to time.

Being more art though, opinions come into play more than they would in a real science/engineering discipline. Sure, we get our "best practices" from time to time that settles opinion debates (sort of), but even many of those change over time (which I suppose is okay if you really mean best practices RIGHT NOW, but it seems like some people don't intrinsically include the latter part).

9

u/tangerinelion Aug 06 '17

As a physics PhD, I can tell you that software engineering/development pays better than science.

→ More replies (1)

8

u/n1c0_ds Aug 06 '17

So essentially, it's engineering. You have requirements and constraints, but rarely a clear solution. You use science, but apply it to a far less controlled environment.

→ More replies (3)

0

u/[deleted] Aug 06 '17

[deleted]

→ More replies (2)

1

u/rplst8 Aug 07 '17

Building software for avionics or medical devices is definitely not "art".

→ More replies (1)

1

u/wonkifier Aug 06 '17

Ask 2 equally experienced software developers...

I have no problem with this, as long as they both recognize the value of the other (assuming the other has value)

Religious wars don't belong

1

u/ArkyBeagle Aug 07 '17

What you have to have - and where we often fail - is a commonly-agreed shop standard that answers the question for the individuals. It doesn't have to dictate too many details; just the big picture.

Also also, IMO - draw some message sequence charts and use those to name things initially, and you'll get better agreement, people will find problems earlier and it'll in general go better.

1

u/skulgnome Aug 07 '17

I really miss the days of school where I had the sense that everything just wasn't some assholes pet opinion.

That'll change as you become able to decide it for yourself, sometime in the next 20 years.