28) History of Programming Languages ==================================== 1) What is a programming language? - A non-ambiguous notation to command computers. 2) Which one came first: programming languages or computers? - Notations to write algorithms, e.g., indo-arabic numbers. - Non-ambiguous notations, e.g.: Lambda calculus, Turing machines, arithmetics. - Programmable machines, e.g., Jacquard Loom 3) What were the early programming languages? - Plankalkul (40's) Konrad Zuse - Autocode (50's) Alick Glennie 4) What were the problems that these languages were solving? - Arithmetic expressions - Named memory 5) What were the first programming languages still alive? - Fortran: compilation - COBOL: human-like syntax - Lisp: dynamic memory allocation - Algol: blocks (with lexical scope), type annotations, BNF. 6) When appeared the different programming paradigms? - [50's] Fortran: imperative - [50-60's] Lisp: declarative. - [70's] Prolog: logic 7) What about operation-oriented vs object-oriented? - [60's] Simula, [70's] Smalltalk 8) What were the conquests of the 70's? - C: systems language. - ML: semantics, parametric polymorphism, type inference. - Highly declarative systems: Prolog, SQL - Structured vs free-form programming 9) What was the debate around structured vs non-structured programming? - goto - while, repeat, if-then-else, switch, etc. 10) Do you know of other debates? - static vs dynamic typing - imperative vs declarative - functional vs procedural vs object-oriented - manual memory management vs garbage collection 11) What were the conquests of the 80's? - Efficiency: compilers for Fortran, C - Modular programming: C -> C++, Objective-C - Graphics: MATLAB, LabVIEW - Commercial and industrial use: Borland Turbo Pascal, Borland C++. - Standardization: ANSI C89 12) How did the internet changed the design of programming languages? - Portability -> virtual machines - Java (applets), PHP, JavaScript 13) What were the conquests of the 90's? - Virtual machines: Java (1995), PHP (1995), JavaScript (1995), Ruby (1995) - Scripting: Lua, Python, JavaScript - Rapid application development: small programs > large programs. - IDEs: Delphi (1995), NetBeans (1997), Visual Studio (1997), Eclipse (2001) - The transition from 2D to 3D in games: DirectX and OpenGL 14) What were the changes of the 2000's? - The Microsoft tech-genocide! - .NET Framework (C#, Visual Studio .NET) - Agile development (2001): unit testing, refactoring - LAMP (Linux, Apache, MySQL, PHP) - The open source movement: ruby on rails and django 15) What about the 2010's? - JavaScript conquers the web! ECMAScript 5 and ECMAScript 6, TypeScript - Python3 (2008) and the Python explosion! - The resurgence of functional programming: Scala, Groovy, Closure, F# - The appearence of Web Assembly (C, C++ and Rust on the browser) - Containerization and DevOps: docker containers, YAML - The Mobile App Explosion: iOS, Android, App Store, Google Play - Cross-Platform development: Xamarin, React Native, Flutter 16) What are the tendencies today? - AI for coding! - Lots of free-software programming languages! - Imperative languages incorporating functional programming - Parallelism & Concurrency: C for cuda, Elixir - Data science: Python, R, Julia