【プログラミング初心者のためのC言語の概要】難易度や特徴・学習方法などを紹介します

本記事では

C言語の概要・歴史
C言語の基礎知識
C言語で出来ること

などを解説していきます。

C言語』は「プログラマの登竜門」と言われています。

C言語は大学や専門学校だけでなく、大多数の企業が入社研修として採用しています。

Javaなど現在多くのプログラミング言語がオブジェクト指向です。

オブジェクト指向とは「プログラミング技法」の一つです。

プログラムを「ただ上から書く」だけではなく

・部品化する
・再利用可能な形にする

などのプログラミングをするという技法です。

それに対してC言語はウォーターフォール式(書いた順番にプログラムが実行される形式)手続き型言語です。

研修でC言語が採用されるのは、「手続き型言語を書かせたほうがプログラミングに慣れやすいから」です。

またC言語を足掛けに

  • C++、
  • DELPHI
  • PHP
  • Python

といった市場の大部分を占めている言語に移行することも簡単になります。

ではC言語とはどういった言語でどのような特徴があるのか、準を追って説明致します。

プログラミング初心者のためのC言語の基本的な特徴

C言語の特徴は他の言語に比べて「ハードウェア寄り」な点です。

C言語の特徴=ハードウェア寄りな言語

先述したようにC言語とは一言でいうと手続き型言語です。

手続き型言語を簡単に説明すると、コンピューターが実行ファイルを順番に記載する言語です。

プログラムはプログラム単体では動かすことができず、コンパイラというツールを使います。

コンパイラを使ってCPU(コンピュータの演算処理をする中枢部分)が解釈しやすいマシン語に変換します。

このマシン語に変換されたものが「実行ファイル」となります。

C言語はもともとマシンに近い言語なので、実行ファイルの性能が良かったりします。

C言語とは?c言語の概要

C言語はプログラム(xxx.cのファイル)をコンパイラにかけ、マシン語に翻訳され、実行ファイルとして出来上がります。

C言語の特徴=コンパイラを使ってマシン言語に翻訳される

このコンパイラというのがプログラムをマシン語に変換をしています。

コンパイラというのは

・プログラムに記入された文法ミス
・誤った混入した文字列が混入

などの場合、エラーとして教えてくれます。

文法ミスを直して、コンパイラが文法的なエラーはないと判断した段階で機械語で書かれた実行ファイルに変換します。

原則としてC言語で書かれたプログラムはコンソールアプリケーションライブラリとして機能します。

