Friday, November 25, 2005

Developer Productivity and Web Development

Programmer productivity or developer productivity is a concern for everyone in web development projects regardless if you believe it or not. You have to take productivity into consideration in the modern software engineering world. Significant productivity gains were made in the 1980s (i.e. Turbo Pascal, SmallTalk) and in the 1990s (i.e. Delphi, Visual Basic) that permitted developers to produce decent applications faster without compromising quality too much. In most cases, there is a trade off between speed and quality. The faster you develop the lower your code quality becomes. This can mitigated by employing refactoring techniques as part of your development process. The speed and quality of development was greatly reduced when the internet and web development turned the world upside down in the late 1990s.

I remember when web development meant getting things done as quickly as you could with the trade off in design, reuse, and quality. Basically quality suffered. I have seen enough disasterous code in ASP, VBScript, JavaScript, PHP, JSPs, and all the flavors of web development where reuse, separation of concerns, encapsulation and good design were not even considered as long as the code worked. Well this has gotten a lot of products and projects in trouble. A lot of this code is now considered legacy code and it quite a mess from a quality perspective.

In the past few years, there is a movement to get back to quality without sacrificing speed of web development. You can see this with the newer Java frameworks (i.e. Spring) and dynamic object-oriented scripting languages (i.e. Ruby on Rails, PHP Framework). I think the complexity and depth of web services implementations has necessitated this resurgence.

The Java web stack in my opinion can be productive as long as you properly choose the right frameworks and tools. As a Java developer and comparing my experiences in other languages, Java requires that you make framework good decisions all the time. You have to become skilled at adaptable design and framework integration to be a good Java developer. This requires quite a bit of research time and places a high premium on the skills of the developer. You have to be a Java practitioner and technologist to become "productive" in Java. It is attainable but requires a higher level developer to realize this goal. Java solutions tend to be verbose coding and XML configuration intensive so many of the frameworks and tools address the automation of the coding and configuration process.

Comparing Java developer productivity to a developer using Borland Delphi is like comparing apples to oranges. In Delphi, an average to mediocre developer can become productive in a relatively short period of time due to the Delphi RAD component-based development paradigm, "The Delphi Way". The downside to the Delphi paradigm is that upfront skills required to become productive are not as high thus limiting the skills growth of the developer over the long run. In other words, this style of developer never really needs to assimilate object-orientation or other higher level design and refactoring skills if this is not deemed important by the developer. This can create a developer skills plateau which is can dangerous to your software engineering team in the long run.

A similar scenario has occured with web development where loose scripting solutions (i.e. ASP, PHP) are as pervasive as good sold robust designs (i.e. Java). Well now that web development is at a point where both the clean/robust approach (Java) and quick (PHP,ASP) have been explored, a clean/robust and quick methodology is ready for prime time. This is where I believe Ruby on Rails has the advantage. I know it has been getting a lot of hype lately, however, from what I have seen I think it represents the future of web development.

At RootPrompt.org, I found yet another excellent review of migrating from Java to Ruby that is well written. "Evaluation: Migrating from Java to Ruby on Rails". The actual evaluation describes from a web development perspective how Ruby On Rails compares to Java web application development. These are the same web development issues I am dealing with in a similar software engineering research & development environment.

Many of the key points in the evaluation addressed all relate to Java productivity compared to Ruby on Rails productivity. Areas of concern for my research work is the increasing complexity of the Java web stack (frameworks integration; Velocity, Struts, Spring, Hibernate, DWR, Axis, etc..) involved in creating Java web applications using AJAX, web services against very large datasets. This appears to be the exact problem domain that Ruby On Rails tends to address. Based on the evaluation article, a productivity ratio of 10-20x is possible. If this is the case, then it makes web development on par with the developer productivity gains attained in the 1990s (ala Delphi) using RAD client/server tools. Kind of a "RAD for the Web" toolset.

