views:

466

answers:

13

What do you do when you have troubles with some algorithm, language, framework? You go to google or stackoverflow. And guess what? There is almost 100% chance that you will eventually find (sometimes not easily) the exact same problem as you have and maybe even a solution.

Try to remember last couple problems you spent time trying to solve. Do you think you were the first in the world who solved them? I don't think so. Do you think you were the last one who had to solve the exact same problem? I guess not.

So don't you think that we all are spending our time solving exactly same stuff over and over again instead of concentrating on something that really has not been solved yet?

The problem here, as I see it, is that computer science is lacking some central knowledge database that stores solutions to all common tasks (and the majority of our tasks are common). Why this has not been done yet? Computer science is not some abstract art, everything is pretty well structurized and could be well organized.

Look at Wikipedia for example, thousands of people are happy to contribute their knowledge. Why can't we have our own "ITpedia"? Is it only because programmers are lazy?

You may say: hey, that's what stackoverflow is for. I think it should be something completely different. Stackoverflow is only trying to minimize path from a new question to an answer, it doesn't try to organize questions and answers (tags are not enough for that).

A: 

stackoverflow == ITpedia ??

BCS
It's more like devpedia. It's been made quite clear that the subject of this site is most certainly not IT in general, much to my chagrin at times.
Chris
I was quoting, OTOH considering how many people ask IT stuff, might it be a good idea to make a it.stackoverflow.com?
BCS
+4  A: 

Three things, firstly, StackOverflow has a search box, as well as when you go to ask a new question it brings up close similar questions that might be what you need. It has the potential to be the programming oracle you seek.

Secondly, this is why we build and use libraries. The code to make a window appear has been taken care of in a library. The code to make sound play is taken care of in a library. The code we actually write is always somehow unique.

Thirdly, it sounds like you want to go into research, where truly new problems are discovered and solved.

Karl
A: 

I think there's too information to be organized, MSDN library kind of helps with .NET stuff.

I agree that it sounds like you want to go into research.

Shahin
A: 

A lot of this has already been done at the level that is applicable to broad ranges of programmers. Design patterns, refactoring patterns, tutorials, examples. Sites/books with this sort of information for various different technologies abound. I make use of them frequently. The trouble is that, while they provide a great starting point or direction, they often don't solve the very problems that cause me the most difficulty. Those are invariably the ones that are directly related to my unique development requirements.

While there are often places where I can go for ideas, rarely do they work exactly, needing to be heavily adapted to actually work. Often times the biggest problem is getting around the highly generalized, framework provided component (that would likely be the very sort of thing you would find in an centrally located repository) that doesn't work exactly the way I want it. I'd still be left with the problem of finding the site containing the information on how to get around the framework limitations in a way that works for me or coming up with it on my own.

tvanfosson
+23  A: 

Don't you think that someone else before you has already asked this question somewhere and that there are already answers to it?

Vilx-
Agreed, totally awesome.
cliff.meyers
Would this reply be like a form of recursion or something?
Daddy Warbox
And perhaps there's no answer because... well... it's impossible to know enough to know that somewhere there's a repository that knows everything? Other than Google, I mean.
S.Lott
@Daddy, yes. It appears to be a tail recursive question.
JaredPar
+5  A: 

You are not clear on whether you are implying that problems are "difficulties faced when addressing a solution" or if they are "distinct implementations of business logic".

For the first, I think that a fair amount of things have been approached and, to some extent, already solved - although I don't think it is as high as 99%. As software becomes more complex, though, these types of problems become more problems. The same problem might present itself in multiple ways (429 - ActiveX cannot create component, anyone?), or their might be multiple routes that lead to the same problem. The internet is a blessing in this regard. When I started coding professionally, you might have had a couple of newsgroups to check for answers and hope that your server carried them or there might be a couple of BBSs that had a programmer following.

The lack of organization of these resolutions has always been a problem. This site actually does a good job organizing information through the community effort. I am sure that it will become even more useful the longer that it runs, Sites like MSDN help to a degree, as well. We are now at a point where is such a saturation of information online, as a whole, that finding a single resource to go to is just not feasible - unless you consider Google as your go-to site.