なので、GUI(ボタンやテキスト入力欄、マウスのダブルクリックなどの操作で動作するアプリケーション。は作成しません。

コンソールアプリケーションはWindowsを例で挙げると、コマンドプロンプト上で動くアプリのことです。

コンソールアプリケーションはマウスやボタンなどを使用しない黒い画面で動きます。

ライブラリはプログラムを共通化したり、プログラミングの自由度や利便性を高めるためのプログラムです。

C言語の歴史

C言語の歴史は結構複雑で、もともと前進となる『B言語』が存在していました。

しかしB言語は性能に問題があったため、コンパイラやユーティリティがそこまで発展することはありませんでした。

ユーティリティとは「プログラミングを行う上で役に立つ機能」のことです。

「ライブラリ」や「予測変換」などを指します。

そこで1970年にD.M.リッチー氏UNIXで動く「高性能で安価なコンパイラでプログラムが書ける言語」の開発を始めました。

そして1972年「B言語」をベースとした「C言語」が開発されました。

当時のUNIXにはWindowsのような画面は無く、すべてコンソールで行われていました。

なので、その環境に特化した言語であるからGUIが作成されませんでした。

その後、「環境」や「実装者」に依存するプログラム言語へと発展していきます。

それに伴ってC言語も様々な種類が出回るようになりました。

エンジニアエンジニア

アメリカでは1989年に「標準の書き方」が制定されて
1990年に「世界規格の書き方」が制定されたよ。
日本は1993年に世界規格の書き方に則るようになったね

1990年以降、C言語の書き方は変わっていません。

C言語で作られているサービスなど

C言語の開発案件として「家電製品の制御」や「自動車の制御」があります。

C言語で作られているサービス=家電製品や自動車の制御

他にも通信系にもC言語が使われており、非同期メッセージ通信の一部としてもC言語が使われています。

非同期通信は、「送信者と受信者が拘束されないメッセージ通信」を指します。

Lineなどを想像すると分かりやすいです。

Lineは受信者が既読にしなくても送信者に次のメッセージやスタンプが送れます。

このようなメッセージ通信サービスを「非同期メッセージ通信」もしくは「非同期メッセージング」と呼びます。

メイン機能ではありませんが、C言語は現在でも「通信」や「制御」といった業務で根強い人気を誇っています。

C言語の難易度

C言語は研修でも使われるような言語ですが、初心者にとっては習得難易度が高い言語です。

C言語の難易度=初心者には取得難易度が高い

実際にIT企業内でも「C言語のライブラリをすべて使いこなせる人」は1000人居た場合、5人使えればいいほどです。

また「言語仕様を把握している人」は1000人居た場合、1人いるかいないかレベルです。

教えやすい言語ではありますが、歴史が古いためかなり深い言語になっています。

そして初心者がC言語に手を出した場合、大半の人が挫折する箇所があります。

ポインタ」と「構造体」の2つです。

ここは参考書を読むだけでは理解することはほぼ不可能です。

エンジニアエンジニア

「ポインタ」と「構造体」は研修やスクールで講師に教えてもらいながら、自分で何度も反復練習しないと理解することは難しいね

筆者も学生時代や社会人になってからもC言語をやってきました。

しかし「周りの過半数」がこの「ポインタ」と「構造体」で挫折していました。

この「ポインタ」と「構造体」を上手に教えられるかが指導者としての力量が試されるところです。

またここを乗り切らないと、プログラミングに対して苦手意識を覚えてしまうかもしれません。

だからといって挫折をするのではなく、javaにシフトしてみたり、VBにシフトしてみるのも一つの手です。

「Java」や「VB」は、構造体をより分かりやすくしたライブラリが提供されています。

そこである程度スキルを積んだ後にC言語の構造体を見てみると理解できる可能性が極めて高いです。

(筆者もC言語は構造体で挫折しており、その後スキルを積んで理解できるようになりました)。

専門性 技術的 難しい

C言語は取り掛かりやすい言語ではありますが、その専門性はかなり高いです。

C言語の特徴=専門性が非常に高い

上述のポインタ、構造体はあくまでも「入門した人が最初に当たる壁」です。

レベルを上げると

・プロトタイプ宣言
・分割コンパイル
・コマンドライン引数

など「習得レベルに応じた壁」がかなり多くあります。

「取り掛かりやすい=簡単」というわけではありません。

特に制御系のプログラムの問題の一つとして「意図はしていないけど何か動いちゃった」があります。

エンジニアエンジニア

コンソールアプリケーションはコマンドが矛盾さえしていなければ例えそれが間違っていようとも動いてしまうんだよ。

なので、バグを検出することが難しいという側面もあります。

そのため、仕事として現場でC言語をやった場合、要求される技術レベルはかなり高くなります

プログラミングの知識だけに留まらず

・パソコンの知識
・ネットワークの知識

などかなり幅広い知識が必要になります。

その影響か、「若手プログラマ」でC言語で仕事している人は殆ど見かけることはありません。

大体が「業界歴10年以上のベテラン」であったり、「C言語一本でやってきた玄人レベル」になります。

なので、C言語を業務レベルまで習得しようとした場合は、技術的にもかなり高いレベルを要求されるような難しい言語です。

バグ

C言語の難しさを象徴するものとしてバグの究明しにくさが挙げられます。

C言語の特徴=バグが調べにくい

基本的にC言語は機械語に翻訳した後のコマンドに矛盾がない場合は動いてしまいます

例えば「java」などの場合は予期せぬ値が入るとその部分でエラーを出力したり、目に見えて異常な動作をしていることが解ります。

しかし、C言語はそういった挙動は一切しません。

いきなりエラーを出力したりWindowsだと「マイクロソフトに問い合わせてください」というダイアログを表示します。

エンジニアエンジニア

C言語はバグの出所が「プログラム」なのかそれとも「OS」がエラーを出しているのか本当に分かりにくいんだよ。

また「プログラム的な不具合」があったとして、その意味が全く解らないケースもあります。

例をあげます。

「parse error before character 0241」
int a;

上記のプログラムを打った時に該当するエラーが発生します。

しかし

int a;

これだとエラーが発生することはありません。

さて、この一見何の差分もないプログラムにどんな違いがあるでしょうか。

正解はエラーが発生するプログラムはセミコロン(;)の後に「全角スペース」を混入させました。

しかもこのエラーの特徴として何行目でエラーが出ているかは一切示しません。

例えば1万行のプログラムがあった場合、どこでエラーが発生しているのか一つ一つ調べる必要があります。

このようにバグに対して物凄く不親切であり、実際に現場レベルのプログラマであっても違いが解らなかったりします。

設計

設計という意味ではそこまで複雑な設計はありません。

C言語の特徴=設計が複雑でない

先述したようにC言語は「手続き型言語」なので

・各手続で何をしたいか
・その手続きを行うためには何が必要か

などを順番に列挙します。

列挙したものは、フローチャート(プログラムの動作の流れを示した絵)に落とし込みます。

フローチャートに落とし込んだ後にプログラムを文書として起こすことができれば十分です。

ただ、手続き型言語は「1つでもフローが抜けてしまった場合」に膨大な手戻りが発生することがあります。

序盤のフローが1つ漏れたとして、それが終盤のフローで利用する場合はかなりの手戻りが発生してしまいます。

例えば「Visual C#」や「java」などオブジェクト指向言語の場合は、サービスやライブラリを利用すれば修正が利きます。

しかしC言語の場合はあとから修正ができません。

なのでC言語をプログラミング初心者が仕事としてやる機会があった場合、詳細設計レビューは何度もやることになります。

フロー1つが大きなミスになったり、エラーが特定しにくいという特性があるため、設計は相当シビアになります。

プロジェクトによっては、設計だけで4フェーズに分けることもあります。

フェーズ1:外部設計(概要設計)…クライアントに見せるためのシステムの概要を記載した設計書
フェーズ2:基本設計…外部設計からインプットとアウトプットをもう少し具体的に記載した設計書
フェーズ3:機能仕様…基本設計をさらに機能別に詳細に記した設計書
フェーズ4:詳細設計…機能仕様に対してデータのやり取りや、全フローを記した設計書
(フェーズ3とフェーズ4は同時に行うこともあります)

C言語入門

ここからはC言語を実際に始めるにあたり、絶対に抑えておいて頂きたい用語を以下にまとめます。

ここで記載する内容は「C言語」のみならず、「java」でも「PHP」であっても必要になる知識です。

これらを理解していないと「予期せず動いた」り、いきなり「OSがエラー」を出力する事態にもなります。

C言語の基本用語は以下の9個です

  • 変数
  • 数値
  • 判定
  • 素数
  • 約数
  • 最大公約数
  • 完全数
  • 文字列

以下でそれぞれ説明します。

変数

変数とは、プログラムの中でその値が変わることができる宣言のことを指します。

変数=中の値が変わることができる宣言

例として「aという数値は最初は0だけど、それに1を加えたものを入れ直す」という要件があった場合、aは変数になります。

この時「a」の中身は、最初は「0」ですが、次に「1」になります。

数値

数値とは四則演算ができる型を意味します。

数値=四則演算ができる型

数値は大きく分けて、整数(int)、小数(double、float)、虚数(ireal、ifloat、idouble)に分かれます。

整数とはその名の通り「小数点を含まない数値型」になります(例:1、2、3)。

小数とは「整数と小数が含まれた数値」になります(例:0.1、0.2、0.3)。

浮動小数固定小数の2つに細分化もできますが、初心者のうちはそこまで理解する必要はありません。

虚数は理系出身者なら聞き覚えがありますが、虚数を2回かけると負の値になる数字です。(例:5i × 5i = -25)

判定

判定とは、その条件を満たしているか(例:「aはbより大きい」かなど)を示すものです。

判定=条件を満たしているかを示すもの

条件を満たしていればTrue、満たしていなければFalseという値を返します。

判定の書き方はたくさんありますが、その代表はif判定になります。

例をif判定で書くとするとif ( a > b )になります。

aがbより大きい場合は、この判定はTrueになります。
aがbより小さい場合は、この判定はFalseになります。

上記でいう「True/False」のことをBooleanもしくはboolと呼びます。

素数

素数とは、2以上の自分と1以外で割り切れない数のことを指します。

素数=2以上の自分と1以外で割り切れない数

C言語には素数を求めるライブラリは存在しないため、独自のプログラムを作る必要があります。

サンプルプログラムはネットにも記載されていますが、結構性能が遅いものが多いです。

目からうろこのプログラムがこちらのサイトに記載されていますので、ご興味があれば是非ご覧ください。

素数を求めるプログラム

約数

約数とは、割り切れる数のことを指します。

約数=割り切れる数

約数としては「1」および「自分」を含みます。

原理としては、素数のプログラムが解れば、判定処理を逆転させるだけです。

最大公約数

最大公約数とは2つ以上の整数が持つ約数の中で一致するものの最大値になります。

最大公約数=2つ以上の整数が持つ約数の中で一致するものの最大値

書き方としては、2つの約数を取得し、その最大値を取るプログラムを作成すればよいです。

完全数

完全数とは、自分を除く約数の和が自分と同じになる数字を指します。

完全数=自分を除く約数の和が自分と同じになる数字

(例:6の約数は1、2、3ですが、1+2+3=6になります)

C言語で短いプログラムで表すこともできます。

しかし「ループの作り方」や「数学的な知識」をプログラムに転換するだけの論理的思考力が必要です。

したがって「約数」や「最大公約数」、「素数」が組めるようになったら腕試しに挑戦してみるのもいいかもしれません。

time.hのライブラリの中で定義された1970年1月1日00時00分00秒を起点とする「時間の年部分」になります。

年=時間の年部分

年部分というと一見わかりにくいかもしれませんが、ここで構造体という概念が出てきます。

time.hの中に「tm」という構造体が宣言されており、「tm_year」という情報に「年の情報」が入るようになります。

同様に「tm_min」であれば「分の情報」を取得することが可能です。

ただ、日付型を使いこなすには最初の挫折ポイントとなるポインタと構造体をある程度理解しておく必要があります。

文字列

文字列とは、その名の通り文字です。

文字列=文字の列

例えば画面に何か任意のメッセージを表示したいときは、それは文字列としてプログラムでセットする必要があります。

例:画面に「Hello World」と表示する場合は

printf(“Hello World);

例の「Hello World」の部分を文字列と呼びます。

文字列はダブルクォーテーションで囲んで書きます。

この「文字列」のことをプログラミング用語で「String」(ストリング)と呼びます。

数値や小数、日付と違い、現場ではなぜか文字列だけは会話内でも「String」といいます。

C言語でできること:なにができるのか?

C言語でできること:なにができるのか?

では実際にC言語が現場でどのような使われ方をしているのかいくつかの実例をご紹介いたします。

C言語の技術は高いのか

C言語は現場としてはかなり高度な知識を要求されるということを念頭に置いておいたほう良いです。

C言語の現場=高度な知識を要求される

そのため残念な話ではありますが、「ここに記載されている内容を理解した」だけでは現場レベルで通用しません。

大学生レベルでも情報工学部を専攻していれば、C言語で微分方程式が表現できたり、化学反応の方程式が書ける人はいます。

C言語で開発できるもの

C言語で開発できるものとして自動車や家電製品とは別にWebに対する通信内容の解析を行うサービスでも利用されています。

C言語で開発できるもの=Webに対する通信解析

用途として通信内容を解析して必要なデータをやり取りするようなプログラムの多くがC言語で開発されています。

例えば、旅行する人が利用しているような予約サイトアプリです。

「日にち、ホテル、部屋」を選択すると条件にあう部屋一覧を画面に表示します。

アプリがいきなりWebに繋ぐのではなく

・情報を暗号化
・検索条件をセット

などをして「どこに繋ぐか」を判断します。

そういった箇所にC言語が使われています。

上記例のサービスを介した通信のことをSOAP(Simple Objective Architecture Protocol)通信と呼びます。

このように、C言語は実際に目に見えて動いているわけではありません。

利用者としては認識することはありませんが、「縁の下の力持ち的な役割」を果たしています。

最近ではスマホのゲームの一部にC言語が利用されていました。

実は身近で動いているプログラムでC言語で書かれているものは結構多いです。

プログラミングジャパンLP

C言語とC++とC#の違い

C言語には「C++」「C#」という言語がありますが全く別物です。

C言語の特徴=C++とC#は全く別物

C言語とC++の違いは「C言語にオブジェクト指向が加わったものがC++」です。

一方で、C#は「C++とjavaを足したもの」であり、ほぼC言語としての原型は留めていません。

C言語が根底にあるとはいえ、C言語やC++のようにC言語と互換性はありません。

Microsoft社が開発した.Net Frameworkのプラットフォームで動くように設計されています。

C++の誕生背景にC言語の弱点として

・関数に弱い
・他の言語と互換性がない

という背景があります。

その弱点を改良したのがC++となっており、手続き型にもなります。

またオブジェクト指向による関数を駆使したプログラムも書けるようになっています。

またC言語とC++は互換性があるので、同時に利用される場面も多々あります。

C#については、.Net Frameworkは「C#」や「VB.Net」「J#」のすべての環境で共通したライブラリを参照できます

なので言語に囚われずに一定の開発の質を保つことを目的として作られています。

C言語でゲーム開発

C言語はゲームを作ることができます。

C言語でできること=ゲーム開発

簡単なシミュレーションゲームインタフェースであれば初心者でも簡単に作ることはできます。

例えばハングマン(単語当てゲーム)やポーカーのインタフェースはC言語で作れます。

ポーカーやシミュレーションゲームは少し難易度が高いので、まずはハングマンから挑戦してみては如何でしょうか。

プログラム行数は300行から長くても500行程度で書けるレベルです。

腕試しにゲーム作成としてハングマンを選ぶ人はいます。

C言語で郵便番号検索プログラムの開発

ハングマンができるようになれば郵便番号検索プログラムも書くことはできるようになります。

C言語でできること=郵便番号検索プログラムが作れる

実際に、これはC言語研修でもやることです。

先述したように「Webを使ったリクエスト」の部分でC言語を使用した郵便番号検索のプログラムも存在します。

いきなりWebサービスを作るのは難易度が高いです。

しかし端末内に「地名」や「郵便番号」を入れて検索するレベルのものであればそこまで苦労せずに作れます。

C言語の求人

C言語の求人

C言語の求人は、2000年頃を境に減少傾向にあります

C言語の求人=2000年頃を境に減少傾向にある

しかし、今でも日本の経済産業(自動車や家電)の開発で根強く使われています

なので需要としてはなくなることは少なくとも数年以内は有り得ないと考えられます。

著者は今までSES企業に勤めてきました。

SES企業とは、「システムエンジニア向けの人材派遣サービス」です。

ここからはその現場経験をもとに求人内容を分析した情報を掲載いたします。

C言語の仕事獲得方法

まず、C言語には2パターンの募集が存在します。

これはC言語だけではなく、全言語で共通的に言えることではあります。

けれどC言語は特にこの特色が強いです。

・未経験者歓迎(もしくは未経験者を募集)
・即戦力募集

以下でそれぞれ説明します。

未経験者の仕事獲得

未経験者の場合、熱意やコミュニケーション能力が見られます。

未経験者の仕事獲得=熱意やコミュニケーション能力

未経験者歓迎は、未経験者を育て、中長期的に戦力になることを目的とした募集です。

主にアウトソーシングを請け負っている中小企業で、どこかのグループ会社に属している会社から募集があります。

育成がメインであるため、ある程度スキルが付くまでは稼げないというデメリットもあります。

しかし、C言語の研修から実際の業務に携わる部分まで幅広くカバーしてくれます。

また、給料を貰いながらプログラミングスキルが身に付くというメリットがあります。

未経験者の仕事獲得方法は主に「熱意」や「採用側のインスピレーション」に依存してしまうというギャンブル的な側面もあります。

ですが、未経験者でも以下を心掛けると仕事が取りやすくなります(実際に若手にも面接指導をしている内容です)。

  • やったことがない:「是非挑戦させてください
  • 話になかなかついていけない:「知識の広さを実感しました。その一端を担えるようになりたいです
  • プロジェクトレベルが高い:「向上心をそそられます。ご迷惑をおかけするかもしれませんが頑張ります
  • 競合が多い:「スキルはまだ及びませんが、習得意欲は誰にも負けません」

即戦力者の仕事獲得

次に即戦力募集ですが、正直言ってかなり求められるスキルレベルは高いです。

即戦力者の仕事獲得=高いスキルレベルを求められる

「会社」対「会社」のSES契約であればある程度は「営業担当の手腕」も問われます。

しかしそれ以上に今までの

・プログラミング実績
・上流工程の経験の有無
・マネージメントスキル

などといった点が問われます。

エンジニアエンジニア

・どういったシステムのどこを担当していたか
・その機能は現在どのように使われているか
などスムーズに説明するだけの話術も必要だね

また

・上流工程の経験
・プログラマとシステムエンジニアの両方の仕事を経験

などが必須になることもあります。

また、ある程度「面接慣れ」していてそこで「自己分析力」が問われることもあります。

即戦力として仕事を得るためには「プログラミングスキル」は当然のこと、

最低でも

・基本設計、詳細設計の経験
・結合テストの経験

は必須と考えて間違いありません。

エンジニアエンジニア

もっと欲を言えば
・システム運用・保守の経験
・不具合分析(消化曲線分析)のスキル
・プロジェクトリーダーやサブリーダーの経験
などがあるとベストだね!

C言語の将来性や求人数

C言語の案件数は減ってきていますが将来性はまだまだあります。

C言語の将来性=案件数は減ってきているが、需要はある

C言語の市場は成熟しており、殆どのシステムが完成されているため新規開発案件としてはありません

「バージョンアップ案件」はもともとC言語で書かれていたシステムであればC言語として募集されます。

それと同時に最近見かける募集としてはリプレース案件です。

  • もともとC言語で書かれたプログラムをjavaやC#、VBに変換する。
  • WSH・VBScriptで書かれたプログラムをマルチプラットフォーム対応するためにC言語に変換する

などのリプレース案件は毎年一定数出てきています。

小さな規模のリプレースであれば1年や2年といった短期のプロジェクトになりますが、

銀行系政府関係の大規模案件なら10年、20年といった規模で募集している案件も存在します。

業務に必要なレベルの例

業務に必要なレベルはその案件によってまちまちですが、共通して言えるのは

・基本的なライブラリを把握していること(stdiostdintstdlib※1は目を瞑っても言えるレベル)
・ソースエディタが無くてもある程度のプログラムが不自由なく書けること
・WindowsおよびLINUXの最低限の知識(コマンドのみでOSが操作できるように)

プロジェクトにプログラマとして参画するのであれば、上記は最低限の必須スキルです。

※1
それぞれのライブラリの簡単な説明を行います。
stdio:C言語に於けるキー入力や画面出力、ファイルの読み込みや書き込みを行う機能を提供するライブラリ
stdint:整数を利用する際に、最大値の取得をしたり、数値としては容量を減らすためにわざと短くすることともあります(例えば0か1しか返さないのに、約20億入るような入れ物を用意するのは無駄です)そういった場合の最大の大きさの調整などをやってくれる機能を提供するライブラリ。
stdlib:文字を数値に変換する機能を提供するライブラリ※2
※2
ここはかなりわかりにくいところで、最も初心者が犯しやすいミスです。
文字と数字を比較しようとすると、コンパイラが不正な比較ということでエラーを出すことがあります。
文字は文字同士で比較、数字は数字同士で比較しないといけません。

それに加えて優遇されるスキルとして

  • データベース(DB)の知識
  • XML(ExtensibleMarkupLanguageの略:物事を段落というかカテゴリごとに記述できる言語です※1)の知識
  • パフォーマンス(コンピュータの処理の性能)やリファクタリング(プログラムや処理のカスタマイズ)の知識

※1XMLは文章で書いても分かりにくいので簡単な例を挙げます。

<食べ物>
  <野菜>
    <野菜名>トマト</野菜名>
    <野菜名>キュウリ</野菜名>
  </野菜>
  <肉>
    <肉名>豚肉</肉名>
    <肉名>鶏肉</肉名>
  </肉>
</食べ物>

この時、野菜要素の「最初のアイテムを取得する」というプログラムを書くとします。

するとプログラムは「食べ物」のカテゴリから、「野菜」というカテゴリを取得します。

その中の最初のアイテムを取得するので「トマト」が取得されます。

経験者であれば、実行ファイルをもっと効率化できないかと改善する姿勢が必要です。

C言語を学ぶのにおすすめの参考書や学習サイト

C言語を学ぶのにおすすめの参考書や学習サイト

最後にC言語の勉強方法について解説します。

あくまでもこれは「未経験者~初心者レベルの人が簡単なプログラムを書けるようになるまで」の知識に限定しております。

C言語を学ぶのにおすすめの参考書

初心者におすすめの参考書は『苦しんで覚えるC言語』です。

著: MMGames

出版社 秀和システム

秀和システムの書籍紹介ページ

タイトルを見ると若干身構えるかもしれませんがそんなことはなく、初心者向けの本になっています。

「苦しんで」というのは読み手ではなく「著者が苦しんで覚えた内容を苦しませずに習得させる」といった配慮がされています。

「著者が苦しむ」ということは「沢山の人が同じような苦しみを持つ可能性がある」ということです。

それを解決するためのバイブルとして持っておいても損はありません。

初心者向けではありますが、中級レベルであってもこの本は十分に役に立つ内容です。

さすがに「即戦力となる上級レベル」には物足りないレベルではあります。

しかし、どれほど上級になっても自分にとって苦手なプログラミング分野は存在します。

なので反復する目的で購入する分には損はありません。

C言語を学ぶのにおすすめの学習サイト

C言語を独学で勉強する人の殆どが利用しているサイトですが「C言語入門」というサイトがオススメです。

引用元:C言語入門

「プログラムの基礎用語」や「ライブラリの基本」、「書式」などは説明しているサイトは数多くあります。

しかし、このサイトでは字下げについても説明しています。

「字下げ」とはプログラムを読みやすくするために改行し、文頭にスペースを空けることです。

字下げについて説明しているサイトはかなり少ないです。

正直言って字下げが出来なくてもプログラムが誤作動することはありません。

しかし、字下げをしない場合は非常に読みにくいプログラムになります。

そういったところまでケアしてくれるサイトは非常に少なく、また情報量の多さも相まってこちらのサイトを推奨しております。

例として

if(a == b)
{
a=a+b;
if(a<100)
{
prinf(“xxx”);
}
}

と書かれても読みにくいですが

if(a == b)
{
    a = a + b;
    if(a < 100)
    {
      printf(“xxx”);
    }
}

と書けば「どこから何処までが1つの処理なのか」見やすくなります。

このように書くことを字下げと呼びます。

C言語のが学習が必要な理由

習得難易度は高いですが、C言語は論理的思考力を養うのにこの上ない言語です。

C言語を学ぶメリット=論理的思考力を養うのにベストな言語

C言語の学習が必要な理由は大きく分けて以下の2点です

・論理的思考力が養われ、読みやすいプログラムが書けるようになる
・現在主流のプログラムの祖先にあたり、勉強することでキャリアを広げられる

C言語は基本的に上から下に書いたように動く「最もシンプルな構成をしたプログラミング言語」です。

そのため設計を行ったりフローチャートを起こす際は設計内容をプログラムに変換しやすい言語です。

なのでプログラムの動き方や流れが非常に分かりやすい言語になっています。

C言語の学習方法

C言語は冒頭から何度も申し上げている通り、挫折ポイントが多いため、独学はあまりお勧めできません

C言語の学習仕方=独学だと挫折しやすい

「プログラミング未経験者」であればスクールに通うのがおすすめです。

講師に色々アドバイスをもらい、自宅では復習のために「参考書」や「参考サイト」を見るのがいいでしょう。

実際筆者は数多くのプログラミング言語を独学である程度は習得してきました。

そのなかで唯一、独学で習得できなかったのがC言語です。

高校生の頃に独学で挑戦しましたが、やはり途中から分からなくなり挫折を味わいました。

その後大学で3年間C言語の授業を受けて、社会人になってから半年のC言語研修を受けることで習得しています。

挫折ポイントを講師や会社の指導先輩に話したところ必ず「やっぱりあそこで挫折したか」と言われるほどです。

つまり挫折しやすいポイントはみんな同じということです。

スクールならつまづきやすいポイントで講師がサポートしてくれます

分からない部分を適宜教えてくれる人がいない場合は、独学よりはスクールに通うことをおすすめします。