{"id":620838,"date":"2019-11-20T03:15:16","date_gmt":"2019-11-20T11:15:16","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/?p=620838"},"modified":"2022-11-07T11:40:25","modified_gmt":"2022-11-07T19:40:25","slug":"program-synthesis-and-the-art-of-programming-by-intent-with-dr-sumit-gulwani","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/research\/podcast\/program-synthesis-and-the-art-of-programming-by-intent-with-dr-sumit-gulwani\/","title":{"rendered":"Program synthesis and the art of programming by intent with Dr. Sumit Gulwani"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-620910 size-large\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1024x576.png\" alt=\"Sumit Gulwani on the Microsoft Research podcast\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1024x576.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-300x169.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-768x432.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1066x600.png 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-655x368.png 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-343x193.png 343w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-640x360.png 640w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-960x540.png 960w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1280x720.png 1280w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h3>Episode 99 | November 20, 2019<\/h3>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/sumitg\/\">Dr. Sumit Gulwani<\/a> is a programmer\u2019s programmer. Literally. A Partner Research Manager in the Program Synthesis, or PROSE, group at Microsoft Research, Dr. Gulwani is a leading researcher in program synthesis and the inventor of many intent-understanding, programming-by-example and programming-by-natural language technologies \u2013 aka, the automation of \u201cwhat I meant to do and wanted to do, but my computer wouldn\u2019t let me\u201d tasks.<\/p>\n<p>Today, Dr. Gulwani gives us an overview of the exciting \u201cnow\u201d and promising future of program synthesis; reveals some fascinating new applications and technical advances; tells us the story behind the creation of Excel\u2019s popular <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/flash-fill-excel-feature-office-2013\/\">Flash Fill<\/a> feature (and how a Flash Fill Fail elicited a viral tweet that paved the way for new domain investments); and shares a heartwarming story of how human empathy facilitated an \u201cah-ha math moment\u201d in the life of a child, and what that might mean to computer scientists, educators, and even tech companies in the future.<\/p>\n<h3>Related:<\/h3>\n<ul type=\"disc\">\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/podcast\">Microsoft Research Podcast<\/a>: View more podcasts on Microsoft.com<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/itunes.apple.com\/us\/podcast\/microsoft-research-a-podcast\/id1318021537?mt=2\">iTunes<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>: Subscribe and listen to new podcasts each week on iTunes<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/subscribebyemail.com\/www.blubrry.com\/feeds\/microsoftresearch.xml\">Email<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>: Subscribe and listen by email<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/subscribeonandroid.com\/www.blubrry.com\/feeds\/microsoftresearch.xml\">Android<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>: Subscribe and listen on Android<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/open.spotify.com\/show\/4ndjUXyL0hH1FXHgwIiTWU\">Spotify<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>: Listen on Spotify<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.blubrry.com\/feeds\/microsoftresearch.xml\">RSS feed<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/note.microsoft.com\/ww-registration-microsoft-research-newsletter-s.html?wt.mc_id=S-webpage_podcast\">Microsoft Research Newsletter<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>: Sign up to receive the latest news from Microsoft Research<\/li>\n<\/ul>\n<hr>\n<h3>Transcript<\/h3>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"none\">Ninety<\/span><span data-contrast=\"none\">&#8211;<\/span><span data-contrast=\"none\">nine percent of people who use computers do not know programming and they get stuck with repetitive, tedious tasks. But these are quite creative people and it is just that programming, as it exists today, creates an artificial barrier to program computers. Program synthesis can allow these end<\/span><span data-contrast=\"none\">&#8211;<\/span><span data-contrast=\"none\">users to express themselves naturally and program computers as easily as they would command a personal assistant.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">You\u2019re listening to the Microsoft Research Podcast, a show that brings you closer to the cutting-edge of technology research and the scientists behind it. I\u2019m your host, Gretchen Huizinga.<\/span><\/b><span data-ccp-props=\"{\"201341983\":0,\"335559685\":720,\"335559740\":240,\"335559991\":720,\"469777462\":[1620],\"469777927\":[0],\"469777928\":[1]}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: Dr.&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Gulwani<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;is a programmer\u2019s programmer. Literally. A Partner Research Manager in the Program Synthesis, or PROSE, group at Microsoft Research, Dr.&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Gulwani<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;is a leading researcher in program synthesis<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;and the inventor of many intent-understanding, programming-by-example and programming-by-natural language&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">technologie<\/span><\/b><b><span data-contrast=\"auto\">s.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Today, Dr.&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Gulwani<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"none\">gives us an overvie<\/span><\/b><b><span data-contrast=\"none\">w<\/span><\/b><b><span data-contrast=\"none\">&nbsp;<\/span><\/b><b><span data-contrast=\"none\">of the exciting&nbsp;<\/span><\/b><b><span data-contrast=\"none\">\u201c<\/span><\/b><b><span data-contrast=\"none\">now<\/span><\/b><b><span data-contrast=\"none\">\u201d<\/span><\/b><b><span data-contrast=\"none\">&nbsp;and promising future<\/span><\/b><b><span data-contrast=\"none\">&nbsp;<\/span><\/b><b><span data-contrast=\"none\">of program synthesis<\/span><\/b><b><span data-contrast=\"none\">;<\/span><\/b><b><span data-contrast=\"none\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">reveals some fascinating new applications and technical advances<\/span><\/b><b><span data-contrast=\"none\">;<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;tells us the story behind the creation of Excel\u2019s popular Flash Fill feature (and how a Flash Fill Fail elicited a viral tweet that paved the way for new domain investments<\/span><\/b><b><span data-contrast=\"auto\">);&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">and&nbsp;<\/span><\/b><b><span data-contrast=\"none\">shares a heartwarming story o<\/span><\/b><b><span data-contrast=\"none\">f h<\/span><\/b><b><span data-contrast=\"auto\">ow human empathy facilitated an \u201cah-ha math moment\u201d&nbsp;<\/span><\/b><b><span data-contrast=\"none\">in the life of a child,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">and what that might mean to&nbsp;<\/span><\/b><b><span data-contrast=\"none\">computer scientists,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">educators and even tech companies in the future.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">That and much more<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;on this episode of the Microsoft Research Podcast.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><i><span data-contrast=\"auto\">(music plays)<\/span><\/i><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Gulwani<\/span><\/b><b><span data-contrast=\"auto\">, welcome to the podcast<\/span><\/b><b><span data-contrast=\"auto\">!<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Thanks, Gretchen. It&#8217;s great to be here.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: So I like to situate guests at beginning, and you&#8217;re Partner Research Manager in the Program Synthesis, or PROSE group at Microsoft Research and you describe yourself as a scientist seeking connections<\/span><\/b><b><span data-contrast=\"auto\">\u2026<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"none\">between ideas, between research and practice, and with people in varied roles<\/span><\/b><b><span data-contrast=\"none\">.<\/span><\/b><b><span data-contrast=\"none\">&nbsp;So in other words, you&#8217;re a dot connector!&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">In broad strokes, tell us what gets you up in the morning? What \u201cX\u201d are you and the other members of your group trying to solve for?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">It is simply the opportunity to work with the fantastic team that I am part of.<\/span><span data-contrast=\"auto\">&nbsp;W<\/span><span data-contrast=\"auto\">e have&nbsp;<\/span><span data-contrast=\"auto\">richest<\/span><span data-contrast=\"auto\">&nbsp;experts in programming languages,&nbsp;<\/span><span data-contrast=\"auto\">formal<\/span><span data-contrast=\"auto\">&nbsp;methods, software engineering, machine<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">learning, and even human computer interaction.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We have researchers and engineers working closely with program managers and user<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">experience designers.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">I&#8217;m also terribly excited about the charter of this team, which is to advance the state<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">of<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">the art in program synthesis and to deliver these innovations as magical experiences across a wide range of Microsoft products<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Well, we have a lot of ground to cover today on the topic of program synthesis, so let&#8217;s set the stage<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;and operationalize the term.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">What is program synthesis and why is it significant?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Program synthesis is any capability to automatically generate programs<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;or code fragments<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;from user&#8217;s intent expressed to some natural form like input\/output examples, demonstrations, partial programs or even keywords or natural language.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">This has&nbsp;<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">&nbsp;potential to facilitate two disruptions.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">First, creation of 100<\/span><span data-contrast=\"auto\">x<\/span><span data-contrast=\"auto\">&nbsp;mo<\/span><span data-contrast=\"auto\">r<\/span><span data-contrast=\"auto\">e programmers, because&nbsp;<\/span><span data-contrast=\"none\">ninety nine percent of people who use computers do not know programming and they get stuck with repetitive, tedious tasks. But these are quite creative people and it is just that programming, as it exists today, creates an artificial barrier to program computers. Program synthesis can allow these end users to express themselves naturally and program computers as easily as they would command a personal assistant.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Hmm.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">The second disruption relates to improving the productivity of existing developers and data scientists by 10&nbsp;<\/span><span data-contrast=\"auto\">to 1<\/span><span data-contrast=\"auto\">00<\/span><span data-contrast=\"auto\">x<\/span><span data-contrast=\"auto\">&nbsp;in many task domains.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Most of the code that these folks are writing is simply boilerplate code.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Hmm.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">And there is very little algorithmic creativity involved.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Program synthesis can liberate programmers from having to focus on boring details and enable them to focus on creative aspects of programming.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: So l<\/span><\/b><b><span data-contrast=\"auto\">et me drill in a little bit there on the claims of 100<\/span><\/b><b><span data-contrast=\"auto\">x<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;and 10<\/span><\/b><b><span data-contrast=\"auto\">x<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;to 100<\/span><\/b><b><span data-contrast=\"auto\">x<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;increase in productivity and so on.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;W<\/span><\/b><b><span data-contrast=\"auto\">hat data do you have to support the claims that this is going to make our productivity go way up?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">We did some user studies related to accomplishing a given task.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So what took Python programmers around&nbsp;<\/span><span data-contrast=\"auto\">thirty<\/span><span data-contrast=\"auto\">&nbsp;minutes to accomplish was doable<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;using our program synthesis technologies<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;in less than a minute.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And this was quite representative of the tasks in the space of so<\/span><span data-contrast=\"auto\">called data wrangling or data cleaning.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Right, right.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">So is this technology being used and you&#8217;re seeing it in action and seeing these increases, or is it just on<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;sort of<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;research<\/span><\/b><b><span data-contrast=\"auto\">\/<\/span><\/b><b><span data-contrast=\"auto\">study end of things right now?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">In fact, it is very&nbsp;<\/span><span data-contrast=\"auto\">r<\/span><span data-contrast=\"auto\">eal.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The first mass market deployment of the program synthesis technology was in the form of this feature called Flash Fill in Excel<\/span><span data-contrast=\"auto\">, w<\/span><span data-contrast=\"auto\">hich has been in Excel since 2013.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And since then<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;we have released similar experiences based on example<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">based interaction across many different Microsoft products.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Well&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">l<\/span><\/b><b><span data-contrast=\"auto\">et&#8217;s zoom in and talk about Flash Fill,&nbsp;<\/span><\/b><b><span data-contrast=\"none\">which you just mentioned<\/span><\/b><b><span data-contrast=\"auto\">,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">and it synthesizes string transformation programs quickly with minimal input\/output examples,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">sometimes even just one<\/span><\/b><b><span data-contrast=\"auto\">?&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Tell us about Flash Fill.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">What inspired the idea in the first place?<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">And tell us<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;technically<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;how you went about building in those efficiencies.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">: Ten<\/span><span data-contrast=\"auto\">&nbsp;years ago, I was flying from Frankf<\/span><span data-contrast=\"auto\">u<\/span><span data-contrast=\"auto\">rt to Seattle, and there was a lady sitting next to me in the airplane.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">She was impressed to know that I have a PhD in computer scienc<\/span><span data-contrast=\"auto\">e&nbsp;<\/span><span data-contrast=\"auto\">and that I work for Microsoft&nbsp;<\/span><span data-contrast=\"auto\">R<\/span><span data-contrast=\"auto\">esearch<\/span><span data-contrast=\"auto\">, s<\/span><span data-contrast=\"auto\">o I&nbsp;<\/span><span data-contrast=\"auto\">ought<\/span><span data-contrast=\"auto\">&nbsp;to help her with the task that she was struggling with.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">She opens up&nbsp;<\/span><span data-contrast=\"auto\">her<\/span><span data-contrast=\"auto\">&nbsp;laptop, fires up Excel, shows me a column of names in the format first name<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;space<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;last name, and asks me<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;how can she reformat in the form last name<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;comma<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;first name<\/span><span data-contrast=\"auto\">?&nbsp;<\/span><span data-contrast=\"auto\">Now at the time, I had no idea about the programming model underneath Excel, so I had excuse myself out of the situation<\/span><span data-contrast=\"auto\">!&nbsp;<\/span><span data-contrast=\"auto\">After returning home, when I searched for the solution to that problem on Excel&nbsp;<\/span><span data-contrast=\"auto\">H<\/span><span data-contrast=\"auto\">elp forums, it is then that I realized that there were many<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;many people who struggled with simple repetitive tasks<\/span><span data-contrast=\"auto\">,&nbsp;<\/span><span data-contrast=\"auto\">and were soliciting the help of an expert o<\/span><span data-contrast=\"auto\">n<\/span><span data-contrast=\"auto\">&nbsp;a&nbsp;<\/span><span data-contrast=\"auto\">H<\/span><span data-contrast=\"auto\">elp forum while communicating their intent using a few input\/output examples.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"none\">A typical interaction would take place over a course of several days<\/span><span data-contrast=\"none\">.&nbsp;<\/span><span data-contrast=\"auto\">Now, t<\/span><span data-contrast=\"auto\">his inspired me to develop the Flash Fill system that can automate the role of the expert on the&nbsp;<\/span><span data-contrast=\"auto\">H<\/span><span data-contrast=\"auto\">elp forum and<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">bring down the interaction time from a few days to a few seconds.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The key technical aspect of Flash Fill is the search strategy that it uses<\/span><span data-contrast=\"auto\">. I<\/span><span data-contrast=\"auto\">nstead of searching over a general purpose programming language,<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">we restrict the search to an appropriately designed&nbsp;<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">omain<\/span><span data-contrast=\"auto\">-s<\/span><span data-contrast=\"auto\">pecific&nbsp;<\/span><span data-contrast=\"auto\">l<\/span><span data-contrast=\"auto\">anguage that includes operators for string transformations such as regular expressions, substring, concatenate, and limited form of conditionals to allow for dealing with data in different formats.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Okay.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Secondly, instead of blindly enumerating programs over this underlying DSL<\/span><span data-contrast=\"auto\">, w<\/span><span data-contrast=\"auto\">e leverage logical properties of the operators in this DSL to allow for a goa<\/span><span data-contrast=\"auto\">l-<\/span><span data-contrast=\"auto\">directed search.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So essentially, we flow the input\/output examples down the&nbsp;<\/span><span data-contrast=\"auto\">grammar<\/span><span data-contrast=\"auto\">&nbsp;of the DSL. And this identifies programs that are consistent with the examples.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The third idea stems from the observation that we also use several heuristics to guide the search o<\/span><span data-contrast=\"auto\">ver<\/span><span data-contrast=\"auto\">&nbsp;many choices that remain<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;even after logical reasoning has pruned most of the possibilities in the search tree.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Authoring and maintaining th<\/span><span data-contrast=\"auto\">ese<\/span><span data-contrast=\"auto\">&nbsp;heuristics has been an expensive proposition<\/span><span data-contrast=\"auto\">, s<\/span><span data-contrast=\"auto\">o recently we have actually started using machine learning to learn these heuristics from data that relates to past exploration of the search space o<\/span><span data-contrast=\"auto\">ver<\/span><span data-contrast=\"auto\">&nbsp;various benchmark tasks.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Another defining aspect of Flash Fill<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;as you mentioned<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;is<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">the fact&nbsp;<\/span><span data-contrast=\"auto\">that&nbsp;<\/span><span data-contrast=\"auto\">it can learn the user&#8217;s intent from very few examples.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Right.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">And it does this by ranking programs to pick a candidate from among the many programs that satisfy the user&#8217;s examples.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We prefer programs that are smaller, simpler, use fewer constants, use smaller<\/span><span data-contrast=\"auto\">sized constants. We also examine the output generated by these programs on the other test inputs that are available.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We prefer those programs that generate outputs that are similar and look uniform. For instance, suppose we have one program that generates all outputs that are valid dates and another program there generates mostly dates, but also some gibberish stuff.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Right.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Then we have an additional reason to prefer the first program.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: L<\/span><\/b><b><span data-contrast=\"auto\">et&#8217;s talk a bit about&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">a&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">scenario where Flash Fill didn&#8217;t work. I&#8217;ll call it a Flash Fill&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">F<\/span><\/b><b><span data-contrast=\"auto\">ail.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;T<\/span><\/b><b><span data-contrast=\"auto\">ell us that story and then tell us what you learned as a researcher from that experience.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Flash Fill can automate a wide variety of string transformations. However, there are many transformation tasks that it cannot do such as number transformations or date transformations.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Huh.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">But the user<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">experience is so inviting that people invariably want to give it a try even on tasks that it was never meant for.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And then talk about it when it does not work.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Right.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">So there was this recent&nbsp;<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">weet on October 2018<\/span><span data-contrast=\"auto\">&nbsp;t<\/span><span data-contrast=\"auto\">hat made fun of Flash Fill and was reshared more than 10,000 times.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"none\">Twitter use<\/span><span data-contrast=\"none\">r&nbsp;<\/span><span data-contrast=\"auto\">Da<\/span><span data-contrast=\"auto\">r<\/span><span data-contrast=\"auto\">ren wrote:<\/span><span data-contrast=\"auto\">&nbsp;\u201c<\/span><span data-contrast=\"auto\">AI is going to take over the world.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">But&nbsp;<\/span><span data-contrast=\"auto\">look what<\/span><span data-contrast=\"auto\">&nbsp;Excel auto<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">populated for me today.<\/span><span data-contrast=\"auto\">\u201d&nbsp;<\/span><span data-contrast=\"auto\">Da<\/span><span data-contrast=\"auto\">r<\/span><span data-contrast=\"auto\">ren gave an example converting D<\/span><span data-contrast=\"auto\">-e-c<\/span><span data-contrast=\"auto\">&nbsp;to December<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;and Flash Fill auto<\/span><span data-contrast=\"auto\">completed&nbsp;<\/span><span data-contrast=\"auto\">J-a-n<\/span><span data-contrast=\"auto\">&nbsp;to&nbsp;<\/span><span data-contrast=\"auto\">Janember<\/span><span data-contrast=\"auto\">&nbsp;and O<\/span><span data-contrast=\"auto\">-c-t<\/span><span data-contrast=\"auto\">&nbsp;to&nbsp;<\/span><span data-contrast=\"auto\">Octember<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">My team found it funny enough to print this&nbsp;<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">weet on a&nbsp;<\/span><span data-contrast=\"auto\">t-<\/span><span data-contrast=\"auto\">shirt.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And now this<\/span><span data-contrast=\"auto\">&nbsp;t-<\/span><span data-contrast=\"auto\">shirt is my dress shirt for my keynotes.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The positive thing here is that this kind of feedback has been extremely useful for us to decide what new domains to invest into for program synthesis.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"none\">Mmmm<\/span><\/b><b><span data-contrast=\"none\">. W<\/span><\/b><b><span data-contrast=\"none\">hile we&#8217;re on the topic of Flash Fill, I don&#8217;t need to remind anyone that Microsoft Excel is one of the planet&#8217;s most widely<\/span><\/b><b><span data-contrast=\"none\">&#8211;<\/span><\/b><b><span data-contrast=\"none\">used software programs and<\/span><\/b><b><span data-contrast=\"none\">,<\/span><\/b><b><span data-contrast=\"none\">&nbsp;<\/span><\/b><b><span data-contrast=\"none\">b<\/span><\/b><b><span data-contrast=\"none\">y extension, as Ben Zorn points out, the spreadsheet is among the most widely used programming languages,&nbsp;<\/span><\/b><b><span data-contrast=\"none\">s<\/span><\/b><b><span data-contrast=\"none\">o we&#8217;re firmly in&nbsp;<\/span><\/b><b><span data-contrast=\"none\">\u2018<\/span><\/b><b><span data-contrast=\"none\">product<\/span><\/b><b><span data-contrast=\"none\">\u2019<\/span><\/b><b><span data-contrast=\"none\">&nbsp;territory here with Excel, and you&#8217;re firmly planted in&nbsp;<\/span><\/b><b><span data-contrast=\"none\">\u2018<\/span><\/b><b><span data-contrast=\"none\">research<\/span><\/b><b><span data-contrast=\"none\">\u2019<\/span><\/b><b><span data-contrast=\"none\">&nbsp;territory. How do you manage the balance between academic research and product engineering<\/span><\/b><b><span data-contrast=\"none\">?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Sumit<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">Gulwani<\/span><span data-contrast=\"none\">: So by the way, Ben Zorn has been a great mentor and collaborator and has shaped some of my thinking on this topic.<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">The key is to not treat this as a conflict. The most important bit that facilitates this is to make thoughtful choices behind the problem definitions that we pick as researchers.<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">Problems that will satisfy our intellectual curiosity, but will also justify our corporate funding.&nbsp;<\/span><span data-contrast=\"none\">Flash Fill was the most important turning point in my career. I went from, instead of searching for the hardest problem I can solve, to searching for the simplest problem that will have the most impact.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><i><span data-contrast=\"none\">(music plays)<\/span><\/i><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: So I imagine program synthesis technolog<\/span><\/b><b><span data-contrast=\"auto\">y<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;applies \u2013 or will apply \u2013 in many other cases besides Excel. So what other applications have you developed the capabilities of program synthesis for?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">So we have developed program synthesis capabilities for a variety of map transformations.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">I already talked about string transformations, number transformations, date transformations<\/span><span data-contrast=\"auto\">\u2026 w<\/span><span data-contrast=\"auto\">e<\/span><span data-contrast=\"auto\">\u2019ve<\/span><span data-contrast=\"auto\">&nbsp;also developed these capabilities for&nbsp;<\/span><span data-contrast=\"auto\">lookup-<\/span><span data-contrast=\"auto\">based transformations and colum<\/span><span data-contrast=\"auto\">n-<\/span><span data-contrast=\"auto\">splitting transformations.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Hmm.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Another area that we are heavily invested in is in the space of filter<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">based transformations, and specifically for file ingestion.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Normally you&nbsp;<\/span><span data-contrast=\"auto\">may<\/span><span data-contrast=\"auto\">&nbsp;spend a few hours writing parsers to extract this information<\/span><span data-contrast=\"auto\">, b<\/span><span data-contrast=\"auto\">ut programming<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">by<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">example experiences allow you to simply specify one to two examples of various fields in the output table and the parsers can be automatically synthesized.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Hmm.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Another related domain that we have looked at is that of re<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">shaping tables in sem<\/span><span data-contrast=\"auto\">i-<\/span><span data-contrast=\"auto\">structured spreadsheets.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Turns out that&nbsp;<\/span><span data-contrast=\"auto\">fifty&nbsp;<\/span><span data-contrast=\"auto\">percent Excel spreadsheets are semi<\/span><span data-contrast=\"auto\">structured, meaning the data is logged into some ad hoc format.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">While this is easy to visualize, it becomes tricky to analyze it.<\/span><span data-contrast=\"auto\">&nbsp;We<\/span><span data-contrast=\"auto\">&nbsp;can enable re<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">shaping of these sem<\/span><span data-contrast=\"auto\">i-<\/span><span data-contrast=\"auto\">structured tables using an exampl<\/span><span data-contrast=\"auto\">e-<\/span><span data-contrast=\"auto\">based experience where the user can simply specify a few example<\/span><span data-contrast=\"auto\">&nbsp;tuples<\/span><span data-contrast=\"auto\">&nbsp;in the intended output table.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So all of these capabilities come under the broad umbrella of s<\/span><span data-contrast=\"auto\">o-<\/span><span data-contrast=\"auto\">called data wrangling<\/span><span data-contrast=\"auto\">\u2026<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Yeah.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">: \u2026w<\/span><span data-contrast=\"auto\">hich is the task of transforming data from one sem<\/span><span data-contrast=\"auto\">i-<\/span><span data-contrast=\"auto\">structured format to another to facilitate&nbsp;<\/span><span data-contrast=\"auto\">further<\/span><span data-contrast=\"auto\">&nbsp;downstream processing.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Hmm.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">: D<\/span><span data-contrast=\"auto\">ata scientists apparently spend&nbsp;<\/span><span data-contrast=\"auto\">eighty&nbsp;<\/span><span data-contrast=\"auto\">percent of their time wrangling data, bringing it into a form that they can the<\/span><span data-contrast=\"auto\">n<\/span><span data-contrast=\"auto\">&nbsp;build&nbsp;<\/span><span data-contrast=\"auto\">ML&nbsp;<\/span><span data-contrast=\"auto\">models over. Program synthesis can facilitate easier and faster data wrangling.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: Okay.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Sumit<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">Gulwani<\/span><span data-contrast=\"none\">: Another domain that we are developing some synthesis capabilities for is that of repetitive editing inside documents such as Word, PowerPoint, or even code. We are also investigating development of program synthesis from natural language capabilities for several domains, including querying tables, visualizations\u2026<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: Huh.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Sumit<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">Gulwani<\/span><span data-contrast=\"none\">: \u2026and even machine learning workflows. So the scope for program synthesis is&nbsp;<\/span><span data-contrast=\"auto\">quite broad simply given that programming is so broad<\/span><span data-contrast=\"auto\">!<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Yeah.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Any task domain where you can describe your intent naturally is a potentially useful candidate for program synthesis.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Looking to the future then, there are some exciting new developments in program synthesis&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">t<\/span><\/b><b><span data-contrast=\"auto\">hat leverage recent advances in symbolic reasoning and machine learning.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">So tell us about these developments<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"none\">and where we are heading with these innovative threads of research in what you called predictive synthesis and modeless synthesis<\/span><\/b><b><span data-contrast=\"auto\">.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">The first prototype of Flash Fill that I developed would take three to four examples<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;on average<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;per scenario.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The Excel team told me they cannot ship Flash Fill until I made it work with one example on mo<\/span><span data-contrast=\"auto\">st<\/span><span data-contrast=\"auto\">&nbsp;simple cases.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;No pressure<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;though<\/span><\/b><b><span data-contrast=\"auto\">\u2026!<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">: O<\/span><span data-contrast=\"auto\">therwise users&nbsp;<\/span><span data-contrast=\"auto\">would lose<\/span><span data-contrast=\"auto\">&nbsp;trust<\/span><span data-contrast=\"auto\">&nbsp;in&nbsp;<\/span><span data-contrast=\"auto\">the system or would make fun, you know, like the&nbsp;<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">weet that I showed you.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Recently<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;I was challenged to do even better.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"none\">Now you might wonder, how much better can we be than one example?<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: I\u2026 I can&#8217;t even imagine.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"none\">Well,&nbsp;<\/span><span data-contrast=\"auto\">how about zero examples?<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So initially<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;when this was proposed to me, I thought this was a crazy idea.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">How can you read the mind of the user from zero examples?<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">That&#8217;s what I was going to say is<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;you&#8217;re reading my mind now. Just go into&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">my&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">brain and decide what I&#8217;m thinking<\/span><\/b><b><span data-contrast=\"auto\">\u2026<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">But then when I thought more about it, it started to make sense for some domains.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Consider<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;for instance, the task of extracting&nbsp;<\/span><span data-contrast=\"auto\">tabular<\/span><span data-contrast=\"auto\">&nbsp;data from a custom text file or a webpage.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Sure enough, you know, giving one to two examples of each field is a much better experience than having to write the parser yourself.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">But if there are&nbsp;<\/span><span data-contrast=\"auto\">tens<\/span><span data-contrast=\"auto\">&nbsp;fields, then giving one to two examples of each field can&nbsp;<\/span><span data-contrast=\"auto\">itself be<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">a&nbsp;<\/span><span data-contrast=\"auto\">tedious task.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">But when I show&nbsp;<\/span><span data-contrast=\"auto\">such&nbsp;<\/span><span data-contrast=\"auto\">a sem<\/span><span data-contrast=\"auto\">i-<\/span><span data-contrast=\"auto\">structure<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">&nbsp;document to&nbsp;<\/span><span data-contrast=\"auto\">a&nbsp;<\/span><span data-contrast=\"auto\">human, they can often guess the underlining tabular structure.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So I thought, why can&#8217;t<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">machine<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">&nbsp;do that?<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So this is what we call predictive synthesis.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The idea here is to synthesize an intended program from several inputs as opposed to few input\/output examples, and we enable this by learning or synthesizing a structure within the inputs.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We have developed predictive synthesis capabilities for a few domains, including splitting a column into multiple columns or extracting tables from text files, web pages, and even PDF documents.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Our predictive synthesis capability&nbsp;<\/span><span data-contrast=\"auto\">for<\/span><span data-contrast=\"auto\">&nbsp;extracting tables from text files ships as part of SQL&nbsp;<\/span><span data-contrast=\"auto\">S<\/span><span data-contrast=\"auto\">erver&nbsp;<\/span><span data-contrast=\"auto\">M<\/span><span data-contrast=\"auto\">anagement&nbsp;<\/span><span data-contrast=\"auto\">S<\/span><span data-contrast=\"auto\">tudio<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;where it is used to power the&nbsp;<\/span><span data-contrast=\"auto\">F<\/span><span data-contrast=\"auto\">lat&nbsp;<\/span><span data-contrast=\"auto\">F<\/span><span data-contrast=\"auto\">ile&nbsp;<\/span><span data-contrast=\"auto\">I<\/span><span data-contrast=\"auto\">mport&nbsp;<\/span><span data-contrast=\"auto\">W<\/span><span data-contrast=\"auto\">izard.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Mmm<\/span><\/b><b><span data-contrast=\"auto\">.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">And apparently now this is the most<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">used wizard across all of SSMS.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We also recently shipped our predictive synthesis capability for extracting tables from PDF documents and from webpages as part of&nbsp;<\/span><span data-contrast=\"auto\">PowerBI<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Another new development is what we call modeless&nbsp;<\/span><span data-contrast=\"auto\">synthesis.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">There are many mundane<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;repetitive tasks that users may not even naturally think of as something that can be programmed.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">For instance, converting all red text to green in a PowerPoint slide deck, or all dates in U.S. format to European format in a Word document.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And this is where there&#8217;s a need for a personalized agent that can no<\/span><span data-contrast=\"auto\">n-<\/span><span data-contrast=\"auto\">intrusively watch, learn, and make suggestions.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">So recently we shipped an agent in preview mode in&nbsp;<\/span><span data-contrast=\"auto\">V<\/span><span data-contrast=\"auto\">isual&nbsp;<\/span><span data-contrast=\"auto\">S<\/span><span data-contrast=\"auto\">tudio that looks out for any repetitive code edits. When it identifies a couple of code transformations that can be related, it generalizes<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">them into a more generalized script and uses that to proactively suggest all other places where I might need to make that edit.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: Right. W<\/span><\/b><b><span data-contrast=\"auto\">e&#8217;ve talked a lot about the inner workings of program synthesis, but I&#8217;m&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">really&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">interested to know what kinds of form factors might be useful for different applications of the technology.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">So give us an example of where and how someone might make use of program synthesis and on what kind of device?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Most of the use cases that I have talked about have been for end<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">users to help them automate their tasks.<\/span><span data-contrast=\"auto\">&nbsp;O<\/span><span data-contrast=\"auto\">ne big leap that we are now investing in is to synthesize&nbsp;<\/span><span data-contrast=\"auto\">a&nbsp;<\/span><span data-contrast=\"auto\">readable, editable program<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">in a programming language of choice.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">This will be especially important when the synthesize<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">&nbsp;program needs to be executed on big data or deployed for future executions.<\/span><span data-contrast=\"auto\">&nbsp;Hence, w<\/span><span data-contrast=\"auto\">e have been investing in generating readable code in specific target languages like Python, R,&nbsp;<\/span><span data-contrast=\"auto\">P<\/span><span data-contrast=\"auto\">y<\/span><span data-contrast=\"auto\">Spark<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;and involving user<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">specific libraries like&nbsp;<\/span><span data-contrast=\"auto\">P<\/span><span data-contrast=\"auto\">andas.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Besides facilitating transparency, this also provides a lot of educational value<\/span><span data-contrast=\"auto\">, a<\/span><span data-contrast=\"auto\">nd most significantly, would make it possible to incorporate&nbsp;<\/span><span data-contrast=\"auto\">these&nbsp;<\/span><span data-contrast=\"auto\">synthesize<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">&nbsp;programs inside a developer or data scientist<\/span><span data-contrast=\"auto\">\u2019s<\/span><span data-contrast=\"auto\">&nbsp;existing workflow in ID<\/span><span data-contrast=\"auto\">E<\/span><span data-contrast=\"auto\">s or&nbsp;<\/span><span data-contrast=\"auto\">N<\/span><span data-contrast=\"auto\">otebooks. I&#8217;m terribly excited about&nbsp;<\/span><span data-contrast=\"auto\">N<\/span><span data-contrast=\"auto\">otebooks in particular.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Program synthesis is good about generating small fragments of code which matches the gran<\/span><span data-contrast=\"auto\">ularity<\/span><span data-contrast=\"auto\">&nbsp;of what users write in&nbsp;<\/span><span data-contrast=\"auto\">N<\/span><span data-contrast=\"auto\">otebook cells. Moreover, program synthesis can generate readable code in various target languages and using various libraries.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And this&nbsp;<\/span><span data-contrast=\"auto\">should<\/span><span data-contrast=\"auto\">&nbsp;address the challenge that&nbsp;<\/span><span data-contrast=\"auto\">N<\/span><span data-contrast=\"auto\">otebook users will have around polyglot programming and discoverability issues around new libraries and SD<\/span><span data-contrast=\"auto\">Ks<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">&nbsp;A<\/span><span data-contrast=\"auto\">nd&nbsp;<\/span><span data-contrast=\"auto\">N<\/span><span data-contrast=\"auto\">otebooks provide an ideal platform for that interactivity.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host: So cross-disciplinary research is one of four big bets you lay out in a blog post from last year,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">. And your own rather prolific publication record in program synthesis spans a surprisingly diverse array of computer science conferences. And you&#8217;ve talked already a little about&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">diversity and&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">multi<\/span><\/b><b><span data-contrast=\"auto\">&#8211;<\/span><\/b><b><span data-contrast=\"auto\">disciplinarity<\/span><\/b><b><span data-contrast=\"auto\">, but I want you to go a little further here and talk about why it&#8217;s important in research, particularly as it relates to program synthesis.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">This is where the Indian adage&nbsp;<\/span><span data-contrast=\"auto\">\u201cone<\/span><span data-contrast=\"auto\">&nbsp;plus&nbsp;<\/span><span data-contrast=\"auto\">one<\/span><span data-contrast=\"auto\">&nbsp;equals&nbsp;<\/span><span data-contrast=\"auto\">eleven,\u201d t<\/span><span data-contrast=\"auto\">hat refers to the sum being more than its part<\/span><span data-contrast=\"auto\">s,<\/span><span data-contrast=\"auto\">&nbsp;comes true.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Now, program synthesis<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;specifically<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;is a highly interdisciplinary topic.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We need serious cross<\/span><span data-contrast=\"auto\">disciplinary innovation to build useful technologies and usable experiences over those technologies.<\/span><span data-contrast=\"auto\">&nbsp;T<\/span><span data-contrast=\"auto\">his has led to several publications in programming languages and software engineering&nbsp;<\/span><span data-contrast=\"none\">conferences like POPL, PLDI, OOPSLA and ICSE.&nbsp;<\/span><span data-contrast=\"auto\">Then we use machine learning to learn various heuristics that are difficult to author by hand and maintain.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And this has led to publications and conferences like ICML and ICLR. Since all of this work falls under the broad space of AI, we have several publications in AAAI and IJCAI as well. Some killer applications have been in the space of data wrangling. And because of the domain relevance, we have published in data conferences like, SIGMOD, VLDB, and KDD.&nbsp;<\/span><span data-contrast=\"auto\">And last by not the least, we have to pay attention to usability issues as well. And this has led to publications in HCI conferences like UIST and CHI.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"none\">And if you think about the graduate system that produces us, the emphasis is on creating an individualistic identity, preparing students to\u2026<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: Right.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Sumit<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">Gulwani<\/span><span data-contrast=\"none\">:&nbsp;<\/span><span data-contrast=\"none\">\u2026<\/span><span data-contrast=\"none\">define hard problems of their own and to come up with solutions of their own. And they tend to become deep experts in a narrow area.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: So<\/span><\/b><b><span data-contrast=\"none\">,<\/span><\/b><b><span data-contrast=\"none\">&nbsp;very siloed<\/span><\/b><b><span data-contrast=\"none\">\u2026<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Sumit<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">Gulwani<\/span><span data-contrast=\"none\">: Exactly. And then the natural tendency is to continue exploration in that deep vertical. But I think it requires a different kind of thinking and leap to start appreciating the importance of other research areas and to figure out ways in which you can work together and hence achieve results that you would not have been able to produce by yourself<\/span><span data-contrast=\"none\">.&nbsp;<\/span><span data-contrast=\"none\">I think the goal of graduate education should be to make you expert in one narrow area, but also give you enough breadth so that you know what&nbsp;<\/span><span data-contrast=\"none\">is&nbsp;<\/span><span data-contrast=\"none\">the right tool and research area to be applied to solving a given problem or a sub<\/span><span data-contrast=\"none\">&#8211;<\/span><span data-contrast=\"none\">problem<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&nbsp;so that you are not always looking at it with your own biased lens.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><i><span data-contrast=\"none\">(music plays)<\/span><\/i><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"none\">Whenever we talk about the promises of innovative new technologies, we also have to talk about the perils.&nbsp;<\/span><\/b><b><span data-contrast=\"none\">And&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">thi<\/span><\/b><b><span data-contrast=\"auto\">s the part of the podcast where I always ask what could go wrong<\/span><\/b><b><span data-contrast=\"auto\">?&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">I do this because I want to know if there are things we should be aware of<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;or thinking of<\/span><\/b><b><span data-contrast=\"auto\">,<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;or even concerned about<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">when we contemplate building and using these highly complex systems you&#8217;re talking about, that users will have very little understanding of.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">So is there anything about your work,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">, that keeps you up at night?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">So now that program synthesis technologies are becoming mainstream, the increasing worry on my mind has been that<\/span><span data-contrast=\"auto\">&nbsp;of<\/span><span data-contrast=\"auto\">&nbsp;correctness.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Mmm<\/span><\/b><b><span data-contrast=\"auto\">.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">How does the user know that the program that has been synthesized is correct?<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Right<\/span><\/b><b><span data-contrast=\"auto\">!<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Essentially<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;we need to start thinking about the debugging experiences in this new world of programming.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And I think the key is going to be to regard program synthesis not as a on<\/span><span data-contrast=\"auto\">e-s<\/span><span data-contrast=\"auto\">hot process, but as an interactive conversation with the user.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">M<\/span><\/b><b><span data-contrast=\"auto\">m<\/span><\/b><b><span data-contrast=\"auto\">m<\/span><\/b><b><span data-contrast=\"auto\">.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"none\">In fact,&nbsp;<\/span><span data-contrast=\"auto\">it turns out that when you do not commit to a program yourself<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;but you rather program by intent, we can actually enable some unique debugging experiences that are not going to be there in the standard programming world.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">We can, for instance, synthesize multiple&nbsp;<\/span><span data-contrast=\"auto\">programs from few examples<\/span><span data-contrast=\"auto\">&nbsp;\u2013 e<\/span><span data-contrast=\"auto\">ach of those programs is consistent with these examples, so they&#8217;re user<\/span><span data-contrast=\"auto\">provided<\/span><span data-contrast=\"auto\">&nbsp;\u2013 a<\/span><span data-contrast=\"auto\">nd run all these programs in&nbsp;<\/span><span data-contrast=\"auto\">parallel<\/span><span data-contrast=\"auto\">&nbsp;on the remaining test inputs.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">If they all produce the same result, it doesn&#8217;t really matter which program you pick.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">But if these programs generate different results on some test input, it is a sign of ambiguity in the user&#8217;s intent on&nbsp;<\/span><span data-contrast=\"auto\">their<\/span><span data-contrast=\"auto\">&nbsp;test input.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And we can surface that test input to the user and ask them to provide th<\/span><span data-contrast=\"auto\">e<\/span><span data-contrast=\"auto\">&nbsp;correct output on&nbsp;<\/span><span data-contrast=\"auto\">that<\/span><span data-contrast=\"auto\">&nbsp;input.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"none\">This is one of my favorite ideas and we called it \u201cdistinguishing inputs<\/span><span data-contrast=\"none\">.<\/span><span data-contrast=\"none\">\u201d You can liken this to active learning in the&nbsp;<\/span><span data-contrast=\"none\">machine learning<\/span><span data-contrast=\"none\">&nbsp;terminology.&nbsp;<\/span><span data-contrast=\"none\">We published this idea in ICSE 2010, and just few hours ago, I learned that this work has been selected for ICSE 2020 as the Most Influential Paper for&nbsp;<\/span><span data-contrast=\"none\">the ICSE 2010 edition<\/span><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Wow\u2026.&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">I love stories.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Tell us yours,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">What was your path to computer science and how did you end up doing what you&#8217;re doing right now at Microsoft&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">R<\/span><\/b><b><span data-contrast=\"auto\">esearch?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">I finished my schooling in India and then appeared for the joint entrance examination for IITs. I managed an&nbsp;<\/span><span data-contrast=\"auto\">A<\/span><span data-contrast=\"auto\">ll<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">India rank of somewhere between&nbsp;<\/span><span data-contrast=\"auto\">a hundred<\/span><span data-contrast=\"auto\">&nbsp;to&nbsp;<\/span><span data-contrast=\"auto\">two hundred<\/span><span data-contrast=\"auto\">&nbsp;out of around a million students who take this examination.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">My rank was sufficient to get me into computer science, but not in the city that was closer to where my parent<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">&nbsp;lived<\/span><span data-contrast=\"auto\">,&nbsp;<\/span><span data-contrast=\"auto\">and hence, I had to make due with enrolling in the electrical engineering program at IIT Kanpur.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">After taking the introductory programming course in my first year there, I developed a love for the subject. The course instructor teased us that two 2*2 matrices can be multiplied with less than seven multiplications, but wouldn&#8217;t tell us how unless I was in an advanced class meant only for computer science student<\/span><span data-contrast=\"auto\">s.&nbsp;<\/span><span data-contrast=\"auto\">So I retook the IIT entrance examination,&nbsp;<\/span><span data-contrast=\"none\">and I managed a tw<\/span><span data-contrast=\"none\">o-<\/span><span data-contrast=\"none\">digit rank&nbsp;<\/span><span data-contrast=\"none\">in thirties. I argued with the university to promote me to the computer science department for the second year, since the first year curriculum was same for students in all the departments, and I had managed&nbsp;<\/span><span data-contrast=\"auto\">to prove that I deserved to study computer science<\/span><span data-contrast=\"none\">.<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">B<\/span><span data-contrast=\"none\">ut they wouldn&#8217;t agree. So I decided to drop out and re-enter the university. Now<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&nbsp;actually<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&nbsp;there&#8217;s a ruling that would not permit you to re-enter the university like I did. So I had to repeat the first year and was forced to take the same classes again. But&nbsp;<\/span><span data-contrast=\"auto\">I got to study what I loved and that spurred me towards more excellence in the field, and hence PhD was a natural choice.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: Right.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">: I was fortunate to get PhD admission&nbsp;<\/span><span data-contrast=\"none\">offers from many top computer science universitie<\/span><span data-contrast=\"none\">s.&nbsp;<\/span><span data-contrast=\"auto\">CMU&nbsp;<\/span><span data-contrast=\"none\">called me and&nbsp;<\/span><span data-contrast=\"auto\">told me that the cost of living here is so low that I can even buy a house with my grad student salary! I wrote to my advisor<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;George&nbsp;<\/span><span data-contrast=\"auto\">Necula<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;at UC Berkeley and asked him about a counter-offer. He said, yes, the cost of living here is high, but this is because everyone in the world wants to live here, so now you make your choice<\/span><span data-contrast=\"auto\">.&nbsp;<\/span><span data-contrast=\"auto\">So that&#8217;s how I landed up in Berkele<\/span><span data-contrast=\"auto\">y.&nbsp;<\/span><span data-contrast=\"auto\">And then after my PhD at&nbsp;<\/span><span data-contrast=\"none\">Berkeley I had several academic offers for faculty positions, but&nbsp;<\/span><span data-contrast=\"auto\">MSR was an&nbsp;<\/span><span data-contrast=\"none\">easy choice&nbsp;<\/span><span data-contrast=\"none\">for two reasons: the sheer amount of cross-disciplinary talent under one roof. It is like many university departments put together. And the opportunity to leverage Microsoft&#8217;s broad reach to customers to create real practical impact.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Almost every researcher I&#8217;ve had in the booth has a side quest, I like to call it, or a personal passion.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">And I know from talking to you and from reading some of your personal blog posts that one of yours is inculcating human empathy as an important cultural&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">attribute in the next generation.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">So circling back to your secret identity as a dot connector, tell us how you might bring those two together<\/span><\/b><b><span data-contrast=\"auto\">!<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">There are&nbsp;<\/span><span data-contrast=\"auto\">a&nbsp;<\/span><span data-contrast=\"auto\">few principles that are being increasingly embraced around the tech industry.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Customer obsession, diverse work place, and work\/life balance.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">T<\/span><span data-contrast=\"auto\">hese principles relate to the three kinds of relationships that we have in our lives:<\/span><span data-contrast=\"auto\">&nbsp;w<\/span><span data-contrast=\"auto\">ith our customers whom we serve, with our work colleagues, and with our personal contacts.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Empathy holds the key to understanding and nurturing these relationships.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Kids are highly attuned to being empathic.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">I&nbsp;<\/span><span data-contrast=\"auto\">will tell you one story involving my child&nbsp;<\/span><span data-contrast=\"auto\">Sumay<\/span><span data-contrast=\"auto\">&nbsp;when he was in&nbsp;<\/span><span data-contrast=\"auto\">preschool.&nbsp;<\/span><span data-contrast=\"auto\">I wanted to teach&nbsp;<\/span><span data-contrast=\"none\">him<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">some conceptual content, and in particular, a math theorem<\/span><span data-contrast=\"none\">.<\/span><span data-contrast=\"none\">&nbsp;I chose that theorem&nbsp;<\/span><span data-contrast=\"auto\">that relates odd numbers. Odd plus odd equals even. Now, while it&#8217;s a simple theorem, the student was a preschooler who had many more fun things to do.&nbsp;<\/span><span data-contrast=\"none\">And this theorem was his first<\/span><span data-contrast=\"none\">.&nbsp;<\/span><span data-contrast=\"auto\">The first evening<\/span><span data-contrast=\"auto\">, I m<\/span><span data-contrast=\"auto\">ade all kinds of diagrams, but&nbsp;<\/span><span data-contrast=\"none\">unfortunately&nbsp;<\/span><span data-contrast=\"auto\">it didn&#8217;t work. The next evening I tried using all the various number-related toys in the house. Still no luck. Finally, I realized I had to meet&nbsp;<\/span><span data-contrast=\"auto\">Sumay<\/span><span data-contrast=\"auto\">&nbsp;where he&nbsp;<\/span><span data-contrast=\"none\">was&nbsp;<\/span><span data-contrast=\"none\">and not push to a level that he wasn&#8217;t ready for.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"none\">Host: Right.<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"none\">: The following evening<\/span><span data-contrast=\"none\">,&nbsp;<\/span><span data-contrast=\"auto\">I told him a stor<\/span><span data-contrast=\"auto\">y: a<\/span><span data-contrast=\"auto\">n odd number is like a group of guys that are all paired up, except one. And he&#8217;s the lonely guy. When two odd numbers come together, then the two lonely guys can pair up with each other and become friends. And that&#8217;s an even number. Suddenly, I could see by the look on his face that he understood and got i<\/span><span data-contrast=\"auto\">t.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And now&nbsp;<\/span><span data-contrast=\"none\">I experience this firsthand<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"none\">when&nbsp;<\/span><span data-contrast=\"none\">Sumay<\/span><span data-contrast=\"none\">&nbsp;was busy programming his robot on his Surface in the night<\/span><span data-contrast=\"none\">, a<\/span><span data-contrast=\"none\">nd then I tell him,&nbsp;<\/span><span data-contrast=\"none\">Sumay<\/span><span data-contrast=\"none\">, it&#8217;s time to go upstairs and sleep.&nbsp;<\/span><span data-contrast=\"none\">And he&#8217;s so engrossed, he doesn&#8217;t respond. And then I raise my voice and ask, can you please go upstairs now? Again, no response. And then I tell&nbsp;<\/span><span data-contrast=\"none\">Sumay<\/span><span data-contrast=\"none\">&nbsp;in sad voice, I&#8217;m going upstairs, but I will be lonely in the odd house up there. Can you join me and make it even? And then he immediately comes to hold my hand and says, yes<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&nbsp;Papa. Let&#8217;s go up. That&#8217;s bliss<\/span><span data-contrast=\"none\">.<\/span><span data-contrast=\"none\">&nbsp;<\/span><span data-contrast=\"auto\">Children are naturally terrified of being abandoned or cast out, and hence are very tuned into feelings of either rejection or belonging.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Unfortunately, our ability to empathize gathers dust as we grow up. Hence, we need to reinforce this in our school education and corporate trainings<\/span><span data-contrast=\"auto\">.&nbsp;<\/span><span data-contrast=\"auto\">And you know, Gretchen, at the end of the da<\/span><span data-contrast=\"auto\">y,&nbsp;<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">he goal of technology should be to make us more humane.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">At the end of every podcast, I give my guests a chance to share some advice or wisdom with our listeners, and I think you kind of just did that<\/span><\/b><b><span data-contrast=\"auto\">!<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">So I&#8217;m going to move over into the&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">\u201c<\/span><\/b><b><span data-contrast=\"auto\">predict the future<\/span><\/b><b><span data-contrast=\"auto\">\u201d<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;lane.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">What&#8217;s on the horizon for the future of programming,&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">, and what might be a call to action for our listeners?<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">If you look at the history of programming, we&nbsp;<\/span><span data-contrast=\"auto\">went&nbsp;<\/span><span data-contrast=\"auto\">from&nbsp;<\/span><span data-contrast=\"auto\">punched cards<\/span><span data-contrast=\"auto\">&nbsp;and assembly language to hig<\/span><span data-contrast=\"auto\">h-<\/span><span data-contrast=\"auto\">level languages and beautiful code editors. The next evolution will take programming closer to human conversation, involving use of examples and natural language to express intent<\/span><span data-contrast=\"auto\">. A<\/span><span data-contrast=\"auto\">nd interactive, wh<\/span><span data-contrast=\"auto\">en<\/span><span data-contrast=\"auto\">&nbsp;a computer will act as your&nbsp;<\/span><span data-contrast=\"auto\">pair-<\/span><span data-contrast=\"auto\">programming agent.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">My team is invested in developing an SDK that can facilitate development of program synthesizers for new task domains. I hope that<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">&nbsp;with frameworks like these, we can take the art and science of developing program synthesizers from Microsoft Research laboratories to developers who are involved with writing libraries or programming tools.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">The grand question now is<\/span><span data-contrast=\"auto\">, w<\/span><span data-contrast=\"auto\">hat does this&nbsp;<\/span><span data-contrast=\"auto\">future mean for society? Programming in the future&nbsp;<\/span><span data-contrast=\"auto\">would<\/span><span data-contrast=\"auto\">&nbsp;be much easier and accessible than it is today.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Hence there now should be even higher incentive to incorporate s<\/span><span data-contrast=\"auto\">o-c<\/span><span data-contrast=\"auto\">alled computational thinking in the school curriculum.<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">And this can empower people to effectively leverage the computational devices to unleash their creativity and hence achieve<\/span><span data-contrast=\"auto\">&nbsp;more<\/span><span data-contrast=\"auto\">&nbsp;in their lives.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Host:&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Sumit<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">Gulwani<\/span><\/b><b><span data-contrast=\"auto\">, thank you so much for joining us on the podcast today<\/span><\/b><b><span data-contrast=\"auto\">.<\/span><\/b><b><span data-contrast=\"auto\">&nbsp;<\/span><\/b><b><span data-contrast=\"auto\">I<\/span><\/b><b><span data-contrast=\"auto\">t&#8217;s been an absolute delight<\/span><\/b><b><span data-contrast=\"auto\">!<\/span><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"auto\">Sumit<\/span><span data-contrast=\"auto\">&nbsp;<\/span><span data-contrast=\"auto\">Gulwani<\/span><span data-contrast=\"auto\">:&nbsp;<\/span><span data-contrast=\"auto\">Same here, Gretchen. Thanks for having me here.<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><i><span data-contrast=\"auto\">(music plays)<\/span><\/i><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p><b><i><span data-contrast=\"auto\">To learn more about Dr.&nbsp;<\/span><\/i><\/b><b><i><span data-contrast=\"auto\">Sumit<\/span><\/i><\/b><b><i><span data-contrast=\"auto\">&nbsp;<\/span><\/i><\/b><b><i><span data-contrast=\"auto\">Gulwani<\/span><\/i><\/b><b><i><span data-contrast=\"auto\">, and the latest in program synthesis research, visit Microsoft.com\/research<\/span><\/i><\/b><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dr. Sumit Gulwani is a programmer\u2019s programmer. Literally. A Partner Research Manager in the Program Synthesis, or PROSE, group at Microsoft Research, Dr. Gulwani is a leading researcher in program synthesis and the inventor of many intent-understanding, programming-by-example and programming-by-natural language technologies \u2013 aka, the automation of \u201cwhat I meant to do and wanted to do, but my computer wouldn\u2019t let me\u201d tasks. Today, Dr. Gulwani gives us an overview of the exciting \u201cnow\u201d and promising future of program synthesis; reveals some fascinating new applications and technical advances; tells us the story behind the creation of Excel\u2019s popular Flash Fill feature (and how a Flash Fill Fail elicited a viral tweet that paved the way for new domain investments); and shares a heartwarming story of how human empathy facilitated an \u201cah-ha math moment\u201d in the life of a child, and what that might mean to computer scientists, educators, and even tech companies in the future.<\/p>\n","protected":false},"author":39507,"featured_media":620910,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msr-url-field":"https:\/\/player.blubrry.com\/id\/51811651","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr-author-ordering":[],"msr_hide_image_in_river":0,"footnotes":""},"categories":[240054],"tags":[243882,196897,243885,243888,243879,197339],"research-area":[13556,13563,13554,13560],"msr-region":[],"msr-event-type":[],"msr-locale":[268875],"msr-post-option":[],"msr-impact-theme":[],"msr-promo-type":[],"msr-podcast-series":[],"class_list":["post-620838","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msr-podcast","tag-intent-understanding","tag-program-synthesis","tag-programming-by-example","tag-programming-by-natural-language","tag-prose-group","tag-sumit-gulwani","msr-research-area-artificial-intelligence","msr-research-area-data-platform-analytics","msr-research-area-human-computer-interaction","msr-research-area-programming-languages-software-engineering","msr-locale-en_us"],"msr_event_details":{"start":"","end":"","location":""},"podcast_url":"https:\/\/player.blubrry.com\/id\/51811651","podcast_episode":"","msr_research_lab":[],"msr_impact_theme":[],"related-publications":[],"related-downloads":[],"related-videos":[],"related-academic-programs":[],"related-groups":[663303],"related-projects":[360434,361034],"related-events":[],"related-researchers":[],"msr_type":"Post","featured_image_thumbnail":"<img width=\"960\" height=\"540\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-960x540.png\" class=\"img-object-cover\" alt=\"Sumit Gulwani on the Microsoft Research podcast\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-960x540.png 960w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-300x169.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-768x432.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1024x576.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1066x600.png 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-655x368.png 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-343x193.png 343w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-640x360.png 640w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788-1280x720.png 1280w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/11\/Research_Podcast_Sumit-Gulwani_Site_10_2019_1400x788.png 1400w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/>","byline":"","formattedDate":"November 20, 2019","formattedExcerpt":"Dr. Sumit Gulwani is a programmer\u2019s programmer. Literally. A Partner Research Manager in the Program Synthesis, or PROSE, group at Microsoft Research, Dr. Gulwani is a leading researcher in program synthesis and the inventor of many intent-understanding, programming-by-example and programming-by-natural language technologies \u2013 aka, the&hellip;","locale":{"slug":"en_us","name":"English","native":"","english":"English"},"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/620838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/users\/39507"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/comments?post=620838"}],"version-history":[{"count":5,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/620838\/revisions"}],"predecessor-version":[{"id":896313,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/620838\/revisions\/896313"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/620910"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=620838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/categories?post=620838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/tags?post=620838"},{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=620838"},{"taxonomy":"msr-region","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-region?post=620838"},{"taxonomy":"msr-event-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-event-type?post=620838"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=620838"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=620838"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=620838"},{"taxonomy":"msr-promo-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-promo-type?post=620838"},{"taxonomy":"msr-podcast-series","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-podcast-series?post=620838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}