Category Archives: Geek Culture

About Internet and Democracy

democratie-1600x1200_12284161111There’s been quite a few stories lately in the French news about politicians and other “famous” people demanding a regulation of the Internet. There’s been this famous publicist named Jacques Séguéla who called the Internet “the biggest crap ever invented by mankind” (link in French). Then there was Jean-François Copé, head of majority party, who said on TV that we should regulate the Internet in order to preserve politicians and journalists (well, of course he was talking to a journalist). And yesterday, Jacques Myard, one of our elected parliament deputies, wanted to “nationalize the Internet” (here), taking example on… China!

At first, I thought it was just one crazy guy who wanted to get into viral communication, but now I’m starting to see a pattern here. Combine that with the whole net neutrality debate in the US and it becomes really obvious: politicians are starting to be really afraid of the Internet. Now is it really because of those stupid things they say that spread over the web like wildfire? I think this is just the visible part of the iceberg. But as it seems, when someone says something stupid, it only gets crazy on the web if people are already angry with them. If people don’t take you seriously, it won’t go that far.

Which leads me to this question: the Internet is already changing our working environment in a lot of ways, but is it doing the same thing with our political systems? I’m not a French history expert, but if I remember correctly, one of the main triggers of the French revolution and the Enlightenment that got us out of Old Regime is the widespread of education made possible by the invention of the printing press. Now if the Internet has the same potential magnitude as the printing press, how will it affect our democracies?

For example, democracy is all about electing people who vote laws on our behalf, but why do we do that? Because the City is too big, and we cannot be all direct actors in the legislative process… at least not in a world where we have to gather at the same place at the same time to write laws and vote them. But does this constraint still hold with the Internet. Isn’t there a way to build up a more direct democracy again? Wouldn’t the vote of masses compensate for the vast incompetency of our elected guys and their tendency to fall for lobbyists? Maybe that’s what our politicians are really afraid of, that they could be rendered useless by this new system they don’t control or even understand.

Maybe it’s time for us to dust off our constitutions and start thinking about what the Internet could do to improve democracy. And when you see the kind of failure we can expect for the Copenhagen summit, it could even be a real solution to a more global way of dealing with problems, one that would lead to real solutions. And I’m not talking about eDemocracy and other eGovernment stuff here: those are just evolutions, shy intrusions of the Internet in the traditional political debate. I’m talking about what could be the next stage in democracy, without any corrupted or incompetent representative, just the intelligence of the crowd on a global scale.

What do you think? Do you know any politics expert working on such a scenario? Would you like to participate more directly in the decisions that have an influence on your daily life?

Change is Happening, my Friends!

Archaeopteryx_2I know it sounds like an apocalyptic prediction of some sort, but it’s all the contrary. And I’m not talking about politics, or the big-bang-boom-tada-yeah that’s happening right now in a country north from here. I’m talking about our work environment. I’m talking about how the way we solve our problems is already changing. In his very inspiring presentation, Clay Shirky mentioned a transition, that he saw already happening back in 2005, but a transition anyway. The thing is that it takes a visionary to see such a transition while it’s happening because… well… it’s happening. So you’re supposed to be a part of it. Talk about an out-of-body experience (I don’t know the right expression for that in English, sorry).

And this morning, answering a message from my friend and former boss on LinkedIn, I realized that the signs were right here before my very eyes:

  • Organisational: when I was interviewed by Axen, I was seduced by their organisational model, because it was completely original. Pretty flat hierarchy, no “I can’t make that decision, it’s not in my prerogatives” thing, a lot of flexibility and pragmatism, everything is a project and people gather dynamically to implement such projects, they learn a lot, and then they move to something else. Astounding! And it worked… for some time. And now even though THIS instance is being absorbed in the guts of a greedy giant, I know it can work. Or to be more specific, I know that people can work like that. Not everybody, but some people can.
  • Technical: have you noticed how the Internet is everywhere in what we do? Have you noticed how it expands our natural limits to bond and share with one another. Am I worried that I might lose contact with all the wonderful people at Axen when I leave? No! I have them all in my LinkedIn account, I can follow them, see how they’re doing, where they’re going, what they’re working on. And more importantly I have a permanent way to keep in touch with them. And of course there are all the people that I’ve met, worked with, thanks to the Internet. There’s Claes, the guy I’m working with on ConferenceGuide. There are all the contacts I’ve met at DMF in October… and the ones I’ve lost, because I didn’t get their card and couldn’t add them to my contacts (Damn it!)
  • Methodological: this is more specific to the IT field, but still, it shows that minds are shifting thanks to Agile Methodologies. Get back to what really matters: creating value. Let go of your old beliefs that you’re going to keep everything under control and never change your mind. Our business is moving fast, let’s embrace it. Let’s build trust with our teams, encourage everyone to commit, improve our state-of-the-art. And let’s stop saying things like “people are dumb, and lazy, and short-sighted, so we need this control and methodology”. That sounds too much like a self-fulfilling prophecy.

