views:

769

answers:

10

In a recent question on unsolved issues in Computer Science, one answer was, probably correctly, criticised for not strictly being a CS problem, but a software engineering one.

In software engineering we have best practices, patterns, methodologies and templates, perhaps because it's quite a woolly area - probably more art than science - everyone has their own way of solving their problems, whether big or little (we've all got our utility library, right?)

So what are the big unsolved problems in Software Engineering? And why are they still unsolved, what's stopping us from having nailed-on solutions?

+13  A: 

Estimation of schedules.

It is hard almost by definition: if you do your job well, then you don't repeat yourself. Consequently, you can use past projects as a reference only to a limited extent.

Pukku
Heh. Doesn't FogBugz solve that? ;-)
Nosredna
That's easy: 6-8 weeks
Draemon
I've always felt that unlike building a house or designing a new car, where there are hard and fast rules, and you have a "default" design to fall back on, SE is like building the *first* house or car. With every half significant project comes the creation of something new.
Draemon
+1  A: 

This might be controversial, but I see patterns as an unsolved problem.

They exist for a great purpose - to distill well-trodden idioms into best practices, to avoid reinventing the wheel, to turn the intangible into tangible techniques we can communicate easily.

BUT

  • There are so many developers who hide behind patterns. Just because you are using a pattern doesn't mean you're using the right one, and there can't be a pattern for absolutely everything.

  • Architectural patterns like MVC are far too fuzzy to be lumped in with design patterns (like Builder). Everyone seems to understand these higher level patterns slightly differently. Even if there is a definition somewhere, unless this is commonly understood, they lose much of their communicative value.

  • Patterns are not Lego. They are not an excuse for not understanding "first principles". I would argue that you shouldn't use a pattern until you've "derived" it yourself. That's the only way you'll understand why it should be a pattern, and make the right choice about when to use it.

Draemon
I'm not sure about the need to derive a pattern before using it. Different people learn differently. One way to learn is by reading code other people write. There's a lot of tiers of experience we all rely on. Should you not use a compiler until you've written one?
Nosredna
I think the difference is that a compiler is a tool you can use as a black box. Code in, executable out. A well written library should be like that too - you have a clear interface, and don't care about the details. Patterns aren't like that - they're techniques you can choose to use to write your code, and I think to make the right choice you do have to understand the gory details.
Draemon
I distinctly remember seeing code written in high level languages which made me think, man, if this guy knew assembly language, he would not be doing things this way. We all have holes in our knowledge. None of us knows all facets of software engineering. I think we're best off TRYING to understand best practices even if we haven't gone through the pain that prompted various solutions.
Nosredna
I can see your point, but I don't think any of the GoF patterns would be too hard to understand in detail. The hard bit is the inspiration - once you've been introduced to a pattern it's usually pretty straight forward. I guess I've just met too many devs who used some pattern in a really inappropriate place, who would then defend it against a simpler, correct, non-pattern solution - "ah, but mine uses *** pattern which is best practice".
Draemon
Yeah, I know what you mean.
Nosredna
Patterns are a tool, a method - not a problem by itself. Solving this problem doesn't provide a business vlaue by itself.
MSalters
I think problems with the usage of patterns have an effect on the quality of software.
Draemon
+8  A: 

There's the classic...

Object-Relational Mapping is the Vietnam of Computer Science

Cameron MacFarland
Wish I could vote this one up +100.
dacracot
+5  A: 

The true problem with software engineering is the absolute lack of metrics, there is no consensus on how to measure anything. And for me that is what keeps software engineering from being Software Engineering.

Otávio Décio
+3  A: 

Problem Specification. Absolutely, this is the one thing that pretty much makes Software Engineering what it is; the process of finding out actually what problem the client actually needs to have solved (and how to implement the subproblems that each of those create) is actually what Software Engineering is about. It remains an unsolved "problem" in addition to being the definition of the field at least partially because the real issue is mostly about getting clients to properly describe what they actually need, as opposed to what they think they need.

Yes, this isn't a "programming" problem. But it IS the big, outstanding issue that always remains in Software Engineering. This is not a "how" problem, but a "what" problem; those are always the big ones.

McWafflestix
+9  A: 

Identity.

Even with OpenID, ADS, and dozens of other fiefdoms, there still isn't an easy, extensible, distributed, privacy-enabled way to easily maintain identity between machines and web sites.

Part of the issue stems from the fact each person is not a single identity, they are a collection of identities: family, job, public, hobby, private, alter-ego, consumer, anonymous, pseudonyms, friend, physical location (anonymous presence), etc.

A truly "solved" identity problem would allow me to be "all things to all people." In other words, I would appear to each person/service as I am to them, and my other identities would be isolated from their view. Meanwhile, I would be able to manage all of my identities in a centralized manner, with inheritance and cascaded properties, and do all of this on a decentralized, distributed platform.

Specific example: I have an AD login at work, logins on three computers at home, user accounts on dozens of sites, and multiple accounts on some social networking sites (such as MySpace) only because I want to keep my personal and hobby (photography) contacts and published information separate.

richardtallent
I'd hesitate to accept an answer (and in a Community Wiki question, it's not really my place to impose an answer) - but this one is certainly my favourite so far.
Unsliced
A: 

Well, the most famous of course is: P = NP ?

There's a $1,000,000 (US) prize for solving it, so get cracking! :-)

T.E.D.
That's not a Software Engineering problem, that's a Computer Science problem. And it is in fact already listed on the CS problem list that this question arose from.
Jörg W Mittag
+1  A: 

Databases under source control.

How to ensure that schema changes, data updates, permissions and so on are accurately reflected. In particular, the deltas between versions.

The database pro version of Visual Studio/TFS seems to have some good tools but having a Subversion-like view on the database would be a great thing.

Unsliced
+2  A: 

Theory and practice decoupling in software engineering but not in mature engineering branches. This is caused by the lack of science. Civil engineering becomes mature in the early ninteeth century when science (abstract underanding the phenomenon) and technology (tool use) are fully merged into a common culture. The science of software engineering does not exist today. What we have is technology only. Therefore software engineering is guesswork rather than scientific work.

Jerry
A: 

I think it is storing and searching symbols as text. My opinion is that such a format that can store and search mathematical symbols like text will help many fields of software industry such as AI.

Novemberland

related questions