jump to navigation

Debugging RIA Services September 16, 2008

Posted by Simeon Simeonov in Flex.
Tags: , , , , , , , , , , , , , , , , , , , ,
18 comments

Introduction

This is a call to action to everyone building clients, servers and frameworks for rich internet applications (RIAs) to improve the life of RIA developers by improving the debugging of backend services RIAs depend on.

I’d like to thank the people who’ve offered valuable feedback + additional information that I’ve integrated here.

Motivation

The relationship of an RIA to its backend is quite different than that of a traditional Web application. In a traditional, dynamic HTML generation Web app, the output stream is under the control of the developer and the application server. Developers can freely mix application output with diagnostic information. By contrast, RIAs have a narrow communication channel with the server, typically using a service-oriented architecture (SOA). Because the output format is typically XML or JSON (and because there are no established standards for augmenting message payloads) there is no opportunity to include any additional information. This is particularly problematic during debugging.

Consider the following with Adobe Flex as the example frontend and ColdFusion (CF) as the example backend although the discussion applies to any RIA:

  • An exception on the server would cause a service request to fail without providing any useful information to the developer. In particular, there is no way to see the exception information or the server-side stack trace, despite the fact that CF would generate ample information useful for debugging.
  • Turning on debug information output on the server would break the service by adding HTML at the end of the XML output. Developers have no good way of consuming that debugging information other than test-driving the service in an HTML test harness.
  • CFDump is a one of the most beloved tags in CFML. Almost every developer uses it in every application because it provides great debugging efficiency. There is no way to use CFDump in RIA development.
  • There is no way to generate any auxiliary, Flash trace()-like output in service responses, something any HTML developer is used to doing. Again, when using services with RIA front-ends, developers are flying blind.
  • Conversely, RIA developers have no good mechanism of creating any persistent application output. For example, while writing a message to a log takes one line with CFLog, an RIA developer would have to implement a logging service in order to achieve this capability and store some information for future analysis.

Debuggers are not the answer

Every backend environment has its own debugging capabilities. Also, there many ways to debug AJAX and Flex applications:

However, debuggers do not address the problem of efficiently debugging backend services for RIAs. Most Web developers don’t use or don’t know how to use debuggers effectively. Debuggers are good for step execution and occasional variable inspection. They are poor at displaying a lot of specific information efficiently. Also, using both a client-sde and a server-side debugger often slows down the develop-test-fix cycle. In short, using debuggers are no substitute for having flexible and powerful diagnostic output from backend services.

As an example, consider the actions a developer must take in a CF debugger to get the information equivalent to seeing the output generated by a CFQuery exception with stack trace enabled or a CFDump of a query with 200 rows. There is simply no comparison in terms of productivity.

The closest approaches I’ve found to what I’m proposing here are FirePHP and the ability of ColdFusion to return page debug data to the Flash player through FlashRemoting using ActionScript Message Format (AMF, a binary protocol) server debug response headers. (Mike Nimer pointed me to the CF-AMF capability and to a FlexDebugPanel that he built to better display the information.) Both approaches use response headers, which limits their ability to deal with large amounts of data. I also think the industry needs a broader and more standardized solution.

A personal tangent

A recent experience underscored these problems and was the personal motivation for me to write this. The latest RIA I built had a Flex 3 frontend with a CF8 backend. Despite its simplicity-one component (CFC) on the backend and only a couple of thousand lines of MXML-I constantly had to work around the lack of visibility when I was invoking services from the client. Before long, I found myself installing Fiddler to see the HTTP traffic and logging WDDX packets and CFDump output which I then crudely displayed in a browser window using a quick’n'dirty Web page. When using the client-side and server-side debuggers I was frustrated by the number of clicks it took to get to data I cared about and the amount of irrelevant information presented, e.g., tons of underscore-prefixed internal variables for unnamed controls I had to scroll through to get to variables I cared about.

