We believe that writing computer programs is the fundamental act of computer science, and that programming languages are therefore our fundamental tool.
We seek a deeper understanding of programming languages and how it should be used, and we seek to apply this understanding to the program design process,
as well as to novel applications.
We take a multi-faceted approach to the study of programming languages and programming methodology, incorporating elements of design, mathematics,
experimental science, and engineering.
We conduct research on all aspects of programming, including:
the development of small and large programs
the design, implementation, and analysis of programming languages
programming environment tools
Programming languages are our interface to the machines that carry out computation on our behalf.
Eighty years after the invention of the lambda calculus, thousands of different computer languages are in daily use.
Programming languages started out closely tracking the hardware on which they ran.
Nowadays, they provide high-level abstractions designed to closely match the problem domains of their user base.
Consider the following domains of application that have given rise to dedicated language technologies:
large projects – web sites are increasingly complex software systems.
Data analytics: analyzing complex data has been the bread and butter of the likes of S-Plus and later R as well as Matlab.
These systems have distinctive characteristics that include, for example, support for vectorization and missing observations.
However, thorough analysis of R has revealed a number of weaknesses in performance and scalability.
New language such as Julia and Spark are starting to address those.
Secure programming: assurance against malicious code and against loss of secrecy or privacy are growing in importance as the societal cost of security breaches is becoming more severe.
However, achieving secure programming through programming languages still remain a constant cat-and-mouse game between attackers and language designers.
Probabilistic programming: a foundational technology for machine learning requires linguistic abstractions that match the appropriate computational model
(e.g. graphical models and Bayesian networks). Languages like Church provide built-in support for probabilistic programming while other projects extend languages like Excel.
❝A language that doesn’t affect the way you think about programming is not worth knowing. ❞