How does functional programming allow you to avoid reasoning about state? Don't you always have to reason about state, no matter what paradigm you use? Otherwise, how are you going to build anything useful if you're not keeping track of any variables?
The following words are bad: shared, mutable, global.
All programs have state. It's worse if the state is shared. It's worse if the state is mutable. It's worse if the state is global. It's the worst if it's all three.
Functional program still have state. They typically don't have shared state, or mutable state, or (much) global state, though. Those are real wins.
I feel like a lot of functional programming tries to hide state behind an OS/API call of some sort. Sometimes that makes sense. Think a program that transforms data into SQL calls.
Mirror of that is a driver for a piece of hardware. You got multiple levels of state going on.
Just skimmed the essay and wow, what amazing advice. I totally agree with the whole "figure out what your options are and just pursue what interests you" ordeal, rather than try to figure out exactly what you want to do in 20 years. Thanks so much!
Thank you for the thorough advice! Thing is, I'm interested in so many areas of computer science from low level compiler stuff all the way to machine learning. Hopefully from taking classes, I'll be able to narrow these downs.
[0] http://notational.net