【コラム】新社会人、新入生の方へ…誰も言わないプログラミングの真実

プログラミングって何だろね?

このページは、春から本格的にプログラミングをする方を対象に書きました。

研修や授業で少しプログラミングに触れたけど、頭が激しく混乱した人なら特にオススメです(私もそうでしたので)。

合縁奇縁一期一会、袖すり合うも他生の縁。
あなたがこのページを見ているのも何かの宿命です。ラオウとケンシロウです。

だからあなたの人生のうち、5分だけお付き合いいただけると嬉しいです。

なお、手っ取り早く知りたい方は「つまり、こういうこと」まで飛ばしても構いません。

プログラミングの全体像とは

ここでは、プログラミングを始めて間もない方向けに

プログラミングの全体像

をシンプルに解説したいと思います。

またプログラミングの

大事なもの、どうでもいいもの

も、バッサリ語ります。

 

さて始める前に一つ、予言させていただきます。

ある程度プログラミングに慣れてから、時々このページを訪れると、100%再発見があります。

私が多くの学生を教えて来た経験から、これは間違いなく断言できます。

その理由はページの最後でお話します。

※なお分かりやすさを優先するため、厳密さは少しカットしています
※逆に言うと、それに気付いたならプログラミングが上達した証拠です

プログラミングを構成するモノ

いきなり結論を言いますと、プログラミングは主に3つの要素(パーツ)から成り立っています。

どんなプログラムを組む時でも、必ずそうです。
言い換えると、この3つがプログラミングの本体です。

その3つとは…

  • 命令 ← 一部大事
  • 文法 ← どうでもいい
  • アルゴリズム ← 超大事

です。

その1、命令

読んで字のごとく、コンピュータを動かす命令たちです。
大きく2種類あります。

標準命令(どうでもいい)

それぞれのプログラミング言語には、色々な命令が用意されています。

例えば画面に文字を出す場合
C言語なら printf Javaなら System.out.println Pythonなら print
を使いますね。

また他にも、足し算をする + (プラス)や、引き算をする (マイナス)などもあります。

プログラミング言語の作者さんが

「こんなのあると便利じゃね?」

と思って、最初から用意してくれたわけです。

これらを標準命令と言います。

初心者が最初に面食らうのは「標準命令の多さ」かもしれません。
私はそうでした。

こんなの覚えきれないよー

とビビるかもしれませんが、実のところ暗記する必要は全くありません。

これ、どうでもいい部類のパーツです。

なぜか?
 → 全部覚えるなんて不可能だからです。よほどの天才でもない限り。

だから忘れてもOK。
本で調べたり、ググったり、前に書いたプログラムからコピペすれば良いです。

特に色んな言語を使ってると、頭の中がゴチャゴチャになるのでどんどん忘れます。

頻繁に使うものは勝手に覚えて行きますが、まずは「そういやこんなのあったかなー」程度の認識で構いません。

かくいう私もプログラミングを偉そうに教えていますが、何も見ず黒板に書くとしょっちゅう間違えます(さすがに超基本だとorzになりますね…)。

ちなみに上達してくると

「命令の名前は忘れたけど、詳しい特徴は覚えてる」

みたいな謎状態も味わえます。

オリジナル命令(だいじ)

さて標準命令より大事なのは、こっちです。

どんなプログラミング言語でも
前述の標準命令を組み合わせて、あなたオリジナルの命令を作れます。

このオリジナル命令、言語によって呼び方が違っていて

関数・メソッド・プロシージャ・サブルーチン

などと呼ばれます。

で、超絶に大事なのは良いオリジナル命令を作るスキル」です。

良いオリジナル命令の条件とは、主に以下の2つです。

▼名前を見ただけで、機能が分かる
初心者から見ると、C言語の printf はイマイチかもしれませんね。
print という単語だと、今の時代印刷用紙しか思い浮かばないです(テレタイプェ…)
あと f ってなんだよ。F○CKの略かと(答:format)。

▼一箇所だけでなく、あちこちで使い回せる
つまり標準命令と同じように使えると
これが上手くキマれば「俺って天才じゃね?」という謎の全能感に浸れます。
その為には引数の使い方を工夫しましょう

