{"id":670944,"date":"2020-07-01T16:46:01","date_gmt":"2020-07-01T23:46:01","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/?post_type=msr-project&#038;p=670944"},"modified":"2022-04-19T15:08:42","modified_gmt":"2022-04-19T22:08:42","slug":"modeless-program-synthesis","status":"publish","type":"msr-project","link":"https:\/\/www.microsoft.com\/en-us\/research\/project\/modeless-program-synthesis\/","title":{"rendered":"Blue-Pencil: modeless program synthesis"},"content":{"rendered":"<p>Traditional program synthesis systems have modal UIs (i.e., users enter a special mode to give demonstration\/examples), which interrupt users\u2019 workflow and require users to have knowledge about the systems to invoke them.<\/p>\n<p>Blue-Pencil aim at developing <em><span style=\"text-decoration: underline\">modeless<\/span> <\/em>program synthesis systems, that is, systems that do not require users to explicitly enter a special mode to give demonstration or examples. Instead, a modeless program synthesis system <em>observes<\/em> what task a user is doing, <em>learns<\/em> how to automate the task from those observations, and subsequently <em>assists<\/em> the user by automating the remaining part of the task.<\/p>\n<p>Modeless program synthesis is the main technology behind <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/intellicode\/intellicode-suggestions\">Visual Studio IntelliCode Suggestions<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>:<\/p>\n<p><iframe loading=\"lazy\" title=\"Blue-Pencil: modeless program synthesis\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/jrLaDB1VZqM?feature=oembed&rel=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<p><iframe loading=\"lazy\" title=\"IntelliCode \u2013 AI-assisted development now and in the future | BDL156\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/Q7EbCCs2-Z4?start=474&feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<p><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/tag\/intellicode-suggestions\/\" target=\"_blank\" rel=\"noopener noreferrer\">Check out our collection of small videos and blogposts.<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Blue-Pencil aim at developing modeless program synthesis systems, that is, systems that do not require users do not explicitly enter a special mode to give demonstration or examples. Instead, a modeless program synthesis system observes what task a user is doing, learn how to automate the task from those observations, and subsequently assist the user by automating the remaining part of the task.<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"research-area":[13556,13560],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-670944","msr-project","type-msr-project","status-publish","hentry","msr-research-area-artificial-intelligence","msr-research-area-programming-languages-software-engineering","msr-locale-en_us","msr-archive-status-active"],"msr_project_start":"2019-07-01","related-publications":[453822,605382,683394,888318],"related-downloads":[],"related-videos":[672393,677169,683556,713020],"related-groups":[663303],"related-events":[],"related-opportunities":[],"related-posts":[],"related-articles":[],"tab-content":[{"id":0,"name":"Customer quotes","content":"<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">The \"AI\" powered IntelliCode suggestions is magic. <a href=\"https:\/\/t.co\/9SlJYSBnPB\">pic.x.com\/9SlJYSBnPB<\/a><\/p>\r\n\u2014 An\u017ee Vodovnik (@Avodovnik) <a href=\"https:\/\/x.com\/Avodovnik\/status\/1405514742983278605?ref_src=twsrc%5Etfw\">June 17, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\"><a href=\"https:\/\/x.com\/VisualStudio?ref_src=twsrc%5Etfw\">@VisualStudio<\/a> thank you for IntelliCode. Saved me a bunch of time just now, and the UX was really delightful! Been using it a while, but it all connected really well for my current use-case of moving some code between projects.<\/p>\r\n\u2014 Brian Drennan (@bedrennan) <a href=\"https:\/\/x.com\/bedrennan\/status\/1403143956867825666?ref_src=twsrc%5Etfw\">June 11, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\">\r\n<p dir=\"ltr\" lang=\"en\">It's really time-saver! It's assisting brilliantly. I really love it while helping me with doing repetetive steps while refactoring.\r\n\r\nPretty appreciated! Well done <a href=\"https:\/\/x.com\/pgroene?ref_src=twsrc%5Etfw\">@pgroene<\/a> ????<\/p>\r\n\u2014 Enis Necipo\u011flu (@EnisNecipoglu) <a href=\"https:\/\/x.com\/EnisNecipoglu\/status\/1402929128349786112?ref_src=twsrc%5Etfw\">June 10, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">Saw IntelliCode for Visual Studio pop in for the first time today. Saved me several hours of work. Very nice.<\/p>\r\n\u2014 Evil Blond Dad (@sonofalink) <a href=\"https:\/\/x.com\/sonofalink\/status\/1393244003999563786?ref_src=twsrc%5Etfw\">May 14, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\">\r\n<p dir=\"ltr\" lang=\"en\">As for what I love is the encouragement it gives to actually start a refactor due to the amount of work it can save me<\/p>\r\n\u2014 Mordechai Zuber (@mordzuber) <a href=\"https:\/\/x.com\/mordzuber\/status\/1392922187330371586?ref_src=twsrc%5Etfw\">May 13, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">I'm in the middle of changing a load of Memory&lt;byte&gt; and Span&lt;byte&gt; to their ReadOnly variant, and the new <a href=\"https:\/\/x.com\/VisualStudio?ref_src=twsrc%5Etfw\">@VisualStudio<\/a> intellicode feature knows what I'm doing and starts suggesting the change to ReadOnly in the right places, which is pretty wild.<\/p>\r\n\u2014 Alistair Evans (@evocationist) <a href=\"https:\/\/x.com\/evocationist\/status\/1381920850228736001?ref_src=twsrc%5Etfw\">April 13, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">Wow, this whole <a href=\"https:\/\/x.com\/hashtag\/IntelliCode?src=hash&amp;ref_src=twsrc%5Etfw\">#IntelliCode<\/a> thing is crazy cool.<a href=\"https:\/\/x.com\/VisualStudio?ref_src=twsrc%5Etfw\">@VisualStudio<\/a> : The AI-based model was able to detect that I was updating some of the iterations to order by their name, and then it said - \"Hey, this is what you're looking for, right?!\".<\/p>\r\nMe : Yes, please... ???? <a href=\"https:\/\/x.com\/hashtag\/dotnet?src=hash&amp;ref_src=twsrc%5Etfw\">#dotnet<\/a> <a href=\"https:\/\/t.co\/c1JLHixqrO\">pic.x.com\/c1JLHixqrO<\/a>\r\n\r\n\u2014 David Pine ???? (@davidpine7) <a href=\"https:\/\/x.com\/davidpine7\/status\/1381670428515696645?ref_src=twsrc%5Etfw\">April 12, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">This new aggressive <a href=\"https:\/\/x.com\/hashtag\/IntelliCode?src=hash&amp;ref_src=twsrc%5Etfw\">#IntelliCode<\/a> automatic code changing based on previous actions\u2122 sometimes gives me a heart attack because it happens so suddenly.\r\n(This is a compliment btw, it's awesome).<\/p>\r\n\u2014 Sam Afshari ???????? (@samafshari) <a href=\"https:\/\/x.com\/samafshari\/status\/1377588958402609153?ref_src=twsrc%5Etfw\">April 1, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">visual studio on top<\/p>\r\ni was replacing a bunch of things which is repetitive and it figured it out <a href=\"https:\/\/t.co\/A27lBD7l8N\">pic.x.com\/A27lBD7l8N<\/a>\r\n\r\n\u2014 lucas - on that stupid genie site (@LucasIsPersonal) <a href=\"https:\/\/x.com\/LucasIsPersonal\/status\/1370777919052730374?ref_src=twsrc%5Etfw\">March 13, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\"><a href=\"https:\/\/x.com\/MarkPavWT?ref_src=twsrc%5Etfw\">@MarkPavWT<\/a> I almost felt a tear coming when <a href=\"https:\/\/x.com\/hashtag\/intellicode?src=hash&amp;ref_src=twsrc%5Etfw\">#intellicode<\/a> automatically suggested to make many many repetative changes in the code I'd otherwise had to do by hand. It's amazing! Thank you!<\/p>\r\n\u2014 Jochem Bonarius (@BonariusJochem) <a href=\"https:\/\/x.com\/BonariusJochem\/status\/1376831090384592897?ref_src=twsrc%5Etfw\">March 30, 2021<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">Okay, using IntelliCode feels like magic! I changed one line. It suggested the same change to three other lines and was spot on! <a href=\"https:\/\/t.co\/eTuUewuvDg\">https:\/\/t.co\/eTuUewuvDg<\/a> <a href=\"https:\/\/t.co\/OmwuFCN28l\">pic.x.com\/OmwuFCN28l<\/a><\/p>\r\n\u2014 Donovan Brown #BlackLivesMatter (@DonovanBrown) <a href=\"https:\/\/x.com\/DonovanBrown\/status\/1325634166868873218?ref_src=twsrc%5Etfw\">November 9, 2020<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">The <a href=\"https:\/\/x.com\/VisualStudio?ref_src=twsrc%5Etfw\">@VisualStudio<\/a> <a href=\"https:\/\/x.com\/hashtag\/IntelliCode?src=hash&amp;ref_src=twsrc%5Etfw\">#IntelliCode<\/a> magic continues to boost my productivity \u2764\ufe0f . Here I started changing the type of a parameter that was used in many methods and got a suggestion I can apply to the entire file, yay! Missed detecting the edit pattern in the xmldocs though ;-) <a href=\"https:\/\/t.co\/eYIPc51ETu\">pic.x.com\/eYIPc51ETu<\/a><\/p>\r\n\u2014 Daniel Cazzulino (@kzu) <a href=\"https:\/\/x.com\/kzu\/status\/1299397090381094912?ref_src=twsrc%5Etfw\">August 28, 2020<\/a><\/blockquote>\r\n<blockquote class=\"twitter-tweet\">\r\n<p dir=\"ltr\" lang=\"en\">I've just tried <a href=\"https:\/\/x.com\/hashtag\/IntelliCode?src=hash&amp;ref_src=twsrc%5Etfw\">#IntelliCode<\/a> refactor in <a href=\"https:\/\/x.com\/VisualStudio?ref_src=twsrc%5Etfw\">@VisualStudio<\/a> and it's amazing. What a time saver. <a href=\"https:\/\/t.co\/9x8AcVI2zh\">https:\/\/t.co\/9x8AcVI2zh<\/a><\/p>\r\n\u2014 Cezary Piatek (@cezary_piatek) <a href=\"https:\/\/x.com\/cezary_piatek\/status\/1243514344106754050?ref_src=twsrc%5Etfw\">March 27, 2020<\/a><\/blockquote>"}],"slides":[],"related-researchers":[{"type":"user_nicename","display_name":"Sumit Gulwani","user_id":33755,"people_section":"Section name 0","alias":"sumitg"},{"type":"user_nicename","display_name":"Vu Le","user_id":39174,"people_section":"Section name 0","alias":"levu"},{"type":"user_nicename","display_name":"Arjun Radhakrishna","user_id":39405,"people_section":"Section name 0","alias":"arradha"},{"type":"user_nicename","display_name":"Gustavo Soares","user_id":39183,"people_section":"Section name 0","alias":"gsoares"},{"type":"user_nicename","display_name":"Ashish Tiwari","user_id":39171,"people_section":"Section name 0","alias":"astiwar"}],"msr_research_lab":[],"msr_impact_theme":[],"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/670944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-project"}],"version-history":[{"count":11,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/670944\/revisions"}],"predecessor-version":[{"id":835102,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/670944\/revisions\/835102"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=670944"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=670944"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=670944"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=670944"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=670944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}