このブログについて

Icatch画像

ニジナツは引退したシステムエンジニアなのですが、「究極の言語はC言語だったな~」という思いからC言語ブログを作ってみることにしました。
このブログではC言語が独学できることを目指しています。
そして独学の障害になりそうな点や、経験上の説明も会わせて紹介したいと思っています。
ニジナツについてはプロフィールをご覧ください。

まずはプログラマーになりたい方へのメッセージと、独学や学習する言語についてのニジナツの考えを紹介します。

プログラミングとは

日本語の羅列をコンピュータに教えるということですね。
このサイトを見ている方には、釈迦に説法でしょうが。
赤子であるコンピュータに大人のあなたがレシピを解読し、ミルクとポテトの混ぜ方を教えるだけです。

プログラマーとは

この業界を大雑把に分類すると、Web、アプリケーション、汎用、ゲーム、組込み系、通信系、AIなどがありますね。
そして分野ごとに使用する言語や、必要とされるバックグラウンドの知識が異なります。
その中でも、極論するとアプリケーション、汎用などは文系の方やバックグラウンドの知識が無くても活躍できる場はたくさんあります。
そこから侵入し、少しずつ知識の範囲を広げて行き、Webやその他の分野に進出するのが楽だと思います。

分野が異なると主として使われる言語なども変わってきますし、複数の言語を使う必要も出てきます。
これには、まず1つの言語をしっかりマスターして、そこから次のステップに進むことをお勧めします。

またシステムエンジニア(SE)志望の方も、プログラムが理解できていないと良質な設計書はできないと思っています。
本当に良いプログラムには言語の特性を考えたロジックが必要ですし、何よりもプログラマーに理解できる書き方をする必要があります。
そのためには、自らきちんとコーディングできる能力がないと問題のポイントが分かりません。
ダメダメSEの設計書はプログラマーが誤って解釈したり、使用するアルゴリズムを書いていないために相応しくないアルゴリズムを使用したりして、間違った動作だったり、速度が遅かったりしてプログラムが出戻りするのです。
結果として、プロジェクトは火だるまになり帰宅できないなんてことも。
SEは自分の意図することを手抜きすることなく設計書に書き、プログラマーはその意図をくみ取って、コーディング内に正しく反映させる必要があります。
ときには設計者の意図を超えて(これぞ優秀なプログラマー)。

独学について

できる人とできない人がいます。

とにかく書いてあることは読み飛ばさず、1つずつプログラムを組んで実行していきます。
読んで理解することと体験することには、経験値からくる力の差があります。
そしてエラーが出たら、内容をじっくり考えます。
完成したら少し自分の好きなように改造して動作させ、理解を深めます。
この意欲が大きな差になっていきますよ。

独学で一番難しいのは相談相手がいないことです。
コンパイルエラーや実行エラーのときに、メッセージを見て理解できるのか。
エラーの場所を見つけるられるかがカギです。
そこで自力で本を読んだり、ネットなどを検索して解決できるかがキモです。
対面で習っていると、的確なアドバイスがもらえてすぐに解決できるからです。

毎日学んで1か月程すると、自分で独学が向いているかどうか分かると思います。
どうしても難しそうだったら、学校に行く、費用や時間面を考えてオンラインスクールという選択肢もあります。
この辺りも後々まとめてみたいと思っております。
まずは独学してみましょう。

言語学習にはどのくらいの時間が必要か

個人差が大きいと思いますが、C言語の場合には私は400時間位だと思います。

会社でC言語の新入社員研修をしたときの経験をお話しします。
対象は主に4年生の大学の新卒の方(理系、文系どちらも)です。
現在とは違い、コンピュータを触ったことのない方が9割だったでしょう。
毎日7時間の講義と演習で2か月学習します。端末の使い方も含めて。
その後各人に先輩のアドバイザーが1人付いて、実務の仕事をします(OJT)。
このOJTを1年したら独り立ちです。

学習時間ですが、研修時間は300時間位でしょう。
もちろん、各人が自宅でどうしてかは知る由もありませんが、想像すると300~400時間なのではないでしょうか。
独習だと少し多めに考えた方が良いかもしれません。

どの言語を学ぶのか

ぜひ最初にチャレンジしていただきたいのはC言語です。
プロを目指す人こそ最初に学ぶべき言語です。
その理由をあげてみます。
※あくまでも私の個人的な経験から思う意見であり、反対の意見を唱える方も多くいます。

C言語のメリット

