Basics of the Open Source Community
Before entering the world of open source tools it makes sense to pause and consider what exactly constitutes a "tool" and what "open source" means. This will provide the reader with a context for examining these tools, and it may define ways to use them more effectively.
1.1 On Tools
When you think of a tool, you probably picture something like a hammer or a screwdriver&8212;a device that aids in the process of turning raw materials into a finished product. This construction metaphor is useful because the ultimate goal is to make something new out of a collection of algorithms and ideas and Java classes. However, the strict sense of tool is applicable only to a Java compiler. To make the definition useful it will have to be expanded. For the purposes of this book a tool will be anything that makes development easier, regardless of how it does so. Applying this definition to the construction of physical objects suggests many new kinds of tools.
A screw, nail, or prebuilt component may be a tool. Certainly one would not want to undertake a project without them. The equivalent in Java terms might be individual classes.
A robotic assembly line greatly simplifies the process of repeatedly building new objects once the first has been built. The Java equivalent of an assembly line is something like Ant (covered in Chapter 2), which automates the process of assembling classes and other data into an application.
An entire workshop can even be a tool by providing a place and resources in which to build new things. The Java equivalent is an integrated development environment, such as Eclipse, covered in Chapter 3.
Most manufacturing facilities have devices that test the finished products. These can be as simple as a chamber in which objects are repeatedly dropped in order to see how much stress they can take, or they can be as elaborate as automobile crash tests. Such facilities simplify development in a number of ways: by ensuring that individual pieces work, that they work together as expected, and that the result is stable and robust. Java, too, has testing tools, covered in Chapters 4 through 7.
Prefabricated components can also be tools. Someone building a remote-controlled car is more likely to buy an off-the-shelf motor than build one from scratch. It is even possible to build quite elaborate systems by simply connecting prebuilt components. Indeed, this is how most desktop computers are built. Java comes with many such components in the form of the core library, but there are many common needs that are not covered by this library. Chapters 8 through 16 introduce new components.
Finally, something like a breadboard can aid development by providing a framework on top of which a project will be built. Chapters 17 through 20 discuss frameworks for building Web applications.