From inside ParcPlace, it looked like we were starting to gain traction. There'd been a number of spectacular C++ project failures, and people seemed to be willing to try this weird, new (to them) thing that let them get prototypes up quickly and then grow them.
Then Java arrived and sucked all of the air and mindshare out of the ecosystem.
Java lucked into ideal circumstances, and Sun Marketing played their hand very well. The Web was just taking off, VCs were looking for something new and hot, publishers were looking for the next big thing, and programmers were looking for something that wasn't C++. Java looked familiar enough, cost nothing, had Garbage Collection and Interfaces (putting Gang of Four Patterns within reach of many), and let programmers keep their favorite tools and editors instead of adopting Smalltalk's strange model of doing everything in a (mostly) sealed environment.
Then Java arrived and sucked all of the air and mindshare out of the ecosystem. Java lucked into ideal circumstances,
Not only that but Java was free and Smalltalk was $50k/seat. There was a chicken-and-egg problem, no one could learn Smalltalk unless their organisation had already committed to it. It sounds weird to say it now but Java won by grassroots adoption.
Also, you could share Java code, or entire libraries or applications, by posting some files on a website. You already had the files, and someone downloading them could use them straight away. To share Smalltalk code on a website, you would go through the file out / file in process, which was considerably clunkier.
Also, i don't think Smalltalks of the time had namespaces, which also makes sharing code harder to get right. Java's reverse-DNS package naming is a surprisingly important innovation.
>There'd been a number of spectacular C++ project failures,
Do you have any examples in mind? Big corporate software project failures are always super interesting imo. Especially those that happened during such pivotal times as rhe 1990s.
C++ programming in the early 90s was, in retrospect, not all that much fun. templates were very underpowered and not widely implemented, the library was minimal. Everybody defined their own string and vector classes, or used products such as Rogue Wave Tools.h++, which at the time still offered macro-based container classes.
There were a lot of fumbling exploration into what kind of OO design would prove long term workable, and in what existed of the C++ standard library at the time, some classes, like iostream with its multiple inheritance and virtual base classes, may not have given particularly sound examples to emulate.
The arrival of the GoF design pattern book and of the STL were, in my opinion, massive game changers.
From Aaron Hillegass Cocoa® Programming for Mac® OS X, Third Edition
Once upon a time, there was a company called Taligent, which was created by IBM and Apple to develop a set of tools and libraries like Cocoa. About the time Taligent reached the peak of its mindshare, I met one of its engineers at a trade show. I asked him to create a simple application for me: A window would appear with a button, and when the button was clicked, the words “Hello, World!” would appear in a text field. The engineer created a project and started subclassing madly: subclassing the window and the button and the event handler. Then he started generating code: dozens of lines to get the button and the text field onto the window. After 45 minutes, I had to leave. The app still did not work. That day, I knew that the company was doomed. A couple of years later, Taligent quietly closed its doors forever.
It is asserted a bit later than C++ was the problem.
Not the OP, and I don't have any specific examples, but this was at the height of Waterfall (not in name, but in principle), where it was generally still taught as the way. Agile wasn't even a glimmer yet, but Extreme Programming was what Agile is now - interesting ideas, but mostly horribly executed.
Plus OO was at it's height as well, and C++ was seen as being incapable of handling OO sophistication, but Smalltalk could! (spoiler: it couldn't either) Then Java came and took over, and while it is a great language, it turns out massive, sophisticated OO approaches just breed their own complexity and so it picked up the "bad" moniker (it isn't), and now we find ourselves in other waters with a lot better understanding of everything, but still with a long way to go!
The ones I'm thinking of were were in "boring" places like large power companies, and back-end systems for telecom. The stories we heard, which are hard to grok now but make sense if you think back to mid-90's hardware, where of multi-day build and test runs causing projects to grind to near halts. Fertile, but painful, soil for the idea of "Refactoring" to take root in.
It's one thing when a tech company with lots of technical talent like Google decides to build its own (core) tools in a language like C++. It's another thing entirely when large numbers of IT departments, who have vastly more business than technical knowledge, try to build sprawling business applications in it. That's where most of the failures were occurring and why they were looking at Smalltalk, Java etc.
Then Java arrived and sucked all of the air and mindshare out of the ecosystem.
Java lucked into ideal circumstances, and Sun Marketing played their hand very well. The Web was just taking off, VCs were looking for something new and hot, publishers were looking for the next big thing, and programmers were looking for something that wasn't C++. Java looked familiar enough, cost nothing, had Garbage Collection and Interfaces (putting Gang of Four Patterns within reach of many), and let programmers keep their favorite tools and editors instead of adopting Smalltalk's strange model of doing everything in a (mostly) sealed environment.