Here are the programming languages I’ve used over the last three decades. From BASIC in the late 80s to Rust today, each one taught me something about solving problems with code.
Late 1980s – Early 1990s
- I learned coding with BASIC/QUICKBASIC on Atari and later IBM XT computer in 1980s.
- I learned other languages in college or on my own like C, Pascal, Prolog, Lisp, FORTRAN and PERL.
- In college, I used Icon to build compilers.
- My first job was mainframe work and I used COBOL and CICS for applications, JCL and REXX for scripting and SAS for data processing.
- Later at a physics lab, I used C/C++, Fortran for applications and Python for scripting and glue language.
- I used a number of 4GL languages like dBase, FoxPro, Paradox, Delphi. Later I used Visual Basic and PowerBuilder for building client applications.
- I used SQL and PL/SQL throughout my career for relational databases.
Web Era Mid/Late 1990s
- The web era introduced a number of new languages like HTML, Javascript, CSS, ColdFusion, and Java.
- I used XML/XSLT/XPath/XQuery, PHP, VBScript and ActionScript.
- I used RSS/SPARQL/RDF for buiding semantic web applications.
- I used IDL/CORBA for building distributed systems.
Mobile/Services Era 2000s
- I used Ruby for building web applications, Erlang/Elixir for building concurrent applications.
- I used Groovy for writing tests and R for data analysis.
- When iOS was released, I used Objective-C to build mobile applications.
- In this era, functional languages gained popularity and I used Scala/Haskell/Clojure for some projects.
New Languages Era Mid 2010s
- I started using Go for networking/concurrent applications.
- I started using Swift for iOS applications and Kotlin for Android apps.
- I initially used Flow language from Facebook but then started using TypeScript instead of JavaScript.
- I used Dart for Flutter applications.
- I used GraphQL for some of client friendly backend APIs.
- I used Solidity for Ethereum smart contracts.
- I used Lua as a glue language with Redis, HAProxy and other similar systems.
- I used Rust and became my go to language for highly performant applications.
What Three Decades of Languages Taught Me
- Every language is a bet on what matters most: Safety vs. speed vs. expressiveness vs. ecosystem vs. hiring.
- Languages don’t die, they fade: I still see COBOL in production. I still debug Perl scripts. Legacy is measured in decades.
- The fundamentals never change: Whether it’s BASIC or Rust, you’re still managing state, controlling flow, and abstracting complexity.
- Polyglotism is a superpower: Each language teaches you a different way to think. Functional programming makes you better at OOP. Systems programming makes you better at scripting.
- The best language is the one your team can maintain: I’ve seen beautiful Scala codebases become liabilities and ugly PHP applications become billion-dollar businesses.
What’s Next?
I’m watching Zig (Rust without the complexity?) and it’s on my list for next language to learn.
Summary
| # | Language | Era | Primary Use |
|---|---|---|---|
| 1 | BASIC/QuickBASIC | Late 1980s | Learning |
| 2 | C | Late 1980s – Early 1990s | College/Applications |
| 3 | Pascal | Late 1980s – Early 1990s | College |
| 4 | Prolog | Late 1980s – Early 1990s | College |
| 5 | Lisp | Late 1980s – Early 1990s | College |
| 6 | FORTRAN | Late 1980s – Early 1990s | College/Physics Lab |
| 7 | Perl | Late 1980s – Early 1990s | Self-taught |
| 8 | Icon | Late 1980s – Early 1990s | Compiler Building |
| 9 | COBOL | Early 1990s | Mainframe Applications |
| 10 | CICS | Early 1990s | Mainframe Applications |
| 11 | JCL | Early 1990s | Mainframe Scripting |
| 12 | REXX | Early 1990s | Mainframe Scripting |
| 13 | SAS | Early 1990s | Data Processing |
| 14 | C++ | Early 1990s | Physics Lab Applications |
| 15 | Python | Early 1990s | Scripting/Glue Language |
| 16 | dBase | Early 1990s | 4GL Applications |
| 17 | FoxPro | Early 1990s | 4GL Applications |
| 18 | Paradox | Early 1990s | 4GL Applications |
| 19 | Delphi | Early 1990s | 4GL Applications |
| 20 | Visual Basic | Early 1990s | Client Applications |
| 21 | PowerBuilder | Early 1990s | Client Applications |
| 22 | SQL | Early 1990s – Present | Relational Databases |
| 23 | PL/SQL | Early 1990s – Present | Relational Databases |
| 24 | HTML | Mid/Late 1990s | Web Development |
| 25 | JavaScript | Mid/Late 1990s | Web Development |
| 26 | CSS | Mid/Late 1990s | Web Styling |
| 27 | ColdFusion | Mid/Late 1990s | Web Development |
| 28 | Java | Mid/Late 1990s | Web Development |
| 29 | XML | Mid/Late 1990s | Data/Configuration |
| 30 | XSLT | Mid/Late 1990s | Data Transformation |
| 31 | XPath | Mid/Late 1990s | XML Querying |
| 32 | XQuery | Mid/Late 1990s | XML Querying |
| 33 | PHP | Mid/Late 1990s | Web Development |
| 34 | VBScript | Mid/Late 1990s | Scripting |
| 35 | ActionScript | Mid/Late 1990s | Flash Development |
| 36 | RSS | Mid/Late 1990s | Semantic Web |
| 37 | SPARQL | Mid/Late 1990s | Semantic Web |
| 38 | RDF | Mid/Late 1990s | Semantic Web |
| 39 | IDL | Mid/Late 1990s | Distributed Systems |
| 40 | CORBA | Mid/Late 1990s | Distributed Systems |
| 41 | Ruby | 2000s | Web Applications |
| 42 | Erlang | 2000s | Concurrent Applications |
| 43 | Elixir | 2000s | Concurrent Applications |
| 44 | Groovy | 2000s | Testing |
| 45 | R | 2000s | Data Analysis |
| 46 | Objective-C | 2000s | iOS Applications |
| 47 | Scala | 2000s | Functional Programming |
| 48 | Haskell | 2000s | Functional Programming |
| 49 | Clojure | 2000s | Functional Programming |
| 50 | Go | Mid 2010s | Networking/Concurrent Apps |
| 51 | Swift | Mid 2010s | iOS Applications |
| 52 | Kotlin | Mid 2010s | Android Applications |
| 53 | Flow | Mid 2010s | Type Checking |
| 54 | TypeScript | Mid 2010s | JavaScript Alternative |
| 55 | Dart | Mid 2010s | Flutter Applications |
| 56 | GraphQL | Mid 2010s | Backend APIs |
| 57 | Solidity | Mid 2010s | Smart Contracts |
| 58 | Lua | Mid 2010s | Glue Language |
| 59 | Rust | Mid 2010s – Present | High Performance Apps |