Blasts from the Past: Symantecs Visual Cafe

Executive Summary- we use a blast from the past, Visual Cafe, to argue that Java is more suited to a wide range of development tasks than the LAMP scripts (PHP, Perl, Python, Ruby) and AJAX/JavaScript.

I was going through my software books and guides and ran across a blast from the past- Symantecs Visual Cafe Users Guide from 1996-7 era. This was one very well designed development tool that was clearly ahead of its time. Look at the screenshot below:
viscafe
10 Years ago there was an IDE for Java that would still do very well as an intro IDE into Java against the likes of Eclipse/IBM/Rational IDE or NetBeans/Sun JavaStudio Creator or Oracles JDeveloper – and this is 10 years later. Against Perl, PHP, Python, Ruby and AJAX/JavaScript – none of these languages has the complete development features like Visual Cafe of 10 years ago:
1 – Project Windows to keep track of all the files, objects, and code packages involved in a developing system;
2 – Visual drag and drop Window/Forms designer with active 2-way updates – visually change any property of a window/form component or widget and the underlying Java code changes – and also vice versa. Change the window/forms Java code in the editor and the design layout changes appropriately;
3 – Property list that actively changes when a component or object is selected in the visual designer. Again active 2-way connection, change a property and the component changes;
4 – A highly configurable 3-pane Class browser with i) Class tree pane, ii)color-coded Members pane with data sources if any, and iii)smart Source Editor (see below);
5 – A hierarchy editor which presents a basic UML Class diagram and allows simple but direct inheritance and attribute changes to classes – a precursor to tools like Together/J and other two-way UML-Java tools;
6 – A components library that allows users to add their own customized widgets and components not just for visual form design but also data integration and messaging purposes;
7 – Workspace view that allows a user to save and recall a layout of windows, panes, toolbars, designers and menus configured and customized by the user to maximize efficiency for the task at hand – be it design, coding, testing, debugging, etc. These workspaces allow a user to change working context with a single click. Workspaces are linked to general Visual Cafe working environment dialog which allows extensive customization of every aspect of a session – edit, compile, code generation, doc generation, testing and debugging, etc;
8 – Debug layout with 6 window panes:
a)Breakpoints pane allows setting and removing conditional or immediate breakpoints in any code;
b)Call Stack pane displays active methods and variables during debugging session;
c)Variables pane allows users to monitor and importantly change variables values during a debug session;
d)Watch pane allows for user defined Java expressions to be diplayed during debugging;
e)Threads pane allows users t follow, display and debug thread processes in a program;
f)Messages pane collects system and user triggered error/exception messages, logs, and reports;
The debugger is able to be used locally or remotely back to a server context/source file and while debugging browser based applets.
9 – A Source Editor pane that also is stacked with extra capabilities beyond the usual color-coded source, auto-indenting, brace and parens matching plus fancy formating/tidying source code:
a)Auto Syntax Checker which flags errors on the fly which can be turned off and on with simple keystroke combination;
b)Code Helper popup which helps user complete code references;
c)RAD setting that allows Code Helper and CodeGen Wizards to be called with single keystroke combination;
d)RAD CodeGen wizards (Bean Wizard, Insert Class Wizard, Interaction Wizard, Database Action Wizard plus Servlet Wizard) allow genning Code Connection between objects as well template-based code gneration plus database-linked code;
e)extensive user customizing of Source Editor settings including several Java, HTML, JavaDoc and other filetype specific properties for formating and checking the source as typed;

What Visual Cafe had 10 years ago, some Java IDEs are still working on delivering now. But there is no doubt the new Java IDEs have gone well beyond Visual Cafe:
– powerful set of refactoring capabilities to allow for massive class redesign
– code profiling and performance tuning built into IDE
– database and applications server resource panes for managing, configuring these critical resources
– support for mobile applications (J2ME) development with mobile emulators-on-workstation test and debug facilities
– support for J2EE enterprise development with SOA and Web Services wizards and remplates
– enhanced source code editing with immediate error flags, code folding, and faster Java hints
– enhanced drag and drop visual editing with prototyping and CSS/JSP/JSF/JavaScript/AJAX support for Web apps
– complete CVS/Source Control Support integration coupled with team collaboration and messaging features

So why the heck is this important ? Because PHP, Perl, Python, and AJAX/JavaScript by and large do not have these development tool capabilities. In fact they dont come close.

What Else is Missing from the Scripting Languages

Now I will be the first to say that all of the scripting languages can be at times easier to write code for than Java. They relax the strict “everything is derived from Object” requirements, strict rules of instantiation, and dont have the curious Java named package to directory and file relationship nor the rigorous try-catch-finally exception handling requirements. However, JavaScript, PHP, and Perl have added try/catch/finally syntax and some other Java “attributes”.

As well, JavaScript, Ruby and Python almost from the start have built on reasonably solid OO-Object Oriented bases. And PHP and Perl both have been working to achieve a more complete OO features set. In sum, all five tools have added more modern coding practices including objects, secure coding rigor plus try/catch/finally exception handling along with better threading/callback and asynchronous operations. The result is that the functional features of the 5 scripting languages have improved along with their performance and ability to handle XML and Web Services. What is missing from all 5 is what is of concern here.

First and foremost, none of the scripting languages have a development environ that comes close to matching the robust Java IDE development capabilities of Visual Cafe of ten years ago. Now some coding cowboys along with extreme programmers will insist that the source code is the only documentation, planning is a game, and programmers that use IDEs with collaboration tools or drag and drop visual form and report designers/code generators are wimps, amateurs, and perpetual newbies who dont know the basics of the underlying code.

