The late 1950s saw the creation of the first programming languages, which were thought to be the solution to the problems of developing computer applications.
At the end of the 1960s, the “software crisis” erupted, with a growing awareness of the difficulties encountered in developing major IT projects. This led to the emergence of a new discipline, software engineering.
Software engineering is the science of the engineer concerned with scientific processes: first and foremost the programmes themselves, the associated files and databases, scripts, specifications of future user needs and requirements, design specifications, tests, documentation, technical support, etc. The aim of software engineering is to maximise the lifespan and quality of software, while minimising costs and lead times.
In the 80s and 95s, with the advent of microcomputing, there was a growing awareness of the need to master software development. At a time when the price of hardware was gradually falling, the cost of IT had to take into account not only development costs but also maintenance costs (corrective and evolutionary).
The software industry is rapidly becoming more complex in its infancy, and N-Tier architectures are appearing with application servers in addition to data servers. Software engineering workshops flourished to mask this complexity and industrialise development.
But towards the end of the 90s, the emergence of the Internet and Web technologies in applications forced us to reconsider the client-server architectures established a few years earlier in favour of so-called thin-client architectures, one of the aims of which was to avoid the nightmare of deploying and managing client platforms. In terms of applications, requirements were increasing: ERP management software packages were appearing at the same time, as were decision-making tools (business intelligence, then datawarehouse, data mining), the precursors to Big Data, while budgets were decreasing and pressure on development times was increasing, and there were more and more systems to maintain, with the debt accumulated over the years…
At the same time, software engineering is struggling to keep up with the challenge of guaranteeing control over increasingly complex and multiple environments. Towards the end of the 2000s, model-driven approaches met with limited success in certain specialist areas.
What is software development?
Billions of euros in budgets spent, millions of developers worldwide, ever more innovative technologies, rising user and customer expectations… with fewer deadlines and budgets.
Software development refers to the entire process of building all types of reliable, high-performance IT applications, from the study of the customer’s needs, through design and implementation, right up to application maintenance. These various stages are made possible by a specific computer language, or rather by several languages… and by developers who master these languages.
The various steps
The various stages in software development, from conception to end of life, are referred to as the “software life cycle”.
This life cycle is a set of software development phases, in particular :
- Analysis of customer requirements,
- Choice of architecture and technologies,
- Development related to data storage and manipulation
- Development of business-specific code and associated services
- User interfaces
- Integration of developments
- Interoperability with existing systems
- Code security
- Tests (unit tests, integration tests, load tests)
- Correction of detected faults,
- Documentation, etc.
There are a multitude of responses to each of these aspects: business modelling, application architecture, coding of each layer (and choice of the number of layers for optimum breakdown), X or Y implementation technology, automation, but also agile methodologies and DevOps approaches, team management, etc. Choosing the right combination of responses for a project is a real challenge and will influence its chances of success.
Current trends
The internalisation of the whole of society has forced companies to adapt quickly to the latest technologies (including social media) and to open up their systems to the outside world, from a few hundred to several million users of their application.
In addition to the importance of user interfaces, the arrival in force of touch screens in the professional world and the growing power of mobile devices mean that digitisation is becoming increasingly important.
The virtualisation of servers is paving the way for outsourcing and the cloud. This marks the beginning of the offshoring of certain applications to large data centres, which, while complex, also makes it possible to absorb temporary peaks in traffic without having to overhaul the entire infrastructure.
Finally, we are seeing a strong emergence of artificial intelligence. Artificial intelligence requires computing power that could, in the not-too-distant future, be limited by our current IT architectures. Could quantum computing, whose supremacy finally seems to have been proven, be the next step?
Software development nowadays
Software is everywhere, growing exponentially in size and complexity, with ever more stringent quality requirements… The software crisis that began in the 1970s has still not really been resolved, even though great progress has been made in many areas… The most successful companies sometimes get by simply by making colossal investments in human resources.
And yet, there are keys to increasing the chances of successful software development.
The methods used
At a time when projects are becoming increasingly complex, when the pace of renewal and development of web applications is accelerating, and when the race against the competition is a constant battle, the company must take advantage of all methods to improve quality and productivity.
The fundamental methodological element is cooperation with the functional team. This is why the DevOps approach is becoming essential, as is agility, which has gradually taken hold and is now undisputed.
Today’s tools are not yet capable of directly translating a functional requirement or an update to that requirement at implementation level.
Tools
There are many different kinds of tools for successful development: development tools, design tools, tests, code analysis, lifecycle management, components, frameworks, code libraries, repositories and software factories.
There are many benefits to be gained from industrialising development and the associated processes (industrialising processes and generating part of the code). One obvious benefit is the reduction in deployment times and therefore development project costs. The challenge is also to reduce human intervention in repetitive tasks, to limit the risk of errors and, above all, to enable developers to focus on higher added-value tasks.
Software development involves a number of stages, from design and specification to implementation and continuous improvement. There are several languages to master, as well as their evolutions, but also the optimisation of resources and the improvement of quality. More than ever, it’s vital to know how to surround yourself with the right people.
Links
On ridplace you will find links to all the best sites on the subject of software development.