Software design is the process that starts from a problem for which there is currently no acceptable (software) solution, and ends when such a solution has been created. There is no agreed description of what software design is, nor even of the labels that should be used to describe parts of the process. Nevertheless, a starting point is as follows:
State the requirements for software that will solve the problem.
Design
Describe the structure and workings of the software that fulfill the requirements to solve the problem
Implementation
Implement and test the software according to the design.
This is the skeleton of the basic process, as, over time, requirements for the solution of the problem shift or change during the implementation phase, this leads to a development cycle, which may have as many re-iterations of the entire process as needed.
Software is generally written to either speed up a particular process currently performed manually, or to provide users with an entertaining experience in the form of a game or other media application, both using mathematical sequences embedded within a graphical interface.
Generally software design is performed using an IDE(Integrated Development Environment), using what is known as a programming language. One of the most popular languages is C++, but there is a huge number of different languages available.
In softwareengineering, a designpattern is a general repeatable solution to a commonly-occurring problem in softwaredesign.
A designpattern isn't a finished design that can be transformed directly into code; it is a description or template for how to solve a problem that can be used in many different situations.
Object-oriented designpatterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.
Softwareengineering is "(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software," and "(2) the study of approaches as in (1)." – IEEE Standard 610.12
Requiring softwareengineers to be licensed by a government bureaucracy would make persons who create software without a license into criminals, even if they give their software away, same as practicing medicine or law without a license, even for free, is a criminal offense.
Experimental softwareengineering is a branch of softwareengineering interested in devising experiments on software, in collecting data from these experiments, and in devising laws and theories from this data.