As for the second scenario, though, the answer is firmly no. Even businesses within the same basic model vary in implementation to a degree that is so great, that there are an almost limitely number of scenarios that have not been approached yet. On top of that, when things fall within a defined scope of business, there is a distinct obstacle in the way - that of proprietary information that just can not be shared.

As an interesting side note, the promise of web services was that it would be the "silver bullet" that would create a vast library of logic and functionality that could just be largely wired together to make an application. I remember reading that in some trade publication about six years ago, and it is no closer to reality now than it was then. There are too many variables around control of code, availability, and security that are all obstacles at this point in time.

joseph.ferris
+1  A: 

General problems have been solved, and you may find something specific or close to your problem domain, but often solutions must be adjusted to fit the exact requirements.

There is a lack of consensus about the best way to do things. I think the belief that while things have been done before they haven't been done as well as they could (or could now) is part of what drives people to re-create solutions - rightly or wrongly.

Draemon
A: 

What about aliens? They solved much more problems than human did! Let’s wait until they come and drink beer meanwhile!

The fact that somebody solved a problem before does not make the solution automatically available to everybody.

First, you should be able to formulate the problem. Some problems are hard to solve just because nobody around understands it well. If you do not understand your problem you will never be able to find the answer even if it is freely available in internet and only a couple of clicks away.

Second, not all the solutions are open source. So you sometimes need to reinvent the wheel.

And finally, it is simply not obvious that if somebody already did it you can use it. You need skills and experience to use and understand some complex things. After all, why should we learn in high school things others have discovered if we can discover own things!

Din
A: 

This is a loaded question to which my gut answer is "yes". We have tried to solve this problem with algorithms and algorithm compliant languages but there was always something missing from raw algos. That something was the context in which the algos are implemented. To solve that we developed the concept of design patterns which can be helpful or limiting depending on your interpretation. The problem being that often finding these (appropriate algos and patterns) can be quite a task.

The other part of the answer is that often it is quicker to "reinvent the wheel" than research the "right" answer to your dilemma. Often the "right" answers are either in costly CS books or hidden in obscure corners of the internet and your project needs to move on. Thankfully, I think that the creators of this site must empathize on some level with this problem.

Nick
+1  A: 

Low-level code is already less and less necessary, and if business code was just business logic, I guess most of us would be useless. Who gets a chance to write algorithms nowadays ? I envy games developers.

The rest of us are mostly there to integrate components and implement business logic on top ; get request from http, grab a record from the database, push it into a template and send it back to the browser. Back in the end of the nineties, when I was still studying, I wondered what's that "glue code" thing we would all do in the future. And there we are. Building stuff almost because software components don't want to talk to each other, and when it starts to work smoothly, it's already obsolete. We are struggling with non-compliant software, tweaking clunky configuration files, debugging, testing, solving deployment issues, and hopefully, help a designer to nicely display business data required by the client.

Designing tools that users like, thinking about features that would make everyone's lives easier, that's great, and that's why I like programming, because a developer is needed to make these ideas alive. But I would be even more happier if those beautiful things wouldn't need us to come to live.

vincent
+1  A: 

People are making money out of solving problems. If all solutions where easy to find, they would not be able to charge as much.

Its like any other industry, you dont see car manufacturers sharing their research and ideas do you?

truppo
A: 

Of course. And it's nothing to do with computers, either. 99% of the things I do in my life, someone has done before, but they haven't done them under exactly the same circumstances. They've done their laundry, not mine. More's the pity.

And even in cases where I can apply their method exactly (for instance, they've made waffles, I want to make waffles), there's more than one way to make a waffle, with different results, so I still have to pick one.

Steve Jessop
A: 

I think the problem is that existing solutions are described in a language which is not understood by whomever asks the question.

It's the same problem with documentation - it's really really hard if not impossible to write a piece of documentation that can address novice, medium and advanced readers all at the same time.

The internet compared to a printed source of documentation is much better in this regard as it allows finding a question asked in progressively different terms, allowing the question poser to familiarize him/herself with the language of the problem domain.

diciu