And there are probably other aspects that are already changing drastically. I’m not saying they’re changing for everyone. Like any evolutionary process, some specimens are trying it, it increases their chances of survival, others die. It’s like work environment natural selection at… work. Now I’m not a Darwin expert, but I’m wondering whether at some point, seeing that some “features” obviously work better than others, nature doesn’t have a way to push those forward. And even if nature is not capable of this, maybe we are. Maybe now that we are aware of those changes, now that we know they work better, now that we are in times when cards are dealt again, it’s time for us to give a little help to natural selection.

I think those changes are still too shy, they look like an archaeopteryx to me (you know this missing link in evolution, sort of half-dinosaur, half-bird). In other words, all those changes are still happening in what seems more and more like an archaic and unfit environment for solving problems: the company. And here I am, envisioning a work environment full of adhocratic-agile-connected people without the need for a constraining and limiting structure full of overhead and politics. I have a dream! But it’s not over yet…

My Discoveries of the Year

logoEvery year, the main reason why I go to Devoxx is to discover new stuff. For me it’s all about technology watch. The internet and RSS feeds are my main tech watch instrument but there is one thing that is harder to get through RSS: feelings. Conferences like Devoxx are a unique opportunity, not only to see what’s happening but also to sense how the community is feeling about it, which is at least as important to anticipate on what’s going to be important.

Now you’ve certainly read here and there that there have been a lot of talks about Java EE6 and Closures in JDK 7. There sure were, and there was quite a lot of reactions to those. But frankly, I’m not interested in any of those. I’m not interested in Java EE6 because even though it finally leverages the concepts that have been pushed by the community for so long, the very fact that Sun has been so late in implementing them shows one thing to me: it’s not about them, it’s about us. Sun has been trying to partner with big companies around the JCP, to create a lot of business around those standards. And why were those standards so complex? Because there were so many companies involved in their elaboration? Or was there any interest from those companies to create technologies complicated enough to require a lot of consultants, and books, and trainings, and tools to make things easier? If the first option is true, then how did it happen that a gigantic community of individual software developers made it so that Spring, Hibernate and other Open Source technologies became de facto standards?

Which brings me to the second point I don’t really care about: closures in JDK 7. People have taken matters into their own hands. Other languages have appeared implementing some of the missing features of Java: Scala, Groovy, etc. Some other languages have been imported into the Java landscape, like Ruby and Python. I’ve been using Groovy myself for some time now, and I couldn’t be happier with it. Now Sun is coming after the war, but does it matter? What I see here is that it’s good to have a base language, a base platform. But as soon as you start extending it for purely mercantile reasons, or as soon as you start avoiding certain innovations because you’re afraid it might harm your business or the one of your partners, then things go messy. But once again, the good news is that software gives us power. We developers have the ability not only to decide which technology is better, but to build and promote our own technologies. And I think this is why our world is so dynamic and why things change so fast. What I see here is that languages matter less than our ability to create new ones, to solve more specific problems, to provide some more advanced features. And that strengthens my belief that Language-Oriented Programming is the next big step in the evolution of our technologies.

Now about the things I do care about. My discoveries.

