Is there something fundamentally misguided about the way we write programs today? Why is it so difficult, if not impossible, to write bug-free programs that contain more than 20 to 30 million lines of code? Do we need a radical new paradigm shift in programming? If so, what might it look like? One response came from Sun’s Victoria Livschitz, a senior IT architect and Java Evangelist who has an interesting history.
Beautiful
It is good to know that there are so openminded people with such fresh ideas in the computer industry. This is the only reason why I wish Sun wuld survive for a long time, because of the brilliant engineers working there.
Anton
Sun does have those. Sun also has a bunch of morons in charge of those wonderful engineers.
Well, I noticed she couldn’t help but take a stab at Microsoft, but I guess thats pretty much endemic to Sun culture….
envision a programming language that is a notch richer then OO. It would be based on a small number of primitive concepts, intuitively obvious to any mature human being, and tied to well-understood metaphors, such as objects, conditions, and processes. I hope to preserve many features of the object-oriented systems that made them so safe and convenient, such as abstract typing, polymorphism, encapsulation and so on. The work so far has been promising.
She makes a lot of good points about programming methodologies. The problem with OO is that a lot of problems don’t map that well to objects. I like how she talked about “processes” and “conditions”. One problem is how OO is taught. A lot of teachers start off with the classic Class Animal, Class Cat : Animal, Class Dog : Animal. Stop trying to map real-world objects to software objects. This is just ridiculous.
As she discusses in the article, the real problem with large-scale programming is complexity. The languages that we have now are still way too low-level. Humans just don’t have the attention span and memory to deal with the infinite number of details that are present in programs. I’ve never really done any functional-style programming, but in that paradigm don’t you “describe” the program more instead of being involved in minute details of programming logic?
Anyway, I could go on for a lot longer about my views, but there’s my partial $0.02
Talk about the complexity and counter-intuitiveness of programming! What seems to be missing is a unified component architecture rich enough to cover the whole spectrum of needs, from distribution to reuse. I am convinced that it isn’t that hard to do. First, a notion of a “component” as a fully autonomous element of software must be strictly defined. An object, to be sure, is not a component, although many components may be implemented with objects. Then the rules of relation, composition, and aggregation of sub-components into higher-level components will be defined, in fully codifiable form. Familiar “Is-A” and “Has-A” relationships will be present, among many others. Finally, the rules of derivation will be defined and codified to enable a comprehensive reuse framework. Inheritance, for example, will be only one form of derivation made possible under the new model.[i]
Components are definitely the next step on the quest for more productive tools. I think .NET has the edge on Java in this respect, but Java 1.5 is making headway, now that you can do metadata.
Gotta love this quote too….
[i]My advice to developers will echo his sentiments. Don’t take everything you’ve been told about good software engineering as gospel truth. Don’t be bamboozled. Maintain your sense of skepticism and look for more intuitive metaphors.
It would be nice to maybe link to the interview with Jaron Lanier too.
Well, let’s start with the positive bits:
* female
* chess master
* mathematician
* computer scientist.
but then
* Java Evangelist
And that shows, she possibly sold her soul
The parallels between chess playing and programming?
Hrrmpf.
That mathematics and programming relate, we know since
Turing, who was able came up with a mathematical model
for computation.
Man I could relate Sun-Tsu’s art of war to bug hunting, if I really want to write some stuff that might appeal to executives.
because I’ve always thought that the principles of fuzzy logic should be exploited far more widely in software
buzz-word-alert!
Still, my quest for the answer to Jaron’s question seems to yield ideas orthogonal to his own.
Do other folks than mathematical folks use “orthogonal” here?
Java technology, in contrast, enjoys exceptional immunity to viruses because of its sandbag architecture.
Ouch. Who screwed that up? It’s a sandbox!
In regard to recovery, I can’t think of a recent technological breakthrough. Polymorphism and inheritance help developers write new classes without affecting the rest of the program.
And some more often than not build absurd class hierarchies where there is no need/obvious hierarchy given by the problem.
I surprised that a computer scientist can leave school without getting a broader perspective.
There are of course systems that have to fulfill high demands regarding reliability, correctness, predicatbility, and downtimes.
Real-time systems for controling industrial processes,
are a place to look around, although they rely on certain hardware features as well.
Another example is the soft-realtime functional distributed programming language Erlang, which Ericsson used to built their complex phone switches. (By the way, C++ was also build for letting AT&T built complex phone systems).
Erlang’s father exactly looked for a way to live with bugs and so coined Erlang’s “Let it crash” philosophy.
I recommend his PhD thesis:
making reliable systems in the presence of software errors.
Here are some ideas on how to make reliable systems that function even in the presence of software errors. This thesis describes the thinking behind Erlang, Concurrency Oriented Programing, UBF and building reliable systems from communicating components.
Get it here:
http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdf
Back to the article:
For a long time, programmers have been manipulating subroutines, functions, data structures, loops, and other totally abstract constructs that neglect — no, numb — human intuition. (..)
Object-oriented programming allowed developers to create industrial software that is far more complex than what functional programming allowed.
Did she really functional programming, and not the imperative, structured programming paradigm?
Because functional programming is very well suited for complex apps, and it does that usually with 1/3rd lines of code compared to imperative style languages.
The problem with functional programming langs is, that few industrial apps have been written with them.
Erlang is one of the exceptions, it used for real world work, and thus less academic than e.g. Haskell.
Programmers are “average” folks; they have to be, since programming is a profession of millions of people, many without college degrees. Esoteric software doesn’t scale to millions, not in people, and not in lines of code.
I agree that functional programming is taught in a very mathematical (but certainly not esoteric) way, and thus had it hard so far (wait for Erlang! to get used out of academics.
But that argument is typical Sun. They already declared C++ as too hard, and promoted Java for the average programmer, so I personally see Java as a dumbed down C++ and am probably more right than anti-Java here.
Then object-oriented programming took off. Developers could, for the first time, create programming constructs that resembled elements of the real world.
But on the other hand that view is not perfectly covering all aspects of the world.
The reality, take the bank account object, is a bit more complex as it is distributed and concurrent, e.g. the ATM machine asking some bank database.
And I feel that OOP and Java suck here.
At Erlang’s heart is the process (on a local or remote node), and that is better model for above situations.
Modeling processes with Java threads? Hah!
Processes are extremely common in the real world and in programming. Elaborate mechanisms have been devised over the years to handle transactions, workflow, orchestration, threads, protocols, and other inherently “procedural” concepts. Those mechanisms breed complexity as they try to compensate for the inherent time-invariant deficiency in OO programming. Instead, the problem should be addressed at the root by allowing process-specific constructs, such as “before/after,” “cause/effect,” and, perhaps, “system state” to be a core part of the language.
Like I said. She should take a cup of Erlang, or at least PEARL (not Perl).
An enormous mess of XML documents that are now being created by enterprises at an alarming rate will be haunting our industry for decades.
That part I agree on as well.
So let me summarize the interview.
Muchos of cheap Java advocacy and down play of functional programming as esoteric, on the bad side.
The insight about OOPs deficiency to deal with processes (and distribution!) and the damnation of excessive
XML abuse on the good side.
Man, I wonder if she really doesn’t know that some of the ideas are addressed in a current crop of concurrent/distributed functional languages in the domain of computer science and telecoms industry or even real time systems in the engineering domain.
Regards,
Marc
sorry guys.. just venting here..
Software is truly amazing media, unlike anything else found in nature or created by humankind.
HELLO?!?! Gold medal Nerd Olympics? is it even possible that she’d be more narrow-minded than that?
there are o so many other things in nature that are far more amazing than software, don’t you think? people helping starving children in 3rd world countries.. people saving the rainforest.. heck.. even her brain — an obvious example of ‘nature’ — is a more amazing system than software..ppff..
[quote]HELLO?!?! Gold medal Nerd Olympics? is it even possible that she’d be more narrow-minded than that?[/quote]
Funny stuff. I feel kind of prejudice for laughing though. It goes beyond Nerd Olympics really. I see more and more statements like that from the computer culture, and I wonder when a new religion is going to emerge (If it already hasn’t). G0D bl33s us all.
there are o so many other things in nature that are far more amazing than software, don’t you think?
She said sofware is amazing media and software is unlikeanything else find in nature or created by humans.
Saying something is of itself amazing and unlike something else does not mean it is better, more amazing, superior or any other comparative.
It is therefore not fair to throw “narrow minded” labels at others simply because your parser is broken.
It is therefore not fair to throw “narrow minded” labels at others simply because your parser is broken.
“Parser”? Okay..
I’ll agree that’s she’s not “narrow-minded” like “simple” said..It’s just comedy, that’s all. A lot of hackers are appearing very Drew “So Magical” Barrymore-ish lately.
Well, I noticed she couldn’t help but take a stab at Microsoft, but I guess thats pretty much endemic to Sun culture….
…and about 90% of the non-Sun culture.
J
Sorry, but the vast majority of the people in the world aren’t slashdweebs who make it a personal crusade to write M$ suxor on every blog they can possibly find. It’s just software. Get over it.
The process of software will be more forgiving, when our hardware is more forgiving.
actually..my point was not about narrow-minded. that was only my reaction for a particular opinion she made. and of course, as a whole, she’s not a narrow-minded person otherwise she wouldn’t be in a position like she found herself in right now. i mean, all her accomplishments in her life.. that’s far from narrow-minded right? my point was.. nature itself offers many amazing things we can look at and learn from, and maybe even in the future we can learn more from nature to create truly ‘amazing’ software. i think software (or better, programmers/architects) needs more learning, especially from nature. that all said, i do myself find software is indeed an amazing media.
o and please.. don’t fight fire with fire, ‘kay? “Parser?”
Apart using better “models” a good idea to reduce bugs is to reduce lines of codes.
I agree perfectly with her on abuse of xml soap uddi.
Why on earth to send we have to replace makefiles with xml (ant) rpc with xml (soap). etc.
Tell me a REAL advantage.
There are no advantages. Infact you you try to build an enterprise java bean the first thing you learn is to avoid using xml and to use xdoclets. This is a proof that xml is not needed because YOU CAN DO THE SAME THING FASTER WITH XDOCLETS (so with less lines of codes and more automation that is why computers are invented).
So: use less xml and more functional languages 😉
Sorry, but the vast majority of the people in the world aren’t slashdweebs who make it a personal crusade to write M$ suxor on every blog they can possibly find.
Of course… but an overwhelming majority of the population (esp. the IT sector) — even those who “love” Microsoft — often take the opportunity to “stab” Microsoft.
I understand that when a Sun engineer does it, it is eeeee-vile. But I’m just trying to keep it real — most people crack on Microsoft, mostly because they’ve been incredibly frustrated by their products at least once in their lifetime.
John
Fair enough. You gave a reasoned response.