|
|
|
|
|
by strlen
5688 days ago
|
|
Haskell. I know Scala and occasionally use it work (although my main project is still in Java: it's often difficult to mix languages at the same level in a project and for many reasons, I'd like to keep as few external dependencies for my project as possible) and great enjoy it. I also know OCaml and am doing some hobby projects in it. I've been a Lisp weenie for a long time now (Scheme, Common Lisp, recently Clojure both at work and in hobby projects). So, why Haskell if I already know lots of other functional languages (both statically and dynamically typed ones)? Due to type classes and lazyness/purity by default. I still find myself thinking imperatively, or thinking at a lower functional level (e.g., just tail recursion and folds/map). I'd like to learn to think in a a lazy and purely functional way and Haskell seems to be a way to get there. Additionally, both Scala (with implicits and higher kindred types) and OCaml (since 3.12 with first class modules) do support type classes, but Haskell seems to be a good way to learn to use them. I've been thinking a great deal about type systems and type safe DSLs, presently working my way through TAPL. One particular field that interests me is the intersection of programming languages and systems: can we do user level systems programing in languages other than C; how can we safely "hint" a garbage collector to avoid memory pressure issues that happen frequently in memory intensive applications written in high level languages; can we use the type systems to ensure application-level code can sustain loss of consistency or availability (Google for CALM Conjecture for a dynamically typed Ruby DSL approach to this)? Finally, Haskell is a great language in terms of forcing myself to think before I code (Yes, I should already be doing that): you may have a solution that may be short in terms of lines of code but takes hours to come up with. Why is this important? That's a great way of improving myself in other areas of programming: seeing which classes of algorithms solve a particular program, finding the simplest solution vs. one that comes to mind first. [EDIT: Forgot to say that fun also plays a huge part of it. It's the reason I chose on the site (was the best one of those listed there: Haskell won't get you a job nor is there always a guarantee you'll be more productive with it, especially right away) and a perfectly legitimate one]. |
|