I learned programming in my undergrad through using Mathematica for homework assignments (B.S. Physics, B.S. Pure Math), and later for some undergrad physics research. It always made perfect sense to me because it was just math;
Write an expression that takes in an expression and gives out another expression.
Then I had to use Python for my computational physics class in my senior year (2019) and had a lot of fun because implementing those numerical methods with this thing called an if
statement also made so much sense;
Do this. Then do this. If this is true, do this, otherwise do this. Do this but use this variable that increments each time.
After a few years after graduating, I got accepted into a master’s in computational science, but needed to take an undergrad course in data structures to get up to speed (which was really really cool, cause again, it’s just math!). The class used Java, which not only did I not have any experience with, but it was fundamentally different in that it used these things called “classes” and “objects”. I figured it out pretty quick and it made sense (and I also learned really what that some_list.sort()
in Python actually represented). Once again, it was a whole new way of thinking;
I have a bunch of things. Those things have properties based on what kind of thing it is. But, instead of functions that take in things and give new things, each kind of thing has its own set of actions that can operate on that thing.
Then a few years go by, I’m starting my master’s thesis, and I need to choose a language to do it in. My first thought was to use Mathematica, not just because that’s what I knew best, but also because it has baked in support for GPU and distributed computing. But I was well on my way to becoming a free-open-source zealot, especially for open-access and reproducibility in science. So I was also considering C++ for performance, but I had also just seen (in 2023) this “new kid on the block”, Julia.
Fast forward to now and I’ve written my thesis code (PararealGPU.jl, real package announcement coming this summer after I graduate) in Julia and I love it love it love it! I really do, and tell everyone that I can, truly think that Julia is the future of scientific computing. And, Julia is just fun to write!
But the other day I got nerd sniped by this video asking the question “What is PLUS times PLUS?” with a weird diagram in the thumbnail. So I clicked on it and 28:28 later, I finally found light that I didn’t know I needed for the past 10 years: \lambda-Calculus. I always knew that programming was “like” math in that you had to be careful and think about logic and flow and stuff, but \lambda-calculus show that “programming is math”, or maybe more accurately “computation is math”. So now I’m really interested in not necessarily “learning” Haskell, but using it to see what it’s like to use only functional style. I don’t want to build a big project in it (maybe); I don’t want to make a desktop app in it; I want to think functionally. I want to BE a function.
Thank you for coming to my TED talk.