Why did we ever think the first programming language didn't matter?
cacm.acm.org
cacm.acm.org
C makes me think like an engineer, deliberate and thoughtful; Python makes me think like a child, playful and experimental; Java makes me want to break up the problems a lot and generalize every case. Etc.
I like lisp as a teaching language. I understand why first-year programming classes prefer more "useful" languages. But I genuinely think lisp puts me in the correct mindset for computer science topics.
TBF though, where I went to school, after the first two classes students were expected to pick up the 'class language' for all future classes. This meant C in compiler and OS class, Java in data structures, Python and Lisp in some other classes. We were learning CS topics, and the given language was just a tool that could change depending on which teacher taught the class that semester.
By the mention of Turbo Pascal above you can probably guess this was a long time ago. I'm sure schools have changed since then.
Like most kids in my generation (learning to program in the early 1980s) BASIC was my "first language", but it wasn't until I learned C at college in the late 80s that I really started to feel capable. I rarely use C for work anymore but I still "think in C" when trying to work out any sort of low-level algorithm no matter what language I wind up implementing it in (nowadays mostly Python and JavaScript).
A lot of courses start with Java and I think that makes it really hard for students later to untangle the concepts of programming from the OO ones Java imposes on people.
At least from my understanding, this doesn't seem to affect students when they gradate, e.g. they aren't programming any different then any other college. Although, Northeastern grads are supposedly known for being good developers. Maybe that's just the rigorousness of the curriculum itself.
I'm personally leaning towards C or Javascript — which are in a sense total opposites — but they both have interesting strengths for first learners.
C is great because it's statically typed and it's hyper-simplicity allows students to really grasp the fundamentals of programming and how a program works. On the other hand Javascript and the web stack allows people to quickly do something fully interactive, and I think this can be really motivating.
At my former high-school there was one CS teacher that basically only taught students how to do math in Java. Naturally, a lot of students quickly lost interest as a result.
I'm not sure I've ever actually known any programmer in general that started with a functional language, unless we want to count Javascript. I know they exist, but it can't be common.
FTFY
My (crusty old) experience is that folks who did CS in college at schools that were more theory-driven tend to have experience with functional coding. I don't recall being taught Lisp but I do remember having to just figure it out for class. Because the class wasn't about teaching a language and there was homework in Lisp.
Clojure really encourages data-oriented programming, similar to what you often find in Python codebases. Mutation isn't the default in clojure for common data structures, so writing your iterative code is just more work than writing functional code using the immutable defaults. Language design has a big impact here. That's not to say you can't write imperative mutation heavy code in Clojure, but you're either going to fight the language or build up your own utility libraries to do it. It's there, but it's rarely idiomatic and often seen as a performance tradeoff.
I remember starting with C++ - everything was painful/confusing and unclear. It was some older C++ and CodeBlocks
Once I witnessed C# and Visual Studio I instantly felt like everything makes sense, is easier, documentation is readable and productivity is increased, so I switched.
I could focus on challenging problems instead of fighting with the language.