Classification of programming languages by execution model (compiled vs interpreted, JIT), generation (1GL assembly to 5GL AI-based), and level of abstraction, Imperative programming fundamentals: von Neumann model, m...
Classification of programming languages by execution model (compiled vs interpreted, JIT), generation (1GL assembly to 5GL AI-based), and level of abstraction, Imperative programming fundamentals: von Neumann model, mutable state, sequential execution, and side effects, C/C++ as quintessential systems languages with manual memory management and zero-cost abstractions, Fortran legacy and its influence on scientific computing paradigms, Detailed study of language implementation trade-offs (performance vs. productivity, static vs. dynamic typing).
Core OOP principles (encapsulation, inheritance, polymorphism, abstraction) independent of syntax, Comparative implementations in Java (fully OOP with GC), C++ (multi-paradigm with RAII), Python (dynamic OOP), and C # (.NET ecosystem), Design patterns as language-agnostic solutions (Singleton, Factory, Observer, Strategy), Interface-based programming and dependency inversion, Language-specific idioms for polymorphism (virtual functions, interfaces, duck typing) and their runtime costs.
Declarative vs. imperative styles, pure functions, immutability, and referential transparency, First-class and higher-order functions, Lambda calculus as theoretical foundation connecting to Theory of Computation (CS203), Haskell (lazy pure functional), Scala (hybrid OOP/FP on JVM), JavaScript (functional capabilities in browser/server), Closures, currying, and monads as abstraction mechanisms, Pattern matching and algebraic data types vs. traditional conditionals.
Dynamic languages for rapid prototyping (Python, JavaScript, Ruby), scripting paradigms (shell, configuration DSLs), Garbage collection strategies and their impact on real-time systems, Concurrent programming models (shared memory threads vs. message passing actors), Go (goroutines/channels), Erlang (actor model), Domain-specific languages (SQL, HTML/CSS, shader languages, regex), Embedded DSLs vs. external DSLs, Metaprogramming (templates/macros in C++, decorators in Python, LINQ in C #).
Lexical structure, syntax vs. semantics, parsing strategies (LL/LR) connecting to compiler design preparation, Type systems (static/dynamic, strong/weak, nominal/structural), Memory models and safety guarantees across languages, Modern language ecosystems and interoperability (Python/C interop, Java Native Interface, WebAssembly), Language evolution case studies (C++ standardization, Python 2→3 migration, Rust for safe systems programming), Criteria for language selection in production systems based on performance, ecosystem, team expertise, and deployment constraints.