• Compiled Language
    • Source Code -> Checker/Compiler -> Object Code -> Interpreter -> Output
    • Compiled languages are more efficient
    • Examples: C, Java, Go, Haskell, Lisp
    • Faster but immutable, very close to the machine
    • OS & Native Applications use compiled code
    • These languages do not support meta programming
  • Interpreted Language
    • Source Code -> Checker -> Interpreter -> Output
    • If something goes wrong, the error message is in the language of the source code
    • Examples: Ruby, Javascript, Perl, Python, PhP
    • Slower but more flexible
    • These languages support meta programming
  • Imperative Programming
    • Telling the machine, how exactly do something, to derive your expected result
    • Ex: Writing your own iterator
  • Declarative Programming
    • Telling the machine, what exactly is your expected result, and let it deal with the specifics
    • Ex: Using built-in methods for iteration etc
  • Static Semantics
    • A good programming language has very good static sematics
    • Does not allow statements like 7/abc and tells us it wrong
  • Instruction Set
    • are like ingredients
    • Combine the instructions in clever ways to complex things
  • Fixed Program Computers
    • Circuits were designed to do specific things and thats what they did
  • Scoping
    • Lexical - You search for the variable in the current function, the function where the current function is defined and so on
    • Dynamic - You search for the variable in the current function, the function where the current function is called and so on