kanbanMy first one is definitely Kanban. I’ve heard about it for quite some time. But I didn’t understand why people were already trying to push it forward, even though we are still fighting to push companies away from waterfall messes. It’s even more radical than Scrum and for that it’s very interesting because it gets closer to what software development really is. The key phrase that kept popping in my head during the 3-hour session about Kanban was “It’s going to take the time it’s going to take.” And that’s why it’s brilliant. Now that I understand Kanban a little better, I see Scrum as a compromise. We’ve taken some of the principles of Lean Manufacturing, we have dissolved them into trusted concepts like RUP’s iterative cycles. And for years, we have been trying to pour that cocktail into their mouth. And in doing that we forgot something important: if they don’t trust us, they will never drink the whole thing, all the more so as it looks weird with all those colors not really mixed together. The way I see it, Lean and Kanban are all about getting back to the basics, and relying on trust. We have to build trust first, we have to make them understand that at least some of us are not interested in building artificial business on top of poor practices. That at least some of us desperately want the software we build to have a real impact on their business. We have to show them our good will so that they let us do our job. And they have to understand that the more they trust us, the faster we will be, the more we will be able to solve other problems. Big software vendors and resource providers will not like that, because every new project comes with its own overhead, because their business thrives on poor practices, stupid methodologies and complex technologies. But once again, power is in our hands, it lies in collaboration, not in corporation.

My second discovery was Spring-Actionscript. Those guys really have a thing to do things in a clever way. Cairngorm, PureMVC, Swiz, they all impose some sort of a structure to your Flex applications, forcing you to surrender some great powers of Flex itself in the process. And here comes Spring-Actionscript, more like a toolbox than a real framework. It doesn’t impose anything. It just gives you all the tools you need, all the glue you miss, to make things fit together perfectly. Their asynchronous abstraction is just brilliant, their configuration options are complete, your code just looks better with it, simpler, more natural. I think that’s what I love most with Spring: not only does it create great technology, but it also instigates a whole pragmatic and elegant way of thinking into the minds of a whole generation of developers, thus encouraging the community to come up with their own technologies: Spring Actionscript used to be called the Prana Framework, developed independently by a Belgian guy who took inspiration in Spring for Java. That’s just awesome. I will definitely integrate Spring Actionscript in a couple of Spring/Flex projects. I think I will even update my todolist sample application with it. Stay tuned.

My third discovery is a couple of technologies to detect and prevent coding errors BEFORE they actually happen. I insist on “before” because of my previous post about TDD: unit tests are all about writing code to check that some other code you have already written (or not written yet) does its job. But to me, this is equivalent to the old prevention versus repression debate. TDD is just repression, and it’s tempting to go there only, because it’s always easier to catch the bad guys than trying to understand why they became bad in the first place. JSR-308 and its pluggable type checkers is all about strengthening the compiler so that it prevents more of the most frequent bugs like NullPointerExceptions. It allows us to make our code more expressive, to give the compiler more information about our intents so that we can prevent bugs from happening. Brilliant! Project Lombok also goes in that direction: it adds a couple of annotations and customizes the Java compiler in order to minimize the amount of boilerplate code we have to type. Once again, by doing so, it improves the expressiveness of the language, allowing us to say more things with less words, thus reducing the likeliness of ambiguities and errors. Awesome! Lombok and type checkers will definitely be part of a couple of projects too. The only thing that really made me uncomfortable with both of these presentations was this question: “Why the hell weren’t those techniques in Java 5 already?”

pomodoroMy fourth and last discovery was Pomodoro technique. Once again, heard of it before, but never dug into it. And then we had this guy with a strange Swedish accent in front of us, playing with dolls, showing us handwritten slides with simplistic drawings. And you could hear the disappointed reaction of a lot of people in the room: “sounds nice, but not applicable to me”. That was my first reaction too. Software development requires long slots of concentration because we need time to load the whole conceptual model of what we’re working on into our mind before being effective, and this implies some overhead. But then when someone asked this very question to the speaker, he answered something like “what if you are loading too much? what if limiting the amount of time you are going to spend on a given task forces you to load just the minimum you need to solve the matter at hand? what if it made you more productive?”. And it made me think: “hmmm… It’s worth a try.” So I will probably try that as well soon.

Overall, this edition of Devoxx was great! The first 2 days, I was somewhat afraid that it would be disappointing, because you could feel that everything was “cheaper”, that there were less sponsors, less schwag, less tempting hostesses. But then the most important part was preserved: amazing independent content and a great community spirit. Finally there was an interesting special guest this year: Twitter. Twitter was everywhere. People were tweeting live from the sessions, there was a projection board with all devoxx-related tweets in the hallway. I and a bunch of my colleagues were even using twitter to cover Devoxx live for our fellow Axenian java developers on our intranet. Twitter was really everywhere this year.

So thanks a lot to Axen for allowing me to go there. Thanks to Stephan and the BeJUG for putting it all together. Thanks to all the great speakers and to my colleagues. This was really a great edition and I can’t wait for the next one.