When I pinged a few people building AJAX and Flex apps I heard the very same feelings about their debugging experience and the difference between building RIAs vs. traditional Web applications.

Many of the ideas proposed in this document are not new. Back in the spring of 2001, I built what may have been the first prototype of Flash communicating to servers using SOA. For the backend I used CF with a dynamic dispatch layer to custom tags (CFCs weren’t there yet). In testing the prototype I hit the same debugging problems. I implemented a feature that took diagnostic output from the server and displayed it as trace() output in the player. It made my life easier but it wasn’t a generic solution because it relied on a particular response format. The FlashRemoting team later on generalized the concept via the amf_server_debug response header, which is not an HTTP response header but a payload response header (think SOAP).

Some years ago I would have jumped to code the solution I propose here and open-source it, like I did a decade ago with WDDX. For better or worse, I don’t code that much these days. Instead, I’m focusing on helping entrepreneurs start companies. I hope this post inspires someone to tackle this problem and share their work with the RIA developer community.

Proposed solution

Improving the debugging of RIA service backends requires a multi-faceted approach that spans clients, servers and tools. In order of importance, there are four inter-related pieces:

  1. Establishing a diagnostic output channel from the server to the client. The goal here is to give Web developers familiar capabilities such as the ability to see exception diagnostics, to display diagnostic output and dump complex variables.
  2. Providing a persistent output channel from the client to the server. The goal here is to enable structured logging from the client to the server so that important diagnostic output can be preserved for future analysis.
  3. Implementing structured logging on the server. The goal here is to improve the power of logging by building the kind of logging system that makes developers more productive during the debugging cycle.
  4. Improving debuggers. There is no such thing as a true RIA debugger out there. Since this part of the solution has much broader scope, it is not covered here.

Architecture

There are multiple ways to implement the proposed solution. The approach outlined here is probably one of the simplest. It involves a single diagnostic output specification, three new services on the backend for server-side diagnostic output, client-to-server logging and log viewing, and a reusable viewer of diagnostic output. These capabilities are exposed in an appropriate manner through the frontend and backend programming models and frameworks.

Figure 1. RIA diagnostic output architecture

Diagnostic output specification

The diagnostic output specification has three parts:

  • A schema for identifying the output format
  • A mechanism for identifying specific output stored remotely
  • A mechanism for passing diagnostic output identifiers from the server to the client

Diagnostic information is provided in “documents” (chunks, payloads, etc.) according to the schema. Each such document must be URI-addressable during its lifetime. The exact format of the URI is specific to a particular server environment. For example, in a ColdFusion deployment it can be a URL to the diagnostic output service. The URL will be parameterized such that the right diagnostic information is returned to the client. Let’s call this a DebugURI (dURI).

For performance reasons, the URI must be able to address sub-parts of any single pile of diagnostic information. For example, if the diagnostic information includes a reference to a 10,000 record query it wouldn’t make sense to either arbitrarily restrict how many rows the client can have access to or to ship all 10,000 lines with the diagnostic information request. However, to simplify implementation, the URI format need not be exposed to the client. For example, the client shouldn’t necessarily be able to request rows 9,212 – 9,532 of the query. Instead, the server can simply put a placeholder in a document saying “there is more data here and if you want it, request this URI and I’ll get it to you”. Let’s call this particular type of dURI a ContinuationURI (cURI).

The specific mechanism for passing diagnostic output identifiers from the server to the client is protocol and environment specific. An HTTP response header carrying the dURI is a simple choice that works well across languages and platforms and does not modify the response payload.

The diagnostic output schema is a format (not necessarily a formal XML Schema) for describing the information typically encountered while debugging applications, including but not limited to:

  • Exception information
  • Call stack information
  • Data structure dumps
  • Application state information
  • Service requests & responses
  • External service interactions, e.g., database queries and responses
  • Performance-related information
  • Developer-created diagnostics messages

There are trade-offs in the amount of detail in the schema. With more detail, providing support across environments will take a little more time but, on the other hand, the output viewer can be more capable, e.g., allowing dynamic expansion of data structures, etc. With minimal detail, developers will only be able to look at volumes of text in the viewer.

The schema should have built-in extensibility features.

Last but not least, the schema must specify the format of the cURI placeholder discussed above.

Backend support

Backend support includes a persistent and a transient store for diagnostic information and three new services.

Data stores

The backend must implement two data stores, one for run-time diagnostic information and one for persistent diagnostic information.

The runtime information store can leverage the traditional app server state management capabilities, in particular, session management. The information model is simple. Diagnostic information generated during the processing of a request can be maintained as an aggregate object indexed by dURIs. There needs to be a purging policy for efficient resource management.

The persistent information store can leverage the existing logging architecture of a server. However, a more efficient implementation may want to use an embedded database. See the following discussion on the log viewer.

Services

The debug output service is invoked via dURIs passed with a server response or generated by the log viewing service (see below) or with cURIs. It generates a diagnostic information document. It can use a default or user-configured policy governing the size and detail in these documents, adding cURIs where appropriate. The debug output service can pull information from both the transient and persistent stores.

The remote logging service takes a diagnostic information document and some additional meta-data describing where, when and how the diagnostic information was created and persists that information.

The log viewing service has two functions. It monitors the log for changes to know when new data is available. It also allows the log viewer to list and query (and potentially search inside) the available diagnostic information documents. Every available document is identified by a dURI that the client can pass to the debug output service to retrieve the document.

Client-side support

Client-side support comes via a pre-packaged viewer application. The viewer is an RIA that provides rich functionality for working with diagnostic output documents such as:

  • Communicating with the application running on the client, allowing it to deliver diagnostic output that can be displayed richly. For example, this would be substantial improvement compared to basic trace() output in Flash or Log4Ajax.
  • Listing of available information. Some information can be provided by the client. Transient information from multiple server interactions may be available. In addition, all the persisted information is available. The viewer should also be able to open a file in the diagnostic output format.
  • Allowing some information to be persisted for future analysis. This becomes particularly interesting if there is support for annotations and sharing of the information with team members (via a URL to the debug output service or as an email attachment).
  • Supporting flexible data structure navigation and basic search across the data structures and messages.
  • Providing appropriate formatting for exceptions, call stack information, performance information, etc.

An ideal implementation of the viewer would be as an AJAX or Flex application component that can communicate with both Flash/Flex and other AJAX applications independent of the server environment. Client-side debuggers can add the viewer capability also. Perhaps the FireBug Working Group can take this on?

From a user-experience standpoint, the viewer should be able to run next-to an application as a docked component as well as a pop-up in a separate window, which would be particularly useful for developers with multiple monitors.

Specific environment support

These capabilities should be supported as appropriate by specific RIA environments. Ideally, support should be implemented at the application server level for maximum performance, efficiency, etc. As a second option, it can be provided as native or side-along extensions to common frameworks.

Specifying invocation intent

In some such environments it may be helpful to know whether a server request is made by a browser for the purposes of HTML display or as a service call. In the case of service calls, certain display-oriented capabilities such as debug output or the output of the CFDump tag in ColdFusion can be automatically redirected to contribute data to the transient diagnostic output store. In some cases the context of request can be determined directly from the HTTP-level information, e.g., a POST with Content-Type application/XML. In other cases, such as a simple HTTP GET to a RESTful service, it is difficult to do this without knowing a priori that the URL is a service. Some server components such as ColdFusion CFCs can be addressed in a number of different ways. It therefore may be helpful to consider having RIA clients optionally send a custom HTTP request header to identify the intent of the request.

Additional considerations

Managing diagnostic information in this way adds substantial overhead to application processing. It should only be enabled in debugging scenarios.

Exposing detailed server state information to remote clients poses a security risk. The backend services should require authentication and they should be able to run over a secure connection to prevent data snooping and man-in-the-middle attacks.

Manipulating diagnostic information with such ease can benefit traditional HTML application development also. Therefore, it is worth thinking about ways to integrate the view application with traditional HTML applications.

Conclusion

This document outlines a simple approach to improving the debugging backend RIA services across languages and platforms. The approach is amenable to standardization as it includes a common format for diagnostic output and a common viewer application.

These could be developed with open extensibility in mind and remotely-hosted viewer extensions allowing, for example, Ruby-on-Rails (RoR) to provide some special RoR-specific structured output that can be natively viewed via an extension (implemented as a JavaScript or Flex component) hosted on rubyforge.org.

Postscript

The discussion here points out some of the fundamental differences between RIAs and traditional HTML applications. Beyond improving the debugging of RIA services, there are many more opportunities to provide better support for RIA applications. After all, the first Web application server shipped a dozen years ago. Too much of what app servers do assumes dynamic HTML generation as opposed to Flex/AJAX clients. I’m surprised I haven’t seen more innovation in this area from large platform vendors. Smaller players such as Aptana (with Jaxer) and JackBe are pushing the boundary but their lack of distribution on the backend limits the effects of their innovation.

Flash vs. AJAX is The Wrong Question February 27, 2008

Posted by Simeon Simeonov in Adobe, Flex, Macromedia Flash, Mobile, Web 2.0.
Tags: , , , , ,
5 comments

Following my post on the Flex 3 and AIR launch, a number of you have pinged me privately about the Flash vs. AJAX question. It goes something like this: “I know you are going to write that you prefer Flash/Flex because you were chief architect at Macromedia but what are you telling your own companies? Should they go with Flash or should they go with AJAX?” Flash vs. AJAX is the wrong question for a number of reasons, the most obvious one being that Flash is an application runtime environment and AJAX is a design/implementation pattern for applications.

In the next few days I’ll collect my thoughts and do a post on real question, which is about technology/tool/platform choices for building Enterprise 2.0, Web 2.0 and Mobile Web 2.0 applications. 

Adobe Engage 2008 To Launch Flex 3.0 and AIR February 24, 2008

Posted by Simeon Simeonov in Adobe, Allurent, Facebook, Flex, Google, Industry News, Macromedia Flash, Microsoft, Web 2.0, startups.
Tags: , , , , , ,
14 comments

Tomorrow, at the invitation-only Engage 2008 event in SF Adobe will launch AIR and Flex 3.0. If you want to get a sense of what will be shown, here are the slides from the January pre-release tour. The event has attracted a high-powered group. For example, Marc Benioff, Chairman & CEO of salesforce.com will speak. (Salesforce.com’s AppExchange platform has a number of Flex-based extensions, including our own Centive.)

The AIR / Flex 3.0 launch is a big deal for three reasons:

  • The AJAX ecosystem is heavily fragmented
  • Flex 3 is a big step forward
  • AIR is a disruptive innovation enabler

There are just too many pure AJAX frameworks out there. This may be great for some abstract notion of innovation but is pretty bad for market adoption. It causes confusion and friction. Developers hate that. They want to feel like they are developing skills for the next cool technology which will be around for a decade. The tooling is also pretty immature, although my friend Paul Colton @ Aptana is doing some pretty cool work. I have also seen a number of new startups trying to make things better in this space but for now the situation is not great. After initially missing the AJAX boat in a big way, Adobe has recently gained traction in repositioning from Flash vs. AJAX to Flash vs. DHTML, both of which use AJAX. As proof, I’ve seen more startups mixing Flash/Flex with DHTML/AJAX.