だから早い段階から

良いオリジナル命令を作る

まず、これを大事にしてください。

じゃあ、どうやって作るか?

それは本サイトで紹介している書籍が役立ちます(おおステマいステマい)。
当サイトの「プログラミングテクニック」コーナーでは色々紹介しています。

読みやすいオススメはコレ。始めて間もない人にも分かりやすいです。


リーダブルコード
より良いコードを書くためのシンプルで実践的なテクニック

私のレビューはこちら

その2、文法(どうでもいい)

代表的なものは、分岐と繰り返しです。

分岐は、if文 switch文 など。

繰り返しは、for文 while文 など。

書き方は違えど、どんな言語にもある文法です。

しかし、この文法(書き方)自体は大事ではありません。
どうでもいいです。
(カッコの閉じ忘れに気を付けるくらい)

なぜなら、結局書き方はいつも同じパターンになるからです。

だから意味だけ知ったら、前に書いたやつをコピペして修正すればOKです。

私の場合、ifforなど頻繁に使う文法は、骨組み(↓こんなの)だけ登録しておいてワンキーで貼り付けてます。

if(  ){

}

こんな風に「あらかじめ書いておいた文」を貼り付ける機能をスニペットと言います。
VisualStudioには標準で付いてますし、実現するソフトもたくさんあります。

で、まとめると…

細かい文法はどうでもいい(いつも同じパターン)
書かずに済ませるのが一番ラクだ

ってことです。

その3、アルゴリズム(超だいじ)

 アルゴリズムって?

上で述べた1と2を組み合わせる手順、これをアルゴリズムと言います。

具体的には、「分岐・繰り返し」を使って…

 「命令」を呼ぶ順番を決める
 「命令」呼んだり呼ばなかったりする

こういったルールをつなぎ合わせるのです。

これでやりたい事が実現すれば、アルゴリズムは完成です。

だから全てのプログラムはアルゴリズムです(やりたい事があるので)。

ちなみに↓も立派なアルゴリズムです。

printf(“URYYYYYY”);

やりたい事: 画面に文字を出す
呼ぶ順番: printfを最初に呼ぶ
分岐: 100%呼ぶ(分岐なし)
繰り返し: 1回だけで終了

上は単純な例ですが、すべてはここから始まります。そして超重要です。

このアルゴリズムを考える能力こそが、プログラマの最重要スキルだと私は言いたい!

初級者と中級者を、中級者と上級者を分けるのは、このアルゴリズム能力です。

絶対普遍のパワー

アルゴリズムは、どんなプログラミング言語でも使い回せます。
(文法は変わっても、手順は同一です)

だからこのスキルがあれば、時代が移り変わっても困りません。

私が今までに見た達人プログラマーの方々は、例外なくアルゴリズムを組む力に長けていました。

だから命令を覚えるよりもアルゴリズム能力は何百倍も重要です。

先人のアルゴリズムに学ぶ

では

どうすればアルゴリズム能力がアップするか?

ですが、私の意見は

色んなアルゴリズムに慣れ親しむ!

これをオススメします。

世の中には先人が生み出した色々なアルゴリズムがあります。

一から組んでみるのも良いですが、既にあるアルゴリズムを解析するのも大変勉強になります。

解析といっても大げさなものではありません。

私の場合、書籍のサンプルプログラムいじくり回して動きを確かめただけです。

不気味な文字列が画面を埋め尽くしたり(フフフフとか)、ジャンプボタンを押したらキャラじゃなくメッセージ文字が跳ねたり、3Dキャラが北斗神拳を食らったように弾けたりもしましたが、今となっては良い思い出です。

また、アルゴリズムを扱った良書を読むのも大変有効です。

当サイトの「アルゴリズム」や「数学」コーナーが参考になります。
その中でも、まずオススメはコレ↓。文系でも読める分かりやすさが光る一冊です。


プログラマの数学

私のレビューはこちら

紙に書こう

あと、アルゴリズムで忘れちゃいけないのが