PS: All the talks will be available in the weeks to com on Parleys.com. So stay tuned.

What? You’re doing TDD!

h_4_ill_1022732_black-sheep-bisI’ve always been distrustful by default with the “main way of thinking”. Which doesn’t mean that I systematically reject the opinion of the majority. But given the strong tendency of human beings towards laziness and our natural tendency to sheep-like behaviour, the faster something gets popular, the more I question it.
Test-driven development has always fallen in this category for me. The problem it’s supposed to solve is real: software coding is a highly error-prone activity and we need to do everything we can to avoid shipping erroneous code. I totally agree with that. But then TDD is just one solution to this problem: to avoid shipping errors, let’s test and check our code in order to detect errors before shipping. But this solution leads to other problems:

  • tests are just more code where there can be other errors, and that need to be maintained. So what about false positives and negatives?
  • test writing has always looked like a very boring and chore-like activity to me, especially if it involves thinking about my implementation algorithm before I actually write the corresponding algorithm, which is often required when doing behavioral testing
  • I’m still not convinced that ensuring each part of the system is working is supposed to reassure me about the system as a whole.

And more importantly, there are other alternative solutions to the same original problems: for example, instead of waiting for tests to fail to fix mistakes, why not trying to avoid them in the first place? We have some pretty good tools for that: refactoring is error-prone, especially when you use a refactoring engine that is not reliable. Then stop using Eclipse, move to IntelliJ. You keep reproducing the same wrong patterns from some old language you’ve worked with for 10 years? How about static analysis? And instead of typing that much error-prone boilerplate code, why not use code generators or dynamic languages like Groovy? I’ve been using all of these tools for years, and I’m gonna say something bold here: I shipped some pretty decent software with not enough bugs to justify the  weight of TDD. A craftsman can also go a long way in improving his work by getting better tools, and training himself to use them. Actually that’s what really pisses me off with all the TDD religion thing: too much focus on techniques and processes, not enough on technologies and people. And I think I’m just more interested in the latter two.

Now most of the time, when I raise my objections about TDD to people who say “What? You’re not doing TDD!!!” with some sort of horrified look, they just answer me with disdain instead of actual arguments, which can mean one of 2 things:

  1. They didn’t look into it that much. They just followed the trend because it seems nice to say that you do TDD
  2. I didn’t look into it enough and some of them are actually right to treat me that way, because I don’t know what I’m talking about

I thought I had tried TDD enough in the past to avoid the second option, but this morning I attended an amazing talk by Robert C. Martin at Devoxx. In fact, there was another talk before by Ivar Jacobson. And the guy kept talking about software as an industry (comparable to manufacturing for example), about the fact that we have a big professionalism issue (which I totally agree with), and that in his view the best way to fix the problem is to add some theoretical foundations into the mix. Let’s say I didn’t agree at all with his view of where the problem lies, and with his inferiority mix up towards other industries. But on the other hand, I agreed a lot with Uncle Bob’s view of things… until he started talking about how silly it was not to do TDD these days. How can I agree with his conception of where the problem really is, and not with one of the main solutions he proposes. Maybe I’m missing something here. The best way to figure it out is to read in more details what he has to say. And given the incredible energy he showed in his talk this morning, his book is likely to be a lot more interesting than all the TDD manifestoes I’ve read in the past (or tried to read before falling asleep).

Conference Guide Available

Conference Guide Icon

Woohooo! Exciting times! It’s confirmed, I will be at Devoxx the whole week, and my Conference Guide iPhone application has just been approved. For your information, it only covers Devoxx 2009 for now, but it’s meant to be generic and I will add more information for other conferences soon: TEDxBrussels, JFokus, etc. The application is free for a limited period of time, so go ahead and install it!

More features for the iPhone application are coming, maybe not for Devoxx (the Apple review process makes things really slow), as well as other mobile clients. An Android client is already in the pipe, and if you are a Palm Pre or Symbian developer, feel free to contact me. I can give you access to the same public API I’m using for the iPhone version.

Finally, if you are a conference organizer and you want your event information to be available on mobile platforms without having to develop your own applications, feel free to contact me as well.

And by the way, if you are a company, and you are thinking about developing your own iPhone application, whether it is for marketing purposes, to sell content or to improve the productivity of your salesforce, I’m your guy. And I can do much more than just iPhone development ;o)

Knowledge Management: It’s All About Granularity