There seems to be a rule that really big software companies get things right by version 3.0. That has been the case for years with Microsoft and now Adobe may be large-enough to join the list. Flex 1.0 shipped late and left a lot to be desired, which made Flex 1.5 more or less a requirement. Flex 2.0 was a big step forward but there was much more left to do to build a great RIA platform. Flex 3 steps up the innovation pace on a number of fronts. Better developer tools. Improved frameworks. Smaller application size. Better data handling throughout. And the Flex SDK as well as the BlazeDS remoting and messaging services are now open-source. Everything is in place to accelerate Flex adoption. There is a massive shortage of Flex developers in the market, always a good sign for a platform. The main challenge for Adobe remains monetizing the platform. I’m not 100% on board with the Flex Builder tool as the main revenue driver although the team recently added some great people from the ColdFusion team who really understand Web developers. For examples on what Flex can do, check out the app showcase. Warning: you may spend more time there than you previously  imagined.

AIR will become the biggest enabler for media-heavy Web applications. To get an idea about what I mean, check out the Allurent Desktop Connection video. This only scratches the surface of what one can do with a cross-platform, always on, richly interactive application with Net access and plenty of local storage. Adobe isn’t the only company who gets this–Google has plans based on Google Gears and Facebook has also moved in this direction with the Parakey acquisition–but Adobe has so far executed the best. Not surprisingly, Microsoft remains paralyzed by the Web <-> desktop strategy tension.

AIR is truly disruptive–in Clayton’s exact sense of the term–for two reasons. First, it given Web apps access to the desktop. Second, it does so while subverting the native operating system installers (using the Flash player executable as a conduit) which gives Adobe and its ecosystem substantial freedoms. One caveat–security. Adobe has done a pretty good job with the Flex 3 security model but it hasn’t been extensively tested in the wild. Also, the anti-virus and anti-spyware vendors have often been trigger happy in the past to blacklist totally legitimate software. I’m not expecting them to blacklist the AIR runtime but who knows how they’ll treat some of the apps… I hope the Adobe platform marketing team and evangelists have spent enough time with the security vendors. This is something I advised them to do at the Engage event last year based on some bad experiences from our portfolio.

With this launch, Adobe cements its platform leadership in Web 2.0 and makes life easier and more interesting for millions of developers and designers. A shout out to all my friends at Adobe who worked hard to make it happen and to everyone who put skin in the game during the beta process.

Adobe Engage February 26, 2007

Posted by Simeon Simeonov in Adobe, Flex, Macromedia Flash, Web 2.0.
2 comments

I’m in SF this week to attend Adobe Engage on Tuesday, a private all-day “influence the influencers” event. The focus is on the Adobe platform, encompassing both online and enterprise technologies. (I don’t think the Mobile group will be represented–they are ODM & operator-focused at this point.)The list of presenters and attendees is impressive, from Jeremy Allaire to Mike Arrington to Om Malik to Robert Scoble. It should be a day full of good conversations, which will be continued at the Jade Bar after the event, courtesy of Polaris Venture Partners.

Here is the kind of applications we’ll be talking about:

An application called Tour Tracker 2.0 launched today for the Tour of California bike race going on this week.  The entire application was built in a few weeks with the Flex Framework, with Flash Media Server and Flex Data Services providing video and data streaming for the application.  If you haven’t seen it yet, you can check it out at http://www.amgentourofcalifornia.com/docroot/tourtracker2/index.html

Bigger May Be Better for Secure Scripting January 23, 2007

Posted by Simeon Simeonov in Adobe, Flex, Macromedia Flash, Microsoft, Security, Web 2.0, opensource.
add a comment

On the topic of security as a competitive advantage, a recent Evans Data survey of scripting environments puts ActionScript and Adobe Flex on top. ASP.NET AJAX (Atlas) is in second place.

The open-source projects are, unsurprisingly, rated lower. It’s hard to get as excited about security as it is about flashy features. It’s going to take some time for open-source projects to mature and for contributing developers to start taking as much pride in quality and security as they do in functionality.

