A software stack generally refers to a set of technologies that work together to support the development, maintenance and operation of software. Stack in this context is a bit of a colloquialism and doesn't have an official definition, but often includes all software that is required for your solution (including the webserver, the OS, any special extensions like memcache etc, as well as developer tools like a tightly coupled platform/language/IDE). Sometimes, the definition might even extend to a hardware stack like Amazon's cloud computing services.
A framework has a more technical definition, and although the term is sometimes used interchangeably with library, a framework is usually distinguished by a property called Inversion of Control. Contrasted with a library, where methods are called by the programmer where needed, using a framework usually means that much of the application functionality is deferred to the framework, allowing the programmer to avoid writing boilerplate code and merely "fill in the blanks", leaving the framework to decide when its appropriate to execute core business logic.
Middleware is a bit more esoteric, but often refers to software or an application interface built to facilitate standard communication between complex systems. You can expect middleware to perform tasks like parsing, authentication or just provide a standard way to communicate data between systems. Contrasted with a library or framework, middleware is generally not considered a "developer tool" per-say and tends to be pretty tightly integrated into the systems it facilitates.
Great Question.
It is important to distinguish between 'Development' and 'R&D.'
R&D = experimenting with ideas/technology that may never actually
become a product.
Software Development = working on a product/service desired by a real
customer.
R&D is all about developing new solutions for a specific problem
domain. The end result of this endeavor is something that I call
"research toys".
To be a software product, the research toy has to be completely
re-implemented. Failure to do so will result in a product that
appeals to an increasingly elite and erudite user base. The problem
here is that this elite and erudite user base typically has no money
to spend.
To be a successful, the software product must be a faithful
re-implementation of the research toy, accessible and loved by the
commodity user. To be truely remarkable, the software product must
simultaneously appeal to the elite and erudite user.
Research implies scholarly or scientific inquiry and tends to be aimed
at the greater good of an industry or society at large. Product
development has different motivations and outcomes: it is driven by
the potential for profit. The state of product development is healthy.
The state of lighting research is not.
We need a collective commitment to the greater good to answer such
questions. But this is not just philanthropy; the answer would address
a practical goal. Light sources that are spectrally tuned to the
visual system will be more sustainable. They will use less energy by
generating their output in regions of the spectrum where the visual
system responds most strongly, resulting in better seeing for building
users. This example reinforces the difference between research and
product development.
All development of new products to be R&D. I think some of you are
confusing pure, abstract science with R&D. They aren't the same. R&D
can be very product oriented. Scientists may be looking for a vaccine
to cure AIDs. That is a very specific task to create a product to sell
and it is certainly R&D and not just guys sitting around messing
about with whatever they feel like.
R&D in the technical world = finding ways to do something interesting
or important, using known techniques and technology as a starting point.
Software development = finding ways to do something interesting or
important, using known techniques and technology as a starting point.
Virtually all software development is the D part of R&D. Some times,
there are very little R in Software 'R&D'. Some times, there are pretty
large R in Software 'R&D'.
It depends on several measurement. For example,
Managing software development for various sized companies, R&D takes
on different meanings depending on the size of the company, customer
base, etc.
In a small software company, with only a hand full of employees, the
line between R&D software and Production software is usually very
small. What one day is a software R&D project, may the next day be
shipping as production software to customers.
As software companies grow, and they have one or more production
software lines, they tend to create greater separation between R&D
software projects and Production software products (for obvious
reasons). This R&D gap is typically created to create greater
diversification in their software products for tomorrow, while
allowing the production software development to continue to produce
today.
This is not to say that the production software products won't get
innovative new features. The production software developers are
typically just as "sharp" as the R&D developers. In fact, at one
company, we had an enrichment program that allowed production software
developers to rotate in and out of R&D projects. This not only added
fresh brain power to the R&D teams, but in many cases, the production
developers came back with new ideas on producing better production
level software.
D = "knowing where you want to be at the end", and R is because "at
the beginning of the project, you don't know what will be required to
get there"
R&D are the lucky folks who get to do anything they want without
accountability.
Good research/resource on this topic :
Best Answer
In short words, normal software would be the software made with individuals in mind, i.e. retail software or web applications targeting the general populace. Its success depends on how well it is received by users who in most part are offered a ready-made, 'standard issue' product. The development is an investment and the revenue comes from individual product or ad space sales.
On the other hand, enterprise software would be the software commissioned or developed internally by companies, either tailor-made from scratch or purchased from a third-party vendor and heavily customized for the company's business process.
The reason people say enterprise software sucks? I'd say there are three main reasons, heavily interconnected: