記法 / 変数 / 関数 / 構文
の4つです。どれも基本ですが、
後日お話する通り、プログラミング力に直結するのは関数です。
***
こんにちは。
遠心力大好き、ブレイクダンサー黒田道哉です。
中3のときからストリートダンスにハマりました。
今でもやってます。
ダンス初心者の頃はやっぱり、たくさん動画を見てました。
でも、目の前のダンサーが何のジャンルを踊ってるのかサッパリわからないんです。笑
HIPHOPを踊ってるのか、
Lockin’を踊ってるのか、
Poppin’を踊ってるのか、
JAZZを踊ってるのか、
全然わからない!
(ダンサーの方、絶対共感してくださいますよね?笑)
自分の大好きなブレイクダンスは、くるくる回るんでスグ分かるんですけど。w
それ以外は全部一緒に見えるんですよ。
何が言いたいかって、
なんでも、学び始めって何もかもが、何がなんだかわからないですよねってことです。
慣れてきたらわかってくるんですけど、最初はとにかくわかんない。
バイトとかでもそうじゃなかったですか?
でも、
逆に言うと、
先に「分類」が頭に入っていれば、混乱することなく学んでいけますよね。
プログラミング言語の学習においても、
「分類」があれば勉強のハードルが下がるはずです。
分類することによってはじめて、
力の抜きどころと、比重を置くべき所が見極められますね。
今日はその「分類」をご紹介します。
こんなこと言ってる人は、現時点ではweb上にはいないんで、
「日本初公開」ってことにしときましょう。笑
プログラミングで学ぶことは結局この4種類しかない
その分類とは、
と、
おまけで、
です。
重要度的には、
記法・変数・構文は、ド基本です。知らないとコードがかけないレベルの話です。
残る関数は、プログラミング力に直結します。しかも、使えないと嫌われます。
アルゴリズムは…最初はいらないです。笑
じゃあそれぞれ詳しく見ていきましょう!
変数=データを運ぶ車
プログラミングとは変数のやり取り、といっても過言ではありません。
変数ってのは、よく言われるのは「データを入れるハコ」ですね。(今日のジョークの伏線)
もしくは、車と例えても良いかもしれません。
車にたとえると、他のもののたとえもうまくいくので車でいきますね。
プログラムちゃんは、変数(車)でデータを運びます。
なので、データよりも先に、車を用意する必要があります。
何もないところから車を生み出し、その車に名前をつけることを、「変数の宣言」と言います。
ただし、変数の名前として使ってはいけない文字列があったりするので、
言語ごとに、命名規則に注意して勉強しましょう。
そして、
そのつくった車に、最初からデータを乗せて準備しておくことを「変数に初期値をセットする」といいます。
これをし忘れると、バグを引き起こすこともあるので、注意です。
プログラムちゃんが、
「あ〜、値入ってないや〜ん。何かテキトーにいれちゃおーっと!」
と、テキトーな値を入れてくれちゃったりするからです。
こっちは値が入ってないと思ってるもんだから、そのへんで認識がズレてバグったりします。
なので、
誰も乗せないなら、「誰も乗せない」とはっきり記述します。
これが変数の重要なポイントです。
記法=道路標識
小学校の頃、作文書かされましたよね、体験学習とか行くたびに。
作文には、
名前はその次の行に、下から1マス開けるように書きます。
「。」は1マスつかいます。でも最後のマスから1マスはみ出るときはマスに収めます。
みたいなルールがありました。
それがプログラミングの世界にもあります。
大体どの言語も似たようなもんですが、
細かい点は言語によって違います。
コメント(プログラムとしては読み込まない、人間向けのメモ。別の回で詳しくやります)は
「#」マークを使いますor「//」マークを使いますとか。
そういうのは逐一覚えるしかありません。
でも、大体の言語で共通して使えるものもあります。
等しい(か否か)が「==」とか。
なので、一つの言語がかけるようになると、
他の言語もスグにかけるようになります。ノリで。w
これはまさに道路標識と同じです。
運転免許を持っていて、海外旅行に行かれた方はわかるかと思いますが、
現地の交通法規を詳しく勉強しなくても、標識見たら何に注意しなくてはいけないか、わかりますよね?
言葉がわからなくても、日本の標識と色やマークが違っても、わかりますよね?
プログラミング言語の表記法も、そんな感じなんです。
私が「一成れば、一切成る」といい続けてるのはこういう理由です。
これも免許と同じで、最初の言語は大変かもしれませんが、
後が楽なので、頑張って覚えてくださいね!
構文=車が通る道づくり
車があっても、それを走らせる道がなければ、意味がありませんね。
その道づくりに当たるのが、構文です。
車にどう走ってほしいのかを、記述するために必要です。
データ処理の流れを作ります。
「こういう条件のもとでは、右に曲がって、そうでなければ、左に曲がる」とか
「待ち合わせ場所に彼女が来るまで、ぐるぐる走っとく」というような記述をするのが構文です。
プログラムで言うと、
「データが数値ならこう言う計算を、文字列ならこういう操作を」とか
「データに足す1することでカウントアップし続けて、50になったらストップする」とかを記述することができます。
if文、forループ、whileループ、switch文あたりは、大体どの言語も実装してあるんじゃないでしょうか。
それだけ使う・それだけ本質的である、ってことですね。
上記の、
if文、switch文などの●●文は、条件分岐を表現する構文で、
forループ、whileループなどの●●ループは、繰り返しを表現する構文です。
前者の条件分岐構文は、「データが数値ならこう言う計算を、文字列ならこういう操作を」を表現し、
後者の繰り返し構文は、「データに足す1することでカウントアップし続けて、50になったらストップする」を表現できます。
関数=アクセル・ハンドル・ブレーキの操作
グッバイ!義務教育!
関数の説明に入る前にまず、
あなたの考えを今から、180°ひっくり返します。
義務教育で押し付けられたことを、ひっくり返します。
実は、プログラミングは手抜き礼賛文化です。
コピペ文化です。
子供の頃に怒られたことをやると、褒められる世界です。笑
でも、みんなこのことに気付いてないみたいです。
この感覚がないまま勉強しても、全部無駄です。
だからみんな挫折していくんでしょうね。
見事に真逆なので仕方ないかもしれません。
どのくらい真逆かといえば、
- 「カンニングしてはいけません!」
→「すでに世にある答えを、いちいち自分で出すな!」
- 「コピペしてはいけません!」
→「何、ベタ打ちしてんねん!ミスがあったらどうするんや!コピペせい!」
- 「横着してはいけません!」
→「なに同じこと何回も真面目に繰り返しとんねん!」
となるくらい、真逆です。笑
(なんか、日本でプログラミングに挫折する人が多い理由、分かりませんか?笑)
特に「横着する」「怠ける」はプログラムの世界では褒め言葉です。
その最たるものが、関数の利用です。
※関数とは何?という詳しい説明は次回します。
今回は、関数の重要性だけご理解いただければバッチリです。
関数は、よくわからなくても使えるスゴいやつ
あなたは車を運転するときに、内部構造まで意識するでしょうか?
- クラッチの仕組み
- ブレーキの仕組み
- ハンドリングの仕組み
とかを意識して操作されてますでしょうか?
iPhoneを使うときに、
- 電源ボタンを押すとなぜ画面がつくのか?
- 上下ひっくり返すと画面もひっくり返ってくれる仕組み
- Bluetoothの仕組み
とかを意識して操作されてますでしょうか?
理解した上で使われてますでしょうか?
そんなわけないですよね?(理解されてたらスゴいですけど!笑)
よくわからないけど、使えますよね?
「とりあえず、これをこないしたら、こうなんねや!」
とわかってますよね。
実は、プログラミングの関数も同じなんです。
中身をあんまりよくわからなくても使えます。
もちろん、わからないよりは、わかったほうが良いです。
バグの対応もしやすくなります。
でも、それはプログラミングに慣れてからで十分です。
プログラミング力は関数の知識量に比例する
プログラミング力は、関数の知識量に比例します。
なので、
関数を使えるようになること。
関数の仕組みを理解すること。
関数を作れるようになること。
これら(下に行くほど難しい)を目標に勉強されると、良いプログラマになれます。
…という理由で、
記法・変数・構文・関数の4点を意識して勉強するのがよく、最も重要なのは関数だとお伝えしています。
アルゴリズム=都市設計論
そして、
「エンジニアとして、トップレベルの実力をつけていきたい!」
のであれば、アルゴリズムの勉強も必須です。
アルゴリズムというのは「仕組み」です。
なのでアルゴリズムを学ぶっていうのは、仕組みを学ぶってことなんです。
アルゴリズムを学ぶというのは、車の例で言うと「都市開発”論“を学ぶ」とかそういう感じですかね。
道そのものではなく、道全体が作る「都市」をどう作るか。
システムのデザインというんでしょうか。
その考え方を学びます。
たとえば、データを背の順に並び替えることを
「データをソートする」と言ったりします。
ソートのしかたには、先人たちが知恵を絞り、創り上げてきた”論“があります。
- クイックソート
- バブルソート
- 挿入ソート
などといった、ソート論があるのです。
そういったものを学ぶのが、アルゴリズムの勉強です。
(全然聞いたことないでしょう?ここまで語れるプログラマーインフルエンサーってあんまいないと思います)
ただ…。
Pythonのように、ライブラリ(≒先人がつくった関数のセット)がたくさんある言語であれば、
細かいこと抜きにして、誰でも使えるようになっている関数があるので、
そのまま使えば良いです。
だから、無理してアルゴリズムを勉強する必要はありません。
でももし、低級言語を扱っていくのであったり、
先人の「頭の使い方」を学んで、実際のプログラミング上の問題を解決していきたい、というような場合は、
アルゴリズムの勉強もされるのが良いと思います。
ちなみに私の場合は、大学の学部生時代に
SOFTBANK BOOKSから出ている
という本で学びました。
アルゴリズムは、本格的に情報系の世界に進むのであれば、学ぶべきものって位置づけです。
何度も申し上げますが、無理して勉強する必要はありません。
動くものを作るのであれば、ここまで勉強する必要はありません。
動くだけじゃなくて、ハイクオリティなものを!という場合に勉強します。
目標の高い方向けです。
いや、目標が高い方であっても、
初めからいきなりこれを学ぶのはあんまりおすすめしません。
ゆくゆくは、って感じです。
この講座を読んでくださってるのはもちろん初心者の方だと思いますんで、
今のところは、
アルゴリズムは後回しでオッケー!
という風に勉強されるのが良いと思います。
次回予告
関数とは何か?を次回お伝えするとお約束していました。
理由1:車とは別のたとえを使いたかったから
→こんがらがっちゃうと困りますので。
理由2:Python Shellちゃんに出てきてもらうから
→長くなっちゃうので分けました!
お楽しみに!

