みんさん、こんにちは!
2021年でWEB業界に入って7年目を向かうDonyです。
今日は自分が仕事をやりながら感じたプログラミングの考え方についてお話したいと思います。
なぜこの話をするかと言うと以外に、何年も実務をやってきたプログラマーも「既存のコードを修正」は簡単にできますが、「0から1を作る」つまり新しいものを作れない人が多かったためです。
プログラマーとして、この差は給料にも現れます。
これはプログラミングのスキルとは関係ありません!
ですが、意外とこの事実を知らない人が多いです。
この記事で書いていることはプログラミングの基礎ではありますが、「0から1を作る」考え方の基礎にもなります。
たとえ、プログラミングを学び始めたとしてもこの記事で話している内容を理解していれば、時間はかかっても一人で新しい機能を作ることができます。
まずは簡単な例を見てみましょう!
りんごジュースを作りたい!
あなたは今、喉が渇いていて水もなく、今あるものはなぜか「りんご」「ミキサー」「包丁」があります。
そこであなたはりんごでりんごジュースを作ろうとします。
あなただったらどのような流れでりんごジュースを作りますか?
さまざまな方法はあると思いますが、今回は以下の流れで進んでみましょう。
- 「りんご」を用意する
- 「用意したりんご」の皮をむく
- 「皮をむいたりんご」を包丁で切って、芯をとる
- 「切って芯をとったりんご」をミキサーにかける
- 「ミキサーにかけたりんご」をカップに入れて完成
簡単に5つの流れができました。
もしあなたがこのような流れを創造できるのであれば、問題なくプログラミングを取得できると思います。
(上記の例と同じじゃなくても大丈夫です。)
なぜそうなのかは↓で説明します。
プログラミングをするまでの流れとは
りんごジュースを作る例をプログラミングをする基本的な流れに変えてみると下のような流れになります。
- ニーズを把握する(喉が渇いた)
- 条件を搾り出す(周りにあるものがりんご、ミキサー、包丁しかない)
- 仕様を決める(りんごでジュースを作る)
- ロジックを作る(りんごジュースを作る流れを作る)
- 各動作(関数など)を作る(流れにある作業を行う)
- 納品する(完成)
いかがですか?思ったより難しくないですね?
基本的にはこのような流れで案件が発生し、プログラミングをするようになります。
例外もありますが、主にプログラマーがかかわる部分は3~6になりますね。
特に初めてプログラミングをやる方は4~6が大事です。
(仕様を決めるのは、ディレクションが可否有無を確認して作成することが多いので)
だから初めての方は、まず自分が学びたいプログラミング言語を勉強すべきですね。(当たり前ですが・・・)
その前にこれからプログラミングをする上で大切なことをお話したいと思います。
プログラミングは知識・スキルだけじゃない!
知識・スキルが足りなくても心配しないでください!
自分もそうですが、多くのプログラマーはGoogle検索で検索しながら作業しています。
そのノウハウをお話したいと思います。
効率よくGoogleでプログラミングの検索をする方法
自分が作る機能そのものを検索することはNG!
出てくる場合ももちろんありますが、担当している案件とまったく同じ仕様の機能は検索しても出てこないですね。
機能の動作を分けて検索しよう!
上の例で話したりんごジュースを作る流れと同じです。
ただそれをもっと細かく分けて検索することですね。
例えば「用意したりんごの皮をむく」機能を作るとして流れを作ります。
- りんごを取得(値を取得)
- 包丁を準備(皮をむく機能)
- 包丁で皮をむく(皮をむく機能を実行)
- 皮をむいたりんごを渡す(結果を返す)
このように一つの機能を分けて検索すると自分ができないところが見えてきて調べるべきの部分が見えてきます。
この段階でも検索できなかったら、再度各段階の流れを細かく分けてみましょう。
使う言語のリファレンスを見る
言語のリファレンスを見ることをお勧めします。
知識なくてもいいって言ったじゃん!と言うかもですが、あくまでも全てを覚える意味ではなく、こんな機能があるんだー的な感じでいいです。
例えば新しい案件を担当した時に、その言語でできることをなんとなく覚えておけば、Googleで検索する時も探しやすくなります。
だからあくまでも機能すべてを覚えるのではなく、検索する前提で覚えておけばいいです。
最後は各言語で共通する基礎知識についてお話したいと思います。
プログラミングの基礎
WEB制作の実務で必要な基礎を解説します。
各言語での仕様は別途言語基礎講座で詳しく解説しますので、大体解説のようなことだと理解してくれれば大丈夫です。
これだけ理解しておけばどんな言語も使えるようになる!
私が現場で人を教えたりする時に、一番強調していることです。
- 変数
- 配列
- 引数
- 関数
- ループ
- 条件分岐
- 正規表現
とにかくこの7つの仕組みだけ理解しておけば、どの言語に移った時でもするなれることができます。
自分の経験ではPHPを学び上記の7つを理解している状態で、Javascriptで独自のスライドショー機能を0から作ることができました。(2日かかりましたね)
コードはすごくきれいに書けてはないですが、ほぼ知識なしで多言語で一つの機能を作れるほど、その効果は絶対です。
変数
簡単に言うと学校の「出席番号」のような意味です。
例えば「山田君」という学生の出席番号が「1番」としたら、1番を呼ぶと「山田君」が答えます。
そして「山田君」が卒業していなくなり、次は「清水君」が1番となります。
1番の出席番号を「山田君」から「清水君」に上書きしましたね。
出席番号のようにあるものに対して、呼び名をつけることが「変数」といいます。
下で実際プログラミングではどのように表現するか見てみましょう。
//※PHPを基準にします。
//出席番号の1番は「山田君」
$no1 = '山田君';
実行:先生は出席番号1番の「<?php echo $no1; ?>」を呼んだ
結果:先生は出席番号1番の「山田君」を呼んだ
//「山田君」が卒業して「清水君」が1番になった
$no1 = '清水君';
実行:先生は出席番号1番の「<?php echo $no1; ?>」を呼んだ
結果:先生は出席番号1番の「清水君」を呼んだ
配列
簡単に言うと学校の「クラス」になります。
例えば「Aクラス」があるとして、学生は20人いるとしましょう。
そうしたらAクラスを呼ぶだけでその中には20人の学生がついてきます。
このように一つの名称で複数のものをまとめることが「配列」です。
そしてAクラスを呼び出したことで、その中の学生達を個別に呼び出すこともできます。
以下で例を見てみましょう。
//※PHPを基準にします。
//Aクラスには3人の学生がいる
$classA = array( 1 => '山田君', 2 => '清水君', 3 => '林君' );
実行:先生はAクラスの出席番号1番の「<?php echo $classA[ 1 ]; ?>」を呼んだ
結果:先生はAクラスの出席番号1番の「山田君」を呼んだ
実行:先生はAクラスの出席番号2番の「<?php echo $classA[ 2 ]; ?>」を呼んだ
結果:先生はAクラスの出席番号2番の「清水君」を呼んだ
関数
数学にも出てくる「関数」ですね。
私、数学嫌いなので最初はそのせいで関数のことをすごく難しく考えてました。
でも実際「数学の関数」とはまったく違います!
簡単に言うと「りんご」を「ジュース」に変えるためのやり方を決めるものだと思ってください。
一番最初に例で話したりんごジュースを作る流れがありますね?
この流れ1つ1つが関数と考えてください。
//「りんご」を用意する
$apple = 'りんご';
//作った関数を実行
$apple = peel_apple( $apple ); //「用意したりんご」の皮をむく
$apple = slice_apple( $apple ); //「皮をむいたりんご」を包丁で切って、芯をとる
$apple = mixer_apple( $apple ); //「切って芯をとったりんご」をミキサーにかける
$cup = pour_apple( $apple ); //「ミキサーにかけたりんご」をカップに入れて完成
//結果
echo $cup; //ジュースになった
//「用意したりんご」の皮をむく 関数を作成
function peel_apple( $apple ) {
//皮をむいたりんごに差し替え
$apple = '皮をむいたりんご';
//結果を返す
return $apple;
}
//「皮をむいたりんご」を包丁で切って、芯をとる 関数を作成
function slice_apple( $apple ) {
//切ったりんごに差し替え
$apple = '切ったりんご';
//芯をとったりんごに差し替え
$apple = '芯をとったりんご';
//結果を返す
return $apple;
}
//「切って芯をとったりんご」をミキサーにかける 関数を作成
function mixer_apple( $apple ) {
//ミキサーにかけたりんごに差し替え
$apple = 'ミキサーにかけたりんご';
//結果を返す
return $apple;
}
//「ミキサーにかけたりんご」をカップに入れて完成 関数を作成
function pour_apple( $apple ) {
//カップに入れる
if ( $apple === 'ミキサーにかけたりんご' ) {
$cup = 'ジュース';
//結果を返す
return $cup;
}
return 'ミキサーにかけてない!';
}
引数
引数は関数で使われる変数のことで、外部から値を引き受ける変数ですね。
引数は関数の中でしか使えないのが特徴です。
プログラミングをする時に、この関数には「りんご(値)」を引き受けて使いたいなど、関数の動作設計で使ったり使わなかったりします。
引数に関しては実際プログラミングすると自然に身につけられると思うので、今回は簡単な例だけを見て見ましょう
//「りんご」を用意する
$item = 'りんご';
//関数の引数に「$item」を入れて定義する
$apple = peel_apple( $item );
//結果 引数に「ミキサーにかけたりんご」じゃないものを入れたので、別の値表示
echo $cup; //ミキサーにかけてない!
//「ミキサーにかけたりんご」をカップに入れて完成 関数を作成
//引数は括弧の中の「$apple」
function pour_apple( $apple ) {
//引数から受け取った値が「ミキサーにかけたりんご」の場合実行
if ( $apple === 'ミキサーにかけたりんご' ) {
$cup = 'ジュース';
//結果を返す
return $cup;
}
return 'ミキサーにかけてない!';
}
ループ
ループは言葉と降り「繰り返す」意味ですね!
この繰り返す処理はいくつか種類があります。
一番基本的なループは「for文」で、配列を利用した「foreach文」もあります。
ループの注意点としては条件設定などを間違ってしまうと「無限ループ」が起きてしまい、サーバー負荷になるので気をつけましょう
(無限ループしてもサーバーが自動的に処理を止めるので、そんなに大きな問題にはならないですが・・・)
下でコード例をみてみましょう(PHP基準)
//for文を使ったループ
for( $i = 1; $i <= 3; ++$i ) {
echo 'ループを' . $i . '回しました';
}
//結果
ループを1回しました
ループを2回しました
ループを3回しました
//foreach文を使ったループ
$arr = array( '一', '二', '三' ); //配列を定義
foreach( $arr as $value ) {
echo 'ループを' . $value . '回しました';
}
//結果
ループを一回しました
ループを二回しました
ループを三回しました
条件分岐
条件分岐は簡単に言うと○×ゲームです。
ある質問に対して当たったら「○」へ
間違ったら「×」へ行きます。
もちろん進んだところでは、関数などで処理するようにします。
条件分岐は「if」「else」「elseif」の構成です。
下で簡単な例をみてみましょう!
//「りんご」をミキサにかけているかどうか確認する
$item = 'りんご';
$apple = peel_apple( $item ); //引数に変数を入れる
//結果
echo $cup; //ミキサーにかけてない!
//渡された引数で条件分岐する
function pour_apple( $apple ) {
//引数から受け取った値が「ミキサーにかけたりんご」の場合実行
if ( $apple === 'ミキサーにかけたりんご' ) {
$cup = 'ジュース';
//結果を返す
return $cup;
} else {
//条件に一致しない場合実行
return 'ミキサーにかけてない!';
}
}
正規表現
これを基礎に入れていいか迷いましたが、全言語に共通するものなので入れてみました。
正規表現というものは簡単に言うと「細かい検索」に近いですね。
しかも検索したものを引っ張って使ったりもできます。
正直に言うと私もまだまだ使いこなせてないので、正規表現を使うときは頭痛くなりますね・・・
今回は簡単な例を見てみましょう!
//テキストの中から「りんご」があるかどうか確認する
$text = '昨日の夜、りんごを食べた';
if ( preg_match( '/りんご/', $text ) ) {
echo 'りんごあった!';
} else {
echo 'ない!';
}
//結果
りんごあった!
これで全言語で共通するものをまとめました。(もっとあるかもしれないですが)
言語によっては書き方や定義方法などが違ったりしますが、概念だけしっかり理解しておけば、いきなり新しい言語で作業することになった!というような時にもあせらず作業することができます。
次で最後になりますが、私がこの基礎と同じくらいに重要と思うことをお話したいと思います。
あとがき
色々書いてみたら、結構長い記事になってしまいましたね。
WEB業界で6年間いて考え続けたことでしたが、言葉にすると案外難しかったです!表現力が足りなくてごめんなさい。
私が最初勉強したのはHTML・CSSでした。プログラミングじゃないですね。
その後Wordpressの案件をやることから徐々にPHPやJavascriptを勉強してMysqlでデータベースも作業するようになりました。
最初にプログラミングをやりたい方はPHPをおすすめします!
DB系の知識も得るし、コードなどが他の言語と比べて分かりやすく組みやすいからですね。
何か質問したい方はコメントしてください!