Haskell
teacher

Samuel Gélineau からの返信その1(翻訳)

Sure, I am happy to help!

もちろん、喜んで協力します!

  1. Do you think Haskell is underrated as an industrial, professional programming language by IT project managers?

Yes, definitely. There are a few aspects of Haskell which makes it look like a bad choice:
はい、全く持ってその通りです。いくつかの点でHaskellは良くない選択のように思われています。

  1. Only a small fraction of companies use Haskell. This has a few consequences:
    • Haskell does not look like a safe choice, in the "nobody has ever been fired for buying IBM" sense.
    • Service providers who expose an API are unlikely to provide.
  2. Haskell bindings for that API. Only a small fraction of programmers are familiar with Haskell. This has different consequences: It looks like hiring Haskellers might be a challenge. For any given domain, fewer people have written Haskell which deal with this domain, so we are less likely to find existing libraries for this domain.
  3. Haskell is very different from conventional languages like C++, Java, and JavaScript. As a consequence:
    • Senior employees who are comfortable with conventional languages might not be willing to make the jump.
    • Junior employees might only have used conventional languages in school, so training them to use Haskell effectively might take a while.

翻訳1-1

1. 少数の企業しかHaskellを使っていません。例えば”IBMを買ったとしても誰も解雇されない”というように、結果としてHaskellは安全な選択とは思えなかったのです。

  • APIを提供するサービスがHaskellバインディングを提供することは考え難い。

2. 少数のプログラマしかHaskellを知らない。結果として、
- Haskellerを雇うのは大変かもしれません。
- どんな分野でも、既存のHaskellライブラリは少ない。

3. Haskellは従来の言語と大きく異なります。C++,Java, JavaScriptなど...。

- 結果としてAPIを提供するサービスがHaskellバインディングを提供する事は考え難い。
- ベテラン勢は、従来の言語で満足ならあえて挑戦する気にならないかもしれません。
- 若手は、学校で従来言語しか使ったことがないかもしれません。
- 従ってトレーニングに時間がかかるかもしれません。

翻訳2(英語)

I think that a few of those objections are unfounded, but unfortunately some of them are true downsides, which have to be weighted against Haskell's advantages.