I understand that reading an evaluation, researching a new technology like Ruby On Rails will not automatically make you more productive. However, it does address a personal sore issue of web developer productivity without sacrificing quality and robustness. Given the recent hype, maybe there will be a "Java on Rails" in the near future. That would be nice however, from what I have seen, it may not quite possible using Java due to the loosely typed dynamic nature of Ruby compared to Java.

Web development needs to become more productive without sacrificing the quality. The best of both worlds seems to be pointing towards a Ruby On Rails paradigm. I've said this in prevous postings to this blog. Ruby On Rails is definitely on the agenda in the near future for me. Sometime in 2006 with success, I should be able to have a much better perspective on this topic. Your mileage may vary.

Wednesday, November 23, 2005

More Web Services Standards

The buzz word Web Services just got more buzzy recently. That is with a 'b' not 'f'. OASIS just released the specifications for three, count them, more services. WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity. In the article, "OASIS Introduces Three More Web Services Specs" at SDTimes, they discusses the new services.

I've been getting into the web services arena recently and find that the maze of complexity with all the Web Services specifications can be mind boggling. Go to the OASIS site and peruse the maze yourself, here. I like Yahoo's approach. They use REST because it works and is simpler. They do not do SOAP. They do not intend to support SOAP. I think Amazon.com has a similar philosophy towards web services.

The new services require that all vendors build their own support for the new services. The article discusses how iTunes, Amazon.com have heterogeneous services for e-commerce purposes that are not necessarily standards based. You have to work within the context of their services infrastructure.

Ok, so what problem are the new services solving if iTunes, Amazon.com, Google, Yahoo and others are doing so well today? Your answer or guess is as good as mine. One key note about the SDTimes article, the new specs are part of the Windows Communications Foundation that will part of the forthcoming Windows Vista release.

Thursday, November 17, 2005

The Need for Multilinguality

I grew up in a multicultural and multilingual environment. This has both pros and cons but from what I have seen in the computer science field, I think it has more pros than cons. The general tone that I have seen with technologists, programmers, and computer scientists in the past few years is to become proficient in multiple languages. What I mean by proficient is not to just know or be exposed to a language but to be fluent in it.

In the "Ruby the Rival" article, there are several comments about learning a new language or technology every year. I have always subscribed to this idea however, it has only been more recently that I have seen it being pushed in the mainstream by the writers and leaders in the information technology field.

I think there is a distinct advantage to being fluent in multiple programming languages, paradigms, and techniques. Knowing how to do client/server programming, web development, GUI development, low-level I/O, scripting, and networking and communications programming are all skills that competent developers all know how to do. Constantly learning new languages, skills, and technologies is another trait that keeps your skills relevant and current. Another advantage is that when you step outside of the box of one language you start to see patterns of differences or similarities between them. This helps you understand both languages better. It even provides insights into the mechanics and techniques of the languages.

Looking at the emerging relationship between Java and Ruby is a good example. There are many heavy weight Java technologists that are leaning towards Ruby on Rails. The reasons do not appear to be to replace Java but to complement it with a different paradigm and technology. Ruby on Rails is primarily a web development technology. Java covers everything but the kitchen sink. (web development, GUI, client/server, networking, communications, etc.) Ruby may even drive innovation within Java technology that would otherwise not be possible if you stay inside the Java sandbox.

Learning a new language or technology a year or every few years is something that I would recommend to anyone who is in the computer science or software engineering field today. You may not use the new language for anything outside of research and experimental programming but it is a good habit to have. I think it has many advantages for which I cannot even explain based on my life experirence of being raised in a multilingual family.

Tuesday, November 08, 2005

Operating System Virtualization

Operating System Virtualization is capturing quite a bit of buzz lately. VMWare recently released VMWare Player as free software. VMWare Player Showcases New Virtual Realities describes the new product's features. There have been several case studies about how virtualization has saved many large companies millions in hardware costs. IBM is using virtualization in its workstation and server blades technology to put multiple virtual machines into each individual blade slot. Prior to using virtualization, each blade slot represented a single machine.