おまけ1:今日のエンジニアジョーク
「ここにプログラマーは居るか」
ABC「いません。」
「この棚の書類を全部ダンボールに入れといてくれ」
A「わかりました」
B「いつまでにやったらいいですか」
C「ダンボールの名前何にします?」— しおりさん (@Siori1988) October 10, 2017
おまけ2:お前誰やねんシリーズ
(つづき)
あなたも、
私と同じように、プログラミングスキルがあるだけで、生活が変わると思いますよ。
仮にプログラミングスキルを直接活かさなかったとしても。
伝家の宝刀みたいな感じで。笑
「生活ヤバくなったらプログラミングで食いつなぐか。」みたいな笑
「IT革命」という地球規模の革命の真っ最中なんですから、
あなた1人の人生を変えることだってできます。
コレ言うと、めっちゃ胡散臭くなるんで嫌なんですけど、
あなたにも、夢を叶えてほしいんです。私は。
私みたいに、
「スキルが有れば大丈夫」「幸せすぎて死ぬかも?」と思ってもらうサポートをしたいんです。
正直、私は、ダンサーの仕事をし続ける選択はしませんでした。
(「鍋に顔突っ込ませる」まで行きませんが、そんな感じの、尊敬できない人だらけだったからです。)
ダンスもやめて、
それからは正直言って、ぼーっと生きてました。
「なんで次の夢がないんやろう?」って思ってたんですよね。
でも、ある時、シャワー浴びながら思いました。
次の夢が出てこないのは、「この経験をシェアしろってことかな?」って。
「いったん自分の夢を叶えて、死ぬほどの幸せを味わったんやから、次は他の人が夢を叶えるサポートしろってことかな?」って。
だから、これを読んでくださってるあなたのサポートをしてるんです。
・・・。
もしかして、アツすぎてひいてたりしますか?笑
ごめんなさい。笑
つい最近友だちになった香港人にも、出逢って3日で
「You’re sentimental.」
って言われたほど感情的な人間です。
でも、本心なんですよね!
だから、
この講座は、
あなたの「プログラミングの先」のサポートの為の講座でもあるんです。
頑張りましょうね!
次の講座へ
