Motivation
The core problem each programming language was created to solve.
JavaScript
Netscape needed a lightweight scripting language that designers and non-systems programmers could embed directly in HTML to make web pages interactive, without requiring a full compiled plugin.
Python
Guido van Rossum wanted a language that was more readable and productive than ABC or Perl for everyday scripting, with clean syntax that read almost like pseudocode.
TypeScript
As JavaScript applications grew into large, multi-developer codebases, teams needed static types, autocompletion, and refactoring tools to catch errors before runtime, without abandoning the existing JavaScript ecosystem.
Java
Sun Microsystems wanted a language that produced portable, “write once, run anywhere” applications across different hardware and operating systems, while being safer than C++ by removing manual memory management and pointers.
C#
Microsoft needed a modern, type-safe, component-oriented language purpose-built for its new .NET managed runtime, positioned to compete directly with Java in enterprise development.
C++
Bjarne Stroustrup wanted to add classes, abstraction, and type safety on top of C’s performance and hardware access, so large systems could be organized without sacrificing speed.
C
Bell Labs needed a language efficient and low-level enough to write an operating system kernel and its utilities, but more portable and maintainable than writing everything in assembly.
PHP
Rasmus Lerdorf needed a simple way to track visits to his online resume and generate dynamic content for the web, which grew into a templating-friendly alternative to writing raw CGI scripts in C or Perl.
Go
Google engineers were frustrated by slow compilation, dependency management, and the difficulty of writing correct concurrent code in large C++ services, and wanted something simpler and faster to build and reason about.
Rust
Systems programmers wanted the performance and control of C/C++ without the memory-safety pitfalls—null pointer dereferences, buffer overflows, data races—that plague low-level code.
Kotlin
JetBrains, as a maker of Java tooling, wanted a more concise and null-safe language for JVM and Android development that could be adopted incrementally alongside existing Java code.
Ruby
Matsumoto wanted programming to be enjoyable, prioritizing programmer happiness and natural expression over strict adherence to any single paradigm or performance-first design.
Dart
Google wanted a structured, easy-to-tool language for building fast, complex web and mobile UIs, one whose VM and compiler could support the instant reload and predictable performance later needed by the Flutter framework.
Swift
Apple wanted a safer, faster, and more expressive language than Objective-C for iOS and macOS development, while still interoperating with the existing Objective-C runtime and libraries.
Perl
Larry Wall needed a tool more powerful than shell scripting and awk/sed for scanning text files, extracting information, and generating reports, without dropping down into full C.
Elixir
José Valim wanted the productivity, tooling, and extensibility of a modern language like Ruby combined with the massive concurrency, distribution, and fault-tolerance the Erlang VM already provided for telecom-grade systems.
Scala
Martin Odersky wanted to prove that functional and object-oriented programming could be fused into a single coherent language, giving JVM developers a more expressive, less boilerplate-heavy alternative to Java.
Clojure
Rich Hickey wanted a practical Lisp for the JVM offering immutable, persistent data structures and safe concurrency primitives, directly addressing the complexity of shared mutable state in multithreaded programs.
Haskell
Academic researchers wanted a common standard for purely functional programming, consolidating years of divergent research languages into one stable foundation for teaching and studying lazy evaluation.