Today, software development has become a widely used term. But how many of us have wondered how software ends up on our computers?
Software craftsmanship in the age of AI
AI has the potential to revolutionize the way software is developed, tested, and maintained, bringing a new level of automation and efficiency that has not been seen in this field before.
In 2011, Marc Andreessen, the co-founder of the investment firm Andreessen Horowitz, wrote an article titled "Why Software Is Eating The World," in which he described how emerging software-focused companies were engulfing entire industries and disrupting previously dominant businesses. Just a decade later, we find ourselves with "AI Is Eating The World," in a somewhat similar sequence of events that has caught the majority of us by surprise.
Artificial Intelligence (AI) has had a major impact across various industries, and the field of software engineering is no exception. On the contrary, AI is set to become omnipresent in software development in the coming years, possibly even faster than we can envision today.
AI has the potential to revolutionize the way software is developed, tested, and maintained, bringing a new level of automation and efficiency that has not been seen in this field before. However, with this transformation come new challenges and opportunities that all software development experts need to adapt to (possibly faster than we imagine).
First, let's list some of the advantages that AI brings to the software development industry, then consider the current limitations of AI, and finally, reflect on the impact of AI on software craftsmanship in the present and future.
AI and its positive parts
One of the most significant effects of AI on software engineering is the automation of repetitive and routine tasks. These tasks are essential for the development process but can be time-consuming and monotonous. Examples of such tasks include code refactoring, bug fixing, and testing. By using AI, programmers can automate these tasks, gaining more time to focus on other tasks, ideally more strategic and creative ones. The result is higher productivity, higher quality software, and reduced delivery time.
Another impact of AI is its ability to automate specific functions with predefined and precise inputs and outputs. For instance, AI can be used to automatically generate code based on clear and comprehensive requirements, freeing programmers from the need to write repetitive code from scratch. This approach leads to time savings and reduces the risk of errors, resulting in higher software quality.
The use of AI can bring more innovation. By automating routine and repetitive tasks, programmers have more time and energy to focus on developing new and creative solutions, leading to increased innovation and the delivery of superior solutions.
The limitations of AI
The reality is that AI (still) has (many) limitations. Firstly, the human factor is necessary because by understanding how to solve specific problems for business needs, only humans can provide the context and important nuances for AI. Although AI can automate the solving of routine and repetitive requirements, it lacks the creativity and critical thinking skills of a human IT specialist.
We haven't reached the stage yet where a product manager, without a strong technical background, can communicate with AI to create a complex and fully functional product. There are many ways to achieve the same goals, and only someone who understands the technical issues and options can combine these aspects to efficiently meet the business requirements.
AI is only able to perform tasks for which it has been trained and is limited by the data and algorithms provided to it. It can’t think critically and creatively. It can’t understand the context and complexity of new real-world business problems.
AI Raises the bar
Whether we are ready or not, AI is already present in the software industry and will continue to evolve at an accelerating and exponential rate. Therefore, it is crucial for both programmers and all other members of a traditional software development team to expand their skills and expertise in AI. It is necessary for each of us to develop our critical thinking and problem-solving skills, as effectively working with AI will become increasingly important globally.
Senior programmers, product managers, and business professionals will need to gain a deeper understanding of how AI works and its current limitations. They all must be capable of effectively communicating with new AI tools, configuring them, customizing them, and ensuring they align with business needs. Additionally, they need to be able to interpret and analyze the results produced by AI, make informed decisions based on these results, and integrate all these aspects with rapidly evolving technology.
The progress of AI brings new challenges and opportunities. The automation of repetitive operations and specific functions means that the barrier to entry into the field will be ever higher. This will generate an increased demand for specialists with extensive experience and skills. There will be an increasing emphasis on individual value, experience, and creativity required to develop new and innovative solutions that can only come from human intuition and reasoning.
The augmentation of software development
Let's take a look at a typical day in the professional life of a programmer/software engineer. Daily tasks may vary depending on the individual and the company, but there are a few common activities:1. Checking and responding to emails: Software engineers often start their day by checking and responding to emails. AI can be used to sort and prioritize emails or even generate replies. However, final responses should be reviewed and approved before sending.
2. Code review: Programmers spend a significant amount of time reviewing code written by themselves or their colleagues. This activity includes reviewing pool requests, providing feedback, and checking compliance with coding standards. AI can be used for code analysis and quality assurance, but in the end, the programmer is the one who reviews the final result and makes the final decisions.
3. Meetings: Software engineers regularly attend team meetings, project/product meetings, or client meetings. These can take place either in person or online, covering topics such as project status, team collaboration, and problem-solving. AI cannot directly participate in meetings, but it can be used to schedule, remind, and generate meeting outcomes or to summarize meeting minutes according to individual preferences.
4. Documentation: Programmers spend time documenting their code, writing technical reports, or updating project documentation. We can use AI to generate and summarize documents. However, the programmer must review and approve the final documentation.5. Learning and development: software engineers are constantly learning and developing their skills. They might read industry articles, experiment with new technologies or take online courses. AI saves time by identifying and recommending learning resources, but in the end, the human factor still performs the learning and skill development.
It is difficult to establish an exact figure for the reduction in time spent on the "secondary tasks" mentioned above, as everything varies considerably depending on the individual and the company. However, we can estimate that the use of AI could lead to a 25-50% reduction in time allocated to such tasks. For instance, a programmer who spends 60% of their time hands-on with tasks that bring value to the product and company, 35% on "secondary tasks," and 5% on innovation, could increase their time dedicated to innovation to approximately 15%-25% with the help of AI. This would mean cutting the time spent on "secondary tasks" in half and increasing the time spent on innovation by three to five times.
Even though we work in the software industry and are constantly exposed to rapidly evolving technologies and tools, we often exhibit reluctance towards necessary changes. We can seek inspiration from an ancient work, "The Art of War" by Sun Tzu, which teaches us to build a three-step approach in the face of any formidable "enemy":
1. Know your opponent: carefully assess AI and consistently gather and analyze all relevant data so that informed decisions can be made.
2. Choose your battles: exercise patience, contemplate the questions that need to be asked, and address the challenges presented by the current AI landscape to move beyond the status quo.
3. Innovate your weapons: in the era of modern AI, this translates to adapting our approach, rapidly advancing our skill set, and even enhancing our mindset.
AI is already a reality in the software industry. It is time to improve and evolve. Otherwise, we risk being overtaken (even though it may seem paradoxical).
The best way to prepare for a future in which "AI is eating the world," an impending reality, is to stay connected to the rapid advancements in the field and to immerse ourselves in as much hands-on experience with new tools and technologies as possible.
In just a few months, new tools have emerged, seamlessly integrated with the most widely used software suites, capable of explaining code snippets, writing code, detecting and correcting errors, generating unit tests, and much more. All of these developments carry immense implications for the IT industry and for all of us who are a part of it.
What's crucial is that we can become more efficient and more creative, and most importantly, we can choose the direction in which we want to evolve.
Read original article here