Configuration -- programming. Which is easier and why? In this article Simon shares his thoughts... In the "Good Old Days" of programming (say 20 years ago), you wrote everything from scratch. It was hard work, not only because you were rarely able to plug in existing third party components to expedite project development, but also because you had to think hard about all aspects of the software to be developed. Some aspects, such as scalability, security, interoperability, resource allocation, or transaction management, might have been particularly difficult to tackle, especially if you were working as part of a small team of developers. You might have made a good effort to solve some of the difficulties, but devised ad hoc solutions to others. And solving all the problems probably took quite a while. The advantage, I believe, was that you thought hard about all the issues involved, and you devised a solution which you understood thoroughly. These days, everyone talks in buzzwords. Some new ideas and some old ones are borrowed, rehashed, renamed and resold as ‘the latest craze’. The developer’s world is a bewildering landscape of ideas, hype, progress, distraction and information overload. And software development is no longer an isolated process - every developer is ‘networked’. If you have a question that you and your colleagues can’t answer, you invariably turn to the Web to first pose the question, then sort the wheat from the chaff in the answers provided. The way that a software application is built has changed too. You can’t afford to start from scratch because it would take too long, and your end-product would likely be inferior. (And of course, your competitors don’t start from scratch either.) Instead, you embrace rapid application development, code reuse, components, frameworks, and, latterly plug-ins and containers. Containers are software infrastructure components that are designed to take the drudgery out of some of the common aspects of software development. On the client-side, a graphical user-interface container might manage the enabled states of the menus, receive actions from the user and control the behaviour of reusable graphical user-interface plug-ins. On the server-side, a container (for example, JBoss) provides support for security, transaction management, database access pooling, object pooling, and so on. A move toward container technologies is widely seen as a real boon for developers (as well as their employers), as they are freed up from hardcore software issues and can concentrate instead on aspects of code development that pertain to their organisation’s business (the so-called ‘business rules’). For the developer, the shift to a container-based approach introduces a new task — configuring the given functionality of the container. I believe that in the rush for quick and easy application development, this new task has been largely overlooked. Software engineers and their managers have assumed that the configuration task is easier, and therefore preferable, to the equivalent programming task. Now, without questioning the overall benefits of the general trend, I should like to point out that the move from programming to configuration is not without its drawbacks:
- Unclear Semantics: The meaning of configuration parameters is often not clear to anyone but an expert user of the tool. This makes configuration a highly specialised activity that places demands on the personnel make-up of your team.
- Unshared Semantics: Different tools are configured in completely different ways. If a project combines the use of several different tools, you may need several tools specialists!
- Hidden Implementation: If you do not understand some of the configuration parameters, and, as often happens, the documentation is poor or non-existent, you are pretty much left on your own. It is not usually practical or possible to look through the source code to 'work things out'. It is more likely that you will embark first of all on a fruitless search of the web, finding many other people asking the same question but none with any answer, followed by a brute-force enumeration of all the possible, feasible, plausible combinations of values of the configurations in the hope that one combination will have the desired effect. Of course, even if it does have the desired effect now, with the data currently provided, it is a pure leap of faith to believe that it will always have the desired effect.
- Overly Complex Solution: Often, your problem could be solved in principle by writing some custom code and configuring only a part of the reusable tool's functionality — you are not interested in the rest of the functionality that it provides. However, to get it to work, you may need to configure even the parts that you are not interested in. This may mean that you need to learn about functionality in which you have no interest, or you may get stuck and frustrated, feeling that the tool is getting in the way of your progress because of its expectations and assumptions.
To mitigate these problems, I believe we need: - a clearer semantics for configuration parameters, either through more appropriate and better quality documentation, or by a self-documenting approach that leaves the developer in less doubt about the meaning of a configuration parameter;
- improved validation of configuration parameters at tool start-up time (or earlier);
- improved error messages for mis-configured tools;
- the evolution (or even design) of accepted standards.
We also need commonality between different tools, so that learning a new tool involves a less steep learning curve. We need tools that involve minimal learning and configuration overhead when used for simple tasks. And we also need to know how to interpret problematic and exceptional behaviours due to improper configuration of the tool. In short, the risk for your project is that if your container is poorly understood, then any problems that arise could be very difficult to fix. | DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |
More Java Articles More By Simon White developerWorks - FREE Tools! | Hear how IBM Rational Project and Portfolio Management integrated solutions help teams put the right tools and processes in place to maximize the effectiveness and efficiency of project teams and ensure that the business vision is being executed correctly. Learn how to automate and integrate requirements prioritization, top-down project planning, communications and controls, and methodology deployment to keep your scope, costs, and schedules under control. Tackle with an end-to-end approach the management of scope and scope changes, usage of methodology to control and empower project teams, and optimization of resources to align activity costs with the overall project plan. FREE! Go There Now!
| | | | Attend this launch webcast with Scott Hebner, Vice President of IBM Rational Marketing and Strategy, for an overview of Rational’s new software offerings and resources to help modernize and accelerate software innovation on i on Power Systems – while ensuring past application investments are protected and continue to grow. Learn how these solutions are helping customers extend their core i5/OS solutions toward modern architectures such as SOA and web technologies to deliver business improvements that stand the test of time. FREE! Go There Now!
| | | | Effective governance for lean development isn’t about command and control. Instead, the focus is on enabling the right behaviors and practices through collaborative and supportive techniques. Hear from Scott Ambler on how it is far more effective to motivate people to do the right thing than it is to force them to do so. Learn how to form a lightweight, collaboration-based framework that reflects the realities of modern IT organizations. FREE! Go There Now!
| | | | Download the Rational Application Developer (RAD) v7.5 open beta code and start developing applications for the JEE5 standard which features EJB3.0, JPA, JSF 1.2, JSP 2.1 and Servlet 2.5 standards. When you use this beta you will see how you can increase developer productivity for already existing applications with improved support for refactoring, as well as adding new features to existing applications. In addition, the beta provides tooling for JD Edwards, Oracle, SAP, Siebel and PeopleSoft to improve the developer productivity with these enterprise systems. FREE! Go There Now!
| | | | Download a free trial version of IBM Rational Developer for System z, software that can help you deliver core development capabilities; the power of Java Platform, Enterprise Edition (Java EE); and rapid application development support to diverse enterprise application development teams. With comprehensive development tools to help create, deploy and maintain traditional enterprise and composite applications, Rational Developer for System z enables developers with different technical backgrounds to easily participate in important technology projects. FREE! Go There Now!
| | | | Rational Build Forge Express Edition is an automation framework that packages the latest enterprise-grade technologies into a reliable, flexible and robust configuration designed and priced specifically for small to midsize businesses. The new Rational Build Forge Express eKit provides you with valuable resources – including a case study, podcast, demo, and articles – to help you increase staff productivity, compress development cycles and deliver better software, fast. FREE! Go There Now!
| | | | Join this Rational Talks to You teleconference on December 6 at 1:00 pm ET to participate in an agile application development discussion and get your questions answered on using IBM Rational Method Composer in a distributed environment.Get your questions answered! FREE! Go There Now!
| | | | Informix Dynamic Server (IDS) Express Edition offers outstanding online transaction processing (OLTP) database performance, while helping to simplify and automate many of the tasks associated with deploying databases for small business applications. IDS 11 further extends the ease of management and applications integration with the Admin API and Scheduler, high availability with Continuous Log Restore for backup server recovery in case of a primary server failure, and column level encryption to protect personal and company private data. FREE! Go There Now!
| | | | Get a free trial download of IBM Lotus Forms V3.0 (formerly Workplace Forms), which provides a zero-footprint eForms solution to help you automate and move forms-based business processes off the desktop and onto the Web. With Lotus Forms, you can extend applications beyond the firewall by creating a single electronic form document ready for use in both thick and Web 2.0 thin client format. FREE! Go There Now!
| | | | User communities play an important role in communication and collaboration around products, solutions and other areas of special interest to members. Successful communities are able to provide the right mix of content and services to deliver a value proposition that resonates with each audience. Join Tom Inman, VP of Marketing for Information and Platform Solutions as he introduces the new LeverageINFORMATION community. During this webcast, learn about the value provided by the community and how customers and partners derive value from the community in addressing their own technical and business challenges. FREE! Go There Now!
| | | | All FREE IBM® developerWorks Tools! | |