In my pursuit of the ideal collaboration platform, I’ve tested a few knowledge management systems lately: Knowledge Plaza, Seemy, a combination of del.icio.us and Twitter. And those tests were very interesting because they allowed me to spot the main common problem they all share.

How many times have I heard that the Google Wave presentation is too long, leading people to simply not watch it at all? How many times have my friends complained to me about the length of my own blog posts? The granularity of information on the web is simply too big. The web is all about resources, and there are billions and billions of these resources out there, and what makes it even harder to process and integrate them is that each resource mixes a lot of different information items.

And for me, THIS is the nightmare for my technology watch, and for knowledge management as a whole. You can comment on or share whole web pages through links, whole Youtube videos through embed codes, whole discussions through podcasts. But what if you want to extract what is to you the essential part of a blog post, the funniest moment in a video? Well, let’s say I don’t know any solution for that.

For my everyday technology watch, what I would really need is a knowledge management platform that allows me to select small chunks of information in text, video, audio or images, and then tag those chunks, comment on them, and store them somewhere in the cloud for sharing them with my friends or colleagues, or simply keep them for myself for later reference. All of that while keeping a link to the full original resource of course. That would be awesome!

Now of course because I love to solve problems, my next move is to think about a solution. I don’t know any existing system that does that, so if you do, please tell me about it. Now if it doesn’t exist, we have to invent it. And the way I see it, there are two main aspects to this system.

SandThe first issue is how do we capture excerpts out of web resources. If we want to make it as simple as possible, we need to integrate deeply with a web browser in order to create a natural user experience based on drag-and-drop selection, keyboard shortcuts and so on. This is why I’ve tweeted about me looking for a Firefox extension developer to help me out: I’ve never developed any Firefox extension myself, and I could learn but (a) it would take much time and (b) I’m not fond of Javascript. So once again, if someone out there is a Firefox extension developer and would like to collaborate on this experiment, you are welcome. Let’s try first with text, we’ll see later for other kinds of multimedia content.

And the second issue is how do we store and present all this information in a highly usable and intuitive way, without being too disruptive, without inventing too many new concepts. This part I can handle. I already have a few ideas.

I think before the Internet, there were technology watch departments in companies, whose job consisted in cutting out paper pieces in newspaper, pasting them and composing press reviews with comments and writing reports about what competitors were doing. Nowadays, it’s as if we just gathered full articles or newspaper pages, videotapes, full interview transcripts and just put small post-it notes on them. It’s just too rough, not pre-chewed enough, not efficient enough. And as always, there’s gotta be a better way.

What do you think?

Text, Expressivity and Culture-Oriented Programming

Following up on my reflexion about what could software development look like a few years or decades from now, there is this big problem that has been bugging me for years now and that I have never found the time to really tackle: expressivity. In the same way as files appear to me as the biggest obstacle to collaboration, I think the main barrier in the way of expressivity is TEXT.

It’s hard to admit, but we’re still building software like cavemen. We don’t have spoken language, just a bunch of noises, we don’t conceptualize much but we do communicate with a few gestures and more importantly some colored drawings on cave walls. The way I see it, we are not much more advanced than that, but it’s normal, software is still relatively young as a discipline and although it has already changed our lives, we have to imagine that it’s just the beginning. And the good news is that we are headed in the right direction.

man

We started off with most elementary way of storing information and communicating with a machine: zeros and ones. Binary. It was too elementary, more like noises coming out of our mouths, so we started to group bits in octets corresponding to hardware instructions and characters. In fact, we added gestures to noises. Then we grouped instructions into statements and procedures, and we designed a way to translate those into the most elementary form of language that machines could understand. We started drawing on walls. But as procedures multiplied like crazy, we needed to conceptualize some more, talking about classes, objects, methods, properties, and so on. Spoken language was born. And with higher level concepts like services, components and multiple programming languages, we added written language. OK, the analogy is not that good, but you get my point: I’m convinced we’re still very early in the overall evolution of communication with machines, and although this evolution is somewhat slow and creates a lot of inertia, I believe that if we want computers to really expand our capabilities (note that I didn’t say “replace us”), we need to go further in abstraction levels.

