The Economist Tackles Complexity in IT
yfnET writes "In recent weeks, The Economist has run a number of articles addressing the ever-increasing complexity of software systems. The magazine, with typical Economist wisdom, casts an eye towards past human endeavors for lessons on how today's IT industry can succeed in dealing with complexity. As part of last month's extensive survey of information technology (see Related Items sidebar), the magazine offers insight on the limits of real-world metaphors, the perils of managing a rat's nest of obsolescent systems, and the need for 'disappearing' technology. And hitting newsstands just today is an overview of development models for increasingly large and unwieldy software projects. Among other things, this article compares the open source model to Microsoft's efforts using a quasi-open license. It also describes the 'agile' programming movement and its potential to keep even the most gigantic of projects under control."
Aren't these the same people who tried to tell us that "comparative advantage" meant we should give up our manufacturing and all get degrees in high tech? Why should we believe ANYTHING they have to say after they've lied to us for so long?
Economics is a religion- and a failed mythology at that. Economists need to learn to examine and reconfigure their basic axioms before ANYBODY should ever listen to them again.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
I'd say just hire good people and keep the managers focussed on just a few projects, but this seems to be beyond the capabilities of most companies. So you end up with programmers who write Java like it was fortran and managers who juggle so many projects that they barely know your name much less what you do for the company. There doesn't seem to be a fix for this which companies will be willing to accept.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Complexity in IT isn't going to go away. In fact, I'd argue it is a necessity. There are some tasks that simply require complex systems and those complex systems require complex data and/or complex user interfaces.
"The market alone cannot provide sufficient constraints on corporation's penchant to cause harm." -- Joel Bakan
So a lot of this space was spent explaining to Joseph P. Siquespack, Esq. what a "protocol" was and the like, but there were two points in here that I'm really glad my great-grandboss might be reading:
Neither of the above are impossible goals! They can be done with a little thought and elbow grease. And the great part is, they're probably already being done! Next time you're reading over your IT department head's recommendations for a project, call them up and ask WHY. You might be amazed at how awesome the answer is, and it might even persuade you to put away the "my way or the highway" stamp.
adam b.
What we should do is to terminate all trade (including goods and services -- which includes labor) with mainland China. Ditto for India and Mexico. Until the Chinese, the Indians, and the Mexicans commit to free trade and Westernization, we do not trade with them.
Further, we deport all the H-1B workers.
When a technology is in an underdeveloped state, the use of that technology is very complex. It requires a certain level of knowlege to do anything, thus the employment of large numbers of people whose primary asset is the knowlege of technology X. As these are the gatekeepers of the technology, the interface is designed with their needs and knowlege in mind. As the technology develops, the interface to that technology simplifies. The gatekeepers obsolesce, even though the technology has grown more complex. Certainly, very talented individuals are at work behind the scences developing and maintaining the technology- but they are behind the scenes. You don't need to deal with them to use the technology.
I don't think the intent is to blame complexity on nerds, but to point out that most new technology is designed for consumption by nerds. The nerds are still gatekeepers, and access to technology in nerd-mediated. Today we see a huge demand for the "common nerd" in a very public role: maintaining IT systems. In the future, the gatekeepers will, like in technologies before, obsolesce. The "ubernerds" of the future will still be at work, but far from the public that uses their services.
Main problems in IT in the US:
1. Companies have gotten to big
2. Companies try to centralize everything, instead of delegating duties to competent people (this practice also encourages hiring incompetent people). Competent IT workers are also very unhappy when they hands are tied by bureaucratic BS
3. relating to (2), companies don't give raises or benefits anymore, which causes competent / motivated workers to hop jobs to get increases in pay
4. People doing all the "centralizing" are ignorant of standards
-
Interface specifications dominate If it doesn't work the way the spec says it does, fix the box, not the spec. If A won't talk to B, run the tests to check compliance with the spec. If you can't tell who's at fault, the spec is broken.
This is why you can swap a Pratt and Whitney engine for a Rolls Royce engine.
-
The buyer, not the vendor, decides what is a "defect". One of the fundamental problems in IT is that vendors have sole discretion to decide what is a defect and what isn't. That doesn't fly in aerospace.
-
Fix blame. In aerospace, people get blamed for screwing up. You do not want your name or the name of your company to appear in an NTSB crash report. If you screw up big time, it will.
Mistakes in aerospace are publicized. There's an NTSB database of 140,000 crashes. If it was a hardware failure, the vendor is named.
-
Warranties have real meaning Airplanes come with good warranties, and so do all the parts that go into them. Commercial software doesn't.
This runs engineering costs way up, and the life cycles are longer, but in IT, most of the commercial products are sold in large numbers, so you get to spread that engineering cost over a large number of items.It's time for computing to grow up and accept this kind of discipline. The automotive industry had to accept it in the 1960s, and cars got much better within a decade.
The feeling of religious awe when looking at something with the beauty and complexity of DNA is the same regadless of your belief in God or lack thereof. Assigning "miricale status" to DNA gets logically messy since if DNA is so "special" that God must have developed it, then who developed the "special" God. The usual answer is that God's simply states "I am", but if God "just is" then why can't the Universe "just be"? Scientific dogma says nothing about the existence of God. It's just that as far as explaining how the Universe works, God is considered irrelevant.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
I have worked in a Telco on a large job dispatch system and what the parent says is spot on. I found that the middleware was indespensible since various changes would impact the transaction formats. The middleware was used to translate transactions into various versions so that upgrading the whole system could be managed one app/sub-system at a time. I don't know of any simpler way that gives you the flexiblity to "evolve" a system regardless of project deadlines being met or not. However the "evolution" by default gets more complex since you can easily add a field to the end of a transaction but it is difficult to remove them. Instead people tend to recycle old fields, ignore them or do something "clever" like variable length field with sub fields, all sorts of arcane rules and band-aids some going back 20 years! A Telco system keeps it's history in its transaction formats (kinda like DNA). Even though the original app may have died 3 generations ago the ability to "talk" to the system is dependent on the original transaction formats. This is because replacement systems are required to "fit in" with the existing formats either directly or by using middleware. In effect a new app (or the middleware) inherits the DNA from the app's it replaces or talks to. It then starts adding some of it's own mutations.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
I didn't have time to read the whole Pike manual, but from what I can tell, it's C++'s run-time type system implemented in a scripting language setting. But the thing I notice was that you can (and usually do) declare types, even if it's just the most general type that is accepted.
I remember in Comparative Programming Languages playing with an ML variant called Miranda. All the joys of LISP's data structure manipulation but the power of types. In fact, I remember Miranda could do some seriously cool stuff with the type signatures for functions to implement polymorphism more akin to Prolog than a functional language.
Declaring types is good. Making promises between modules and objects is good. LISP and SmallTalk don't believe in this. They say "the programmer can do all that discipline themselves". Yeah, and they can also do their own memory management too.
I sometimes think the advancement of the LISP concepts has been held back by the zealot LISP purists. "You must use brackets, Infidel!! ALALALALALALALA!!!"
The bitter lessons of a veteran coder: http://bitterprogrammer.blogspot.com
You wish I was a troll. I was some one who spent 2 years learning Lisp, getting really good at it then discovering that I was 2x to 5x more productive in Perl & C and 20x more productive in PROLOG (which the Lisp zealots sniffed at as an "inferior" by-product of Lisp).
The paper you site is laughable:
To be fair, I left the last line in even though it's completely unsubstantiated. To be further fair, I cannot prove or disprove it. But let's continue with the meat of it: compilation time. Before posting my comments, I looked for a productivity report and all I could find were anecdotes and self-serving quotes on Lisp pages. The productivity is due to interactive debugging & compilation time!?!? I saw no mention of meta-programming as a productivity boost (a Faustian bargain one at that), and just a lot of crap about how Lisp is the only language that can do incremental compilation. Oh geez, give me a fucking break!
The reason I am so anti-Lisp is because I was a Lisp zealot until I took comparitive programming languages. I am probably one of the few Lisp detractors who have written Lisp programs that can verify the correctness of Lisp programs! I have written "self-modifying" Lisp code. Dude, I know Lisp better than some of its adherents. I've written my own Lisp interpreter from scratch using K&R C.
I have never found Lisp to be that productive. It forces me to think in unnatural ways to express my solutions. To be productive, I usually end up doing ugly things like writing procedural code. For power, I prefer PROLOG. For raw speed, I prefer C. For OO, well, I'm still looking. But the point here is what does Lisp offer anymore? List handling and garbage collection is now a standard part of all modern languages. Meta languages is a Faustian bargain where if everyone is on the same page, great, but if someone has to pick it up from scratch, one had to depend on the previous programmer organizing their code in an easily comprehensible manner (which they usually don't). Switching projects becomes a headache because now you have to learn that local dialect. In short, you got a Tower of Babel of language extensions.
I feel like Diogeneyse looking for a wise man in the city of Lisp zealots.
The bitter lessons of a veteran coder: http://bitterprogrammer.blogspot.com