I think my subconscious mind has been figuring this out over the past number of years.
For the longest time -- most of my time in the field -- we've always been able to look forward and have at least an inkling of the fantastic jumps ahead, and the productivity that software development tools would enable.
But in recent years it has started to look like we're moving out of the revolutionary period of big innovation, and into a phase of relative stability. There are lots of reasons for this failure of imagination, but a large part of it might be that we've satisfied our initial needs. Software development has moved forward enough, and now we are just exploring what we can do with it. And we can do a lot with our current tools that we haven't yet fathomed.
These things, however, do not drive forward the basic concepts of software development. They will certainly improve the world, but the pressure to rethink the way that we program seems to be off.
Do I have any research or facts to support this idea? None, whatsoever. It's all based on my intuition, and the fact that I've been getting less and less interested in programming languages over the past few years. But I've discovered that, however unreasonable my intuition might seem, it always tells me something useful.
Even more important is my increasing awareness that, no matter how good and powerful our software tools get, we are only getting a fraction of the leverage out of them that we could get.
Programming tools are no longer where the greatest potential lies.
We will get the biggest leverage, not just in programming but in all our endeavors, by discovering better ways to work together. Those are the sessions I will either be creating or attending at the upcoming Java Posse Roundup, March 15-19 2010. It's not going to be just about programming.
FYI: the Roundup makes a profit but not much of one. Mostly I do it because (1) It's Fun (2) It allows the Posse to get together and get a reward for all the work they do.
So yes, I did want to plug the Roundup at the end, but primarily because I hoped it would attract some people who want to talk about how to work better together. Because I hope to have those conversations at the conference. I probably should have explained that. But I've explained it now.
I'm a little bit confused here. Are you saying that innovation in software TOOLS has slowed down, or innovation in software in general?
Well, I must say I've never been so excited about software than now, having been programming for about 30 years. I think innovation is exploding right now. Just to list things that make me excited: Scala, Swarm, Akka, STM, Clojure, JGroups, Wuala, Dropbox, Actors, NoSQL, Scalar, i2p, GridGain, REST, WebSocket.
If you find these things boring, then you seriously need a medical check!
Maybe you just grew older. At least, this is the case for me. As I grow older, I know more and I am less surprised by new languages/new technologies. Nowadays when it comes to programming it is more a matter or translating something than I know already than a matter of learning from scratch. But that's me, it is not that the world of programming is less boring now than 20 years ago. Actually I would say that for a youngster the programming world is much more exciting now than 20 years ago!
> Actually > I would say that for a youngster the programming world is > much more exciting now than 20 years ago!
Indeed and there is also a larger menu of development ideologies. I guess it was in mid 2007 when I realized that an academic language like Haskell attracted a grassroot movement of young programmers who got hot about abstract algebra, category theory, program verification and type systems. It was the very moment I started to feel old.
I think I agree. We have amazing tools that are fairly under-utilized (just ask the Python 3 folks), but we are seeing an ecosystem of several hundreds of millions of machines that are on and connected 24x7x365(6) and will soon have enough processing power and enough spare capacity that they will rent out to cloud applications. The possibilities in that realm are endless.
To me, if 50% of people (in the modern and not-so modern world) carry an always-on computer with wifi with them, things like p2p, mesh networking, and ad-hoc groups become instant.
I imagine, for example, an app like twitter for local wifi, where you can create impromptu voip chat broadcast bubbles, acting essentially like citizen band radios, independently of carrier networks.
The hardware may not be there yet (batteries especially) but the software is definitely there.
A couple of years ago I would have agreed with you, it seemed we were stucked using boring (or scripting) languages to write user/- and programmer unfriendly apps on a platform designed for displaying documents. Nowadays new and interesting languages can actually be used due to the CLR and the JVM. "Enough" people are realizing that OO(P) isn't a panacea. Concepts from functional programming and category theory are entering mainstream programming languages. Apple's IPhone has proved that users strongly prefer (and actually are capable of installing and paying for ;-) ) native apps. Also, I believe that unless MS screws up, Visual Studio 2010's switch to using WPF and a nice extensibility model will, with help from third-parties, soon enough redefine what a code editor is capable of.
> But in recent years it has started to look like we're > moving out of the revolutionary period of big innovation, > and into a phase of relative stability. There are lots of > reasons for this failure of imagination, but a large part > of it might be that we've satisfied our initial needs.
Yeah, it' like how few new subatomic particles are discovered now. What could explain the lack of imagination? Did you consider that it's a lot harder to discover new things when many things have already been discovered?
A lot of the 'innovation' in the past was just figuring out the basics of how to create software. I personally don't think we've finished that phase but we are getting closer. Often the innovation you speak of has merely been replacing one bad idea with newer bad idea. That we aren't changing our approaches every week is a good sign that we are getting better at this, not worse.
I'm quite happy that the focus of software is less on the tools and what you can accomplish with them.
and there is a natural limit to what you can achieve with programming tools or programming languages.
>We will get the biggest leverage, not just in programming but in all our endeavors, by discovering better ways to work together.
You are perfectly right! The problem is that many companies are still stuck with the fallacies of the nineties (employees are human resources, employees are an exchangeable assets and similar nonsense). After we were locked in cubicles and told to be quiet, do our job, and never talk to anyone personally we have to learn to work together again. This is a major change but working together in a better way is definitely the best way to improve productivity in our field.
I am suprised to hear that from you... but to be honest and after I saw you with your talk about ScalaTest at devoxx'09 this post makes sense about how you think about the field.
We started with a small team a project to rewrite an existing (very old technology) system. In the start I was a bit deillusioned (see "Why you should learn C and not Scala" http://marcellanz.com/?p=24) mainly because of some major drawback about the Java/Swing platform.
According to "no matter how good and powerful our software tools get, we are only getting a fraction of the leverage out of them" its not suprising; I can say that not more than 10% of my team (developers / managers) in my time in the field where up to a "new" way to think or learn something new that "looks" other that a C semantic like syntax... most times people where offended just to look into a new tool/languague/framework. people like to stay in safe places and refuse anything that is not a "standard" and even worse, use something because it is a standard. I really like standards based frameworks/languagues, but sometimes its better to have the right tool for the right problem.
Recently I got into Objective-C and the iPhone/Mac Platform and its a real joy to work with... (Objective-C is a lot like Smalltalk) and I am impressed how many developers are out there using this platform to build applications.
There are a few examples that make me go further in the field of software development... one is to explore new fields of enjoyment. Languagues (Objective-C, go, even JAVA), Databases (Map-Reduce, NoSQL, Schema-Less Databases) or things like iPad and the joy to build applications for this platform (think about CoreAnimation, its just great fun).
What does it help if 95% of "the world" does not see the beauty of languages like Scala/Smalltalk if they can build the same with JAVA/C#... they won't use it (" I don't know it", sure you never used it). So to make the connection to the censored but impressive popular iPhone eco-system, people use strange technology (Objective-C is really strange) just to "be" on a attractive platform the iPhone is. I'd say, if apple would open the platform to JAVA ant its cocoa bindings, 80% would use JAVA and not Obj-C just because they can.
All above is based on my intuition but, it won't get better :-) ... fantastic jumps only can be made if one is willing to jump and then see backwards and realize how fantastic the jump was.. but when the others don't jump you are alone enjoying the beauty.
> I'm a little bit confused here. Are you saying that > innovation in software TOOLS has slowed down, or > innovation in software in general? > > Well, I must say I've never been so excited about software > than now, having been programming for about 30 years. I > think innovation is exploding right now. Just to list > things that make me excited: Scala, Swarm, Akka, STM, > Clojure, JGroups, Wuala, Dropbox, Actors, NoSQL, Scalar, > i2p, GridGain, REST, WebSocket. > > If you find these things boring, then you seriously need a > medical check!
The things you mention are not innovations though. They are implementations of ideas existing for many decades, and many of them have been implemented multiple times in the past in one form or another.
Personally, I think that all innovations have ended with LISP, that introduced garbage collection and lambda functions. From then on, what we have is an iterative improvement of those fundamental ideas.
Even OOP is not an innovation. Message passing is based on the concept of closure, which was introduced with LISP. An object in OOP is nothing more than the closure for its member functions.
> Personally, I think that all innovations have ended with > LISP, that introduced garbage collection and lambda > functions. From then on, what we have is an iterative > improvement of those fundamental ideas. > > Even OOP is not an innovation. Message passing is based on > the concept of closure, which was introduced with LISP. An > object in OOP is nothing more than the closure for its > member functions.
I am not convinced. Inheritance is the thing than distinguish OOP from objects implemented via closures, so inheritance is an innovation with respect to the LISP of 50 years ago. The type system of ML-derived languages (from the seventies) is also an innovation with rispect to LISP. Haskell contains various innovations too. Scheme macrology is quite different and innovative with respect to LISP macrology. Modern languages have module systems which are quite different from LISP packages. Also, the compiler tecnology improved a lot in the last decades. So there are innovations, but only a few, not necessarily recents and not necessarily with a big impact on mainstream languages. Consider for instance the CSP approach to concurrency (from 1978) which is becoming a la mode only nowadays because of the multicore revolution.
Flat View: This topic has 164 replies
on 11 pages