So what’s next? Binary, assembly, procedural, object-oriented (yes, and functional, if you want), then what? Model-driven? I’ve tried that, it’s just replacing the constraints of text with the constraints of visual representations. It sure makes it easier to conceptualize, but at some point we’re still translating those visual models into text code, which we have to compile. The roundtrip is just too long. What about domain-specific languages? Well, I’m more into that right now. It looks like communicating is naturally based on languages, collections of concepts that relate with one another to describe what a software is and what it does. So focusing on making it easier to define new languages definitely goes in the right direction. That’s why it’s so linked with meta-programming: instead of statically defining layers upon layers of fixed concepts to describe systems with even higher level abstractions, let’s define the root concepts we will use to describe languages that will allow us to describe our systems. That’s why I’m so interested in Groovy at the moment for internal DSLs, although I prefer the more elegant idea of external DSLs and language workbenches, like Jetbrains MPS does.

All of this evolution makes me think of a video I saw recently, that tried to make String theory more accessible:

Let’s say binary is our dimension 0. Assembly is dimension 1: a line. Procedural programming is dimension 2: a plane. Object-Oriented Programming is then 3rd dimension: a volume. And it’s very hard for us to leave it, as it is our most natural way of seeing things. But that’s where I find this explanation of String theory particulary interesting (although not rigorous as some math geek friends of mine pointed out): there starts a cycle. Dimension 4 is a line again, formed by 2 different Object-Oriented Languages, like Java and C++ for example. Still there? Good! That’s where the fun starts: dimension 5 is a plane composed by all the parallel universes that are created by our own choices. Functional programming and OOP can be considered as forming such a plan. Now what if we could design a way to go directly from one of those paradigms to another one, to fold the plane in the 6th dimension: please welcome language-oriented (or meta-) programming! See the cycle? Now most of us are stuck in the 3rd dimension, and some of us are already experiencing the 6th dimension.

So there we are. Seventh dimension is the line joining the set of all possible timelines starting from our software big bang, which is the binary transistor, to another set of possible timelines, starting from another big bang. Quantum computing can be another option, but it’s a hardware one. What about software? Isn’t virtualization a way to forget about the physical hardware? And there we go 8th dimension: going from binary transistors to quantum computing is one line in the seventh dimension. Choosing to go to virtualization instead creates an branching line in the 8th dimension. Which means that if we want to create our ninth dimension, we need to fold the eighth in order to jump from quantum to virtual computing. And that’s where I locate what I call Culture-Oriented Programming. The third stage of the third 3-stage cycle. The final frontier? The next step? Hooooo… my head hurts.

But wait a second, I only talked about computing here. A virtual reality. What if dimension 10 was the line uniting computing with the real world in the purest possible way. Direct communication between human beings and computers. Who said “scary”?

PS: I didn’t intend this post to be so “theoretical”. I only thought with my keyboard and let my imagination go. But I’d love to know what you think about that crazy analogy? Do you think we are limited to 11 dimensions like in string theory?

PPS: That might be my geekiest post EVER!

Software Development and the Whiteboard Paradigm

For years we have been using computers in a way that mimics the office environment. Most of the concepts that we are manipulating were designed as virtual emulations of real-world artifacts: workspace, desktop, folder, file, button, menu, (e)mail message, inbox. The problem with any metaphor is that, at some point, it just doesn’t make any sense anymore. And if you want to stick with it, you’re forced either to stretch the metaphor to a point where people lose it (like I’m giving you a file, even though I’m keeping an exact copy for myself), or to invent even more metaphoric or exotic concepts to fill in the holes (like pokes and docks and so on).

More specifically we software developers have been fighting with the very metaphors we have invented some decades ago. All of our applications are made up of files that need to be compiled and linked together so that the computer can understand them and run them. Yet the computer world has changed a lot in a few decades, and it’s very interesting to wonder whether all those concepts are still valid, or whether they don’t hinder our very creativity and the magnitude of the problems we can solve. Indeed, we’re talking more and more about cloud and parallel computing, language-oriented programming, business process modeling, a lot of higher-level concepts that we are still forced to anchor into low-level files and computers. Language workbenches generate traditional code, cloud computing platforms need a lot of middleware to interface with our programs, and BPM uses a lot of black-box magic.

