Software development

Software development is a process by which new programs are planned, designed, coded, tested, debugged and ultimately released as a new application, usually to the public but sometimes within an organisation only. There are many different methodologies for developing software, each of which has its own advantages and disadvantages and is favoured by its own group of adherents. The Open Source development model is the one most often used by Linux developers.

= Tools and processes =

See Programming Tips & Tricks for more details on the specific tools available to assist with the software development process.


 * The human brain is the most important software development tool: before any program is written the developers need to know exactly what the program is for, how it is going to work and who is going to use it. Poor planning is one of the largest causes of software project failures. See software development guidelines for more information.
 * The program may already have been written. Searching Google or online repositories such as Freshmeat may reveal that a program already exists that performs the required task. If a program exists but does not quite do what is needed, then the open source nature of the program may allow it to be modified to suit individual needs.
 * The software developer's most basic tool is the text editor. Programs are written in a human-readable programming language and then either converted into executable code by a compiler or interpreted on the fly by an interpreter. Interpreted code may be contained within a runtime environment that isolates the code from the rest of the system.
 * A more advanced form of text editor is the integrated development environment (IDE) which provides features such as syntax highlighting, assisted navigation and refactoring, single-click compilation and incremental debugging.
 * It is important not to reinvent the wheel if possible: there is a massive selection of toolkits and SDKs that provide ready-written functionality for such things as user interfaces, 2D or 3D graphics, database access and so on. These toolkits will have a published API and be accompanied by extensive documentation that facilitates their use.
 * If an IDE is not available, then a standalone debugger will be useful for locating and correcting errors in a new application (of which there will be many).
 * Package management and deployment tools (for example RPM) allow the easy distribution and installation of new software.
 * Once the software is released, a publically-accessible bug reporting system will allow users to report bugs so that they can be fixed in later versions, and may allow users to submit feature requests for new releases.