“Developers know that strong security is the foundation of great user experiences, and an increasingly important selection criteria for rich Internet application development technology,” said Jeff Whatcott, vice president of marketing at Adobe. “It’s wonderful to see Flex recognized as the security leader.”

MAXimum Burn November 1, 2006

Posted by Simeon Simeonov in Adobe, Adobe MAX, Flex, Industry News, Macromedia Flash, Mobile, SaaS.
9 comments

I haven’t posted in nearly two weeks because I’m still recovering from Adobe MAX 2006. Yes, it was in Vegas and, yes, the Macromedians (at least) know how to party till very early in the morning. Plus, two of my companies are fundraising and I’m looking at a couple of very cool new startups in depth. There just wasn’t enough time for ego enlargement through self-publishing…

MAX had great energy. The combination of Macromedia’s product momentum and energy and Adobe’s design sensibilities made the keynotes worth seeing. Kevin Lynch‘s quiet credibility worked especially well. Of course, there weren’t any Steve Job’s-style mega-announcements but that’s the difference between a consumer play (where you keep everything secret till the last second) and a developer/enterprise play (where the Labs concepts works great).

I have too many notes from the conference so here’s just a flavor of what’s important:

  • Flash Player. The new Flash runtime is ridiculously fast thanks to a large extent to the efforts to once JRunners Edwin Smith and Tom Reilly and JIT compiled code running on a new VM. Unofficial numbers are 1/3 the speed of natively-compiled Java. The good news is that the team has a few additional optimizations up their sleeve. The even better news is that in the future, these types of radical performance improvements should make their way into Flash Lite, where they’ll matter even more than on souped-up PCs.
  • Apollo. After a false start with Central, the company has regrouped and solved the basic problem of cross-OS installable applications with access to local resources. Don’t know what this means? Check this video out. Two of my startups at the conference were quite interested in the technology–it saves a lot of time and offers online apps a simple way to have a desktop presence and deeper integration with local resources. eBay had built a cool demo (can’t find a link to it, for the life of me).
  • Tools. The real power of the MM/Adobe merger is in streamlining workflow for web developers & designers. This is great for people who live in the tools. Notable is the push towards better mobile content publishing. Video tools have gotten better and Adobe is for the first time getting into audio (for video pros as opposed to audio pros) with SoundBooth. The Builder Eclipse add-on for Flex is starting to look pretty good.
  • Servers. Flex 2.0 is maturing rapidly–discussions I overheard at the conference were sophisticated. People are building real apps. Lots of stories about pain in getting DHTML to work just right cross-browser. With the Flex SDK selling for $0 and that message spreading in the industry, I expect to see a lot more Flex-powered apps next year. The combination of Flex and Apollo is particularly powerful. The ColdFusion team is continuing to innovate on the ease-of-use front, both with new server features and with great wizards/frameworks that integrate key technologies cross products into solutions. It’s great to see that kind of passion on the team of an eleventh-year-old product. LiveCycle is now in the same BU as ColdFusion and Flex. Expect to see more Web-PDF integration and multi-channel deployment of PDF forms.
  • Mobile. Adobe is really starting to get mobile. They are expanding their focus away from OEMs to operators through FlashCast (good) and are also now starting to leverage the developer community more (great). They have hired a head of developer relations for mobile, a great step. The ecosystem around Adobe Mobile is growing. The Wednesday keynote featured John Stratton (on video) and Peggy Johnson. The biggest news is that Flash Lite apps distributed through a select set of aggregators don’t have to go through a separate certification process. This is a big help for smaller mobile ISVs and content shops and a step in the right direction. Adobe can do much more, though. They have to push to clarify the economic model and simplify the business negotiations with aggregators and carriers on behalf of publishers.
  • Strategy. It seems like the post-acquisition integration is going well. I heard only a few meaningful complaints from various teams and, on balance, many more positive comments. As a friend of mine put it “Adobe has been lucky that the world waited for them to get their act together.” While the post-Vista assault from Microsoft will be intense, the company has a great base on the design side, a fantastic reach to the desktop and the theoretically best technology for mobile experiences. I bet there is a lot of thinking going on about SaaS and getting deeper into the applications business (based on the success of products such as Breeze).
  • Ecosystem. Adobe announced $100M available for distribution through Adobe Ventures to help build the ecosystem in critical areas. In talking to John Leckrone (head of Adobe Ventures) and John Brennan (SVP corpdev) about it, I got the sense that they have a solid yet flexible model in mind that combines the cash with real value add rooted in Adobe’s reach and industry influence. Update: Adobe took a $30M piece of MobiTV’s $100M Series C. This is about getting into the Flash video ecosystem.
  • Clubs. The sampling included Tao, V, Mix, Pure and Tabu. Pure was voted the clear favorite.