I would counter given the pace of change in the software industry we are all likely to be newbies again about every 3 years + or- 1 year. Also the demand for agility and adaptiveness in programming means that specs drift, changing requirements, and perpetual code revision/refactoring based on testing telling us what we dont want – this is becoming a permanent feature of development. Otherwise development will be outsourced or SaaS-ed, Software as a Service-ed. The latter means that programmers become plumbers. They have more or less SaaS vendor-granted and strictly controlled access to the code base => be that configuration files, API-calls, and/or scripting “glue code”.

So the most we as programmers and developers can hope for is to become plumbers in the SaaS mode or “every programmer is a maintenance programmer” in the new feature incremental, adaptive, agile world. Okay a select few get the big bucks and get to be System Architects – that is like the old system analysts that “I-dont-do-programming” and “like Nature, I abhor testing because I am in a vacuum”. But actually System Architects have a thankless task. They have to fathom out solid risk assesments as new features are added or suddenly requirements change and multi-person updates are required or long duration transactions become critical to a system. It is the dreaded small change in process means big underlying system architectural change because now a subsystem has to support asynchronous operations or new concurrency control regimens. Architecting is hard because increasingly even process changes that result in massive changes to system specs are being accomodated.

The bottom line is that Visual Studio, Eclipse, NetBeans, Trolltech and other IDEs are popular because they allow developers to respond more adaptively to a broad range of shifting-development-sands requirements. They also are now able to allow a more complete development cycle to be supported – including the need to backtrack, reasses and redesign systems – then spell out the risks, costs and schedule changes to all involved in a collaborative fashion. Developers are more often producing incremental working versions while driving towards final full feature-set completion. The classic LAMP and new AJAX scripting tools are not even close to this capability:
PHP – Zend Studio, Nusphere are just stretching out in debug, and Component Bean-like/Wizard template areas;
Perl/Python – ActiveState and others provide robust editing and some debug but no 2-way visual design;
AJAX and JavaScript – again no major, comprehensive IDE tool but see our Blast from the Past 2.
In sum the LAMP and AJAX/JavaScript scripting tools lack the heavyweight ability to aid agile development. But this is not the only thing missing from scripting tools.

Other Missing Links

Java has 4 other characteristics that make it more appropriate for adaptive development. First, Java has a very robust third party development and discussion communities. See here for links to rich Java tool suppliers and discussion resources. Java development is rich in both commercial and open source tools and developers. This is not exclusive to Java as C/C++, PHP, and to an extent JavaScript/AJAX have the same commercial/open source mix of developer tools plus strong and growing user groups and discussion communities. See TIOBE for the changing strength of their discusion groups. But see also at TIOBE that Java leads the parade.

Second, in order to be able to apply the seal of J2SE, J2ME and J2EE compliant tools, vendors have to pass a rigorous series of verification and compatibility tests that sparked the Java battle between Microsoft and Sun back in the late 1990s. Microsoft wanted to add its own keywords and code libraries to the language without getting Suns approval or consent. Sun already had to contend with such fragmentation from other developers – but none so blatantly proprietary. The result has been that Sun continues to this day to chaperone the huge Java code base and ensures uniformity and interoperability across OS/hardware platforms that the LAMP and AJAX/JavaScript languages can only envy. See here for the examples of trying to matchup versions of PHP with versions of MySQL. Also, with AJAX frameworks growing like weeds even less standards will be initially available here even with the formation of the OpenAJAX Alliance.

Third, the Microsoft case plus arguments with IBM and others have forced Sun to put in place a Java Commmunity Process-JCP that is more responsive to the community through the whole steps of adding features and making improvements than any other I know of in development (I am preparing to stand corrected). PHP and Zend is a benevolent dictatorship. Perl is currently not operating well. AJAX and JavaScript is running on the edge of control like DOS or dBase 20 years ago. I know some Microsoft Office and Oracle database users that would love to have 1/4 of what the Java community has.

Fourth, Visual Cafe had a feature that allowed users to convert Applets to Apps or Apps to Applets (there are restrictions in converting to applets because of the security sandbox)with a few mouse clicks. Think of this as part of the Software Holy Grail – web to desktop app and back again in a few clicks. And with J2ME and mobile apps some vendors are arguing they can deliver the same portability to and between mobile phones and other embedded devices with appropriate-sized displays.

The fifth, and bottom line here is that Javas JVM has cross platform hardware and operating system reach like no other language.In fact if you match Java up with the 6As of RIA-Rich Internet Applications, Java is in the best postion to deliver these capabilities including online or offline operation. And Java does so with a VM engine that is at least 6-10 times faster than the scripting languages.

Now I am convinced the scripting languages have easier learning curves, often faster(no apparent) compile times and sometimes faster install processes (but as we have seen above not as well standardized as Java – my LAMP dread, everytime I add a new LAMP app to a website, be it PHPBB, Gallery, Mambo, WordPress – I have got to get all the different versions of Apache, MySQL, PHP and their extensions to work together. True with Java there is sometimes an echo of this same problem but with ANT, JAR files and CLASSPATHs there is a pretty quick solution). This speed of deployment and uptake is, along with unique programming features in each scripting language, their competitive advantage. The scripting languages also have been able to avoid brutalization by Microsoft with the exception of JavaScript where Microsoft continues to stall and delay on DOM rationalization, full CSS implementation, support for JavaScript 2.0, adopting the important E4X standard extensions, and ridding its JScript of deprecated and non-standard extensions as part of Redmonds general intransigence on Web development. But the bottom line here is that if Java were available on every desktop, device, and mobile – it would, as development systems stand now, become the hands down leading candidate for development.

(c)JBSurveyer 2006