Among many other pearls, Alan Perlis is known for saying this one: A language that doesn't affect the way you think about programming, is not worth knowing.
I was wondering about the languages I knew, know and will come to know and realized that the languages that changed the way I thought and think about programming are quite and eclectic bunch: Sinclair BASIC, HyperCard, Visual Basic, SQL, and Python. In between those there are others that did not change my thinking: C, Java, PHP, C#, Bash, and PowerShell. I have written working programs in all the languages listed here, so to a degree I can claim working knowledge of all these languages at some point in time. However, I will never claim real expertise in any of them.
Sinclair BASIC on the ZX Spectrum 48K was my first programming language. It was 1985 and I lived in São Paulo, Brasil at the time. I was fresh out of an after-school computer course that taught people how to program BASIC on a TRS 80 III machine. I was eager to go off on my own and try my new skill set. I successfully talked my parents into buying a ZX Spectrum. I taught myself Sinclair BASIC and remember being mesmerized by the color display and at the ease with which you could create little games in the language. That experience sparked my passion for technology if nothing else.
Some would argue that you cannot properly call HyperCard a programming language, but it sure felt like one to me at the time. The major paradigm shift I went through as a consequence of direct exposure to HyperCard was this: You can actually create useful programs with this thing. That was back in 1992 when I was working as an aid in the college computer lab. I wrote a little HyperCard application to check people in and out of the lab and show a report at the end of each day.
My first serious programming language was Visual Basic 4.0. I was a passionate classic VB advocate until its demise as VB.NET and I wrote VB code professionally for quite a while. VB made me realize that anyone can program (and that's a good thing). The ease with which one can create an application with VB was unprecedented in the computer industry. Classic VB was the most popular programming language of its time for a reason, and people want it back.
SQL (more specifically T-SQL on MS SQL Server) was an eye opener because of the fundamental shift in thinking about data that you have to go through in order to use it effectively. What I mean by that is if you try to write SQL code in a procedural style you will shoot yourself in the foot very quickly. As a matter of fact, you will blow your whole leg off. With SQL, you have to think in sets. If you don't think in sets you will write a bunch of crappy and slow SQL code.
About a year ago I started to teach myself Python and I had an immediate A-Ha moment: This is sooo easy... programming is fun again! My current work involves the support of hardware and software systems for a large fortune 100 company. It's rare when a day goes by in which I have a technical problem to which the solution cannot be trivially achieved in Python. Python is the most expressive language I have used so far in my career. Using Python constantly makes me think What was I doing writing all that code before?
I also started to look into Lisp recently and although I already know that it has affected the way I think about programming in a profound way, I can't quite articulate what that is yet. But I think this paradigm shift is a major one and will require its own entry.
As I stated above, I learned other languages (to various degrees of proficiency) that did not impact my thinking that much. Were they worth learning? That's also a topic for another post.
P.S. Thanks to Reginald Braithwaite for pointing out that HyperCard scripting was indeed considered a programming language. However, I know some people that, despite insurmountable evidence of the contrary, still think that HyperCard was not programming.