In the news lately is quite a bit of buzz about virtualzation. "The Rise of the Virtual Machines" discusses various products and strategy of implementing virtualization. This is a great article covering the state of virtualization today and provides good insights into issues to keep in mind when researching this technology. IBM is doing heavy research in virtualization. See Secure Hypervisor. (What is a hypervisor?)

Just last week Red Hat said it wants Xen, the leading open source virtualization technology, to be in the next release of Red Hat Enterprise Linux (RHEL). Here's the RedHat 11/1/2005 news release discussing their virtualization strategy for 2006/2007. Fedora Core 4 already includes Xen in it. (Fedora Virtualization) Red Hat is even devoting programmers to speed up the process of getting Xen integrated into the Red Hat distribution. Here are some screenshots of Xen in action.

Sun OpenSolaris is even getting into this game in order to compete with Linux. "OpenSolaris Has Virtual-Machine Edge Over Linux" describes their virtualization technology. They call their virtual machines 'Solaris Containers'.

If you have not used a virtualized machine then you have got to check out this stuff. I spent some time working with VMWare last winter and was quite impressed. I learned quite a bit about this technology during that timeframe. VMWare is pretty incredible when setup correctly.

From the research I have done with open source Xen, this looks to be even better since is designed for the Unix/Linux world. Xen implements a paravirtualization approach. Based on reports I've read, Xen performance is above and beyond what VMWare does due to implementation of paravirtualization technology. Getting Xen working is not quite that easy yet. Currently, the kernel of the guest operating system must be modified to run with Xen. However, with Xen 3.0 which is currently in alpha it will be a viable competitor to VMWare in 2006. XenSource has even gotten Windows guest operating systems working on their Xen 3.0 alpha release.

Hopefully, with Red Hat and IBM investing heavily in the open source virtualization technology, sometime next year this will become mainstream technology. Heck even Microsoft is jumping aboard on this technology. They are promising virtualization as a part of Vista, the next release of Windows. With VMWare already doing so well on Windows, I wonder how good the built-in virtualization in Vista will be? Given past history of Microsoft, I suspect it will be somewhat mediocre.

Back to the virtualization topic. If you haven't gotten into this technology yet, you will in the next few years. Within Microsoft, IBM, VMWare and the open source community this technology will only continue to grow and become mainstream in the near future.

Sunday, November 06, 2005

Microsoft Singularity

Singularity is the code name given to an internal Microsoft research project to build an operating system from scratch. This research project has no ties to Windows as per "Microsoft's Other OS" article states. Note, some of the links in the this article are not available. The interesting points about this proof of concept research project is that is built entirely using Microsoft languages. In particular, it uses a derivative of the managed code C# dubbed Sing#. Singularity even got attention at Slashdot, "The Microsoft Singularity".

The published technical status report (pdf) to date reports to having the micro kernel running. This sets the foundation for building modules or plugins to the operating system core. There is a team of approximately 35 researchers spanning many disciplines. The road to the future of this project currently is still purely for research purposes. I am sure there will be eventual commercial use or application of the research knowledge gained.

An interesting observation about this project is that only Microsoft technology is used to build it. Given the well known ambitions of this company, does this mean a 100% proprietary operating system in the future will be a successor to Windows? I can speculate quite extensively about the future possiblities (not all positive) for an operating system from this particular organization.

Another viewpoint is that 'reinventing the wheel' comes to mind when there are so many mature micro kernel alternative operating systems today based on Linux. There was another large corporation (IBM) that went down this same path in the 1980-1990s building a proprietary operating system (OS/2) that did not succeed in the marketplace. It looks to me that history may be repeating itself over the next 5-10 years with yet another big information technology corporation.

Friday, November 04, 2005

The Zend PHP Framework

PHP is known as the 'quick and dirty' language for building web applications. Well, it looks like Zend has been paying attention and recently released their Zend PHP Framework in mid-October. At the same time they also announced support for Eclipse. Now this would be a major boon to all PHP and Eclipse developers.