上の論点のいくつかは根拠があやふやだと思います。しかし、幾つかの論点は本当の欠点で、Haskellの強みと比較検討されなければいけません。

  1. The number of companies which use Haskell is indeed very small, but it is growing. We're seeing a lot more job postings on the Haskell subreddit and on Twitter; in the past, each such posting was celebrated as proof that Haskell is finally breaking out into the industry, whereas today they are so common that people have started to complain about them!
    • Choosing Haskell is still a bold choice at the moment. For example, a friend created a startup and chose Haskell for the backend, but he knew that this choice would be considered a risk by investors, so he had to make safe choices everywhere else, for example he picked JavaScript instead of PureScript or GHCJS for the frontend. So this is indeed a downside.
    • At work, we are writing Haskell bindings for a third-party API, because we couldn't use the Java API they provided. So this is another real downside.
  2. The number of programmers who are familiar with Haskell is small, - but it is growing too! People no longer assume I said "Pascal" when I say "Haskell", and even Java programmers have heard of Monads.
    • The reason the small number of available Haskellers makes it seem like hiring is going to be difficult is that with popular languages, it is often necessary to interview a large number of candidates before finding one which is worth hiring. But as Paul Graham explains in The Python Paradox those who bother to learn the good-but-not-yet-popular languages are those developers who are passionate about their job and really care about the quality of their tools. Python was not nearly as ubiquitous as it is today when Paul Graham wrote his essay. If he wrote this essay today, I'm sure he would have called it the Haskell paradox instead. Anyway, it's not just an essay, I found it to be true in practice: at work, we're hiring both Haskell and JavaScript programmers, and while we have had many more JavaScript applicants than Haskell applicants, our Haskell positions were a lot easier to fill than our JavaScript positions.
    • As for libraries, the days in which you were likely to have to write your own library are long gone. Nowadays, when people complain about libraries, it's because they have looked at six existing alternatives and still aren't happy or couldn't decide which one to pick, etc.
  3. It is true that Haskell is very different from conventional languages, and that's a good thing! You can't improve on the status quo without being different from the status quo.
    • Unfortunately, it is true that senior developers who are comfortable with conventional languages might be unwilling to adapt. I have encountered circumstances in Java and C++ projects in which Haskell-inspired techniques would have been a great fit, but I have never been able to convince my otherwise-reasonable colleagues to adopt them. Another time, a Java programmer was helping us with a Scala program, our tech lead tried to show him how to make his code more functional, that led to a debate, and then to a verbal fight :( Of course, different people will react differently, so introducing FP to an OO-trained team isn't guaranteed or even likely to end in tears, but it's a possibility which needs to be considered.
    • About training time: yes, if someone is only familiar with conventional programming languages, then learning another conventional programming language will be easier and faster than learning a wildly dissimilar programming language such as Haskell. This is just as true for junior programmers as for senior programmers. However, the extra training time is worth it: as John Wiegley explains, all languages have a cost, but in the case of Haskell most of the cost is paid upfront, while learning the language, instead of having to pay continuously while using the language.

翻訳2-1

1. Haskellを使う企業は実際少ないですが、増えてもいます。
SubredditやTwitterでの職の募集も増えています。

以前はそういう一つ一つがHaskellがやっと産業デビューを果たしたという証拠だ!と歓迎されていました。今では、それは当たり前のことになってしまって、一般的の方々はそういう募集の一つ一つに不平不満を言ったりしているのが現状です。

翻訳2-2

2. Haskellを選択することは、今でも勇気が必要です。例えば、友人が起業してHaskellをバックエンドに使いました。
彼はHaskellはリスキーだと投資家に思われてるのを知っていたので、他の全ての点では安全を選択を強いられました。

例えば、PureScriptやGHCJSではなくJavaScriptをフロントエンドに使いました。
ですからこれは本当の弱みであると言えます。

仕事で、私たちは外部APIのHaskellバインディングを書いています。
JavaのAPIを使えない事からこれも本当の弱みであると言えます。

翻訳2-3

3. Haskellを知ってるプログラマは少ないがやはり増加傾向にあると言えるでしょう。
”Haskell”を”Pascal”と聞き間違えるような人はもういないし、
Javaプログラマでさえ、モナドのことを聞いたことがあったりします。
Haskellerの数が少なくて採用が難しいと思わせる理由は、多くの人気のある言語では、採用する価値のある人を見つけるには、しばしばたくさんの候補者に会う必要があるからです。

しかし、ポールグラハムが”パイソンのパラドックス”で説明するように、
凄いけどまだ人気がない言語を敢えて学ぼうとするのは、情熱的でツールにこだわるような開発者だということです。

Pythonはポールが書いた当時に比べ、当たり前の言語になりました。
今彼が書くとしたら、“Haskell Paradox”と呼ぶと思います。現場でも当てはまります。仕事で、我々はHaskellとJavascriptのプログラマを雇っています。JavaScriptは人気の言語であるため、募集する人はHaskellよりずっと多いですが、Haskellに応募する人は優秀な開発者が多く、少ない応募者の中から求める質を満たす応募者を探しやすいのです。
ライブラリについては、なんでも自分で書かないといけないような時代はずっと前のことです。
近頃は、みんながライブラリについて議論するとしたら、
選択肢が6つあってどれも満足できないとかどれにしようか決められないという事です。
4. Haskellが従来の言語とだいぶ違うのは、確かです。
それはいいことです。現状を改善するためには、現状から離れないといけないのです。
5. 残念ですが、従来言語で満足なベテランが適応しようとしないのは本当です。JavaとC++で、Haskellのテクニックがうまくいきそうな状況に当たったことがありますが、同僚の説得にうまく言った試しがありません。
6. 同僚は他の点では、とても賢い人達でしたよ。JavaプログラマがScalaのプログラムに協力しようとしてくれたこともあります。技術リーダーが彼にどうやって関数的な書き方をするか見せてあげようとしましたが、それは議論になり、ついには言い争いになりました :( 
もちろん、みんな違う人間ですから、違う反応をするでしょう。関数プログラミングをOOのトレーニングを受けたチームに紹介しても、涙に終わるとは限りませんがそう言う可能性があるのは念頭において置かなければなりません。

トレーニング期間ですが、そう、従来言語のプログラマが他の従来言語を学ぶのは早いし簡単です。Haskellは全く違うし話が異なります。ベテランだろうが、若手だろうが同じことです。
然しながら、トレーニングの余計なコストは、
実は余計ではないんです。John Wiegleyが言うように、全ての言語を学ぶにはコストがかかります。Haskellは先払い。他の言語は、月払いと言えるでしょう。