Topics to think/write more about:

  • Apollo + X = Revolution. X = ?
  • What’s the tipping point for Flash Lite?
  • What’s Adobe’s SaaS strategy?
  • Does the company have a Web 2.0 or Enterprise 2.0 play? Update: word is that Adobe will make a big announcement of sorts at the Web 2.0 Conference next week.

Flash Apollo Demo September 13, 2006

Posted by Simeon Simeonov in Flex, FutureOfWebApps-SF06, Macromedia Flash, Web 2.0.
add a comment

Well, it’s funny I wrote about Web vs. Desktop apps earlier today because a Flex Evangelist from Adobe (Ted Patrick) just demoed a cool Apollo app.

Apollo is the result of integrating a number of threads of work that have been many years in the making. First, there is the evolution of the Flash player away from being an app to becoming a rich experience platform. Flash recently turned 10. (Cool video of the celebration courtesy of Mike Chambers’s blog.) Five years into its life, following the Allaire/Macromedia merger, Flash started evolving away from being a just media player. Second, there is the deeper integration of Flash into the host OS. For example, you can install Flash apps on a computer and embed a browser inside Flash, blurring the line between Web and desktop software. Finally, there is Central, which ultimately should tie into Apollo.

I’m happy Adobe has finally gotten to this point. Back in 2001 I helped create Flex and wrote internal Macromedia whitepapers on deeper Flash/desktop integration. Flex took some time to fully figure out its model. The Flash/desktop integration was both difficult from a technical standpoint but also complex to buy into from a strategy standpoint. Central didn’t have much success initially, though the concept is strong. With all these things coming together in the near future, I expect to see compelling applications and a gradual erosion of the distinction between Web and desktop apps.

The trouble with Ruby August 9, 2006

Posted by Simeon Simeonov in Flex, Ruby, Ruby on Rails, Ruby/Rails, RubyOnRails.
4 comments

Yakov Fain, a Java & Flash/Flex guru, notes that Ruby is climbing up the Tiobe Index and spends some time looking into why this this is the case.

I like Ruby but I don’t see it becoming a mainstream language soon. The biggest strength of Ruby–the OO nature of the language and some of its cooler constructs–are its greatest weakness. Consider continuations, for example. How many people in the world would know how to implement something with continuations without screwing up?

By definition, the vast majority of developers out there have average skills. They need tools and programming models that are safe more than they are powerful. We learned this in spades at Allaire. ColdFusion became one of the most widely used Web development platforms because it created a rubber room where hackers, non-professional programmers and many others could build apps without the thinking too hard. Were they the best architected, most scalable apps? Absolutely not. But they came out quickly and they worked. (Hey, MySpace was built on ColdFusion initially and it served them well.)

If Ruby becomes more popular, it’ll be in the way C++ came to power. Lots of C developers started playing with C++. Initially, they wrote bad code and made all the mistakes of beginning OO programmers. Expect to see lots of people say they are Ruby programmers w/o actually taking advantage of what makes Ruby a great programming language.