ここ数年、サイド プロジェクトとしてBoot.devを構築してきましたが、最近、多くの新入生から同じ質問を受けました。
「コンピュータ サイエンスのカリキュラムで、複数のプログラミング言語を学ぶ必要があるのはなぜですか?」
「分担」よりも「1つの言語を完全にマスターしたい」という意見で参加する学生がかなり多いようです。これについてはアプリ自体で詳しく説明する予定ですが、このブログ投稿を書いて、CS プログラムの過程で複数の言語を学習させる理由について詳しく説明したいと思います。
まず、Boot.dev の背景
私がどこから来たのかを理解できるように、Boot.dev とは何か、そして教育プラットフォームとしてのその目標は何かを説明しましょう。
Boot.dev は、ブラウザーに組み込まれたコンピューター サイエンス カリキュラムです。コーディングを学ぶための最良の方法について、いくつかの強い意見があります。例えば:
- 最初にコンピューター サイエンスとソフトウェア エンジニアリングの概念を教えます。特定のテクノロジーは、概念を教えるメカニズムにすぎません。
- 私たちは完全に実践的です
- ガイド付きコースとガイドなしのプロジェクトがあります
- 私たちは現代の技術と言語を教えます
- 線形のカリキュラムを採用しているため、学生は次に何を学ぶべきかを心配する必要がありません。
- 学生のモチベーションを維持するために、可能な限り体験をゲーム化します
では、カリキュラム全体を単一の言語で教えられないのはなぜでしょうか?
Github の公開ロードマップで計画している完全な CS カリキュラムを見ると、基本的に不可能であることがわかります。特定の技術と密接に結びついている特定の概念があり、それらをすべて同じ方法で教えようとしても意味がありません。いくつかの簡単な例を見てみましょう。
- SQLなしでデータベースを実際に教えるのは難しい
- 純粋な関数型言語なしで関数型プログラミングを教えるのは難しい
- オブジェクト指向言語なしで OOP を教えるのは難しい
- アセンブラなしでハードウェア インターフェイスを教えるのは難しい
- 強く型付けされた言語なしでタイピングを教えるのは難しい
- JavaScript なしで Web を教えるのは難しい
- Python なしで ML を教えるのは難しい
つまり、競合する 2 つの目標があります。
- できるだけ少ないテクノロジーを使用してすべての概念を教えたい
- コンセプトを最もよく教えるテクノロジーを使用して、すべてのコンセプトを教えたい
それで、あなたは私にいくつの言語を教えてくれるの?
大学で従来のCSの学位を取得する過程で、12 以上のプログラミング言語を使用しました。それは多すぎると思います。私は言語を教えるために言語を教えたくありません。これは、教えたいすべての概念を効果的に教えながら、導入する言語をできるだけ少なくしたい最適化問題です。 Boot.devの完全なカリキュラムでは、合計で約 6 言語しか使用する必要がなく、プログラムの大部分は JavaScript、Python、および Go を使用するだけでよいと確信しています。
複数の言語を学ぶと視野狭窄がなくなる
まだ説明していないいくつかの異なるプログラミング言語を学習することには、さらに利点があります。さまざまな言語に触れることで、プログラミングへのさまざまなアプローチの利点、欠点、類似点、および相違点のいくつかを理解し始めます。
プログラミング言語を 1 つしか書いたことがない場合、ある特定の方法が「最善の方法」、「正しい方法」、あるいは「唯一の方法」であると思い込みがちです。
たとえば、JavaScript と Go では、エラー フローに対するアプローチが大きく異なります。
// JavaScript try { doSomethingDangerous() } catch (err){ console.log(err) } // Go err := doSomethingDangerous() if err != nil { fmt.Println(err) }
いくつかの言語に慣れ親しむことで、それぞれのテクノロジーと、さまざまなツールをいつ使用したいかについての理解が深まると確信しています。
私はなんでも屋、何の達人にもなりませんか?
個人的にはそうは思いません。学習の旅の開始から最初のコーディングの仕事まで、単一のプログラミング言語だけに集中していた場合、視野を広げるために時間を費やした場合よりも、実際には悪い状態になると私は本当に思います.
「コードを学ぶ」とは「プログラミング言語を学ぶこと」だと思っている人もいます。彼らは、Python を学んでから JavaScript を学びたい場合、0 からやり直すことになると考えています。
それは真実から遠く離れることはできませんでした.
2 つ目のプログラミング言語を習得するには、最初に習得したプログラミング言語の 5 分の 1 の時間がかかります。これは、学んだ概念の約 80% が両方の言語に適用されるためです。 3 つまたは 4 つの異なるコーディング言語を使用すると、ほぼすべての言語のコードを見て、その内容を理解できるようになります。ときどき構文を調べる必要があることに気付くかもしれませんが、とにかく誰もがそれを行います。
では、せめて汎用言語の数を減らしていただけないでしょうか。
カリキュラムをご覧になった方は、コンテンツの大部分を 3 つの言語で教えていることに気付いたかもしれません。
- JavaScript
- パイソン
- 行け
これらの 3 つの言語を可能な限り使用して、主題で必要な場合にのみ他のテクノロジを混在させようとします。たとえば、リレーショナル データベースについて話しているときに SQL を使用します。
この3つを特に選んだ理由を説明しましょう。
JavaScript を使用する理由
最近では、JavaScript から完全に離れることはできません。バックエンドが存在する理由を最初に理解せずに、バックエンド プログラミング (ほとんどの学生が関心を持っていること) について学ぶことは困難です。バックエンドはフロントエンドを強化するためだけに存在するため、最初にいくつかのフロントエンドの基本を教える必要があることは理にかなっています。 Web でフロントエンドを構築する場合は、ほぼ確実に JavaScript を使用するため、これを使用する必要があります。
なぜパイソンなのか?
構文的に言えば、Python は邪魔になりません。アルゴリズムとデータ構造は、多くの場合、学生が習得するのが難しい概念であるため、学生が論理にできるだけ集中できる言語を選択することは理にかなっています。また、Python は多くの点で英語のように読めるため、Python のアルゴリズムが何をしているかを一目で簡単に確認できます。さらに、カリキュラムの終わりに向けて AI と ML のコンテンツがあるため、生徒が追加の言語を学習する必要なく、その時点で Python を再検討できるというのは、二羽の鳥のような状況です。
なぜ行くのですか?
私たちの CS の学位はバックエンドプログラミングに重点を置いており、個人的には Go をバックエンド言語として使用して大きな成功を収めました。 Go は、私が考えてきた他の選択肢よりも、並行処理、コンパイラ、分散システムなどを教えやすくします。手動のメモリ管理に関して、最終的にはさらに低いレベルに進む Rust コースがあると思いますが、まだ決定していません。
質問?コメント?懸念?
私に直接連絡する最善の方法は、 Boot.dev Discord サーバーに参加することです。 Twitter で @meにすることもできます。私たちのアプローチについてどう思うか教えてください!
ここでも公開されています https://blog.boot.dev/education/learn-multiple-programming-languages/