PROGRAMMING LANGUAGES & SOFTWARE ENGINEERING
Software consists of programs written in programming languages.
The flexibility and power of software enables billions of people around the world to connect, collaborate, and solve problems.
However, as one of the most complex artifacts designed by humans, it is theoretically challenging and practically difficult to correctly program software.
We study all aspects of the software development process, with the aim to improve the performance and reliability of these programs.
WHAT WE DO

Study the foundational and theoretical aspects of programming languages and software engineering, exploring ways to improve program writing, as well as demonstrating the ‘correctness’ of programs.

Explore practical and implemental aspects of programming languages, software engineering, and software education, developing tools and systems to improve software quality and security.
SUB AREAS:
Compilers
Concurrency
Constraint & Logic Programming
Decision Procedures
Formal Methods
Functional Programming
Language-Based Security
Probabilistic Programming
Program Analysis
Program Logics & Semantics
Program Repair
Program Synthesis
Programming & Software Engineering Education
Software Security
Software Testing
Types
Verification
OUR RESEARCH PROJECTS

SuSLik
Synthesis of Heap-Manipulating Programs from Separation Logic specifications

Scilla
A functional language for safe smart contracts

Hippodrome
Static automated concurrency repair at scale


OUR RESEARCH GROUPS

STeAdS Virtual Group
Software Engineering and Technological Advancements for Society. A virtual group that uses Software engineering practices (Agile, DevOps and Project Mgmt) and Technological advancements (Cloud computing, Artificial Intelligence (EdgeAI, Game Theory, ML/DL/RL)) for the benefit of various aspects of society (healthcare, education, art & culture). Looking for students to build a website for STeAdS.
- Programming & Software Engineering Education, Types

Verified Systems Engineering
Ilya SERGEY, Mirela Andreea COSTEA
We do research in the design and implementation of programming languages (PL), mathematical models of computation, and computer-assisted formal reasoning. We investigate the theoretical foundations of programming and build tools for ensuring that certain kinds of costly software errors and vulnerabilities never occur in the real-world code, which many people rely upon in their everyday lives.
- Compilers, Concurrency, Formal Methods, Functional Programming, Program Analysis, Program Logics & Semantics, Program Repair, Program Synthesis, Types, Verification

Trustworthy Software Systems
Past and present research team members in this group appear here: https://www.comp.nus.edu.sg/~abhik/students.htm