Javascriptを学習するのは実は難しいんじゃないか、という話
はじめに
Javascriptは構文的な簡単さもさることながら、Webフロントエンド開発における唯一の言語(TypescriptみたいなaltJSはあるけど、、)という立ち位置から情報が非常に多いため、初心者でも比較的習得が容易な言語として紹介されることが多い印象があります。
しかし、個人的にはその主張に違和感があり、自分がそう感じている要因を簡単に紹介します。
1. ES5以前とES6以降の情報が混在している
Javascriptはその歴史的な経緯から、ECMAScript(ES)という標準仕様が定められ、それにしたがって各実行環境で対応するように開発が行われています。
このECMAScriptが2015年に大幅に刷新され、その仕様はES6(ES2015)と呼ばれています。
この改訂の前後でJavascriptの書き方が大きく変わっており、中にはES5以前では一般的な書き方だったものが、ES6以降では非推奨になった、ということもあります。
しかし現在でもネット上にはES5以前とES6以降それぞれの例が混在しており、有料講座においても、ES5以前の書き方で進められているものが依然として存在します。
それを初学者が見極めるのは非常に難しく、個人的に学習の難易度が高いと思っている要因の1つです。
2. 同じ処理のための書き方が多い
たとえば配列の中身をループさせるのにforとmap系(reduceとかforEachとか)が存在したり、関数を定義するための書き方も一通りではありません。
これも上述するES6での大改訂に由来するものですが、ネットで検索したときにさまざまな書き方があるせいで、同じ処理でも同じコードブロック内で書き方が変わってしまう、みたいなこともあったりします。
もっと言えば配列をforでループするのとmap/forEachでループする場合の実行速度の違いだったり、functionでの定義とアロー関数での定義ではthisが異なったりと、微妙に性質が違っていることも学習するうえで難しい要因だと感じています。
3. エコシステムが複雑
昨今のwebフロントエンド開発において、シンプルなHTML+CSS+JSの構成で開発することはかなり少ないといってよく、Vue.js/Nuxt.js, React/Next.jsのようなフレームワークを使用した、いわゆる「モダン」と呼ばれる技術がファーストチョイスになることが多いです。
そうなったときにNode.jsの開発環境を作成してnpmでパッケージ管理したり、babel, webpackのようなビルドツール、ESLint, Prettierのような静的解析、フォーマットツールを組み合わせて開発することになります。
それらも歴史的背景が原因ではあるんですが、開発環境を利用する際の統一的なパッケージやライブラリが存在して、それらがデファクトスタンダードとして使用されているような状況ではないため、開発者がそれぞれの用途に応じたライブラリ群を導入し、設定を行わなければいけません。
Next.jsのようなフレームワークは、もともとフレームワーク内にこれらのライブラリが含まれているので、導入を自分で行う必要はないですが、チーム開発用に設定をカスタムするようなシチュエーションはけっこうあり、なんだかんだ知識をつけて設定を自分自身でやらなきゃいけないことが多いです
よくあるのはESLintとPrettierの競合で、地味なわりによく発生します。
上記の課題の解決策として、Romeというプロジェクトが立ち上がっていますが、現時点では大きなシェアを占めるには全然至っていない状況です。(2023年4月現在)
開発における標準のエコシステムの統一がなされず、それらについての知識をあわせてつけないといけない点は、初学者にとってハードルが高いと感じます。
最後に
個人的に感じている、初学者がJavascriptを学習する上でつまづきそうな点を紹介しました。
他にも、最近はTypescriptを選択することが多く、型にまつわるもろもろも覚えないといけないので、さらに負担は大きいと感じます。
ただ、結局フロントエンド開発をするうえで、Javascriptは避けては通れない(wasmもあるけど)ので、初学者の方が学習する上で気をつけるポイントとして、上記事項を頭の片隅に入れておいていただければと思います。
最後まで読んでいただき、ありがとうございます。
この記事が気に入ったらサポートをしてみませんか?