Slashdot Mirror


Software Tools of the Future

An anonymous reader writes "What are the sofware tools of the future going to be? It's an interesting question, with many facets. Here are some important trends in design and construction tool strategy, which will effect the kinds of software tools that will be delivered in the future. It looks at how to improve software development efficiency through visual modeling, generating code from abstract models, and systematic reuse."

56 of 337 comments (clear)

  1. Trend vs Financial Backing by fembots · · Score: 5, Insightful

    To affectively effect the future of software tools, the obvious support must come from the developers, but the obvious support for developers are their sponsors.

    At least three of the five points are almost directly targeting at the sponsors, i.e. PHB and friends.

    They don't see(care) if a particular system/software/whatever is most powerful, flexible or easy to use, they're looking at things from the business point of view, e.g. which one brings more profit in the next xx years, and which tool they can easily pretend to understand.

    So a tool that's business-"sense"-driven, transparent and offers lower TCO is likely to be more favorable.

    1. Re:Trend vs Financial Backing by Anonymous Coward · · Score: 2, Funny

      "To effectively affect".

  2. It's already here... by dberton · · Score: 5, Funny

    emacs

  3. Resumes... by EnronHaliburton2004 · · Score: 5, Funny

    Gosh, these are tools of the future but I have already found several job openings asking for 5 years experience in each tool...

  4. Heh by Neil+Blender · · Score: 5, Funny

    Good code generators. Yeah, and AI that works too. And flying cars. Utopia is always around the corner. Oh, wait. We have code generators - in India.

    1. Re:Heh by ScrewMaster · · Score: 2, Insightful

      When I was younger, my brother and I we're responsible for shoveling show out of the driveway. We lived near Chicago at the time, and survived a couple of blizzards and other examples of Midwestern winters through the sixties and seventies. One year (1977, I think), after removing a four or five foot thick layer of drifted snow from the driveway and front walk, we asked our father if he would consider buying a snowblower. His response was, "Why? I already have two."

      We never did get that snowblower.

      --
      The higher the technology, the sharper that two-edged sword.
  5. Usability in Non-MS Environments by The+Raven · · Score: 5, Interesting

    I'm less interested in the new directions dev tools can take, and more interested in getting the good parts of existing tools more ubiquitous. MS tools (like the .NET Dev Studio) are very nicely created, with flexibility and convenience. I would like to see tools with the same capability for C on Linux.

    A lot of developers poo-poo .NET programming like they poo-pood VB programming... but part of the reason for their popularity is the quality of their development tools. Bring some of those enhancements over to C on an alternate platform, and I think the results would be quite interesting.

    Raven

    --
    "I will trust Google to 'do no evil' until the founders no longer run it." Hello Alphabet.
    1. Re:Usability in Non-MS Environments by Guillermito · · Score: 4, Informative

      Eclipse is not just for Java. You can use it for C and C++, python, COBOL, among others.

    2. Re:Usability in Non-MS Environments by Taladar · · Score: 2, Funny

      Well, lets just say Cobol isn't exactly the language of tomorrow ;)

    3. Re:Usability in Non-MS Environments by omicronish · · Score: 2, Interesting

      The pointers showing instead of values in the variable watcher is a good example of what .Net offers that is useless.

      If you can, try to get a hold of the VS.NET 2005 beta. I personally think 2003 is good, but I was completely blown away by what 2005 has to offer. Yes, other IDEs may have had it earlier (refactoring in Eclipse, for instance), but I happen to code in C# and do a lot of .NET stuff, so it does not matter that such features have existed elsewhere. The problem you mentioned is one of the things that are fixed; 2005 will also include things such as refactoring, revisions of the .NET languages, and absolutely insane IntelliSense.

      To make this thread more productive, what exactly about VS.NET is it that you do not like? I haven't used Eclipse lately, though from what I remember it was great for Java development. What does Eclipse offer now that VS.NET doesn't?

    4. Re:Usability in Non-MS Environments by roman_mir · · Score: 2, Interesting

      Ok, here are a few: the thing crashed on me more times than I have seen windows itself crash. The method search dropdown almost never worked. The refactoring isn't there, factoring out methods (Alt+Shift+M in Eclipse in default for example), vars, constants is not there. Searching for all callers of a method (function) where is that? Navigation within the IDE itself - going back to the previous stop, going next, going to the first problem, next problem, previous problem etc.

      The entire interface looks like a normal MS interface, cluttered with crud, useless at any given moment, unnecessary icons, missing UI metaphors. It's horrendous and I don't think it will be fixed. It has to be redesigned.

    5. Re:Usability in Non-MS Environments by roman_mir · · Score: 2, Interesting

      So, I've done plenty C, C++ work, still doing it. Have you ever worked with the Borland C++ IDE from the mid-nineties? Even that DOS based primitive UI was better than what .NET is today. Not feature by feature of-course but from point of view of what makes sense, what you should be able to access at any time, what should be on the screen. Yeah, pointers, register, stack all that is useful, but during debugging it is indispensible to be able to view the actual values on the fly.

      Just try debugging Xerces DOM tree preprocessed by Altova in an app. All you can see that the .NET studio shows is useless.

    6. Re:Usability in Non-MS Environments by omicronish · · Score: 2, Informative

      Good list. Refactoring and method references are in VS.NET 2005, so your complaint is valid there. However, I rarely experience crashes (maybe once every few months), including at home, school, at my internship, and even with the beta.

      Regarding method search dropdown (which I'm interpreting as IntelliSense in VS.NET), are you trying to use it with C++? It's always been crappy with Visual C++, so Eclipse might be better in that regard, but it works wonderfully with C#, and comes up in even more situations with 2005.

      As for navigation and the UI, you can customize menus, toolbars, and keyboard shortcuts. I customize the toolbars but the rest of the UI is fine with me, so it's likely a subjective thing.

  6. Completely lacking vision by beelsebob · · Score: 5, Insightful

    This article, is simply looking at the obvious research efforts on currently used techniques... It has no vision about what might be done entirely differently. It doesn't even consider the potential of things like using different programming paradigms like functional programming or graph programming.

    Bob

    1. Re:Completely lacking vision by beelsebob · · Score: 2, Informative

      You specify a set of rules that pattern match sub-graphs of the current state graph, and transform that sub-graph into a new one. You then specify a program as a series of these transformation rules, any valid program can be applied either once or until it can be applied no more. Give it an input graph and you get a new graph as output.

      If you want more information go ask Detlef Plump at the University of York - it's his research that I'm getting this from.

      Bob

  7. autotools by sik0fewl · · Score: 2, Funny

    As long as automake and autoconf aren't software tools of the future, I'll be happy.

    I'd like to see more projects moving towards SCons or jam.

    --
    I remember when legal used to mean lawful, now it means some kind of loophole. - Leo Kessler
  8. Eclipse! by JKR · · Score: 2, Informative
    I believe Eclipse will become a major part of software tools of the future, simply because the Rich Client Platform initiative brought in for Eclipse 3.0. This makes it easier to create custom Eclipse API applications, compared to version 2 which was a much less modular design.

    My employer is working on an Eclipse-based development environment for their Cascade product, instead of developing yet another custom environment from scratch with all the incompatibility and test overhead that that entails.

    Jon.

    1. Re:Eclipse! by eenglish_ca · · Score: 3, Informative
      Eclipse has a great design no doubt. Automatic code generation through the use of omondo was very helpful in the work I have done with it. However, being a program written in Java it suffers from serious lag even with Java 1.5. It just cannot keep up with Anjuta or KDevelop in terms of raw speed. This may not seem like a serious impedement but it can make working with it quite irritating. Given that using java does give it platform independence, there are solutions like gtk for windows and mac or wx windows in terms of the gui.

      Additionally, I have found it quite buggy when running it on Solaris and Redhat based systems at school where i've primarily used it. I shouldn't have to delete my workspace directory just to get it to run as I have needed to.

      These issues need to be resolved before it can be considered seriously.

      --
      Checking out my form of escapism.
  9. Make it simple by jackb_guppy · · Score: 4, Insightful

    0. Alan is a Distinguished Engineer at IBM Rational

    translates to: Buy Rational Rose - scaratch that see 5... Rent Rational Rose

    1. Connecting business with IT: Business-driven development

    translates to: What do you mean that it will take 8 weeks to rewrite? We are already selling the service, you must change it tonight or be fired.

    2. Greater transparency in the software development process: Auditing, traceability, and accountability

    translates to: We must find some one else to blame, because we don't need to test the part, the system drew it that way.

    3. RAD using new programming models

    translate to: do not design first. build it first , then find out if it mets the need. Wait that is why the want to find someone else to blame it on.

    4. Collaboration among individuals and teams

    translates to: Talk to each other. Stop work in the castles with moats that where built between managers!

    5. "Pay-per-use" software tools: New licensing and subscription offerings

    translate to: We need more money, so we are following M$ model, charge for everything at least twice. Remember: give away the razor, sell the razor blades. Wait that is what Lexmark is doing now.

    1. Re:Make it simple by Tablizer · · Score: 3, Insightful

      Your viewpoint sounds like Extreme Programming (XP) philosophy. I generally disagree with it. One can design pretty close to needs if given enough time to study the problem.

      Good designers can pull it off. The problem is that fad-chasing buzzword-oriented Bozo's usually create giant messes because they are using dogma instead of brains to build software. Perhaps XP is for bad designers, but not every designer is bad.

      And, XP is expensive because it reinvents a lot of small wheels along the way that a good analyst can usually filter out up front. Experience can be used to avoid organicly found dead-ends. Creationsim is faster than evolution.

      XP also requires the customer to be on-site most of the time, which is probably impossible and unnecessary. If they have enough time to hang out with developers all day, then their tasks probably don't really need automating to begin with.

  10. Re:dubious by Dolphinzilla · · Score: 4, Interesting

    thats a fact, Rational tools in my experience are way over-repesented - One group at work proudly used the Rational tools to generate some code - it was the most obscure code I had ever seen - it was not even clear what half the modules did or were suppose to do. They gave me an executable to take to a subcontractor and try out - the subcontractor laughed at it (and so did I...) There is no escaping these tools, we just need to minimize the wasted time they cause... IMHO

  11. O'Caml....the future today by Tyler+Eaves · · Score: 2, Interesting
    Objective CAML is the language you really should be using.

    Features include:

    FAST

    It can be compiled to native code that is just as fast as C.

    Type inference

    In the function
    let hello foo = "Hello, " ^ foo
    , it knotws that the paramter foo is a string, and it won't even compile code that tries to pass something besides a string, ever. However, it also supports polymorphic functions. For instance,
    let gimme_a_one x = 1;;
    can take anything what so ever as x, since it isn't used in a way that requires a specific type

    Garbage collected

    No malloc() or free(). Ever. Oh, and it's efficient, and can handle things like circular references just fine.

    Technique agnostic

    While fundamentally a functional language like lisp or haskell, it has superb support for imperitive and object-oriented programming, including multiple inheritence and all the usual goodies.

    Good standard library
    Things like printf, regexs, hash tables, etc, are already implemented, and always available.

    It really is a great language, and you should investigate it.

    A few helpful links

    Offical Site

    Free online book, best place to learn the language
    --
    TODO: Something witty here...
    1. Re:O'Caml....the future today by The+boojum · · Score: 2, Insightful

      I played with OCaml for a good length of time, considering whether to make it my next language for everyday use. I should also preface things by mentioning that I'm into graphics and rendering; I need fairly heavy duty numeric performance. I've also been thinking a lot about what would be my perfect language, so this has been on my mind of late - I've been reading up on Programming Language Theory papers and texts and contemplating drafting my own language spec and trying to bootstrap a compiler.

      OCaml annoys me slightly because it seems so tantalizingly close to what I'm looking for but falls just short. For one, I wish it had better support for generative programing. Sure, for template like stuff you can immitate that to some extent through the polymorphism, but because it has to be generic, it still doesn't work out performance-wise. Look at the kind of stuff they can do with Blitz++. And I know there's Camlp4 and MetaOCaml, but they're really too kludgy for my taste, though still better than the insanity that is C++ template metaprogramming. (Ick!) The model that I really like is the macro systems in Lisp or Scheme. That would require a Lisp-like syntax to work, but I'm cool with that.

      The other thing that bugs me a bit is that the compiler seems fairly simple in regards to optimization passes. When I've looked at assembly output from it, even with all optimizations turned on, I was surprised to see that it doesn't seem to do common subexpression elimination or strength reduction, like a common C compiler could do for you. I realize that OCaml is more functional, which constrains the compiler a bit, but there are compilers for other functional languages that manage to do flow graph analysis and optimization. (e.g. Stalin for Scheme) This lack is dissapointing in a higher level, more declarative style language like OCaml.

      Finally, one other thing is that while the foreign-function interface to C is better than many other functional languages, I wish it were still better. With OCaml, it seems like you'd still need a small library in C as a shim to interface between the two languages. It would be nice if you could simply declare a function's signature, mark it as an external C function and link the library in. To deal with garbage collection, I'd borrow something like the "pin" construction from C#. I think C# and the .Net framework have a really nice model for FFI.

      Of course, if you don't need such heavy duty performance, OCaml's still a great system and a fair sight better than many other functional language systems. But it's not a panacea for everything.

      One more thing: if you use (X)Emacs, be sure to have a look at Tuareg Mode.

    2. Re:O'Caml....the future today by pkhuong · · Score: 2, Informative

      (here, Lisp = Common Lisp)

      Depending on the implementation, you can get some type checking (CMUCL and SBCL do type inference a lot, iirc).

      While ML has type checking, it also needs a different operator for each type of argument. It probably affects refactoring a little and is sort of annoying, but nothing serious.

      Just consider the Lisp "system" as a library. Depending on the smartness of the compiler, it can be shaken down to a smaller size.

      FFI isn't exactly hard to do. From UFFI's (LGPL) manual:
      def-function name args &key module returning

      (def-function "gethostname"
      ((name (* :unsigned-char))
      (len :int)) :returning :int)

      Bah syntax. Both our opinions are probably extremely well anchored :)

      How's Lisp harder to use imperatively? Just about every control operator has an implicit progn.

      Faster. Often true, but how much so? Lisp, with annotations and compiled for speed instead of safety, is pretty to close to C. (Here's the last troll-induced response I can remember: http://home.comcast.net/~bc19191/blog/040308.html) . However, how much and how often does it matter?

      Better metaprogramming support.

      --
      Try Corewar @ www.koth.org - rec.games.corewar
  12. Are tools a crutch? by K.B.Zod · · Score: 5, Insightful
    I worry about the increasing power and complexity of IDEs in particular. While they do so much more for developers and have all sorts of whiz-bang features, I bet much of the time the developers themselves don't understand what is going on. They become tied to the IDE, and need it to do all these things because they don't know how to do it "themselves", i.e., without hand-holding.

    I develop in Java, and my environment consists of Emacs and Ant, mostly (hardcore, right?). I work with people who use NetBeans and Eclipse, and they keep running into weird problems interfacing them with CVS, or with mysterious classloading "features" that they have, or other obscure problems. Invariably, they don't know how to fix the problems, and I can't help because I never run into them.

    I would like tools of the future to be as transparent as possible, to prevent this sort of situation. If tools are so magical that their users don't know the real theory and practice behind them, they end up relying on them to do any work. Their flexibility is very limited, and the tools end up compounding or obfuscating the "real" issues facing them.

    1. Re:Are tools a crutch? by m50d · · Score: 5, Insightful
      Increasing abstraction is necessarily the way of things. When assembly language was invented, some said it was a crutch for people who couldn't write machine code properly. Ditto for fortran and assembly, ditto for garbage collection, ditto for any feature that makes coding easier.

      The next wave is the ides that make the repetitive coding unnecessary. Sure, it makes things slower, but it makes *developing* them faster, and machines are getting faster but developers aren't. I don't think there's anything to be afraid of.

      --
      I am trolling
    2. Re:Are tools a crutch? by Darth_Burrito · · Score: 2, Interesting

      Don't think of them as crutches, think of them as enablers. If the environment is well designed, the benefits of a technology that enables more people to do a particular task will almost always outweigh the costs.

      For example, if the environment is generating weird problems when interfacing with cvs and it's hard to figure out what's wrong, then there are two problems. First, the environment is apparently difficult to integrate with cvs (this was my experience with eclipse). Second, when a problem occurs, the environment is not giving the user the requisite information to solve the problem.

      Shrug, even with these kinds of design problems, the benefits will still outweigh the costs for many people... and the technology will only get better.

    3. Re:Are tools a crutch? by K.B.Zod · · Score: 2, Insightful
      Your analogy to the jump from machine code to assembly, and from assembly to higher-level languages, is spot on. As I was finishing my original post I thought of that, but kept going anyway. :)

      And so I guess the real question is what makes those tools really great? I know I couldn't do without compilers, nor could most others, and develop anything as good as I can with them. Chris Sawyer is one exception ... I think he did Roller Coaster Tycoon in straight-up assembly.

      Perhaps it is because they completely handle the complexity they are designed to ... they are "perfect" that way, where they need no transparency, or those cases where they fail to work are so rare that the cost of dealing with that is far outweighed by the efficiencies gained in using the tools in the first place. Perhaps the great tools are either completely transparent, or completely opaque, and things in the middle lead to the situations I worry about.

    4. Re:Are tools a crutch? by lostguy · · Score: 3, Insightful
      I develop in Java, and my environment consists of Emacs and Ant, mostly (hardcore, right?).

      Not to be snotty (oh, come on, this is /., so I'll have to snot this up a bit.) but you're probably using a tiny subset of the language if you're relying on your understanding of the SDK. You're probably wasting a lot of time trying to remember if it's put() or add() or addElement(), all things your IDE should tell you, and you shouldn't need to store in your brain.

      The people I've worked with who insist on using vi or emacs for Java dev work are usually working about 50% or less the speed of people using a quality IDE such as IDEA or VisualAge/Java. Class and method completion alone speed up programming and also expose you to a lot more of the API than you can reasonably expect to hold in your head, especially with the speed at which the SDK has been increasing lately.

      Without IDEs, people usually know two data structures, Vector and Hashtable, and the myriad classes in the Collections API are more of a novelty than anything else. If they know more than two collections, they know the non-reentrant versions of each of the above two classes.

      I've also watched some of those holdouts switch from emacs to IDEA, and it's truly a "holy shit" moment. You're doing yourself a professional disservice not to be using them.
      If tools are so magical that their users don't know the real theory and practice behind them, they end up relying on them to do any work.

      At some point, you need to give up and assume that an abstraction is opaque. Otherwise, you'll be stuck at a relatively low level in terms of what you'll be able to do in life.

      Our entire society has advanced at the same rate with which we have lost touch with the more concrete necessities of survival. The people of ten thousand or so years ago were not appreciably "dumber" than we are. What they did lack was a lot of knowledge, especially of the abstract. They knew, however, which berries were edible and which weren't, how to avoid getting eaten by bears or rabid chipmunks, how to avoid freezing without the use of an electric heater, etc.

      These are all things we've had to give up over the millennia on our way to an advanced civilisation. In the future, we will have to give up more.

      Almost all people writing object oriented software don't really need to know about electron tunnelling and capacitance. They may need to know about garbage collection, but usually only when something goes wrong in their application. That usually happens once or twice a year, but not on a daily basis, and not for much longer. The entire purpose of the virtual machine is abstracting away a lot of the lower level details -- and this is a good thing!

      I think it's useful to be able to write trivial programs in a primitive tool such as emacs/JDEE. However, I can all but guarantee that you can do it faster and with a much higher quality with a real IDE.
  13. I've already seen one post dissing code generators by Jack+William+Bell · · Score: 3, Interesting

    I've already seen one post dissing code generators, but I expect to see that general class of software development tool to greatly increase in popularity over the next couple of years...

    Why? Well mostly because they are getting better. Many of the newer code generation tools are very flexible and have some ability to preserve changes to the code; making them easier to fit into real development cycles. Also we are already seeing 'just in time' code generation as an optimization tool; that functionality, when combined with runtime environments like the Java Runtime or the CLR, is going to get easier and more powerful.

    So, in the end, we may see developers tweaking code generation templates and filling in design forms/creating design diagrams in order to create some classes of software -- business software and game levels would probably benefit greatly from this scenario.

    Obviously there are other classes of software development which would see much less benefit...

    --
    - -
    Are you an SF Fan? Are you a Tru-Fan?
  14. Exactly, tools are a crutch... by Anonymous Coward · · Score: 5, Insightful

    ...and being a developer is a (mentally) tricky job, and all the crutches you can lay your hands on are useful to have if they improve your quality and/or productivity.

    However you have to be a master of the tool, rather than its slave unsure of how it does its magical stuff.

    I've never really got why the die-hards hate any sort of automation in their environments. Why? I understand you want the direct grip on the code... which is exactly what you get in something like Eclipse (well, you have to tell it your source dirs and your classpath, otherwise you can use it as just a text editor with syntax colouring, if that's what you really want).

    There are days as a Java dev when a good tool is absolutely worth its weight in gold. For instance, if you're in maintenace mode on a large codebase which you know nothing about, and you change a method's behaviour, what upstream code will that affect? Ctrl+Alt+H in Eclipse will tell you. A text editor which doesn't actually understand the structure of your code would require you to do a lot of fumbling around and regexp searching and cross fingers you're not missing anything.

    1. Re:Exactly, tools are a crutch... by Beek · · Score: 5, Interesting

      >However you have to be a master of the tool, rather than its slave unsure of how it does its magical stuff.

      This is the key... The problem is that those who depend on IDEs can't function without them. You aren't a master if you can't do the task without the IDE. And if you can do it without the IDE, then it isn't really a crutch anymore, right?

      >I've never really got why the die-hards hate any sort of automation in their environments.

      They LOVE automation... They just want complete control. IDEs almost never give you that. make (or ant or whatever) is the ultimate automation environment, and it gives you that control. Sometimes you have to write code to do your task for you, and the problem with IDEs is that they rarely let you plug that functionality in easily.

      >For instance, if you're in maintenace mode on a large codebase which you know nothing about, and you change a method's behaviour, what upstream code will that affect?

      Unit testing ;-) But the Eclipse feature you mentioned is still extremely useful, and I don't think any dev be opposed to that, because it doesn't modify your code unexpectedly. It's when your IDE changes code silently when this becomes a problem. I've had Netbeans mutilate my tag libraries before. Stupid Netbeans (although version 4 is very promising).

  15. Pay-per-use - Bah! by crimethinker · · Score: 5, Insightful
    I can't quite understand why all the salesweasels think we'll jump at pay-per-use licensing. Here's a thought: I'd like to BUY my tools and OWN them, not be treated like a criminal by a vendor.

    Pay-per-use implies a secure authentication mechanism, which then opens the door for abuse of one sort or another. If you are developing a product which will compete against something Microsoft already does (or plans to do), and MS gets wind of it, will there be "technical problems" in contacting the authorization server the next time you start up VC++? What about the SCO v. IBM debacle? SCO claimed they could terminate IBM's license for AIX, and if pay-per-use had been in place, SCO could have flipped a switch on all IBM's customers. Do you think that would have affected IBM's willingness to settle? Yes, they could have got a court order to turn it back on, but how many customers would have been down for a day or two, and said, "Screw this, I'm buying my unix from the people who OWN it!"

    Pay-per-use is NOT the wave of the future so long as I have any say in it. When my boss asks me for tool evaluations, I'll always favour the least-encumbered tool. And yes, that means even if it's sub-optimal. We can always make changes to F/OSS stuff to meet our needs, and the freedom to do so, IMHO, more than makes up for the extra work involved.

    -paul

    --
    Pistol caliber is like religion: everyone has their favourite, and theirs is the only right choice.
    1. Re:Pay-per-use - Bah! by BobKagy · · Score: 2, Insightful

      I think it depends on the tool.

      I'd hate to think my text editor was pay per use.

      I'd rather my compiler wasn't pay per use, especially if I needed to compile to debug.

      But I saw one tool where they wanted $150,000 per development seat. It was a tool I could see myself using 3-4 times / year. Each time it would save me hundreds of hours of development, but I couldn't justify buying it, nor the $40,000 in annual maintenance.

      Now that's something I could see paying per use.

  16. Better Languages by RAMMS+EIN · · Score: 2, Interesting

    I think that we will see a movement to better languages than the currently ubiquitous C-like and Java-like ones (heck, even VB.NET is Java-like these days). These languages lack flexibility and get in the way of rapid application development and adapting to changing requirements. I think the world will move to more dynamic languages.

    Also, with multiprocessor systems, clusters, and other forms of parallel systems becoming more and more common, I think we will see an increased usage of languages and paradigms better suited to that than the current imperative ones.

    The tools of the future, then, will obviously be the tools that we write to support these new languages and paradigms. Dynamic languages can be optimized by figuring out which parts are static and leaving out the dynamic checks for those. Or programs can be optimized at runtime, by seeing which execution paths are most frequently taken and speeding up those.

    --
    Please correct me if I got my facts wrong.
  17. Fundamental problems in the items by Todd+Knarr · · Score: 4, Insightful

    Hist first item shows a fundamental problem right off. I've dealt with projects that were driven directly off the business requirements. The problem is that they were driven directly off the business requirements. The next project was for a slightly different set of business requirements, and because they were slightly different none of the work on the first project could readily be transferred over. By contrast in other projects I managed to divorce the business requirements from the actual work, and I could step back and instead of addressing the business requirements create tools and facilities that I could then use to address the business requirements. The next project in that line, with it's slightly different requirements, required only some relatively easy extensions to the existing work and we were in business. It took a fraction of the time. Most of the problems with business-process-driven software design and development, IMHO, is that it's too focused on the end result to be good at front-loading the solving of meta-problems that can speed up later work because solving the meta-problem doesn't provide any immediate advantages for the problem immediately to hand. In mathematical terms, it looks for a local maxima at the expense of an even better global maxima that's on the other side of a minima.

    His second item about auditability also aims at the wrong point. When, for example, designing the control software for an ABS system, the goal is to have it work correctly. All else, auditability, certifications and such, are supposed to be means to insure the goal is met. That implies that you judge their usefulness not on their own but on how well they help meet that goal. He's aiming at those things as goals in themselves. ISO 9000 falls into the same trap: it concerns how well you followed a process and not how the final results turned out. This is useful if someone at the top has their eye constantly on the final result and is willing to boot the process out regardless of how thoroughly it complies with ISO 9000 if the end results aren't meeting spec, but all too often the process becomes the goal and a shield against actually being judged on the end results.

  18. Radical Innovation by LionKimbro · · Score: 5, Interesting

    Here's my set of software predictions. Some more detail to fill in for that other guy's blog entry.

    Here we go:

    • Refactoring Browsers - let you change the name of a class, method, whatever- and have perfect replacement across the project. This is important, because it means that our API's can feature consistent naming schemes, without a whole lot of upfront planning. These exist today, but not in common use.
    • Spatial Code Browsering - The ability to organize our textual code in a shared diagram, so that we can arrange it the way that we think of it. Most of our code is text, for various reasons. But we tend to think of spatial relationships between blocks of code. There's no reason why we can't lay out the files spatially, share those spatial layouts, and browse those spatial layouts.
    • Replay Debugging - You can make programs run in a virtual machine that tracks deltas over time, or keeps time slices. You can "rewind" or "fast forward" a test execution, introspecting into the state of variables at different points of time. If your debugger is smart enough, it can answer the question: "now how did THAT come to happen?" "Why did you do X? Why didn't you do Y?"
    • Publish-Subscribe - Is it just me, or is publish-subscribing becoming more important? That's because we're going to component systems.
    • Tuple Space(s). By my limited understanding, this is a model of programming where you have: A gigantic data store, and little micro-programs that pull and push data to the store. For example: Let's say you have a web-app. The web server receives a request, and pushes it into the store, in the form of a graph. So, for instance, you get the "request" node, and it links up to a node representing the time it was received, and it links up to the URL, and it links up to the response to be filled out, etc., etc.,. Then if a program knows how to fill out the response, it starts filling out the response as much as it can. For things that aren't at it's level of abstraction, it leaves for other programs. When things are fleshed out enough for those programs, they automatically jump into play, and fill out the rest. When it's all fleshed out, the web server recognizes that the "done" flag's set, takes the whole thing, ships it out, and then clears everything. What's new here is that what triggers programs/procedures is the state of the tuple store, the shared graph- programs register states that they can metabolize, and then when conditions are right, the programs are invoked. Your programs are collections of traps. Mixes declarative programming with imperative programming, in step with development of the semantic web.
    • Non-boxy interface, Deep visualization - Our GUI tools are all "boxy," and there haven't been any real UI advances since MFC, and I do blame the API. It's easy to imagine API's that allow you to specify call-outs, how icons that contain icons are specified, the ability to compose and connect icons, etc., etc.,. But we're still in the images, rectangles, buttons, and tree views days, as far as easy-to-use API's are concerned. As SVG matures, I believe that our API's will get less rectangular, and give us visual and interactive power on the cheap.
    • Social Help Documentation - I think we'll see integrated help documentation linking up with things like wiki and programmer's forums. So you'll be able to read a function's documentation, and see 17 examples of real use of the function and commentary. It won't be a seperate open-a-web-browser and search thing, it'll be easily available and connected with the deployed documentatio
  19. MDA, Code generation, and the like by SlySpy007 · · Score: 3, Informative
    As systems beome more complex and the amount of code required to do it grows, we need to actively find new strategies to help us create better software faster. Development activites also need to be tailored to suit other related activites, most notably verification and validation. MDA is a good step because it allows the developer to focus on the higher level concerns of the system, and step back from some of the code level concerns. Code generators and transformational systems are an excellent counterpart -- if you have a modeling language with a formal syntax and well-defined semantics, you can easily write very powerful transformational tools to spit out anything you like -- models in a different representation, code, test cases, graphs...the list goes on. A colleague of mine has a saying "No more software engineers"; I personally think he's on to something. We as a profession spend altogether too much time worrying about code-level concerns and the like, when to make more robust, fault-tolerant, higher-performance systems we need to spend more time focusing on higher-level system concerns.

    Some links to check out on these topics:

    Semantic Designs (makers of a very powerful, generic transformational environment) http://semdesigns.com/

    Link to Nic Rouquettes slides from a talk on MDA at the UML 2003 conference) http://ase.arc.nasa.gov/uml03/rouquette.pdf

    Link to an article from ACM Computer magazine (last january I think) about MDS, and project at JPL which aims to incorporate some of these ideas into the design of a robust, re-usable flight software platform http://www.computer.org/computer/homepage/0104/Reg an/r1059.pdf

  20. Refactoring Browsers (eg, Eclipse) by sean.geek.nz · · Score: 3, Informative

    Refactoring Browsers were a radical change 2 years ago, and improved coding immensely.

    But the claim that they "aren't commonly used" is bunk. They are in very common use today. Eclipse, IDEA, JBuilder, etc. Java IDES have made a huge leap in the last 2 years, and they rock.

    They succeeded because they weren't trying to reinvent programming. They just aim to make coding easier and better.

    Why non-Java IDEs haven't caught up, I don't know. The worst part by far of having to deal with C++ is that these days the tool support just isn't up to the standard of Eclipse or IDEA. emacs does great stuff with syntax, but it can't replace an IDE that is tracking the codes semantics and making clever use of that knowledge.

    sean

  21. Re:On the Amiga by starbird · · Score: 2, Informative

    AmigaVision it was called. It came with my A500, but without a HDD and 2 megs ram it was pretty useless.

    I saw some pretty impressive presentations done with it.

  22. Buzzwords, psychology, and viewpoint relativity by Tablizer · · Score: 3, Interesting

    There have been a lot of attemps and experiments since the early 1970's to improve the software development and management process. However, there has not been any magic bullet. Most improvements are incrimental and often disputed.

    Graphical tools have generally proven ineffective because there is no one "proper" viewpoint. All the possible viewpoints needed by different departments or situations cannot fit onto the same sheet of paper or screen without being messier than the coded counterpart.

    Another thing the article mentions is getting closer to how the user thinks about things. The problem with this is that everybody thinks differently. There is no one "right" way to think and the variations are wide. Plus, people with different ways of thinking have to use the same software or same information. Delivering different viewpoints of the same info leads to the next item:

    One area I would like to see explored more is divorcing presentation from meaning (DPFM). Rather than use linguistical syntax to store algorithms and attributes, if such information was treated more like a database, then one's view of the algorithms and information could be altered to how a given developer or user wants to see it.

    It is roughly similar in concept to Microsoft's .NET run-time engine in which different languages compile to the same thing, but perhaps use relational and more declarative techniques instead of the map-based "database" and imperative-intensive approach favored by OOP proponents and languages. OOP is generally a code-centric way of thinking and is not very condusive to DPFM in my opinion. It is a fight that has to be settled one of these days.

    Hierarchical approaches to managing such information have generally failed to scale. The real world and its change patterns are not really tree-shaped. Philosophers have known this for quite a while, and computer scientists keep rediscovering it the hard way.

    One would be querying info instead of relying on file and code browsers so much. Some things, such as math and Boolean expressions, are still best represented as code (although they don't have to be stored that way under DPFM), but the size of such units can perhaps be reduced, similar to how code is reduced to mostly individual event snippets in event-driven UI systems. But to study event snippets, you query for them if there is no UI click-and-point approach available for a given search.

    Yes, all this may take more horsepower, but better abstraction usually does take more.

    1. Re:Buzzwords, psychology, and viewpoint relativity by JKR · · Score: 4, Interesting
      One area I would like to see explored more is divorcing presentation from meaning (DPFM).

      Yes, I couldn't agree more. On a similar theme, I'd like to see source control tools which store the parse tree of the code as the canonical source, rather than the ASCII (or Unicode, in the case of Java) source code. Then the local system regenerates the source on the users machine, with the correct local coding conventions, whitespace, indenting etc. No more "braces-go-here" wars, and tools which already use the parse tree (like Eclipse) have one fewer task to do on checkout of a large project.

      Jon.

  23. Left behind by GCP · · Score: 5, Insightful

    I agree. Anyone who doesn't understand the importance of abstractions is likely to get left behind.

    There was a time when you planned to work for your company until retirement, your company had ONE computer, and you used a small set of tools plus technology-neutral algorithmic and domain knowledge to write software.

    These days the diversity of technologies that matter is mind boggling. If you don't use something at your employer this month, you'll need it at your next employer next month.

    Getting the XML right, getting the HTTP protocol right, etc., etc., involves using tools that automate a lot of things for you. (Libraries are included in what I'm calling "tools".) You just don't have the time or the mental bandwidth to use all of these things quickly and well if you insist on doing everything manually.

    IDEs that organize the protocols, handshaking, and plumbing between technologies, that fill in the blanks for you with valid information, that bring the right documentation to you at the moment you need it, that give you one-click builds and deployment, that give you debugging views in every increasing variety, etc., are only going to increase in importance.

    I'm with the grandfather poster when it comes to my desire to have tools so simple that you know what's happening when things go wrong. When I can, I use them. But, more and more, it's becoming impossible to do so.

    It's just like my father, who mourns the loss of cars with engines so simple and transparent in function that normal people could repair them. For cars, that time has past, and software is going that way, too.

    --
    "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
    1. Re:Left behind by iabervon · · Score: 2, Insightful

      The thing is that, previously, each increase in abstraction was either done by writing in a higher-level language or by using a nicer library in the same language. IDEs, on the other hand, move from writing code in any language to carrying out an IDE-specific process which generates a chunk of code which is then part of the project without anyone having written it.

      The real solution isn't IDEs. It's adding language features that let you write the code more simply without a lot of boilerplate, and APIs which are easier to use. Really, the standard compiler should deal with the plumbing and there should never be any blanks which need to be filled in with information an IDE could supply. Doing these tasks with an IDE just hurts repeatability.

      On the other hand, the rest of the things on your list are good: having a system which processes the project such that your tools are acting with a complete understanding of the code helps a whole lot.

  24. Re:CVS Integration by Darth_Burrito · · Score: 3, Interesting

    Ooh - sorry for responding to myself but I thought up another. It might be nice if there was more security/workflow in a version control system.

    One simple example of security might be something simple like - you do not have permission to edit this file. I bet this can already be accomplished with file system permissions and what have you.

    But what would be even better would be for the environment to support basic workflow style processes. For example, if Bob is the expert on the Data Access Layer, and you make some changes and check them in, Bob should receive a notification with a note from you and perhaps and automagically generated report detailing what interfaces changed. This same kind of tactic has been employed on some wiki's to reduce vandalism. It could also be implemented as an approval process.

    Moving along in that workflow direction, it also might be nice if the development environment was formally aware of the to-do list. In other words, if we bring in more version control functionality, why not add project management integration.

    You might start the day by opening a task. Then you edit several files accomplishing the task. The changes you made in the version control system become associated with the task as do a record of the files that were changed. If someone else needs to see what changes you made for a particular task or bug or project, they can drill down from the top instead of trying to figure out what you did by looking at comments in version control.

  25. I'm a developer; here's my prediction/wish list by crazyphilman · · Score: 2, Interesting

    This is a combination prediction/wish list:

    Microsoft will continue to integrate third-party tools into their Visual Studio suite, demolishing the companies that manufacture them. This will suck for third-party tool builders, but it'll be pretty cool for us developers. Here's what I see them putting in:

    * Expansion of their project templates to include a comprehensive set of patterns for just about anything you might want to do in an enterprise. Got a project coming up? Click an icon and you'll be given a complete set of skeleton code for you to modify. Useful, but dangerous: more productive developers = fewer developers.

    * expansion of modelling tools as the VB guys get more comfortable with object oriented programming. Integration of UML tools with Visual Studio.

    * Expansion of tools that allow managers to directly code business rules using prebuilt code blocks. This is going to be a big deal; everyone's already scrambling to build it.

    * Integration of unit test tools with Visual Studio as Microsoft catches on to the whole test-driven development thing. Right now, you've got to hand-build your tests. Not for long...

    In the JAVA world, I've got a wish list, but I think it's pretty realistic:

    * Sun, under pressure from Microsoft's ease of use, will create a new GUI layer that is simpler than Swing and AWT, works more quickly, and provides 90% of the functionality programmers use the most. Swing and AWT will still be available, of course, but we'll have this easier option and it'll get integrated into IDEs as a project type, making everyone's life easier.

    * Java IDEs will continue to embrace visual development, making life easier on everyone.

    * One thing I think would be nice would be for IDEs to incorporate patterns as templates that you can drop into a project. So, say, if my main GUI is MVC, I can drop an MVC template into my project, and other templates in for specific parts of the backend... Sort of a quickstart, right?

    * And, since Microsoft is going to do it, some of the Java IDEs will too: prebuilt project skeletons for common business needs, and tools to easily build business rules so Managers can handle all the client-meeting shit.

    I know, my predictions are boring as always. I'm not a revolutionary, I'm a code monkey!

    --
    Farewell! It's been a fine buncha years!
    1. Re:I'm a developer; here's my prediction/wish list by CaperNZ · · Score: 2, Interesting
      Here's what I see them putting in...:

      It turns out your 'Predictions'... are infact some of the enhancements being released in Visual Studio 2005 Team Edition.

  26. Poor tools, No credibility. Re:dubious by jageryager · · Score: 2, Informative

    I've spent the last two years in a OOD project with a team of 5 - 15 SW Engineers. I can't speak for the Rational XDE tools, or Rose RT, but Rational Rose really really sucks bad. It's the kind of tool that will make you claw your eyes out.

    Any company that can sell a tool like this and claim to be in the buisness of "improving" your software process and productivity has absolutely no credibility with me.

    Rose has Modal, non-resizable, dialog boxes that display paths. If the path doesn't fit in the box it is truncated. You can't resize the box. So.. You can't see the end of the path.. ( Error could not write to /some/really/long/pa, really helpful.)

    Rose has modal, non-resizable, scrolling boxes. With these it is at least possible to see the path if you need too. But you'll still go mad as the box is only big enough to hold about three 30 character lines. Of course I'm looking through a list of 200 files, and all the paths are 100 characters long.

    Rose has sequence diagrams that forget their sequence, and can't be rebuilt.

    Rose has a bug that makes it just go insane if a version 0 of a file gets created in UCM/Clear case. And it can't tell that it has gone insane.

    Rose can't keep track of files that have changed underneath it. It has a bad habit of hijacking files and not telling you.

    Rose has no good way to merge many parts of models.

    Rose has a bad habit of "disappearing" modeled objects during a reverse engineer step, and not telling you. If you accidently screw up a path to a file, and reverse engineer, your modeled object will disappear. And all of the other artifacts that depend on it will get corrupted. And god help you if you check everything back in that way.

    I'll take my coffee black. I'll take tcsh and vi as my integrated development environment and OOD tool over Rose any day of the week.

    Kevin

    --
    "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety"-B.Franklin
  27. Re:I've already seen one post dissing code generat by dubl-u · · Score: 2, Insightful

    Many of the newer code generation tools are very flexible and have some ability to preserve changes to the code; making them easier to fit into real development cycles.

    The way I look at it, there's only one good kind of code generator: the kind whose output I almost never look at and never, ever tweak. Compilers, for example, are a kind of code generator that I love.

    The other kind of code generator strikes me as just half implemented. Somebody has come up with some sort of interesting abstraction, but they haven't pushed it as far as a service, library, or compiler that you can use happily. These days I never use them.

    What's the difference? Maintenance cost. A code generator produces a lot of code that is, pretty much by definition uninteresting. That means that you've hidden the actual interesting code in a whole mess of boring code, which makes it really expensive to maintain. And generally the generated code is highly duplicative, meaning if you want to change certain things, you have to change them in a lot of places.

    To me, it seems like code generators dramatically worsen the cost-of-change curve. For any project where you aren't already planning to throw out the code, this strikes me as a mistake.

  28. Re:dubious by Tablizer · · Score: 2, Insightful

    One group at work proudly used the Rational tools to generate some code - it was the most obscure code I had ever seen

    Somebody will probably have already said it, but generally code generation is a sign that your language or abstractions are not powerful enough. Code generation takes a more compact form of information and creates a less compact result (generated code). One should use the more compact form to tell the software how to operate, not turn it into bloated code. It is almost like turning a table in a database into a bunch of set/get classes that just echo attributes. That is reverse abstraction. The only justification is perhaps performance, but you are sacrifacing maintainability and simplicity in the process. It is to make the machine happy, not people.

  29. Source DB? by Doc+Ruby · · Score: 4, Interesting

    How about a SQL DB of source code, particularly C/C++? Just tokenized code, not the text of the source. SELECTing code by block inserts whitespace and comments according to user preferences. The compiler SELECTs code for generation, INSERTing large binary objects into other tables, including executables. Configuration options fill other tables. Scope is per block across the entire project, rather than the ancient file scoping paradigm. The entire filesystem granularity of C/C++ is a straitjacket.

    Just the whitespace options would make it worthwhile for me. Then there's concurrency of team access, backups, distributed repositories, versioning, redundancy optimization, and all kinds of other better interfaces for the rest of our toolchain. That's the kind of bionic source infrastructure I'd like to see in my future.

    --

    --
    make install -not war

  30. Re:Genetically evolve software? by ratboy666 · · Score: 2, Funny

    Back in 1981, we were writing a word processor -- dedicated box, 64K (yes K) memory, Zilog Z80 processor.

    Management complained that dev was taking too long... and yes, we were writing in assembler.

    Proposed by co-worker:

    Given that testing is perfect, and programming takes too long, why not start by writing your test cases? Then, generate a one-byte program. If it fails a test case, reject. If it can't complete, tentatively keep, and if all cases are met -- ship it.

    Given the second case, generate another code byte (there are only 256 to go through), and repeat the test process.

    Obviously, the final product will be perfect -- all test cases will work, and (as a bonus), the program will be the optimal size. As another bonus, the company can dispose of all programmers, as these roles would no longer be needed for the developement of new software.

    This document still exists in the archives of the company. I wonder how many people have looked at it in the past twenty years and laughed?

    Plu ca change.

    Ratboy.

    --
    Just another "Cubible(sic) Joe" 2 17 3061
  31. Still trying to replace the programmer by Brandybuck · · Score: 4, Insightful

    I see they're still trying to replace the programmer after thirty years. This is nothing new folks. Let me explain the situation. The people running businesses hate programmers. Maybe it's because we have real degrees instead of MBAs, or maybe it's just because we didn't join the right fraternities. But they just don't like us. So they keep trying to come up with ways to fire all the programmers.

    It all started with Cobol, the language that didn't need a degree to use. In more modern times it was Visual Basic, the language that even monkeys could use. You've got entire programming environments where all you do is drag and drop stuff around the screen. Rational [sic] salesmen claim you can generate your entire application from UML.

    For some generic "fill in the blank" type applications, they're correct. For maybe half (wild ass guess) of applications out there all you need is to wire a form into a database. But what about the other half of applications? And what about the remaining 90% of software that is NOT an application?

    At the core of Google is a Damned Big(tm) database, but does anyone in their right mind think Google could ever have gotten off the ground without real programmers writing real code in a real language? Or what about the Linux kernel? Does anyone think it could have been created with a CASE tool? Is there anything in GNOME, KDE or Mozilla that could have been automatically generated from UML? Would you feel safe driving a car which had an ignition system written in Visual Basic?

    Programmers aren't goin to go away, no matter how advanced the tools become. They'll make the programmers' jobs easier, but they won't replace them.

    --
    Don't blame me, I didn't vote for either of them!
  32. Re:I've already seen one post dissing code generat by Anonymous Coward · · Score: 2, Interesting

    If you hear that all the time, aren't you kind of curious what all these people are talking about??

    Here's a site I use to manage big important projects, written entirely in Ruby by ONE PROGRAMMER in about a month: http://www.basecamphq.com/

    The whole site is something like 4000 lines of code. I've seen XML configs for Java ORM layers longer than that!

    Here's the programmer's blog: http://www.loudthinking.com/ .. the framework he wrote is open source.

    Search around for the comments from many Java programmers who have taken a look and realized they've been wasting their life.

    Numbers don't really mean anything. If I can work more effectively in a programming language that nobody else uses, I will. It doesn't hurt that Ruby is very easy to read and learn and is becoming more popular by the day (I believe Gentoo.org is dropping AxKit in favor of a 100-line Ruby program to render their web site's XML).

    But "numbers" aren't a valid argument. PHP is extremely popular, but only because so many *inexperienced programmers* use it. It's a rotten language.

    I would say 50% of my work is in Ruby, the rest in more boring languages. If the client doesn't care, I use Ruby and I finish most things in a few *days*. I don't know what "important" means, but I have Ruby code running that medium-sized business *depend* on. I bet in 5 years, you'll see Ruby in the big companies too. Amazon.com has asked some Rubyists to come over and give presentations, for instance.

    Again, if you have to use a code generator rather than just writing everything in one language, you're doing more work, and more *complex* work than I am. You like doing less work, right?

    Do yourself a favor, learn a little about these other languages and decide for yourself.

  33. Oh, please. Buzzword overload. by Animats · · Score: 2, Insightful
    From the article:
    • The importance of understanding the business context for IT investment has never been more obvious than it is today. More organizations are recognizing the role of IT as a determining factor in the efficiency of their operations, and a bottleneck in their ability to innovate. I am spending a lot of time with customers who want to explore business alternatives, drive IT projects more directly from business needs with well established business goals and ROI, choreograph services to realize their business processes, and monitor those services in execution to relate operations to the needs of the business. Support for that flow (in its myriad variations) is essential. As we use the current generation of tools in this context we are seeing the emergence of new roles, usage scenarios, and support needs. The lessons from this work are leading to a complete refactoring of tooling capabilities.
    Let's try that again, in a different context.
    • The importance of understanding the business context for office furnishing investment has never been more obvious than it is today. More organizations are recognizing the role of office furnishings as a determining factor in the efficiency of their operations, and a bottleneck in their ability to innovate. I am spending a lot of time with customers who want to explore business alternatives, drive office furnishing projects more directly from business needs with well established business goals and ROI, choreograph services to realize their business processes, and monitor those services in execution to relate operations to the needs of the business. Support for that flow (in its myriad variations) is essential. As we use the current generation of tools in this context we are seeing the emergence of new roles, usage scenarios, and support needs. The lessons from this work are leading to a complete refactoring of tooling capabilities.
    See? It's a totally generic statement.
  34. And it all depends ... by pete29 · · Score: 2, Insightful
    There is a difference, between "the tools that are going to be developed" and "the tools that should be developed from a rational point of view".

    A developer is basically somebody, that closes the semantic gap between the idea as it is presend in the human mind thinks and the code that has to be interpreted by the machine. A good tool is a tool, the reduces the burden of this process, so that more complex ideas can be realized.

    Of course, not everybody has yet understood this simple fact, e.g. I frequently call him Linus "writing kernel code should not be simple" Torvalds in casual Linux design problem discussions.

    But yet more problematic is the fact, that we have not really (yet?) understood, how the process works. Do you know how a program to be is initialially represented in your mind, before you start decomposing it into modules and even smaller parts drawing from learned knowledge and books which algorithms to apply and which techniques to use? I surely don't ... the same way I do not actually know, how my brain composes a series of strange markings on a surface in to legible text.

    Yes, neuro-psychology has made progress in understanding the inner workings of the human brain, but they are far from knowing how it really works.

    But the worst part: Software designers and exspecially programmers have a long history of ignoring scientific progress, not only in their own area of expertise, but even more concerning other sciences.

    All of the discoveries in natural language programm have been deliberatly ignored by newer languages such as C#. And languages like PHP and Perl are even inconsistent from a pure computer scientists point of view.

    There are things, I would like to see:

    • easy design of self-learning user-interfaces
    • real natural language programming
    • globalized object stores
    • ...
    but most of these things are just not going to happen.

    Either because somebody is to traditionalist about something or simply because clean, simple, standardized interfaces are definitely not what you get with such a heavily divers and varying area like current in-the-field programming.