# Outline of software development

The following outline is provided as an overview of and topical guide to software development:
Software development – development of a software product, which entails computer programming (process of writing and maintaining the source code), and encompasses a planned and structured process from the conception of the desired software to its final manifestation. Therefore, software development may include research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that result in software products.

## What type of thing is software development?

Software development can be described as all of the following:
* Research and development
* Vocation
* Profession

## Branches of software development

* Software engineering
* Computer programming
* Video game development
* Web development
* Web application development
* Mobile application development

## History of software development

* History of operating systems
* History of programming languages

## Software development participants

* Software developer
* Software engineer
* Consulting software engineer
* Computer programmer
* Software publisher
* Web developer

## Software development problems

* Shovelware
* Software bloat
* Software bug

## Software project management

* Software project management – art and science of planning and leading software projects. It is a sub-discipline of project management in which software projects are planned, monitored and controlled.
** Software configuration management

## Software development strategies

* Offshore software R&D – provision of software development services by an external supplier positioned in a country that is geographically remote from the client enterprise; a type of offshore outsourcing.

## Software development process

* Software development process
** Software release life cycle
*** Stages of development
**** Pre-alpha
**** Alpha release
**** Beta release
***** Closed beta
***** Open beta
**** Release candidate
*** Release
**** Release to manufacturing (RTM)
**** General availability release (GA)
**** Web release (RTW)
*** Technical support
**** End-of-life – termination of support for a product

### Activities and steps

* Requirements analysis
** Software development effort estimation
* Functional specification
* Software architecture
* Software design
* Computer programming
* Software testing
* Software deployment
** Software release
** Product installation
** Product activation
** Deactivation
** Adaptation
** Software update
** Uninstallation
*** Uninstaller
** Product retirement
* Software maintenance

### Software development methodologies

* Aspect-oriented software development
* Cleanroom Software Engineering
* Iterative and incremental development
* Incremental funding methodology
* Rapid application development
* IBM Rational Unified Process
* Spiral model
* Waterfall model
* Extreme programming
* Lean software development
* Scrum
* V-Model
* Test-driven development (TDD)

#### Agile software development

* Cross-functional team
* Extreme programming
* Iterative and incremental development
* Pair programming
* Self-organization
* Timeboxing

### Supporting disciplines

* Computer programming
* Software documentation
* Software engineering
* Software quality assurance (SQA)
* User experience design

### Software development tools

* Programming tool
** Compiler
** Debugger
** Performance analysis
** Graphical user interface builder
** Integrated development environment

## Education relevant to software development

* Bachelor's degree in computer science – type of bachelor's degree awarded for study of computer science, emphasizing the mathematical and theoretical foundations of computing, rather than teaching specific technologies that may quickly become outdated. Such a degree is a common initial bachelor's degree for those entering the field of software development.

## Software development organizations

While the information technology (IT) industry undergoes changes faster than any other field, most technical experts agree that one must have a community to consult, learn from, or share experiences with. Here is a list of well-known software development organizations.
* Association of Computer Engineers and Technicians (ACE – ACET) professional standards within the IT industry.
* Association for Computing Machinery (ACM) is one of the oldest and largest scientific communities that deal with computing and technology. It covers a wide range of topics including e-commerce, bioinformatics, and networking.
* Association of Independent Information Professionals (AIIP) is an association for information professionals working independently or within the related industries.
* Association of Information Technology Professionals (AITP) is a worldwide community that focuses on information technology education. It helps to connect experts from different IT fields.
* ASIS International (ASIS) is the leading community that connects security professionals from all over the world.
* Association of Shareware Professionals (ASP) connects developers and tech specialists who work with services and application on "try-before-you-buy" basis.
* Association for Women in Computing (AWC) organizes educational and networking events for female tech specialists in order to increase the share of women in the industry.
* Black Data Processing Associates (BDPA) gathers a community of African Americans working in information technology for both educational and professional growth.
* Computer & Communications Industry Association (CCIA) advocates for open markets, systems and competition.
* Computing Technology Industry Association (CompTIA) provides certifications for the IT industry, as well as educates individuals and group on changes and tendencies for the industry.
* Computer Professionals for Social Responsibility (CPSR) an organization concerned with technology's impact on society. The group provides the assessment of the tech development and its impact on various fields of life.
* Data & Analysis Center for Software (DACS) collects and serves the information about various entities and software they produce, as well as its trustworthiness.
* EDUCAUSE is a non-profit organization that states its mission as ‘advance higher education through information technology’.
* European Computer Manufacturers Association (ECMA) is a European organization that facilitates standards and information and communication systems.
* International Association of Engineers (IAENG) is an international association that used to be a private network. Nowadays, hosts annual World Congress on Engineering for R&D and engineers.
* Institute of Electrical and Electronics Engineers (IEEE) Computer Society provides educational services to its members worldwide. This society has one of the biggest networks and offers numerous perks to its members.
* Information Systems Security Association (ISSA) is a not-for-profit, that encourages the use of practices to protect the confidentiality and integrity of information resources.
* Network Professional Association (NPA) encourages its members to adhere to the code of ethics, follows the latest best practices and indulge in continuous self-education.
* Technology Services Industry Association (TSIA) is a professional association that offers research and advisory services.
* Society for Technical Communication (STC) offers support and knowledge sharing to specialists involved in technical communication and related fields.
* User Experience Professionals Association (UXPA) is an organization that shares knowledge about UX and helps its members to grow, develop and improve their products.
* Women in Technology (WIT) advocates the education of female representatives in the industry all the way from elementary training to advanced programs.

## Software development publications

* SD Times
* The Pragmatic Programmer
* Design Patterns: Elements of Reusable Object-Oriented Software
* Introduction to Algorithms
* Structure and Interpretation of Computer Programs

## Persons influential in software development
### Language creators, designers

* Kathleen Booth (Assembly)
* Bjarne Stroustrup (C++)
* Brendan Eich (JavaScript)
* James Gosling (Java)
* Guido van Rossum (Python)

### Influencers of software design

* Bill Joy
* Martin Fowler
* "Uncle Bob" Martin