5 ms·
I struggle with this. After years of studying OO and design patterns in Ruby and JavaScript I was having troubling building complex asynchronous systems and stu
by sandhundred 10y ago
I struggle with this. After years of studying OO and design patterns in Ruby and JavaScript I was having troubling building complex asynchronous systems and stumbled into Go. I saw the value of types for managing that complexity and the runtime for supporting asynchronous primitives, but internally was very limited by the lack of generics for things like collections and higher order control flow for things like error handling.
Eventually I arrived at Haskell after strongly considering Clojure, and I'm very happy about what I've learned and my new way of approaching programming complexity. Unfortunately there is nowhere else to go from here since I can't find employment as a Haskell programmer. OCaml, F#, Scala, Elixir, and Elm all feel like a step back. Now I'm a Java programmer and quite miserable. I feel hampered by the language nearly everyday in terms of how easily I can express my thoughts in code. Haskell isn't perfect but is the best fit for my mathematical mindset.
I am trying to lead by example. I help host my city's Haskell meetup and contribute to a Haskell reading group. The path is lonely, my co-workers poke fun at me, and don't care to put in any effort to understand what I have to say. I love teaching and explaining things but there is zero interest because the machine keeps moving. Not many at the office even enjoy Java but are resigned to do it for our large pool of enterprise clients. All in all each work day is a void I put 8 hours into, which is fine, compared to most working conditions; it causes no suffering beyond the lacuna.
I'm past the stage of trying to convince other programmers anything. I recognize many are happy with their tools. I yearn for that happiness and don't seek to spread my misery. I offer my time to those who are interested and want to learn more.
Anyway, this article nails it, Haskell has advantages but they aren't enough to change things without the infrastructure the author is building. I look forward to being an early adapter of Unision and continue to remain hopeful for the future despite the long odds.
- Kenji 10y agoI have two questions for you: - How does Haskell fare with large projects that use APIs that are inherently stateful, like OpenGL? Don't things get messy and ugly as the pure world of Haskell is being tainted? - How do I optimise Haskell code without having studied the language for decades? I had a lecture where we were taught Haskell, so I know the language, but darn, even a simple hash map seems to be so very complex in the language. The fact that everything is a linked list (bad for caching & performance) and everything gets copied around really turns me off.
- deleted 10y ago[deleted]
- nbouscal 10y ago> Don't things get messy and ugly as the pure world of Haskell is being tainted? Haskell is excellent at handling state. "Pure" doesn't mean no state, it means all state is handled explicitly in a type-safe way. > How do I optimise Haskell code without having studied the language for decades? It requires learning some new things, but honestly when I worked at a company that used Haskell I didn't really have to worry about this much. You occasionally make some things strict and there are some good heuristics about when this is needed, but overall it just didn't come up often. > I had a lecture where we were taught Haskell, so I know the language No you don't. You can learn Python in a lecture if you know Ruby; you can't learn Haskell in a lecture unless you already knew SML or OCaml, and even then probably not. > The fact that everything is a linked list (bad for caching & performance) and everything gets copied around really turns me off. Everything isn't a linked list in production code. It's easy to swap lists out for vectors wherever it's correct to do so, because you can write almost all of your code generalized to the necessary type class rather than specific to one single container type. Real Haskell code performs well, poorly-performing code is just used for examples when teaching beginners because it's easier and introduces fewer things at once.
- axlprose 10y ago> you can't learn Haskell in a lecture unless you already knew SML or OCaml, and even then probably not. I just want to emphasize this part because it's really quite true, as someone who came to it from F#/OCaml. The thing with learning "haskell", is that there's faar more to it than learning the basic language constructs. You can learn haskell the language in about a day, but you can't really learn haskell the paradigm/philosophy/mathematical discipline in a day, much less actually program haskell that quickly. That being said, it's not as difficult as it's made out to be, the mountain you need to climb is much shorter than people realize. The issue is largely one of jargon, and getting used to using and thinking in all the new terms and concepts that really have few equivalents in other languages.
- deleted 10y ago[deleted]
- openfuture 10y agoThe thing is that the amount of developers in the world is growing fast so most people need simple tools to get started. Once the field matures people will want to be able to express themselves more fluently, the whole reason languages like Haskell are getting more popular is because this is already happening. Keep fighting the good fight! I'm happy to hear that you took the initiative to host meetups and participate in reading groups.
- nilkn 10y agoI've been in a pretty similar situation. I think for many folks Haskell is too big of a gulp all at once. It's not that it's too hard (I think that's a bit of a myth). It's that it's just too different. It's hard for an experienced Java programmer to go from being highly productive to seriously struggling to even solve FizzBuzz in Haskell, let alone dealing with lazy IO and various terms and concepts that don't show up anywhere else like monad transformer stacks. In my experience, this is where languages like Elm come in and are extremely valuable. This is also why I think Elm is much more important than PureScript. I've recently had a lot of success advocating for and using Elm for an internal tool at work. We've now got several thousand lines of pure Elm code, and for the most part everybody has been incredibly impressed with the overall Elm development experience. I'll also say that the tool ended up being a lot more powerful and feature-rich than originally planned because Elm made it so easy to keep expanding and improving the application. Java -> Elm -> Haskell/PureScript is a much more enjoyable path for many than Java -> Haskell. It also feels a lot more motivated. Use Elm for a while, and you see many of the strengths of Haskell, but you also see many of the weaknesses of Elm. Once you've seen those weaknesses, you'll be happy to find that Haskell solves most of them. Now you have a concrete reason to look at Haskell, and that can make a big difference.
- weberc2 10y agoThis is the case for me. I simply don't have the time to invest in a technology that I keep hearing great things about, but from which I don't see many interesting things being built. I don't mean to knock on Haskell; I'd like to learn it, I just can't justify the time. I'm hoping to get there eventually, perhaps by pursuing Rust more or checking out Reason/OCaml, but I don't have many applications that could benefit from functional languages (at least not functional languages that are markedly slower than the languages I'm building things with today).
- eliasbagley 10y agoAn even smaller first step is Java -> RxJava, to start thinking in streams of data and transformations of that data.
- ronjouch 10y ago
- bigfcjjyfcg 10y agoI hope you find your ideal Haskell job soon.
- codygman 10y agoYou can probably get a Haskell job if relocating is an option. Also checkout eta since it's Haskell but interops with the JVM: https://github.com/typelead/eta https://github.com/typelead/eta You are a haskeller writing Java, I'm a haskeller writing Go ;)
- danenania 10y agoHaskell is beautiful in its way, but it isn't the only game in town. Try some other languages that are similar in philosophy but have different strengths than Haskell. You'll be a lot happier and you'll also stand a better chance of convincing your coworkers to try Haskell for some things.
- di4na 10y agoMy advise : baby steps. Yes Elixir or Ocaml or Rust or Elm would be a "step back" (i would disagree for the erlang ecosystem. No type system but the paradigm is as solid. Just widely different. There is a reason SPJ or John Hughes are close to the erlang community). But it would also be a "step up". You would feel better than with Java and you would have an easier adoption than Haskell. And in a couple years, you would add a Haskell dependency to them. And then a bit more. And in a decade you will have help clean the mess we are in a bit. Have a goal. Try to find a path to reach it. Look at how to improve things :) I know for a fact that both the Elm and Elixir and Rust community would be really happy to help both the transition and evolving the tooling if needed. Come talk to us. Try to make your life a bit better :) (I do not know well the OCaml community, but i bet you would also find helpful people there)