JACOB VAN GEFFEN As the field of computer science rapidly expands, it’s no wonder that many jobs are being replaced by different forms of technology. Computers can handle a lot of information efficiently and can be much more cost effective than human workers. This trend will no doubt continue, but will programmers themselves also be replaced someday? The answer: probably not in the near future. However, the idea of program synthesis offers amazing new avenues of technology and can enable even the most code-illiterate people to create programs of their own.
The idea of program synthesis is relatively straightforward—a user tells some “synthesizer” about some program that he/she wants built, and the synthesizer creates a program with those specifications. One way to tell the computer exactly what program you want is to provide example input and output cases for your program. Perhaps you’re a high-school teacher who wants a simple grading system that automatically drops the lowest quiz grade. You might not have any experience coding yourself, and your school’s grading system won’t do this for you, so you decide to use a program synthesis tool. All you need to do is give a few examples of grade reports before and after the lowest quiz grade is dropped, and there you go! You have a program that can apply this change for you anytime.
Explained so simply, program synthesis can sound a bit like magic. Can a computer really figure out what users want it to do so easily? And even so, can it actually create a program that does it correctly all the time? Unfortunately, magic is not a part of computer science (not yet, anyways). There are some complicated programs that any program synthesis tool would have a hard time creating, and sometimes, the synthesizer just guesses wrong. However, modern program synthesis can do a heck of a good job.
The first thing a program synthesizer tries to do is categorize each of the input/output examples. If it’s doing the same operation on multiple inputs, it puts those inputs in the same category. Then, if the synthesized program gets a similar input, the synthesizer knows to perform the same operation to get the correct output. By doing this, program synthesis tools are able to generalize the problem, creating a program that can act correctly on as many cases as possible.
Fortunately, program synthesis can apply to more than just grading high-schoolers. Have you ever wanted to re-organize your files on your desktop? A program synthesis tool could easily do that, and without having to copy and paste a million files by hand. Program synthesis may even be able to help programmers. There are a lot of tedious parts of large programs that have to be written by someone, and these can often be automated with a simple synthesis tool.
Practically any task that seems simple and tedious can easily be automated. The best part—you don’t even need to know how to code to use it. This means that the versatility of programming can benefit more than just those with a technical background. Soon, anyone with access to one of these tools will have the ability to make his or her life much easier.
Don’t you want to go out and get yourself one of these program synthesis tools now? Unfortunately, program synthesis is a fairly new field, so that probably won’t be easy. Luckily, there’s a lot of on-going research in program synthesis right here at UT. Isil Dillig and many other faculty and graduate students are progressing this field, bringing us closer to such an amazing product. If you’re interested and want to learn more, feel free to visit her website.