Saturday, May 29, 2010

Can you program without coding?

Do you think you can program without coding? I never would have thought so, but now I do. It's possible to make user-defined types and interfaces, call services, create a service, make a deployment artifact, deploy and test-- all without writing a single semi-colon, angle bracket, or curly brace.

You don't believe it? It's true! I've been working with SOA toolkits from several vendors over the past several months, and have been deeply impressed by how much behind-the-scenes coding can be abstracted away from the coder. Check these out:

Defining a user-defined type (This picture shows Intalio, one of the less expensive UIs)

Define a user-defined type (similar to a class)
Using the UI, you click an icon to 'add a field'. You type in a name for the field, then choose a type for the field. The available types are XML types-- string, int, long, etc. (Or user-defined types you've earlier declared.) Behind the scenes the UI will build you an XML schema (XSD). The nice part? The XML is well-formed every single time, without any hand-coding of the XML!

Define an interface
A few clicks of a button lets you declare a new interface. You choose the input and output types from XML primitives and the user-defined types you have made.

WSDL, used graphically to call partner web services

Call Web Services
You import references to external services from a registry or directly from the wsdl offered by that service. This will give you a UI widget you can then drag onto your canvas to call the service.

Declare a service
Once you have your interface defined and the business logic (declaring variables, calling services, etc.) defined, you can generate an implementation for that service. This makes your logic available (usually as HTTP/SOAP, JMS, etc.)

Again, using UI figures you place a branch in your logic and indicate through XML XSDs how to decide which path your code should follow. (Of course you don't actually see XML, you see grid boxes of field names, you click on the one you want.) You can make loops in a similar fashion.

Make a deployment artifact
You can choose to 'export' your business logic as a .JAR or .EAR. Without any scripting, your IDE will produce an artifact ready to deploy.

Test your logic
Some of the high-end tools come with embedded application servers. This allows you to seamlessly deploy your component and test it right from the IDE.

You can do all this, and more. So what does this mean to us?

I have no doubt these toolkits will continue to get better and more refined as time goes on. It is already possible to be a productive programmer without writing any traditional code or actually seeing any XML.

But the main point is this-- the person doing this programming still has to think like a coder. You still have to know when you need a variable, have to understand primitive types (long, int, etc.), still have to understand how a loop works, etc. Perhaps most important, you still have to think in a logical and methodical way. For this reason, I am actually optimistic about these developments-- I think it's just making a programmer more productive.

So how do you get started? For no money, I'd suggest you have a look at Intalio BPM. This freely available toolkit will let you validate what I've said here and get some idea what these toolkits can do.

Happy (Codeless, this time) Programming!


John said...

Great points! Do you still call the person a programmer though?

Jani Hartikainen said...

Some of the guys at my workplace use LabView, a visual programming language. From what I understand, it's basically a WYSIWYG editor (think Visual Studio or such) and you can do most of the "programming" by just drag dropping stuff there.

Haven't used it myself, but sounds like it's about as not-programming like as programming can get :D

Rick said...

Thanks for the comments! John, I guess I really would call that person a programmer. They're doing all the right things, just without a text editor.

Jani, thanks for the shout out for LabView. I Googled it, looks interesting.