こんにちは、ナナです。
本記事は、世の中の流れに逆らって「C言語」を初学者にオススメする内容となっています。
「C言語 挫折」などを検索すると、C言語の習得で挫折されている方が多い印象を持ちます。
有名な方々も「C言語は挫折するだけで難しいからやめとけ!」「最初はC言語じゃなくてWeb系言語を学べ!」など情報発信しています。
プログラミング未経験の人たちは、このような情報を見て「C言語はやめといた方がいいらしいぞ」という先入観を持つ方も多いことでしょう。
しかし、これは本当に事実なのでしょうか?
私はC言語を直接指導した人数で言えば、日本国内なら割と上位に入るのではないかという程度の経験値を持っています。
今でも年間200人程度の初学者に対して1カ月程度のC言語やマイコン制御の教育をしますが、世の中が言うほど実際の挫折率は高くありません。「この子は無理っぽいな」と感じるのは全体の1割程度です。
そして、無理っぽいと感じる人は「C言語」だからではなく、根本的な理解力や論理力といったプログラミング適性がそもそも足りていない人であり、別の言語を学んだところで結果は変わらない印象を持っています。
私は初学者が最初に学ぶ言語として「C言語」を選択することは、次のメリットからオススメできます。
これらのメリットに対して解説いたします。そして最後に、C言語の習得する際に挫折しない学習方法を提案しましょう。
C言語習得のメリット①:ミニマムで必要な要素を網羅的に学べる
未経験者の方は、最初に学ぶべきプログラミング言語を何にするか迷われることが多いでしょう。
人が学ぶ工程とは徐々にステップアップしていくことが大事です。そのために「C言語」は良い選択であることを示しましょう。
最初に学ぶ言語で「オブジェクト指向言語」はやめておけ
最近、世の中で使われている主要な言語は「オブジェクト指向言語」です。
そのため、最初に学ぶ言語が「Java」「C++」「C#」や、Web系開発で活躍する「Python」「Ruby」「JavaScript」などを選択されることが多くなっています。
これらのオブジェクト指向言語に対し、C言語は「手続き型言語」と呼ばれる分類に属します。
「手続き型言語」は上から順番に処理が流れるため、初心者にはプログラムを作りやすく動きも追いやすい特徴があります。
最初にプログラミングを学習する方は、まず「順番に処理が動く」という感覚を最初に身に付けることが技術向上への近道です。
そのため、手続き型言語の代表である「C言語」こそが最初に攻略すべき言語なのです。
「オブジェクト指向言語」は、C言語の次に学ぶ言語として選択するのがオススメです。
C言語を理解した後だからこそわかる「オブジェクト指向」の真の意味での便利さがあるのです。最初にオブジェクト指向を学ぶのは、飛び級で学べる才能を持った人たちにだけに許されるものと考えておきましょう。
C言語は初学者が学ぶべきプログラミング要素をミニマムで学習できる
私が考えるプログラミング初学者が最初に身に付けるべきプログラミング基本要素は次のものです。
最初に「オブジェクト指向言語」を学ぶのをやめておいた方がよい理由がここにあります。
「オブジェクト指向」という概念を正しく理解するには、高度なプログラミング知識が必要です。
オブジェクト指向言語とは「クラス」という枠組みを利用して、プログラムを自立した部品(オブジェクト)として構築するスタイルの言語です。
初学者がこの「オブジェクト指向」という捉え方でプログラムを見るには、経験値が足りなさすぎです。
オブジェクト指向言語は、最初に習得すべきプログラミング要素として、明らかに不要で過剰な要素が含まれているです。
それに対し、C言語はオブジェクト指向ではないため、本来必要なプログラミングの基本要素を効率よく学習することができます。
C言語で学んだ知識は他のプログラミング言語でも活用できる知識です。初学者はまず基本を押さえるべきなのです。
C言語習得のメリット②:「メモリ」に関する正確な知識を習得することができる
私は全てのプログラミング言語を扱う上で、「メモリ」を正しく理解していることは絶対にプラスになると考えています。
C言語に限らず、プログラミング言語とは「情報」をいかに「処理」するかをコンピュータに指示するためのものです。
この「情報」を管理するためのハードウェアが「メモリ」なのです。
ポインタが習得しておくべき基本要素に含まれる理由
先ほどの習得しておくべきプログラミング基本要素の中に「ポインタ」が含まれています。ポインタとはメモリを操作するための道具です。
つまり、「ポインタ」を理解することは「メモリ」を理解することと等しいのです。
「C言語にはポインタがあるから最初に学ぶのはやめとけ」
この言葉はプログラミングにおいてポインタの大切さを知らないが故のものです。
逆なんです。
ポインタを明確に意識する「C言語」だからこそ初学者が学ぶ価値があるのです。
今後様々なプログラミング言語を学ぶ上で、ポインタを理解していることにより深いレベルで言語を掘り下げることができるようになります。
本サイトではポインタを重点項目として『C言語 ポインタを使いこなせ【身に付けるための9の極意】』でわかりやすく解説しています。全9記事のボリュームとなっています。
ポインタが理解できないという方は、是非読んでみるとよいでしょう。
私はポインタやメモリを理解していないプログラマーの技術を信じることができません。メモリを理解していないのにどうやって正しくデータを管理できるのでしょうか?
ポインタを理解している人と、していない人では、見えている世界が違うのです。
ポインタを扱うことで向上する技術がある
「Java」や「Python」といった人気言語にはポインタがないから学びやすいとの意見がありますが、これに対しては私は反対です。
これらの言語はポインタという機構を隠ぺいすることで、よりエンジニアに優しく扱えるということを目指しています。
しかし、初学者が最初にやらなければならないのは、プログラムがどのように動くのかを理解し、自分の思うがままに操る技術を得るためのトレーニングです。
技術とは負荷を掛けることで鍛えられるのです。ポインタを隠蔽した言語では、メモリを扱う技術が向上しないのです。
そのため、C言語でポインタを学ぶことにより、メモリを扱う筋力を鍛えるのです。
もし、ポインタを理解していない技術者がこれらの言語を扱っているとするならば、私は恐ろしく感じます。
これらの言語が内部でどのようにデータの管理しているかを理解するには、ポインタに関する知識が必要不可欠なんです。
C言語習得のメリット③:他の主要言語の習得にステップアップしやすい
C言語は1972年に生まれた歴史ある言語であり、現在主流のプログラミング言語に大きく影響を与えています。
C言語は現在の主要プログラミング言語の親であるということ
現在よく利用される「C++」「Java」「C#」といった主要言語は、C言語から派生していった言語です。
実際に学んでみるとわかりますが、変数定義・型・分岐・反復・関数といった基本的な構文はC言語とほとんど変わりません。
つまり、C言語を学習した後であれば、新しい言語を身に付ける際に大幅なショートカットが可能となります。
C言語が主要プログラミング言語のステップアップに向いている理由
「C++」「Java」「C#」といった言語は、オブジェクト指向言語に含まれます。
つまり、
「C言語」+「オブジェクト指向」⇒「C++」「Java」「C#」
なのです。
オブジェクト指向を学ぶ前段階としてベースとなるC言語を学んでおくと、差分である「オブジェクト指向」に集中して学習することができます。
だからこそ、「C++」「Java」「C#」といったオブジェクト指向言語は、C言語を習得した後にステップアップとして学ぶべき言語なのです。
C言語の技術者は意識していないことも多いですが、他の言語への適応性が上がっているのです。
Web開発から考察するC言語の学習に足りないもの
世の中でWeb開発の学習が盛んになっている理由とはいったい何なのか?C言語が遠慮される理由は何なのかを考察します。
そこからC言語の学習に足りていないものが見えてきます。
C言語よりも難しいWeb開発がスクールで流行っている理由
私はプログラミング未経験者がWeb開発の技術を学ぶことに「すごいな~」と思うと同時に「大変だろうな~」とも思っています。
未経験者の方が知っておくこととして、C言語を習得することよりもWeb開発の技術を身に付けることの方が遥かに難しいということです。
理由としては、Web開発は幅広い範囲の技術習得が必要となるからです。
C言語が主に組み込み開発向けであるとすれば、Web開発と比較すると次のように必要なスキルが異なります。
どう見積もってもWeb開発の方がしんどいです。言語だけでも何種類を習得しなければならないのかというレベルです。
初学者が独学でWeb開発の技術を学ぶのは、C言語を独学するのとは比較にならないほど難易度が高いことでしょう。
この難易度が高いWeb開発学習を成立させているのは、スクールが提供するWeb開発用カリキュラムの整備と、メンターによるフォロー体制が整っているからだと思います。
スクール側が学習者をフォローできる環境を整えていることは素晴らしいことだと思います。
しかし、プログラミングを始めようとしている方に対して、いきなりこれだけの量の技術を習得することを求めるWeb開発に対して「これ学ぶ量が多すぎない?」って私は感じてます。
Web開発学習から感じるC言語の学習に不足している要素
私はWeb開発がスクールで盛んな状況から、世の中にあるC言語の入門書籍や学習サイトに不足しているものがあると考えています。
それは
作品制作を目標とする開発体験が得られる学習カリキュラム
です。
C言語の書籍や学習サイトを見てみてください。ほとんどのものが基本的な文法の書き方などに終始しています。このようなもので学習した初学者はいったい何を思うのでしょうか。
一通り勉強したように思うけど、私って結局C言語で何ができるようになったの?
技術が身に付いたのか、まだ足りてないのかがわからないんだけど。
これなんです。プログラミングを学ぶ人は自分の技術が向上していることを確認したいのです。
しかし、C言語を学ぶための書籍や学習サイトのほとんどは、言語としての文法的な知見は解説してくれますが、「C言語を学ぶと作品として何が作れるの?」の疑問には答えてくれません。
結局「学んだ結果、何ができるの?」の答えがないため、学ぶ人からすると成長を感じづらく、学習途中に挫折しやすいのです。
この「作品」というゴールが、C言語を学ぶほとんどのカリキュラムに含まれていないことが問題なのです。
「C言語はつまらない!」教える側として、この意見には真摯に向き合う必要があります。
C言語にはプログラミングを学ぶ人が自分の成長を感じられるカリキュラムが必要なのです。世の中のC言語を学習する媒体は、それを意識していなさすぎなのです。
最後に挫折しないC言語の学習方法を提案
プログラミング言語の習得は、目標を立てて進むことが大事です。学ぶためのカリキュラムとして「作品としてのゴール」が明確化してあるものを選ぶことが必須です。
では、C言語を学ぶ上で作品制作までカバーする学習カリキュラムなんてあるのでしょうか?
C言語の書籍や学習サイトを検索して探してみてください。ほとんど見つけることはできないしょう。
しかし、あなたが見ているこのサイトに実はあるのです。
このサイトでは、C言語の初歩からC言語を活用したロボット制御技術までを無料でまとめてカリキュラム化してあります。
C言語開発 完全マスター編
このサイトはまだ作ってからさほど時間も経過していないため、メジャーなサイトとは言えません。「このサイトに書いてあることって本当に信用できるのかな?」と思われるのもごもっともです。
しかし、本サイトには他にはない挫折せずに学習するためのプランが用意されています。C言語を学びたいと思う方には絶対オススメです。
私は初学者がC言語を学ぶ上で必要なものって何だろうと考え続け、その結論としてこのサイトを作りました。
より多くの人が挫折せずにC言語を学んでもらえればうれしいです。