紙に書いて考える!

これも重要です。

プログラミングする時は、必ず筆記用具を用意しましょう。
私は今でも紙に色々書きなぐってます。

私のノート。ぐぬぬ・・・
私のノート。ぐぬぬ・・・

その4?データ構造

プログラミングは3つの要素と言ったな。

あれはウソだ。

あ、初心者の方は、ここ飛ばして下さい。 飛ばす
ある程度プログラミングに慣れてから読むのをオススメします。ムダに長いし。

さてウソと言いましたが、ウソじゃないです。
これで4つ目ですが、個人的には「3、アルゴリズム」に含まれると思っているので、ウソじゃないです。

そんな茶番はさておき、最後は「データ構造」についてです。

標準データ型(きほん)

さてこのデータ構造とは、要するにデータ型です。
データ型とは、intfloatなど変数で使うやつです。

int(整数) long(でかい整数) float(小数) double(でかい小数) string(文字列)

などなど言語によって種類は違いますが、色々な「データ型」があります。

プログラミング言語の作者さんが

「こんなのあると便利じゃね?」

と思って、最初から用意してくれたわけです。

これらを標準データ型と言います。

オリジナルのデータ型(だいじ)

大事なのは、ここからです。

どんなプログラミング言語でも
標準データ型を組み合わせて、あなたオリジナルのデータ型を作れます。
(ん?この流れ上の方で見たような…)

このオリジナルのデータ型、言語によって呼び方が違っていて

構造体・クラス・ユーザー定義型

などと呼ばれます。

例えばゲームをプログラミングしていて、下のように書いていたとします。

int HP; //プレイヤーのヒットポイント
int MP; //プレイヤーのマジックポイント

別にこれでもプログラムは動くし、遊ぶ方は知ったこっちゃないのですが

プログラマーにとって「関係あるものは一つにまとめる方が読みやすいケースもあります。

具体的には、さっきの int HP int MP を一つにまとめてプレイヤー型を作るのです(つまりオリジナルのデータ型)。

↓こんなイメージです(架空のプログラミング言語で)

Player {
  int HP;
  int MP;
}

これであなたのパソコンには int float といった標準データ型だけでなく
Player というオリジナルのデータ型が爆誕しました。パチパチパンチ。

そして後は、標準データ型と同じように、変数を宣言できます。
この仕組み「すっごーい」って思いませんか?

//プレイヤーの変数を宣言 名前はヒーロー(適当)
Player hero;
 

hero.HP = 1000; //豊富な体力
hero.MP = 5; //脳筋なので魔法はニガテ

こんな超絶に短い例でも、少し直感的になりましたよね。

アルゴリズムの救世主

この オリジナルのデータ型 とても重要です。

なぜなら

良いデータ型は、アルゴリズムを作りやすい

からです。

まあ別に標準データ型だけでもアルゴリズムは作れます。

しかしオリジナルのデータ型があると、人間が考えやすくなるのです。
(考えやすくなる=ミスをしにくい)

もし高性能な未来ロボットがプログラミングしたら、標準データ型だけで済ませるかもしれません。
ただ人間には見にくいソースになるでしょう(メンテするのは地獄だな…)。

困った時の突破口

アルゴリズムがテーマの書籍は、ほぼ確実にデータ構造も扱ってます。

なぜなら上で言ったように、切っても切れない関係だからです。

だから、もしアルゴリズムを組むのに詰まったら

データ構造(オリジナルのデータ型)を見直す

という方法も検討してみて下さい。

実際データ構造の威力は凄まじいです。
少し工夫するだけで、ソースが一気にシンプルになったりします。

オリジナルのデータ型 を駆使して、アルゴリズムを作りやすくする。

この視点を持っていると、相当にプログラミングが楽しくなります(断言)。

つまり、こういうこと

というわけで、プログラミングの要素を1~3(4)まで紹介しました。
まとめると下の通りです。

大事なこと、どうでもいいことをよく見極めて欲しいです。

1、命令

▼標準命令 どうでもいい
忘れたら調べればOK。
よく使うやつは自然に覚える。

