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

プログラマの登竜門と言われる言語にC言語というものがあります。

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

Javaなど現在多くの言語がオブジェクト指向です。

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

プログラムをただ上から書くだけではなく、部品化したり、再利用可能にしてプログラミングをするという技法です。

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

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

またC言語を足掛けに

  • C++、
  • DELPHI
  • PHP
  • Python

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

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

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

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

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

C言語とは一言でいうと手続き型言語です。

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

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

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

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

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

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年に世界規格の書き方に則るようになり、それ以降はC言語の書き方は変わっていません。

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

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

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

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

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

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

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

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

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

C言語の難易度

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

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

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

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

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

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

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

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

実際に研修やスクールで講師にハンズオンで教えてもらい、自分で何度も反復練習しないと理解することはできません。

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

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

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

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

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

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

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

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

専門性 技術的 難しい

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

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

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

レベルを上げると、プロトタイプ宣言、分割コンパイル、コマンドライン引数など習得レベルに応じた壁がかなり多くあります。

取り掛かりやすい=簡単

というわけではありません。

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

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

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

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

プログラミングの知識だけに留まらずパソコンの知識、ネットワークの知識までかなり幅広い知識が必要になります。

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

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

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

バグ

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

C言語の特徴=バグが究明しにくい

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

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

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

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

なのでバグの出所がプログラムなのかそれとも本当にOSがエラーを出しているのかわかりにくいです。

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

例えば以下の例
「parse error before character 0241」
int a;
上記のプログラムを打った時に該当するエラーが発生します。
しかし
int a;

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

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

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

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

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

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

設計

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

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

C言語は手続き型言語なので、各手続で何をしたいか、その手続きを行うためには何が必要かを順番に列挙します。

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

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

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

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

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

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

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

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

プロジェクトによっては、設計だけで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言語には素数を求めるライブラリは存在しないため、独自のプログラムを作る必要があります。

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

目からうろこのプログラムが
https://tsg.ne.jp/TT/tsg/c/mansaku/P01.html

に記載されていますので、ご興味があれば是非ご覧ください。

約数

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

約数=割り切れる数

約数としては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言語で書かれているものは結構多いです。

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.NetJ#すべての環境で共通したライブラリを参照できます

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

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言語

初心者が読むべき参考書=『苦しんで覚えるC言語』

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

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

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

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

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

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

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

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

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

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言語の学習仕方=独学ではなくschoolがおすすめ

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

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

実際筆者は数多くのプログラミング言語を独学である程度は習得してきましたが、唯一独学で習得できなかったのがC言語です。

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

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

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

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

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

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

プログラミングジャパンのLine公式アカウントにご招待

プログラミングジャパンのLine公式アカウント