Programming languages, Programming methods, Compiler Construction, Foundations of software, Object-oriented programming, Functional programming