メリットをいくつかあげてみます。

現在主流の多くの言語はC言語の派生です

現在主流の多くの言語は、C言語から派生してオブジェクト指向を取り入れた言語が多いです。
そのため、多くの言語はC言語と基本文法が似ています。このことから、C言語をマスターすると他の言語も理解が早いのです。
これが最大のメリットであり、最初にC言語をお勧めする理由です。
余談ですが、JavaやRuby、Python、PHPなどのプログラミング言語の動作環境自体もC言語で書かれています。

高速です

C言語はネイティブの機械語にコンパイルして動作させるため、最適化されたアセンブラ言語に次いで高速に動作させることができます。

機械制御ができます

一般的なプログラムのみならず、アセンブラのような機械語寄りの処理もできます。
例えば、

  • プリンターなどの制御(ドライバーの作成など)
  • モーターなどの制御(パルス信号の作成など)
  • 組み込みソフトの作成
  • OS自体の作成

などにも使用されています。
アセンブラ言語を使わなくても、同様の処理をほとんどC言語でできるのです。
その理由は開発の自由度が非常に高く、メモリー領域の管理や、ポインター演算、ビット演算、シフト演算などの機能を用いてハードウェアに密着した処理を柔軟に行うことができるからです。

C言語のデメリット

デメリットは、C言語はオブジェクト指向ではありません。
またセキュリティ面やプログラム暴走という点での防止策は言語仕様に存在しないため、プログラマーの責任です。逆に言うと、とてもシンプルです。

C言語は学習範囲が明確

C言語学習は、次の理由で学習範囲が明確なため学習しやすいと私は考えています。

C言語はオブジェクト指向言語ではないため、オブジェクト指向多言語に比較して関数(命令のこと)が少ないです。
例えばオブジェクト指向言語では、ファイルの読み書き1つをとっても、C言語では単純な1つの関数なのに、クラスライブラリーのクラスを探して、その中の関数(メソッド)を調べて使用する必要があるのです。

他の言語を見てみましょう。

言語クラスの有無
Pythonあり
JavaScriptあり
Rubyあり
Javaあり
Swiftあり
Goなし
C++あり
C#あり
PHPあり

どうでしょう。ほとんどクラスがありますよね。
最初からオブジェクト指向言語を覚えると、覚える関数(クラスを含む)が多く注意散漫状態になり、本来の言語の持つテイストに集中できません。調べることと覚えることが多すぎるのです。


本来であれば必要なクラスだけその時調べて使用し、それ以外は今覚える必要はないのですが、初心者の方だと何をどこまで覚えたらよいのか、見通しが効かないと思うのです。

C言語はシンプル(命令が少ない)なので、学習範囲が明確です。

C言語は学習コストが高いのか

C言語は学習コストが高いと言う人が多いです。
特に難しさの根源にポインターがあげられるようですが、コンピュータの基本的な動作を学ぶには早道だと私は思うのです。

この辺りは、C言語でなければアセンブラ言語でしか学べないと思います。
アセンブラ言語で学ぶのはもっと大変です。
私が大学の情報工学科で初めて学んだ言語がアセンブラでしたが、プログラムの右も左も分からない初心者であるため、8割以上の学生は赤点となり教授の餌食となったのでした。

しかしこれを学ぶと、デバイスの制御や通信もできますし、メモリースワップ処理などもできて、プログラムの組み方に幅ができます。
もっとも、これを使用しなくてもほとんどのプログラムは記述できます。しかし、ポインター操作は機能と理屈は単純なのに、覚えると見返りが多いのです。
ただ使いこなすのには慣れが必要ですが、はじめは軽~く、ぼちぼち使っていけばどうにかなります。

他の言語

私の経験ですが、C言語をを覚えた後他の言語が必要になった時に、例えばC++、VC++、C#、java、javascriptなどは方言を覚えるような感触で理解できます。ただしオブジェクト指向を理解しておく必要がありますが。ただ、VB系はちょっと違う感じがしますが、まあ変わった方言という感じです。
何か1つの言語をしっかり理解すると、多言語への対応はとても速いと思います。

まとめ

現在主流の多くの言語はC言語の派生です。
プロとしてやっていくなら、C言語を最初に身に着けたほうが近道だと思うのです。
C言語はシンプル(命令が少ない)なので、学習範囲が明確です。
ポインターは理屈は簡単なので、どうにかなります。
ニジナツの独断ですが、いかがでしょうか。

つづきを読む

タイトルとURLをコピーしました