Intro
Artificial Intelligence can compose songs, assist in medicine, drive vehicles and play games. Now it is learning how to write code. Does this mean the developers' days are numbered?
How AI is transforming the software development industry?
In the future, the field of software development will undergo radical changes: the combination of machine learning and artificial intelligence with code generation technologies will improve so much that by 2040 most of the code will be written by machines. At least that's what the U.S. Department of Energy's Oak Ridge National Laboratory believes.
Of course, in the future many of the jobs that exist now will lose their relevance. The U.S. Bureau of Labor Statistics estimates that by 2026, employment among 11 occupations paying more than $60,000 a year will decline by more than 74,000 positions compared to 2016, or about $6.4 billion in wages. At the same time, programmer employment would decline by 7.6 percent from 294,900 to 272,300. This, of course, is not to say that it is no longer worth studying to become a programmer, but at the very least it indicates that the market will become increasingly competitive.
Meanwhile, in India, where the IT industry has grown rapidly in recent years thanks to outsourcing, the number of vacancies is already shrinking. It looks like an industry that generates more than $150 billion in annual revenue and employs about 4 million people is starting to fail. So far, the extent of the cuts is unclear. But according to a 2015 study by the National Association of Software Companies (Nasscom) and McKinsey India, 50% to 70% of current job skills will become irrelevant by 2025.
"The current cuts in outsourcing (because of automation) will eventually lead to a scenario where (only) 30 percent of the workforce will remain relevant," says DD Mishra, director of research at consulting firm Gartner.
One of the main reasons for the push for automation is that customers in mature markets are asking their outsourcing partners to increase the percentage of automation because it helps them increase the scale and competitiveness of their businesses.
AI-based programming assistants
One such assistant is already being developed by video game publisher Ubisoft together with Mozilla, based on artificial intelligence. The project is called Clever-Commit. This was announced by the head of research and development at Ubisoft Yves Jacquier during the DICE Summit 2019.
The essence of the new system is to predict whether a code change will lead to new bugs. To do this, the AI will learn from previous bugs and crashes. So far, the prototype, dubbed Commit-Assistant, has already been tested using data collected during the development of a number of games. And the system itself has already contributed to the progress of AAA projects. It is reported that the system tracks 6 errors out of 10 and reduces the time of searching for them by 20%.
Collaboration with Mozilla will add new programming languages to the Clever-Commit database and increase overall performance. And using this technology in games and applications will allow developers to work more productively, because they can spend more time on new features, rather than searching for bugs in existing ones. In the end, it will improve and speed up development, which means that patches will be released more often.
Directly Mozilla specialists help Ubisoft to integrate data about the programming languages Rust, C++ and Javascript. In response, the publisher's representatives provide Clever-Commit capabilities to improve Firefox browser and other company products.
Mozilla, on the other hand, noted that it will improve the process of writing code in Firefox by detecting bugs in a pattern. In fact, their timely correction is cheaper at the development stage than after the release.
Fully-automated software testing
Automated testing involves the use of special software (in addition to the one being tested) to monitor test execution and compare the expected actual result of the program. This type of testing helps automate frequently repeated but necessary tasks to maximize test coverage.
Some testing tasks, such as low-level regression testing, can be labor-intensive and time-consuming if performed manually. In addition, manual testing may not find certain classes of errors efficiently enough. In such cases, automation can help save the project team time and effort.
Once automated tests are created, they can be run again at any time, and they run and run quickly and accurately. Thus, if frequent re-runs of tests are necessary, the importance of automation to simplify project maintenance and reduce its cost can hardly be overestimated. After all, even minimal patches and code changes can cause new bugs.
There are several main types of automated testing:
- Code-driven testing - testing at the level of software modules, classes and libraries (in fact, automated unit tests).
- Testing of Graphical user interface testing - a special program (framework) allows generating user events, e.g. keystrokes and mouse clicks, and tracking the program reaction to these events, and whether it corresponds to the specification.
- Testing automation of API (ApplicationProgrammingInterface) - the program interface. Interfaces intended to interact, for example, with other programs or the user, are tested. Here again, as a rule, special frameworks are used.
In order to compile automated tests, a QA-specialist must know how to program. Automated tests are full-fledged programs, just designed for testing.
When, what and how to automate and whether to automate at all are very important questions that must be answered by the development team. Choosing the right elements of a program to automate will, to a large extent, determine the success of test automation in principle. You should avoid automating testing of code sections that can change frequently.
More precise planning and cost estimation
Artificial Intelligence can quickly take business to a whole new level, this is one of its key functions and tasks. Here are a few problems that can be solved by machine learning algorithms:
Responsiveness. In some areas of business, the fundamental condition for success is to quickly analyze incoming data and react to it instantly - for example, in stock exchange operations. Unlike conventional algorithms, which are not capable of adapting to new conditions and data on their own without prior training, artificial intelligence provides this capability.
Develop a marketing strategy based on the data provided and the goals laid down. Artificial intelligence helps in the work of the marketer: not only analyzes the experience of previous sales, but also uses forecasting to "predict" future ones, as well as takes into account the behavior of competitors and the overall market situation.
The human factor. Even the most professional and experienced employee has a bad day and bad decisions. Artificial intelligence does not, it has functions instead of emotions, and technology and information replace the fickle mood.
Fighting Fraud. Self-learning neural networks help analyze user behavior and identify suspicious transactions and create algorithms to prevent financial losses. Result: The system becomes less vulnerable, which is a key condition for customer trust.
Increased profits. The use of machine learning in the pricing system alone can provide a 5% increase in revenue, and with an integrated approach, a company's revenue can grow several times over.
Sophisticated code compiler
It is hard for a person to predict which optimizations will give good results and which ones can lead to regressions, because to do this one needs to be well versed in the subtleties of the applied heuristic algorithms, to know well the structure and passes of the used compiler, and also to know completely the code of the program being compiled, which is impossible in the modern application development process. As a result, finding the best parameters for compiling a program for a human becomes a task of completely trying different combinations of options and measuring the performance and size of the code.
One piece of research directly related to LLVM is LLVMTuner, a software product being developed at the University of Illinois by Y. Chen and W. Adwe. A paper describing the results available at the time was presented in 2017. This paper optimized individual hot loops. This framework is designed for automated tuning of large programs. LLVMTuner runs on the LLVM IR middleware code, uses profiling to identify hot loops, and then automatically tunes heuristics for them. The focus is on loops at the top level. The selected loops and any call functions are transferred to a separate module, which is further subject to the necessary optimizations. This solution allows you to get better performance on large programs.
However, there is no widely used compiler that can independently tune optimizing heuristics. So what is the problem? As we know, the effectiveness of machine learning methods and the quality of the resulting models depends on the correct choice of features and the quality of the data to be trained (despite the existence of algorithms that are less sensitive to "noisy" data). Without knowing the structure and algorithms used in the compiler, it is not easy to select a complete and sufficient set of features for training, although there are quite understandable and logical ones, such as loop size, number of loop exits, etc. That's why it's hard to develop a universal solution suitable for multiple compilers at once, and it's not even possible. Also, it is very likely that it is not needed.
Strategic decision making
In the future, traditional software development and AI technology will become increasingly distant, but will not replace each other. Already today, the development of data processing and machine learning technologies has caused the emergence of a separate class of Data Science engineers, which will develop into a profession increasingly separate from programming. The following factors will contribute to this.
First, the development of AI-oriented computing platforms capable of solving a specific set of tasks without the need for traditional programming. For example, something similar can be seen in the development of CMS or e-Commerce systems, which today can be used by people without deep technical skills.
Second, the development of interfaces to AI platforms will make it easier to pre-prepare and input data for machine learning. This will reduce the cost of starting to use such systems.
Third, performance improvements due to AI-oriented processors and cheaper computing power will increase the speed of results, bringing them closer to real-time analysis systems. The business application capabilities of such platforms will expand significantly.
Despite improvements in AI technologies, the class of problems they can solve will remain limited, creating a demand for both classical programming engineers and machine learning specialists.
Bottom line
Improvements in information technology are evolving exponentially, and in the next 5-7 years we can expect a significant transformation of the software engineering profession. The most vulnerable professions will be those associated with routine, repetitive tasks that involve little abstract thinking, understanding of concepts, interaction of technologies and functional components.
On the other hand, those programmers who deal with creative tasks should not be afraid. It will be very difficult to replace the solution of such problems with algorithms. In my opinion, the transition to such automated systems may take up to 10 years. Everything is heading towards the fact that data entry, search and cleansing will be automated. But everything is not so simple with data analysis.
Коментарі
Дописати коментар