The PHP Framework, based on PHP 5, from what I understand implements a robust MVC paradigm analogous to Java Struts and Spring to the PHP world. This brings scalability to PHP solutions. With IBM and Yahoo being major PHP supporters, this ensures that Eclipse remains a universal IDE. With the Ruby RDT and soon PHP Eclipse integration, Eclipse is becoming the de facto open source IDE for the future.

I read a few books on PHP and always thought it was a good language. The only downside as a scripting language is that no really good frameworks exist. At least not any frameworks to which I know about or have been exposed.

As a PHP developer you are coding at the user interface, logic and database levels concurrently without the nice separation that exists in an MVC architecture. PHP's philosphy is to keep it simple. This simplicity and lack of decoupling is where the speed of development and dirty design labels are attached to PHP development. This can be interpretted positively and negatively depending on your viewpoint. I think Java purists tend to view this negatively and at the other extreme PHP purists try to keep everything quick and simple. There are issues with both viewpoints but this posting is not the place to argue about it.

Ok, back on track. Due to this simplified development style, PHP is being used and written about quite a bit this year because of the increasing complexity of web applications. "PHP succeeding where Java isn't" is a good article by Mark Andreesen that is straight to the point about PHP compared to Java. PHP is learning from Java and evolving. Java is also evolving but I don't think it is actually competing with PHP directly. Also see the related articles, "PHP is what Java was 10 years ago", "Innovation Is Humming". Yahoo would not be using PHP for most of its stuff it did not have confidence in the technology.

Based on the trends with Ruby on Rails, Java, .NET and PHP it looks like clean, robust and quick are where these web applications technologies are converging. This is a good thing for everyone involved for the foreseaable future for software engineering. I'm stoked about this. It means that sound computer science theories, principles and best practices are winning the intellectual battles of programming the next generation web applications.

Tuesday, November 01, 2005

Practicing Your Craft

With the rate of change in the software engineering field, practicing your craft will keep you relevant and in touch. Do you want to become a dinosaur as your career matures or do you want to continue to hone your skills and be a software engineering practitioner? Doctors and musicians must continue to practice in order to stay on top of their skills and continue to be relevant. I just read an excellent article concerning a technical career, "Avoiding Oblivion in Your Tech Career", that you should read if you want to stay relevant and effective as your career progresses.

I remember reading the book "Becoming A Technical Leader" by Gerald Weinberg in early 1990s when I was contemplating taking my first technical leadership/management job. This book and a few others like it helped me make a difficult career decision. I wanted to remain technical however, my boss was offering me the opportunity to get into the technical leadership and management ranks. The recent article posted at O'Reilly Net above reminded me of what I went through in that time period and the reading I did about remaining 'in touch' with technology.

The fundamental problem with making the transition from technical to management is staying in tune. It becomes more and more difficult to stay in touch due to your increasing non-technical responsibilities and eventually you lose touch with the fast paced technology world.

The following excerpt from the web article stands out:

"The reason technologists fade so quickly is that they stop practicing their craft. They stop writing source code, they stop modeling systems in detail, they miss the paradigm shifts and use dated jargon, they brag about the old days, and (I have observed) they break their ties with the young development community. They fly at 30,000 feet, as you will hear them say often, alongside executive stakeholders.

Technology is unique in this regard. The senior surgeon performs landmark surgeries, the conductor plays brilliant piano, and the building contractor runs out to grab the toolbox from the back of his truck. In medicine, music, and construction, senior contributors are practitioners, who never part with their instruments. And they aren't reluctant to use jargon. Surgeons, for example, never tone down their medical talk unless the patient asks them to."


Based on the research I did over 10-years ago, it was quite refreshing to see this same message reiterated in today's faster paced 21st century software engineering universe. It's good to know that I made some half way decent decisions in the early 1990s. Somehow I have managed to remain 'in tune' even though my non-technical responsibilities continued to increase over the past decade.