Evolution of Software Engineering
Let's do a quick retrospective at what a developer was in the past until the market started talking about software engineer.
In 2007-2009, software engineering was quite different from today, developers were primarily focused on mastering their chosen technology, rather than juggling with multiple tools and frameworks and a separation between them and operations exist.
After 2009, numerous technological advances, such as the advent of smartphone, Internet, and the growing use of cloud computing, led to a significant shift in software development. During this period, many "new" architectures came out to support these new usages and volumes (API, front back applications, backend for frontend, Event Sourcing, ...). We have adopted an "API-first" approach to our new applications, to address different use cases and enable seamless integration between different systems and platforms.
This was followed by the emergence of the DevOps movement aimed to bridge the gap between development and operations, traditionally managed by separate teams. DevOps, encapsulated in the principle of "you build it, you run it", encouraged developers to adopt a more global view of software development, covering creation and operational aspects. This approach resulted in more agile, autonomous and committed development teams.
One significant challenge that came with DevOps was the increasing number of technologies that developers needed to understand for their day to day work. This increasing complexity was highlighted in many modern platforms, which required knowledge of multiple tools and technologies to support applications. However, this change also gave developers a chance to expand their skills and become more flexible and adaptable in their work.
As an example, on one of our platforms that supports various Michelin services and solutions offers, the landscape of technologies and tools that have to be understood and mastered is vast.
Since 2018, more and more companies have been looking for what the market calls a "full-stack developer". Initially, this term described a developer who could work on both frontend and backend technologies. Over time the meaning of "Full-stack Developer" changed significantly, transforming into a sort of unicorn, a person who can work on frontend and backend development but also in operations, database management, mobile development, and various other disciplines.
Full-stack Developers are now also expected to adopt new practices such as DevSecOps, Green IT and Data Management, ... . Although the concepts behind these practices are not new and follow good practice and common sense in development, it's crucial for developers to understand and specify how they implement these practices in their work.
These days the person who masters a large scope of technologies and practices seen above are now called Software Engineers.
With the increasing number of topics Software Engineers have to master, this question is worth asking: Can AI help them in their work ?
Impact of Artificial Intelligence
For many years, Integrated Development Environments have been helping developers by fixing common issues for different languages. However, their capabilities were largely limited to static syntax analysis without understanding the global application context.
Recently, with the progress of AI, in particular generative AI for developers has opened up a way to improving developer efficiency. These tools are rapidly evolving, showing significant improvements every six months with novelties released monthly.
The concept of an AI-augmented developer is catching on. These tools, can be very helpful to bootstrap code, make unit test easier to write and improve code quality by generating better solutions than developers. However, due to their nature, these tools can 'invent' code or provide bad quality code. This is why the term 'GitHub Copilot' is well chosen, the developer must remain the pilot, using AI as an assistant but always critically evaluating and challenging the generated code.
AI represents a significant step forward from sourcing code from internet but like code found on Stack Overflow or other website we must challenge everything we find or generate.
In terms of security, a major challenge with generative AI is ensuring it runs in an isolated tenant dedicated to a company. Currently, many AI tools operate on centralized cloud instances, which could leak sensitive data (like code, personal information, company secrets ...). We also need to take care of the use of our data behind the scene, sometimes, developers queries can be reused to to enrich existing AI models.
Another concern with AI in development is the origin of the code used in training these models (internet code scan, public source code repositories, private code base, research paper, ...). Often, the licenses of the generated code are not very clear, which could lead to generated code infringing on existing licenses or using patented algorithms.
While AI tools have become more accessible, they do not transform a young developer into an expert. Generative AI can sometimes produce misleading or incorrect results, a phenomenon known as 'hallucination' (with incorrect code, vulnerable code, ...). Thus for me, not all developers should use these tools without proper guidance, a minimum level of knowledge is required to reap the rewards of AI. Effective use of AI in software development requires critical thinking and experience and it is crucial for young developers to continue receiving training and mentorship to gradually integrate AI into their workflow. This approach ensures they do not treat AI-generated outputs as absolute truths but as tools to aid their development process. Without basic knowledge, it's challenging to generate relevant code using AI. A basic understanding of the subject can significantly accelerate your learning process, allowing you to bypass numerous tutorials and introductory materials. For those with advanced knowledge, AI becomes a powerful tool that can boosts productivity by taking over some time-consuming tasks.
The landscape of AI tools for software engineers will continue to grow (every major cloud provider and IT company is likely to develop their own offerings) but at the end the number of AI tools will converge to a smaller amount and I think we will see two kinds of AI, general-purpose AI tools for developers like today and also specialized AI tools focused on specific domain like Security.
For me, the best enhancement in terms of usage will be in Citizen Development. Currently citizen development tools are good for very simple applications but even with that, we always reach a point where the complexity becomes too high for users. With AI I hope we can reduce this complexity and start to have very powerful tools for end users.
Software engineers are expected to increasingly rely on AI to assist them once security and legal challenges have been addressed. Meanwhile, software engineers will manipulate more and more AI not only for them but also to integrate it into existing or new software. AI can take various forms in an application such as a dedicated SaaS service that is incorporated into an application or as a self made AI model dedicated to a company's core business. Over time, AI model will become more resource-efficient, making them easier to embed directly into applications.
The evolution of software engineering over the last decades reflects the dynamic nature of IT. From specialization in a single technology to today's multidisciplinary approach, software engineering continues to adapt and evolve in response to technological advances. But the knowledge required by software engineer is constantly growing, in terms of software and practice so AI can be opportunity to help with that burden.
AI will not replace software engineers; rather, it is an additional tool in their arsenal.
AI integration into software development is an important change, allowing engineers to delegate repetitive tasks to external systems in order to focus on complex, creative and high-level activities. It is essential to understand that their role is not static and to remain relevant; software engineers must evolve, adopting new technologies and methodologies. This evolution should not be driven solely by a pursuit of productivity, as this risks creating an army of augmented developers at the expense of quality and innovation. It's crucial to find the right balance between tool usage and team maturity in order to maximize their potential. To achieve this, it's essential to educate both software engineers and management about the role and impact of AI.
This is how they will continue to be the builders of our digital world.