The first lines of code I ever wrote were in Racket, a dialect of Scheme. I was a freshman in college taking a “Computer Programming for Non-Majors” course. I didn’t know this at the time, but I was doing functional programming in a somewhat unorthodox way. The professor, Stephen Bloch, taught the class based on his own book Picturing Programs
I fell in love with programming during this class, and declared the computer science major. The curriculum then switched to a Java focus, and I left Racket behind for the land of OOP.
I found myself wishing for the elegant simplicity of Scheme. Java seemed useful but there was something beautiful about Scheme to me. I didn’t have the vocabulary for expressing it at the time, but I think the fact that Scheme dialects have almost no syntax was appealing to me, I just had to focus on the program I was building, rather than figuring out how to express myself in the language. This is especially painful when you’re a beginner student who is not yet fluent in a large language like Java. I also think the idea of data being passed through pure functions just jives extremely well with my brain.
For my day job, I started off writing Java and C# backends, and wasn’t able to use FP at all. Then I started doing React on the frontend, and enjoyed it very much because React has a functional model, with components effectively being functions that accept props and return JSX. It’s not as functional as I’d like but it does scratch the itch.
Over the years I’ve read some books like programming in haskell, haskell programming, the little schemer, and done a few side projects in functional languages like Gleam, Clojure, and Haskell, but nothing of significant size. I also used to listen to the LambdaCast podcast which probably did the most to help me understand FP fundamentals.
These days I’m most interested in Effect and Gleam and I’ve been thinking of checking out Elixir via Phoenix + LiveView.