なしざわです!
今回は「初心者殺し」とも言われているC言語について、「なぜ独学でも挫折しなかったのか」についてまとめていきます!
公務員(幹部自衛官)からエンジニアへの転職を考えていた当時の私は、「IoT分野や制御プログラムを開発している会社に転職したい!」という思いで独学でC言語を学んでいました。
しかし、プログラミング言語の習得難易度でも最上位に位置するC言語です。当然、挫折率もトップクラスでしょう。
私も「アドレスの番地が...」とか「構造体のポインタを使って...」とか、最初はなかなか理解できずに心が折れそうになることもありました。
さらに追い打ちをかけるのが、「プログラムの結果がただコンソール上に表示されるだけ」というHTML、CSSを使用したWebサイトの学習に比べると面白味に欠けることです。
(ちなみにコンソールとはコマンドを受け付けるこんな黒い画面のことです。)
おそらく、この記事を見てくれている多くの方はそんな「初学者には難しいC言語にあえて挑戦しようかな」と思っている方だと思います。
そこで、独学でC言語を学んで転職した私が「なぜ挫折しなかったのか」について「モチベーションの維持」と「学習スタイル」に分けて紹介したいと思います!
また参考になると思うので学習した参考書も逐次紹介します。
継続が全て | モチベーションの維持
プログラミングの学習は「継続が全て」です。当たり前ですが、C言語に限らずに初心者がプログラミングをスラスラと理解できることはほぼないと思います。
最初は些細なエラーでもなかなか解決できずに「自分にはプログラミングは向いてないのかな...」と考えてしまうこともあるでしょう。
もう1度言うと「継続が全て」です。そしてそれを支えるモチベーションが非常に重要になってきます。
挫折率トップクラスのC言語に立ち向かうために、当時の私が考えていたことを紹介します!
絶対に転職するという意志 | IoTと制御プログラムの分野では必須だった
もうこれ以上にモチベーションが上がるものはありません。
「IoT分野や制御プログラムを開発する人になりたい!」ならC言語の知識は必須になってきます。
なぜなら、ハードウェアや周辺機器を直接制御するようなプログラムを開発する場合はほとんどC言語の独壇場になってくるからです。
C言語の詳細な特性は省略しますが、「低級言語」としての側面を持っているC言語では直接メモリを操作することができるような「低レベルな命令」を書くことが出来ます。
そして組み込み系などのプログラムではそれをフル活用してプログラムを開発していきます。
制御プログラムに興味のあった私にとっては、もはや「C言語を避けて通る」という選択肢は存在していませんでした。
「絶対に制御プログラムを開発している会社にコードを書くエンジニアとして転職する」という強い意志が「継続」への大きな原動力になっていました。
C言語にはプログラミングの基本が全て詰まっている
C言語は1972年にOSを作るために考えられた言語です。そして、多数存在している他のプログラミング言語のベースになっている言語でもあります。
標準ライブラリも他の言語に比べると貧弱です。多くの処理がプログラマに委ねられています。コード量も新しい言語と比較するとかなり多くなります。
そのため、C言語にはプログラミングの基礎が詰まっています。そしてC言語を習得できれば、他の言語を学ぶ際に非常に理解しやすくなります。
「プログラミングの基礎を徹底的に勉強できる!」と思うとモチベーションも高まるはずです。
C/C++のあとにPythonを学習していますが、初めてC言語を学んだ時の半分以下の労力で理解できます。
「C言語を理解して使えるようになれば凄い」という自己満足に浸る
半分冗談のようですが、意外とモチベーションアップにつながります。笑
どんなサイトで調べてもC言語の習得難易度は高くなっています。そんなC言語を独学である程度理解して使えるようになったら、「自分は結構頑張ったな、プログラミングの適性はそこそこありそうだ」と思うことができます。
根拠ない自信も独学でプログラミングを進めていく上では大切です。
「C言語だって使えるようになったんだから他の言語だってできる!」と根拠のない自信を得るために頑張りましょう。笑
Youtubeでソフトウェア会社の動画を見る
Youtubeで「ソフトウェア会社 新人」のように検索すると、実際に働いている新人プログラマやエンジニアの動画がいくつか出てきます。
独学で学習を進めていて、周りには誰もエンジニアの知り合いがいないという状況の場合、孤独に感じることがあります。
そんな時には、エンジニアとして実際に働いている人のインタビューを見てモチベーションを高めていました。
他にもYoutubeではエンジニアで情報発信している人が多数いるので参考になると思います!
ただ、Youtubeばかり見て勉強しなくなっては本末転倒なのでそこは注意してください。笑
C言語を使える若い人は意外と少ない
エンジニアという仕事は現在とても人気があります。
しかしながら、その多くはWeb系エンジニアです。今風のオフィスやリモートワーク、ノマドワーカーといったモダンな環境で働きたい人の多くがWeb系エンジニアを目指しているからです。
エンジニアといっても様々な種類のエンジニアがいて、使用する環境や言語も異なります。
一般的にC言語を使用して開発を行う環境は古いことが多く、若い人はあまりやりたがりません。
その結果、C言語を使える若い人は少なく人材としては貴重だと考えています。
またC言語の案件は伸びはしないが安定して存在しているので、使えるようになると仕事という面では保険にもなります。
ただし、将来的にフリーランスなどを考えている場合にはC言語の案件は常駐型(顧客の企業に出社して勤務する)ものがほとんどです。その点には注意する必要があります。
実践した学習スタイル
ここから私が独学する時に実践した学習スタイルについて紹介したいと思います。
毎日ちょっとでも触ってみる(ルーティン化する)
「転職しよう!」と決意してからはなるべく毎日C言語に触れるようにしていました。
とはいえ、仕事をしながらの学習だったので平日は30分くらいの時もありました。土日は5~6時間ほど確保して学習を継続していました。
仮に30分でもいいので、毎日コードを書くことを習慣化することが大切です。はじめから「毎日2~3時間は絶対にする」といった目標を立ててしまうと継続できなかった時に挫折してしまう可能性が高くなります。
「入浴したら参考書を広げてコードを書く」といったように日常の他の行動と関連してルーティン化することをオススメします。
参考書を最低でも2冊は用意する
参考書は1冊ではなく2冊以上用意することをオススメします。
理由は「理解できないことがあったら他の参考書と見比べてみる」ためです。
C言語に関する参考書は多数出ていますが、その参考書によって同じ概念や項目でも説明の仕方がだいぶ違います。
「こっちの参考書の書き方では理解出来なかったけど、こっち参考書ではすんなり理解できた」ということが結構あります。
独学では質問できるメンターもいないため、エラーや疑問は自己解決していくしかありません。
その時に見比べることができる参考書は絶対にあったほうが良いです。
実際に使用した参考書を紹介
使用した参考書の中からオススメのものを紹介します!
参考にしてみてください。
【入門】: インプレス『スッキリ分かる C言語入門』
優しさの極みです。完全な初心者にオススメできます。
パズルRPGを作ることを売りにしていますが、そこは大変なのでしなくてもいいと思います。
参考書としては1つ1つのサンプルコードが非常に短いため、自分で簡単に試すことが出来ます。 「配列」や「関数」、「アドレスとポインタ」といった初心者がつまづきがちなポイントについても基本的な知識を分かりやすく解説してくれています。
この参考書は「必要な知識をレベルが高くなりすぎない範囲で分かりやすく解説している」という点で良書です。
【発展】技術評論社 C言語ポインタ完全制覇
C言語の中でも難解な項目としてあげられる「ポインタ」に特化した参考書です。
入門の参考書から比べるとずっと難易度があがります。そして、実際の業務でもアドレスやポインタに関してこの参考書を理解していればそれなりに対応できるレベルになれます。
「途中でいっぱい書いてあるコラムが邪魔」というレビューもありますが、勉強になることもあるのでさっと読んでみるといいです。
【楽しく学ぶ】ソシム 作って身につくC言語
C言語を使って「ヒット&ブロー」という数当てゲームを作成します。
楽しく作成できることに加えて、「プログラムを開発するにはどんな手順で考えていけば良いのか」、「mainとサブルーチンの関係・機能はどうやって実装していけば良いのか」を学ぶことが出来ます。
また、開発環境として統合開発環境「eclipse」を使用するので「ワークスペース」や「プロジェクト」といった概念も学ぶことができます。
「構造体」や「ポインタ」はあえて使用せずにゲームを作成しているので、初心者でも間違いなく取り組みやすい参考書です。
開発環境の準備にはドットインストールなどの無料オンラインレッスンを参考にする
初学者の多くは開発環境の構築で苦労します。C言語はコンパイル型の言語なので、コンパイルできる環境と準備して実行ファイル(.exeなど)を作成しなければプログラムは動いてくれません。
上記で紹介した本でも環境構築の手順は書いてありますが、バージョンの違いなどによって上手くいかないことが多いです。
そんな時に参考になるのが『ドットインストール』などの無料オンラインレッスンです。
このサイトの中に「ローカル開発環境の構築」というレッスンがあります。
このサイトのレッスン通りに進めていけば、プログラミングを学習する準備を整えることが出来ます。動画になっていて、実際に画面上で動きをみることができるので、焦らずに手順通りに実施すれば上手くいくはずです。
最も簡単にC言語をコンパイルして実行する方法
ドットインストールの開発環境の構築でもよく分からなかったという方のために、私が知っている中で最も簡単な方法を記事にまとめてみました!
簡単なソースコードならこちらの方法で実行することが出来ます。
初心者でも超簡単!C言語を開発者コマンドプロンプトでコンパイルする方法
最初は写経でも構わない | とりあえずドンドン進める
C言語を学習する時に始めから100%理解しようとすると、100%挫折します。笑
最初は写経(とりあえずサンプルコードを書いて実行する)でもいいので、とりあえず書いて動かしましょう。
全て理解できなくて当たり前です。サンプルコードの数値を変えてみるなどして、いろいろ試しているうちに理解できるものです。
どうしても解決できないエラーがあったらそのサンプルを実行するのは諦めて次に進みましょう。
「理解」は後から付いてきます。
時には時間をかけてエラーと向き合ってみる
上の内容と矛盾しますが、時には時間をかけてエラーを解決することも大切です。
エンジニアとして仕事をする上で、「エラーや問題を自分で対処する」という「自己解決能力」はとても重要です。
エラーを解決するうえで、ネットで調べたり、参考書を見比べたりする過程でいろんな発見や気づきがあり、知識も増えます。
そして何よりも次に同じエラーが出てもすぐに解決できるようになります。
そうやって苦しみながら解決していく過程でしか得られないものがあることも事実なので、挫折しない程度に悩んでみましょう。
ポインタや動的領域の確保などのやや難しいことは焦って理解しなくても大丈夫
C言語の「ポインタ」や「動的領域の確保」は理解して使えるようになるのが難しいです。
私自身、「開発で使える」というレベルに至ったのは、実際に業務で開発を経験するようになってからです。
プログラムの書き方にも正解はなく、今でも分からないことがあれば調べながら開発をしています。
独学で学習しているうちは、C言語の基礎がしっかりと理解できれば十分だと思います。
終わりに
文系未経験でも挫折しなかった理由についてまとめてきました。
確かに初心者にとってはC言語の学習は難易度が高いです。しかし、理解して使えるようになれるとプログラミングの基礎は間違いなく習得できます。
他の言語を学習する際にもC言語の知識は活用できるので、IoT、制御プログラム、組み込み系に興味のある方は挑戦してみてもいいかもしれません。
コメント