I sometimes find some of my research interests too broad and futuristic, so I call them my research dreams.
While the fundamental ideas about programming haven’t changed much, in order to create a modern application, the learning barrier accumulated from small techniques is dreadful. Just look at the web: in 2017, you need to learn 9 different techniques to write a modern web application, even if you already own a related degree. Alternatively, you can build everything from scratch, but then you are entering the stone age where it’s excruciating to implement contemporary features, which you very likely want to have. Such huge barriers can make enthusiastic end users, and even professionals, turn their heads away when they want to experiment with interesting ideas. To tackle such problems, we can either build better abstract and declarative approaches such that fewer techniques are needed to finish a task, or customize the learning experience so the way to expertise can be more joyful and less meandering.
In general, I dream about decreasing the efforts one will need to gain development expertise, which means being capable of efficiently write(not necessarily manually) code to meet functional specifications. Currently, the following topics are on my radar:
Declarative data transformation
In the current big-data era, people perform data transformations extensively in various scenarios like curating social media feed or building data warehouse for analysis. Imperative techniques such as XSLT were created to handle these tasks. But hey, oftentimes we can clearly describe what the output looks like given the input data source since we have a requirement in mind, then why bother learning a new parsing or template engine if our software can automatically infer the necessary operations from our description to get the job done?
Programming knowledge curation and knowledge-based programming environment
Just because most of our problems were already solved by others, doesn’t mean we can easily find solutions on the web. The knowledge on the web is scattered, and many solutions are suboptimal, outdated, or even incorrect. One may need to rephrase his/her query several times and jump from sites to sites, spending hours to find the worked solution to eliminate a tiny error. Additionally, web search engine doesn’t leverage the information in the programming environment. I believe the way to solve this problem is to cooperatively build highly-specialized, structured and linked knowledgebases (and I think Stack Exchange is on the right track) and better programming environment which can naturally extract from and contribute to these knowledge.
Adaptive Application Programming Interface
Minor differences in functionally similar APIs often burden us. For example, Java has array.length while C++ has array.size(). When people come to new APIs, they have expectations of how things would work. Instead of blaming programmers, why not just secretly add a hidden mapping layer and pretend everything works?