For several years, I was a Linux systems administrator. After I earned some programming skills, I spent some time doing back-end web development. When I was a sysadmin, most of the programming I did revolved around automating various aspects of deployment and writing custom command-line tools to interface between various services. As a back-end developer, I essentially focused on a very large CRUD platform. In both of those roles algorithms were almost always trivial; the complexity arose from side effects and the timing of system interactions.
No surprise that I like Python for getting things done: Clean and consistent syntax, quick to learn, built and marketed around effective systems integration. I was surprised to find myself also drawn to Haskell; their popular, unofficial motto is "avoid success at all costs." More or less the opposite of what I typically want.
After some consideration though, it fits. Haskell (and functional languages in general) avoids or outright prevents side-effects. It strongly follows the "do one thing well" principle for individual functions. The typing system forces you to handle most of the potential bugs before a given program ever runs. All those are really valuable when you're trying to keep a system or service up and running.
I've been playing around with some Haskell tutorials, and I'm curious to see how the "get it done" approach of Python feels in contrast to "avoiding success." I'm starting with some exercises on Codewars and go from there. Maybe I'll get a feel for writing "real" algorithms in the process.