ababup1192
@ababup1192

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

フロントエンド言語Elmがどうやったら入門の敷居が下がりますか?

Discussion

Closed

意見交換したい内容

フロントエンド用言語のElmがどうしたら入門の敷居が下がり多くの人に触れてもらえるか、触れれないのはなぜか意見が聞けたら良いなと思ってます。感情的な面でも良いので忌憚ない意見をお聞かせください!

前提

新しい言語に触れるにあたって環境構築が話題に上がりますが、クラウド開発環境はちょっと試す分には十分な性能を持っています。ぜひお使いください。

Elmのクラウド開発環境Ellieが驚愕の進化!入門者環境はこれで決まり!

日本語文献が少ないということも一時期言われていましたが、翻訳されたチュートリアルはとても質が高いです。また、日本語の記事もかなり充実してきています。

チュートリアル
QiitaにおけるElm記事一覧

追記

Elmのデメリットも載せてほしい(Elmが向かない人・ケース)とのことでしたので、追記しました。

Elmはどんな人にオススメできないか

4

@Zuishin ありがとうございます。追記させていただきました。
まだこういう観点で足りないなどがあれば教えて下さい。

0Like

@Zuishin
少し考えてみましたが、記事のタイトルとしてelmのここが不便であるみたいなタイトルは書き手としてもコミュニティとしても売り出したい言語としてあまり好ましくないと思いました。

一方でelmユーザが不便と感じる部分を意図的に記事にしていないかと言うとそうではないと思っていて、ボイラプレートが増えがちなSPAの記事やportに関する記事はタイトルで不便であると明示していないだけで表面化はしていると感じます。

加えてelmを持ち上げるような意見が多くみられるように感じしてしまうのは、おそらく既存の言語に課題を感じてelmに行きついて使い始めた開発者が問題を解決していることに関しての意見などが多いからだと思います。その後SPAやport等の技術に行き着くまでに時間がかかるためデメリットの意見が出にくいのかな?と思います。

どちらかと言うと始めようとして挫折をした。ただ記事を書くほどではない。みたいな意見を今回は抽出したいので、むしろ入門していただいて感じた負をこの場で言ってもらえるとコミュニティにも入門者にとっても嬉しい場になるのでは?と感じました。

1Like

意見交換の場ですので、双方幸せになれるような建設的な意見のみの投稿をお願い致します。

0Like

最近僕が感じるのは、以下の2つです。

・ググってコピペだけでプログラミングができると思っていた人にとっては、
 「情報が少ない」となってしまい難しい
(実際には必要十分な情報が用意されていると思います)
(公式リファレンスなどの一次情報を参照することすら敷居として捉えられてる感じがします)

・パラダイムシフト自体がやはり人間にとって難しい
(世の中、既存の知識の延長でしか物事を考えられない人が意外と多い?)

2Like

case式のインデントがずれるとエラーになってしまうところが初心者にとって分かりづらいですね

case a of
 A -> "A"
B -> "B"
0Like

@tmKentauros
意見ありがとうございます。

個人的な取り組みで言うと、
1番目の問題に関しては記事を書く際にEllieで動くコードを必ず貼るようにしています。
2番目の問題に関してはオブジェクト指向方向けの関数型入門記事を書いたりしました。また、discordでもそのような質問がありコミュニティの皆さんで相談に乗っていたりしました。

上記のような試みで問題は解決していきそうなのか、それとも別なアイディアなどがあれば是非聞かせて欲しいです!

0Like

@narumincho
ありがとうございます!文法が慣れなくて厳しいと言う意見でしょうか?
以前Elmは僕が見てきた言語の中でもエラーがとてもわかりやすい言語だと思い記事で取り上げたことがありました

おっしゃってくださいましたコードに関しても、インデント(indentation)は大丈夫でしょうか?と言う旨のメッセージが3回も出てきていて正しい例も載せているため、一般的な言語よりもだいぶ親切だと感じているのですがどうしたら良さそうでしょうか? 英語が厳しそうであれば、是非日本語にして記事にしてみて欲しいです!

1Like

@ababup1192

前にElmをサークルで5人くらいに他人に勧めたときにインデントがずれたときに、分かりづらいエラー(次にくる記号はどれかだよエラー)が出た気がしたんですけど、Elmがよくなっているか、その時のコードとは違がかった(正確に覚えてなかった)

HTML,CSS,JavaScriptと来てElmを学ぶのは結構きつそうでした(というかWebプロントエンド自体が複雑すぎる)

TypeScriptみたいにエラーメッセージが日本語に対応すれば、間違いなく日本語を話す人にとってみれば、Elmに入門しやすくなりますね(記事を作成するよりも効果があると思います)

ellie 入力候補が出てくれればより使いやすくなりますね

Elmのコンパイル結果にJS,HTMLだけでなく.d.tsファイル、ソースマップが出力されるようになれば更に作りやすくなると思います

単純な関数も出力できれば既存のプロジェクトに純粋な関数を記述でき便利になると思います

module A exposing (..)

plusOne : Int -> Int
plusOne x = x + 1
import * as A from "./A.elm" 

console.log(A.plusOne(7))

あと関数名を2回書くのも面倒に感じる