▼オリジナル命令 大事
作る時は以下の2点に注意しよう
 ・名前が分かりやすい → 見やすいね
 ・あちこちで使い回せる → 便利だね

2、文法(分岐・繰り返し) どうでもいい

書き方(文法)はお決まりのパターン
コピペまたはスニペットを使えば良し

3、アルゴリズム 超大事

プログラマーの最重要スキル
色んなアルゴリズムに触れよう

一から組むのが面倒?
そんな時は、完成品をカスタマイズして解析しよう
ノートに書いて考えると良いよ

4?データ構造 大事

オリジナルのデータ型は便利
なぜなら、アルゴリズムを作りやすくなる

別名 アルゴリズムの救世主

この姿勢を忘れないで

心掛けて欲しいこと

さて4つ(3つ)の要素を踏まえ「心掛けて欲しいこと」があります。

それは

いま自分は、4つの内どの領域で活動しているか?

自覚する事です。

テンパって、いったい何をしてるか分からなくなる…

そんな状況は結構あります。とういか、私も未だにやります。

あなたは…

使う命令を間違えたのか? 
あるいは、アルゴリズムを間違えたのか?

こんな風に自分の立ち位置を整理すると、解決へのトリガーが見付けやすくなります。

さらに慣れると「直感で」対処するポイントが分かったりします。

プログラミングの全体像へ

プログラミングには、まだまだ書き切れない沢山の機能があります。

しかしどんな機能でも、必ずこの4つのどこかに含まれます。

だから新しいトピックを学ぶ時は

これは、4つのどこに属するだろうか?

に思いを巡らせば、プログラミングをもっともっと広い視野で見渡せます。

そしてプログラミングの全体像が、ぼんやりでもハッキリ見えて来ます。

このページの最初で

ある程度プログラミングに慣れてから、時々このページを訪れると、100%再発見があります。

と書いた理由はコレです。

なんか堂々としたステマ

このページを最後まで読んでいただき、ありがとうございました。

いかがでしたでしょうか?

おそらくピンと来ない所もあったと思います。
でも前述したように、少しプログラミングに慣れてから再び読んでみて下さい。
きっと今までにない気付きが生まれ、新しいものが見えて来ます。

さて、ゴホン。
そんな勉強熱心なあなたにオススメしたい電子書籍があります。

はじめての達人プログラマー入門
~創りたいものを創る方法~

え、ええ、これは私の著作(PDF)です…おおステマいステマい。

この中には、読めばすぐに使える

プログラミング能力が大幅アップする30の秘訣

が収録されています。

すぐに廃れる些末なハウツーではなく、もっと人間の活動としてプログラミングを眺めよう
そんな思いを込めて書いた一冊です。

ウリはすぐに誰でも実践できる事です。

自分で言うのもなんですが、内容には自信があります。
ぜひご検討下さい。損はさせません。

では、あなたのプログラミングライフが充実する事を心よりお祈りしています。


Kuniaki Ebata 登録者

大学中退(文系)の専門卒 日本で唯一のプログラミング書籍評論家 プログラマーで現役のスキー国体選手です 頭と体を動かすのが大好きなフレンズなんだね 専門学校で先生もやってます プログラミングは21歳から 貴族じゃない独身 持病:重度うつ病(薬とサポートのおかげで何とか生きてます) 教え子をゲーム業界へどんどん送り込み、世界を面白くする野望を実現中 プログラミングが上達するメルマガやってます ここを見たゲーム業界の卒業生へ 新作が出たら、連絡するか現物を送ってくれると嬉しいです ただし18禁・CERO-Dの場合は、厳重に梱包の上、品名をパソコン部品にて送る事(だいじ) このページが参考になった方へ ぜひSNSやブログでシェアして欲しいです お願いします(少し上にボタンあります) 最近Google先生が中身の無い「いかがでしたか?」サイトを優遇するので困っています助けて下さい(>_<) シェアしてくださった方には 小冊子 プログラミング書籍が10倍わかる読み方(pdf) を差し上げます こちらからご報告頂くか、こっそりDMを送って下さい