A software developer is a person who is involved in software programming. The term can also be understood to mean an entire company. A software developer is also known as a programmer, computer programmer or application developer.
A company that publishes software is called a software company or a software house. The term application developer is used almost exclusively for a person who programs at an applied level, where addressing existing software components is more important than understanding technical details behind software.
In the early days of the computer, a programmer was still busy with the hardware and (usually women) programmed the computer by making the connections, for example by inserting and removing plugs and connections. Today, there are programming languages that provide the programmer with many tools.
The scientific field that deals with software development is called software engineering. This is a field within computer science.
Software development is the total process of writing software. This consists of a number of steps, the actual programming of which consists of steps two, three and four. Not all steps are common or even relevant for every program to be developed (by no means every program has such an extensive user interface that it will be evaluated separately).
- Determine the problem.
- Split the problem into partial problems where necessary / possible.
- To devise possible solutions for all partial problems, to find out which partial problems can be solved with previously developed software.
- Capture user interface.
- Create a trial version using only the user interface.
- Test the user interface for usability.
- Programming functionality (sometimes using different programming languages).
- Document program code.
- Convert the human readable code into executable code, by compiling.
- Test the subprogram to see if it works in all permissible conditions. Otherwise return to step 7.
- Merge sub-programs and test (extensively) again to see whether the total program also works in all permissible conditions. Otherwise return to step 7.
- Write user manual.
These steps are usually not taken by the same people in larger projects. In addition, not all of these steps are performed for every piece of software. Typically, for typical server software, there is no user interface in the sense as used above.
Experience shows that in this process actual programming, also known as implementation, only takes 30 to 35% of the time. Another experience is that what 1 programmer needs 1 month for, 2 programmers do in 2 months; the step to teamwork is a very big step that often backfires in a not too large project. A common name for this phenomenon is the ‘mythical man month’. An often used comparison is that 1 pregnancy cannot go faster by having 9 women pregnant at the same time. This phenomenon is a manifestation of the impossibility of dividing a certain task into smaller tasks. At some point, the effort to communicate with the other members of a team is so great that the productivity of the entire team decreases as more people are added to the team.
The 80/20 rule is also notorious: 80% of the application is written in 20% of the time. 80% of the time is required to develop the remaining 20% functionality. In practice, this also means as much as: software is never finished.
A software development method is used to systematically address the development process. The steps described above have their own place within the different development methods. Development methods can be divided into categories:
- waterfall methods
- iterative methods.
A waterfall method consists of a number of steps that are followed one after the other. The end result of a step is the starting point for the next step. This is the classic way to tackle automation projects. A disadvantage of this method is the lead time that is required to arrive at the end result. In addition, it is assumed that all requirements and wishes are known at the start of a project. This is generally not the case in practice.
Iterative methods are similar to waterfall methods, but use iterations to build parts of the functionality. For example, the functionality around the input of data can first be created and tested, after which it is continued with an iteration in which the output is built. This subdivision into smaller parts makes it easier to respond to changing requirements and wishes. It is also easier to control the planning.
Different methods can be combined in practice. Not every step of a particular method is mandatory. However, every step is carried out methodically, it should never be something like ‘we just mess around, and when it works we are happy’, which often happens with amateur programmers.
Examples of software development methods are eXtreme Programming and Rapid Application Development.
The programmer uses various tools to create the software:
- a text editor to write the source code.
- one or more code generators to automatically generate source text from a simple source text or database.
- a compiler to translate (parts of) the program into machine language, possibly an assembler, sometimes an interpreter.
- an archiver and a linker to merge all parts into an executable program or program library.
- a variety of test tools to perform regression tests, profiling and usually a debugger that allows the programmer to detect and fix technical errors.
- a version control system for tracking changes in and different versions of parts of the software.
- a Defect database to manage problems (such as Bugzilla).
A programmer often uses an integrated development environment (IDE) that integrates text editor, compiler, debugger and many other software development tools.
Many IDEs are suitable for only one technology, often from the same supplier. Some IDE suppliers offer a solution for this, with which one can work with different compilers or debuggers in one IDE.
Common project management software is often used to control the entire software development process, such as programs to create Gantt charts, control costs and facilitate communication within a group (Group Support Systems). An issue tracker is often used to keep track of which errors have been found and resolved.