WHAT IS A SOFTWARE
Software is a collection of instructions that tell a computer how to work. This is in contrast to hardware, from which the system is built and which actually performs the work
TYPES OF SOFTWARE
The two major types of computer software are:
- Application software
- System software
Two other types of computer software include:
- Programming software
- Driver software
Programming and driver software are often considered as types of system software, but we’ll explain all four types separately.
HISTORY OF SOFTWARE
Computing as a concept dates back to ancient times with inventions such as the abacus. However, these inventions were fully hardware - software requires a general-purpose processor and computer memory in which reusable sets of routines and mathematical functions can be stored, started, and stopped. This type of technology surfaces fairly recently in history.
Ada Lovelace wrote the first known computer program in 1843 for the Analytical Engine. The Analytical Engine was designed by Charles Babbage in 1837 and was the concept for the first general mechanical computer. The program, however, remained theoretical as the Analytical Engine was never physically constructed. The first modern theory of software was proposed by Alan Turing in his 1935 essay, “Computable numbers with an application to the Entscheidungsproblem (decision problem)
The first time a stored-program computer held a piece of software in electronic memory and executed it successfully was on June 21, 1948. Computer Scientist Tom Kilburn and his colleague Freddie William built one of the earliest computers, the Manchester Small-Scale Experimental Machine (SSEM) at the University of Manchester in England. The SSEM was programmed to perform mathematical calculations using machine code instructions. The software took 52 minutes to correctly compute the greatest divisor of two to the power of 18 (262,144).
In the late 1950s, the first programming language emerged: Fortran. Other languages soon followed, including COBOL and BASIC. These languages allowed programs to be specific in an abstract way and were not dependent on the details of the hardware architecture of the computer. The languages were chiefly intended for specifying numerical calculations.
Software became popular in the 1970s and 80s with the arrival of personal computers. Apple released Apple II in 1977, an 8-bit home computer and one of the world’s first successful mass-produced MICROCOMPUTER products. VisiCalc, the first spreadsheet software for personal computers, was released for the Apple II in 1979. The software was written in specialized assembly language. Other companies such as IBM soon developed home computers. Software for productivity and business dominated the early stages of personal computing. Popular software applications during this time included AutoCAD,
Key features of effective software development
Using software development to differentiate brands and gain competitive advantage requires proficiency with the techniques and technologies that can accelerate software deployment, quality and efficacy.
- Artificial intelligence (AI): AI enables software to emulate human decision-making and learning. Neural networks, machine learning, natural language processing and cognitive capabilities present developers and businesses with the opportunity to offer products and services that disrupt marketplaces and leap ahead of the competition. IBM Watson offers developers a way to connect with and use artificial intelligence services as part of their applications through application programming interfaces or APIs. You can also use IBM Watson to improve your product requirements by checking for ambiguity, unclear actors, compound or negative requirements, missing units or tolerances, incomplete requirements, and unspecific quantities.
- Cloud-native development: Cloud-native development is a way of building applications to exploit cloud environments. A cloud-native application consists of discrete, reusable components known as microservices that are designed to integrate into any cloud environment. These microservices act as building blocks and are often packaged in containers. Because of this architecture, cloud-native applications can use cloud environments to improve application performance, flexibility and extensibility.
- Cloud-based development: Just as IT organizations look to the cloud to improve resource management and cut costs, so do software development organizations. In this way, the cloud can be used as a fast, flexible and cost-efficient integrated development environment (IDE) or development Platform as a Service (PaaS). Cloud-based development environments can support coding, design, integration, testing and other development functions. They can also offer access to APIs, microservices, DevOps and other development tools, services and expertise.
- Blockchain: Blockchain is a secure, digitally linked ledger that eliminates cost and vulnerability introduced by parties like banks, regulatory bodies and other intermediaries. It is transforming businesses by freeing capital, accelerating processes, lowering transaction costs and more. Blockchain presents a tremendous opportunity for software development. Developers are working with distributed ledgers and open source Hyperledger (link resides outside of ibm.com) technology to change how businesses operate.
- Low code: Forrester defines low code as: “Products and/or cloud services for application development that employ visual, declarative techniques instead of programming and are available to customers at low- or no-cost in money and training …” 4 In short, it’s a development practice that reduces the need for coding and enables non-coders or citizen developers to build or help build applications quickly and at lower cost.
- Analytics: Annual demand for data scientists, data developers, and data engineers will reach nearly 700,000 openings by 2020. The demand signifies how critical it is for companies to gain insight and value from the explosion of data. Accordingly, software developers are integrating advanced analytics capabilities into their applications. Cloud-based services and APIs make it simpler to guide data exploration, automate predictive analytics and create dashboards that deliver new insights and improve decision making.
- Model Based Systems Engineering (MBSE): In MBSE, software modeling languages are used to perform early prototyping, simulation and analysis of software designs for early validation. Building designs in MBSE helps you to analyze and elaborate project requirements and move rapidly from design to implementation.
- Mobile: A key capability for software developers is creating mobile apps with deep connections to data that enriches and elevates user experiences. Forrester has found that “deeply integrating digital/mobile customer data has a strong effect on how customers interact with brands.”
WHAT IS SOFTWARE DEVELOPMENT
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components
Software development refers to a set of computer science activities dedicated to the process of creating, designing, deploying and supporting software.
Software itself is the set of instructions or programs that tell a computer what to do. It is independent of hardware and makes computers programmable. There are three basic types:
System software to provide core functions such as operating systems, disk management, utilities, hardware management and other operational necessities.
Programming software to give programmers tools such as text editors, compilers, linkers, debuggers and other tools to create code.
Application software (applications or apps) to help users perform tasks. Office productivity suites, data management software, media players and security programs are examples. Applications also refers to web and mobile applications like those used to shop on Amazon.com, socialize with Facebook or post pictures to Instagram.1
A possible fourth type is embedded software. Embedded systems software is used to control machines and devices not typically considered computers — telecommunications networks, cars, industrial robots and more. These devices, and their software, can be connected as part of the internet of things (IoT)
Software development is primarily conducted by programmers, software engineers and software developers. These roles interact and overlap, and the dynamics between them vary greatly across development departments and communities.
Programmers, or coders, write source code to program computers for specific tasks like merging databases, processing online orders, routing communications, conducting searches or displaying text and graphics. Programmers typically interpret instructions from software developers and engineers and use programming languages like C++ or Java to carry them out.
Software engineers apply engineering principles to build software and systems to solve problems. They use modeling language and other tools to devise solutions that can often be applied to problems in a general way, as opposed to merely solving for a specific instance or client. Software engineering solutions adhere to the scientific method and must work in the real world, as with bridges or elevators. Their responsibility has grown as products have become increasingly more intelligent with the addition of microprocessors, sensors and software. Not only are more products relying on software for market differentiation, but their software development must be coordinated with the product’s mechanical and electrical development work.
Software developers have a less formal role than engineers and can be closely involved with specific project areas — including writing code. At the same time, they drive the overall software development lifecycle — including working across functional teams to transform requirements into features, managing development teams and processes, and conducting software testing and maintenance.3
Software development process
Developing software typically involves the following steps:
- Selecting a methodology to establish a framework in which the steps of software development are applied. It describes an overall work process or roadmap for the project. Methodologies can include Agile development, DevOps, Rapid Application Development (RAD), Scaled Agile Framework (SAFe), Waterfall and others. (See the glossary.)
- Gathering requirements to understand and document what is required by users and other stakeholders.
- Choosing or building an architecture as the underlying structure within which the software will operate.
- Developing a design around solutions to the problems presented by requirements, often involving process models and storyboards.
- Building a model with a modeling tool that uses a modeling language like SysML or UML to conduct early validation, prototyping and simulation of the design.
- Constructing code in the appropriate programming language. Involves peer and team review to eliminate problems early and produce quality software faster.
- Testing with pre-planned scenarios as part of software design and coding — and conducting performance testing to simulate load testing on the applicatio.
- Managing configuration and defects to understand all the software artifacts (requirements, design, code, test) and build distinct versions of the software. Establish quality assurance priorities and release criteria to address and track defects.
- Deploying the software for use and responding to and resolving user problems.
- Migrating data to the new or updated software from existing applications or data sources if necessary.
- Managing and measuring the project to maintain quality and delivery over the application lifecycle, and to evaluate the development process with models such as the Capability Maturity Model (CMM).
The steps of the software development process fit into application lifecycle management (ALM). The IBM Engineering Management solution is a superset of ALM that enables the management of parallel mechanical, electrical and software development.
- Requirements analysis and specification
- Design and development
- Maintenance and support
Software development process steps can be grouped into the phases of the lifecycle, but the importance of the lifecycle is that it recycles to enable continuous improvement. For example, user issues that surface in the maintenance and support phase can become requirements at the beginning of the next cycle.
Importance of Software Development
It is very important for businesses as it helps them distinguish from competitors and become more competitive. Software development can improve the client’s experiences, bring more feature-rich and innovative products to market, and make setups more safe, productive, and efficient.
Digitization of information and storing it online will not only save space but also integrates and centralizes it so that it is easy to access for those who need it. Also, it is easy to protect your data from outsiders.
When the business develops, the pool of data gains volume, and storing this data efficiently will become a point of focus for the company. For this, businesses need to develop and upgrade digital organization so that they can keep on providing consistent performance for those who utilize this data.
Also, softwae development is essential for data analysis. The data collected from day to day tasks, when combined with the right software, can be utilized by businesses to keep a record of the trends among their clients.
Drop your comment