Programming languages that blew my mind (2023)
Mind‑blowing languages and tools
- Many comments list personal “mind blown” languages: BASIC variants, Turbo Pascal, C, C++, Java (for the standard library), Perl, Python, Ruby, Kotlin, Haskell, Elm, Rust, Julia, Nim, Lua, REXX/ARexx, AutoLISP, Smalltalk/Squeak, Objective‑C, Go, Erlang/Elixir, F#, OCaml, Common Lisp, Scheme, Prolog, APL, Forth, Verilog, Uiua, Rebol/Red, Mathematica, R, Excel.
- Common themes: live environments (Smalltalk, Lisp REPLs), metaprogramming and macros (Lisp, Racket, Tcl), homoiconicity (Mathematica, Lisps, Rebol), powerful standard libraries (Java, Python), generic programming and multiple dispatch (Julia).
- Several nostalgia tracks: HyperCard, MacBASIC, Lotus Notes, Visual Basic, Flash/AS3, ZX Spectrum/BBC BASIC, early assemblers.
Error handling philosophies
- Strong debate around Go’s explicit
if err != nilstyle:- Supporters praise its simplicity, locality, and forcing developers to confront errors.
- Critics see it as noisy manual exception propagation that doesn’t truly “handle errors where they occur.”
- Rust’s
Resultand the?operator are widely admired as more ergonomic explicit error handling. - Mention of limitations: composing error types in Rust is awkward; crates like
thiserrorandanyhowhelp but add boilerplate. - Alternatives discussed: Zig’s explicit error types and
try, checked exceptions (Java), union types / Either in FP languages, monads in Go (hypothetical).
Logic, constraint, and functional paradigms
- Prolog repeatedly cited as truly mind‑bending: declarative problem solving, SLD resolution over Horn clauses, and “semantic debugging.”
- Datalog, constraint programming, SAT/SMT, and answer set programming are suggested as adjacent or more powerful paradigms.
- Erlang/Elixir’s BEAM VM and “let it fail” model impress many once understood; clarified as “focus happy path, handle failures in supervisors,” not “ignore errors.”
Typing, data modeling, and maps
- Discussion of a talk arguing that over‑rigid types (records + Maybe/Option) can make systems brittle compared to map/dictionary‑centric designs with optional keys.
- Some agree this better matches evolving business data and open‑world APIs; others prefer explicit algebraic data types and exhaustive enumeration of cases.
Pipelines and composition
- Pipeline operators (
|>, thread macros, shell pipes, R’s magrittr, fluent interfaces) are widely loved for readability and “data‑flow thinking.” - Concern that overuse (long chains with nested lambdas) can harm debuggability; some wish for tooling/linters to keep pipelines reasonable.
Hardware, DSLs, and nontraditional “languages”
- Verilog described as uniquely mind‑bending: everything executing concurrently; code as circuit description rather than imperative steps.
- Forth, PostScript, HP calculator RPN/RPL highlight stack‑based and minimalistic approaches.
- Domain‑specific languages called out: linear/mixed‑integer programming (e.g., GAMS, Pyomo), probabilistic programming (BUGS, Stan, PyMC), and data‑manipulation/plotting DSLs (dplyr/ggplot) dramatically expanded what people could do.
- Excel’s formula language is framed as a de facto functional language for many users.
Meta reflections
- Several note how language choice reshapes thinking and career paths; some describe “progression tracks” from early playful BASIC to more abstract or “boring but reliable” tools.
- There is criticism of AI‑generated blog imagery as visually off‑putting and distracting.