What bothers me the most at the moment is how these old school metaphors impact our way to collaborate. For me it all resides in the FILE concept. Files were not invented to collaborate. Files were created for storage. You put some information into a single unit of content and then you store it for later use. And if someone needs to reuse your work, then you must find the right file (using some ordering mechanism like folders), copy it and send it, which means that many things can go wrong in the process. The copy can go wrong, someone can intercept or interrupt the transfer of the file and more importantly, the file that your collaborator will be using is merely a copy. Which means that if you need to reuse his work, then he needs to send you a copy of his own work, and you’re back where you started. Now imagine that process happening several tens of times a day for hundreds of collaborating software developers, and you can quickly understand why there is such a huge market for coordination software. Keeping track of modifications, resolving conflicts, linking code with business requests and so on. All of that because of what? Because our primary collaboration artifacts are FILES!

google_whiteboard_largeFiles don’t make sense in this world anymore. All our computers are almost permanently connected, forming one giant virtual workspace in which we can forget about physical borders of files. Instead of exchanging data in the form of files, we are now able to exchange actions and services on common artifacts. Doesn’t it ring a bell? It’s like we are all standing up in front of a big whiteboard with our keyboard and mouse as a marker.  We can all write together on the whiteboard, we can erase, we can write, we can draw, we can compose, we can link, we can step back to see the big picture. And since the whiteboard is virtual we can even do amazing things like actually moving elements from place to place, we can keep track of the evolution of the whiteboard. When you’ve done a couple of Walt Disney creative sessions, or experimented with SCRUM boards, you can easily feel the incredible power the whiteboard has on collaboration.

What’s interesting is that Google has already started to implement this paradigm shift for communication with Google Wave. A wave is really just a whiteboard where everyone can collaborate. Sure you can use it in a very linear way in which everyone writes stuff on it, one at a time. But this is just a very small subset of what you can do with it. That’s why Google Wave is truly groundbreaking: it is redefining the rules of collaboration by getting rid of all the useless constraints and freeing up our creativity. Now what Google is doing for generic communication, I would love to apply it to software development.

Version control, unit tests, continuous integration, issue tracking, release management… all those are clever patches that heal the symptoms of a much deeper disease. What if we could work on the disease itself? What if a software application was made up of real functional modules, and each module could be implemented by a separate team on a whiteboard? What if we could do that online without having to be in the same physical place at the same time?

I’m dreaming here. I don’t have any concrete solution to offer yet. I have a lot of ideas but not a lot of time to implement them because… well… I’m still doing a living writing FILES! But… one day… a software development environment without files… Zzzzzzz…

Oops! They seem to be doing it again!

I’ve seen a lot of job offers lately for Flex developers in London banks (including investment banks like Goldman Sachs this morning). I love Flex development and I’m starting to look for freelancing opportunities around this technology but technology is not everything to me: I also thrive on purpose, I love to work on stuff that matters to me. And the fact that the banking sector seems to be hiring rich internet application developers so much kind of worries me somehow.

Because one of the main interests of technologies like Flex is the quality of data visualization it allows. Now what worries me is that software has already been a major enabler in the subprime crisis, with algorithms able to calculate and mitigate the risks for very complex financial products. Now it’s like they’re saying “OK, let’s do the same shit, but put more human factor in it, so let’s give them more accurate data!”. Now this is just an external impression and maybe I’m wrong about what they’re doing with Flex. But maybe I’m not. Does anyone work with Flex in banking and can tell us what you’re doing with it?

As far as I’m concerned, I’d love to work on a “new energy”-related project, like what Roundarch did for the Tesla Model S. Or I’d love to work for a project like Better Place, or Desertec. I’m sure they could use some modern , productive and good-looking software too. But banking? Hum, not a good option for me until they integrate more human data in their decisions.

A New Experiment : eXperts UnLimited

I love technology watch. I could do that all day. Browsing my RSS feeds, discovering new technologies, reading strong opinions, commenting here and there. And I love answering questions too. Do you know a way to download any Flash video? Which solution would you choose for our messaging problem: Oracle queues or a custom messaging system? What are the pros and cons of Flex, Silverlight, JavaFX and AJAX? What do you think about Unit Testing? I would love to answer technological questions all day.

But I’m a geek. I don’t do that all day. My day job is to develop software. And even though I plan to change that very soon, more often than not, I’m not really convinced what I’m doing is needed. And a lot of customers I work for wouldn’t think that reading blogs, writing articles and chatting with fellow geeks is valuable work… that is until they come to me with a “what’s the better way to …?” question.

What if I could do that all day, or at least earn some of my living doing that? And I know a few guys who would really love to do that too. That’s why I’ve just launched a new public experiment called eXperts UnLimited (XUL). If you want to know more, or if you have questions or suggestions, feel free to leave a comment there.