(なぜElmのコンパイラに貢献しないかって? Elmの良さと初心者にとって優しい言語を別に作ったほうが結果的に楽に開発できるようになると思っているから( https://github.com/narumincho/Definy ))

1Like

@narumincho
ありがとうございます!
提案の内容はヘビーなものが多かったので、もっとインクリメンタルに改善できそうだなと思いましたが具体的に何に初学者が躓くか知れて良かったです!

0Like

Elmの事は何も分かっていない立場から、入門しない人からはこのように見えるのかな?という事をコメントします。
ちなみに私自身、そもそも入門をしようと思い立っていない人間ですが、今後必要性があって機会があれば、入門をすると思います。
私が見聞きする限りでは、そのような「入門をしなければならない時」にとても困るという事は、私に関しては無いだろうなと感じています。

入門しようと思い立たないことについては、一言でいうと、「様々な立場から見た時に、Elmを使うことで何がよくなるのかがわかりにくく、一方で学習コストは存在すると思うので、そもそも入門をしようと思い立たない」というような事を感じます。

  • テックリード的な立場として
    • プロジェクトでElmを採用する場合に、生産性が学習コストを超えるか?がわからない
      • JS/TSで既にある程度経験がある場合は「Elmでなければ実装できない」という事が少ないため、決定的にElmを採用するべきといえる理由がない(「品質の向上が重要」という前提の上で、Elmが品質を改善するという実感を事前に得られない、という事もあります)
      • Elmが適した規模のプロジェクトがわからない
      • Elmが今後定着するか?という見通しがわからない...例えばvdomを使った書き方という意味ではReact/Vue等と比べて特別の人気があるように見えないため、積極的に採用できるかというと難しい
      • 関数型であるという事について、多くの人にはコストが高そうに見える(私個人はHaskellを使ったこともありますが、一般論として、関数型は相性が良い人と悪い人に大きく分かれる傾向があり、かつあまりメジャーな勢力ではないのかな、というような印象を受けています。これはあくまでも私個人の印象ですので、実際はそうではないかもしれません。)
    • 一般的なデザイナー等との競業を考えた時に、マークアップ的に書かれているものと関数型で書かれているものを比較すると見た目が異なる為、それを理解しにくいデザイナーが一定数おり、協業・修正がしにくそう
      • JSXやVueのテンプレート等は、(その実態が関数であるとしても)htmlの断片のようにも見ることができますが、Elmの表記は関数っぽさが強い印象を受けます
      • 例えば、ある特定の要素の親子をデザインの都合で逆転させたり兄弟に変えたりしたい、みたいな場合があったとき、閉じタグは冗長ですが分かりやすいと思います。関数や配列などで書かれたものを追っていくのは、少ししんどいと思う事があります。また、実際のhtml(DOM)をすぐに想像できない場合もあります
  • 一開発者として
    • 新しい言語を学ぶ場合、他の言語を学ぶのと比較してElmが良い理由は?という事に答えられない
      • 主な内容は、上述の「生産性が学習コストを超えるか?」と同様かと思います
      • 時間の使い方として、Elmの学習と他とを比較すると、他の学習に使う時間の方がより必要かな?というのが現時点での判断です

また、よく言われるElmのメリットに関してでいうと、以下のような可能性があるのかな、と思いました。(多数派の意見かどうかはわかりません)

  • エラーが親切
    • そもそも、あまりエラーが出ないように書ければそこまで気にならない?
  • 実行時エラーがない
    • 開発をする時の経験としては、実行時のエラーでもコンパイルエラーでも総量は変わらない可能性があり、その意味で気にならない?

※コンパイルをした後に、想定外のエラーが出ないという事についてのメリットは勿論あると思っています。しかし、それにメリットを感じられない場合は、単純にエラーが出るタイミングの問題という事になるため、実行した時のエラーを追いかける方が得意/好きか、コンパイルのときの静的な構文を追いかける方が得意/好きか、みたいな開発者個人の特性の差があるのかなと思います。(仕事としては、バグが無いことをより高い精度で言える方が重要だろ、と思うものの)

私は既に別のプログラミング言語で開発の仕事をしていますが、もし、私がいま企業で働く身ではなく、例えば学生であったとしたら、全く主体的にElmを勉強している可能性もゼロではないと思います。実際、Haskellなどは何の明確な目的もなく、ただの興味だけで大学1年生の頃から触っています。
ただ、Elmに関しては、その用途において言語のレベルでJS/TSのようなメジャーラインにないという所があって、「Elmでしかできないこと」(キラーコンテンツ?)を中々見出しにくいように思います。かつ、関数型言語に親しむという意味では、それこそHaskellなど他に一般的なものがあるので、いま私が学生であったとしてElmを主体的に選ぶかというと、やはりそうでもないような気がしています。(Haskell以外の候補としては、F*/Rust/Scala/Elixir?最近はF*が気になるかなと思います)

これは、Elmに取り組む価値が無いと言っている訳では決して無くて、こうした考え方をするとElmの目立ったメリットが見つかりにくい、ということでした。実際に入門をすれば、入門したなりの意味のある体験はできるのではないかと思います。色々な噂を聞く限りでは、人によってはとてもうまくworkする言語であると思います。

5Like

Your answer might help someone💌