突然ですが、あなたはプログラミングは「得意」ですか?
この記事を読もうとしているということは、おそらくそうじゃないでしょう。
なんとなく「プログラミングは苦手」「とっつきにくい」「自分になんて向いていない」と思っていませんか?
何をかくそう、筆者もその一人でした。最終学歴も文系で数学も苦手だし社会人になるまでプログラミング未経験でしたがエンジニアの仕事を(なんとか)やっています。
この記事ではプログラミングに苦手意識がある人でも克服できる、簡単にできるコツをご紹介します。
意外なポイントですし、意外に簡単にできてしまうことなので、ぜひご覧ください・・・!
目次
思い込みがプログラミングを苦手にさせる
そもそも、なぜプログラミングを苦手と思ってしまうのでしょうか。
それは「文系だから」「女性だから」「適性が低いから」といった思い込みが原因であることが多いのです。
文系出身でも、女性でも、活躍しているエンジニアはたくさんいますし、適性が低いかそうでないかはプログラミングを始めたばかりの段階では判断できない場合が多いです。
エンジニアに求められるスキルはコードを書くことだけではないからです。
クライアントや同僚とやり取りするコミュケーション能力やスキルをアップデートし続ける向上心だって必要なので、そういった能力(意識)が欠けている、発揮できないとわかって初めて「適性がない」といえるのではないでしょうか。
まずは簡単なものでいいので、手を動かすことから始めましょう。
そして手を動かす前にやってほしいことがあります。それが苦手意識をなくす大事なポイントになります。
プログラミングの苦手意識をなくす方法ステップ1:文章で考える
いきなりエディタを開いてコードを書こうとしてはいけません。いきなりやろうとするから「プログラミングって難しい」と思ってしまうのです。
まずはメモ帳でも開いて「文章で」考えましょう。
まず文章で考えるメリット
これはズバリ「質の高いプログラミングをつくる」ためです。苦手意識もなくなって質の高いプログラミングができるなんて最高ですね??
”質の高い”プログラミングについてもう少し詳しく説明すると「読みやすく」「抜け漏れがない」という条件で、それを「早く」出す、ということになります。
そのためにまず文章で考えるということが大切なのです。
仕様書(どんな条件でどういう動きをするかを決める説明書みたいなもの)が不正確で、
「あとから機能を追加することになった」「思っていたのと違った」となって想定よりはるかに時間がかかってしまうプロジェクトは結構あります。コードを書く前に言葉できっちり説明できるようにするのは、それだけ大事なのです。
実際に文章に落とし込んでみよう
ここでのゴールは、簡単な言葉でも箇条書きでもいいので、「目的を整理する」「論理的に説明できる」ことです。
atomやvimなどのエディタでなく、テキストエディタを開きましょう。メモ帳でいいです。紙のメモ帳やノートよりデジタルの方がいいです。
理由は「順番を変えられるから」です。処理をいろいろ書いているうちに順番を変えたくなることがあるとき、デジタルは便利なのです・・・!
例題にチャレンジしてみよう
例えば以下のような問題があったとしましょう。
図書館のルールでは江東区民は10冊まで、それ以外の区民は5冊まで借りることができます。
本を借りたい人が本を持ってきた場合に、貸出可能な冊数を表示してください。
ちなみに実際の江東区の図書館では20冊も借りられるそうです!なにげにすごいですよね。
それはさておき、問題の例だと以下のようになります。
パターン | どこの区民か | 持ってきた本の冊数 | 貸出可能な冊数 |
---|---|---|---|
その① | 江東区民 | 9 | 9 |
その② | 港区民 | 100 | 5 |
その③ | 江東区民 | 20 | 10 |
以降の説明を簡潔に進めるために、上記の表と同じ値を持った変数を最初に用意しました。これをもとにプログラムを作成していきましょう。
パターン | どこの区民か | 持ってきた本の冊数 |
---|---|---|
その① | $person01 = koutou; | $book01 = 9; |
その② | $person02 = minato; | $book02 = 100; |
その③ | $person03 = koutou; | $book03 = 20; |
1-1ざっくりやることを分解してみる
まずはやることを分解しましょう。まずはそれだけです!
・その人が江東区民の場合、10冊以上持ってきたら10を、それ以下の場合は借りたい冊数を表示する
・その人が江東区民じゃない場合、5冊以上持ってきたら5を、それ以下の場合は借りたい冊数を表示する
※借りてきた人の属性を取得するのは本来必要な処理ですが、今回はすでに値が与えられている前提で進めるため除外しております。
もっと難しい説明になっても、まずは句読点ごとにわけてみることを意識するとやりやすいです。
句読点は見た目の区切りでもありますが、意味の区切りでもあることが多いからです。
ちなみに、知り合いが「句読点をちゃんと使えないやつとは仕事をしない方がいい」と言っていたのでこちらも併せて覚えておくといいでしょう。(なお、弊社はきちんと句読点を使っていますよ…!)
1-2やることをさらに分解してみる
次に、それぞれのステップをもう少し細かくしていきます。
この段階で「プログラミングで書けるかどうか」は意識しないで、素直にやることを細かくわける気持ちでいきましょう~
これ以上わけられないよ!というものはプログラムに落とし込んだらどんな処理になるか?を具体的に考えてみるとなお良しです。
「②その人が江東区民の場合、10冊以上持ってきたら10を、それ以下の場合は借りたい冊数を表示する」について細かく分解していきましょう。江東区民じゃない場合も同じようなロジックになるのでここでは割愛します。
・変数の文字列が’koutou’と一致しているか判定することで属性を判断する
・一致していたら冊数が10冊以上か判定する
・10冊以上持ってきたら10を、それ以下の場合は持ってきた冊数を表示する
これくらい細かくステップを書き出すと、何をやるべきかが明確になりますね。ここでステップ1は終わりです。
プログラミングの苦手意識をなくす方法ステップ2:メソッドに置き換える
ステップ2はいよいよプログラミングの出番です。ステップ1で書き出した”やること”をメソッド(処理)に落とし込んでいきます。以下ではPHPを例にしますが、適宜読み替えてください。
2-1変数とメソッドに落とし込む
「②その人が江東区民の場合、10冊以上持ってきたら10を、それ以下の場合は借りたい冊数を表示する」から始めていきます。その①の人を判定してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //例その①の人の属性 $person01 = 'koutou'; $book01 = 9; //変数の文字列が'koutou'と一致しているか判定することで属性を判断する if($person01 == 'koutou'){ //一致していたら冊数が10冊以上か判定する if($book01 <= 10){ //10冊以下の場合は持ってきた冊数を表示する echo 'あなたの貸出可能冊数は'.$book01.'冊です。'; }else{ //10冊以上持ってきたら10冊までしか借りられないことを表示する echo 'ごめんなさい、10冊までしか貸出できません。'; } } |
借りれない場合はひとこと言っておくようにしました。ひとことって、人間関係に思った以上に影響ありますよね!
…さて、江東区民じゃない場合も書いていきましょう。例その②の人を判定してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //その②の人を判定してみる if($person02 == 'koutou'){ //一致していたら冊数が10冊以上か判定する if($book02 <= 10){ //10冊以下の場合は持ってきた冊数を表示する echo 'あなたの貸出可能冊数は'.$book02.'冊です。'; }else{ //10冊以上持ってきたら10冊までしか借りられないことを表示する echo 'ごめんなさい、10冊までしか貸出できません。'; } }else{ if($book02 <= 5){ //5冊以下の場合は持ってきた冊数を表示する echo 'あなたの貸出可能冊数は'.$book02.'冊です。'; }else{ //5冊以上持ってきたら5冊までしか借りられないことを表示する echo 'は?5冊までしか貸出できないのだが??'; } } |
最後の3番目の人だとこうなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //その③の人を判定してみる if($person03 == 'koutou'){ //一致していたら冊数が10冊以上か判定する if($book03 <= 10){ //10冊以下の場合は持ってきた冊数を表示する echo 'あなたの貸出可能冊数は'.$book03.'冊です。'; }else{ //10冊以上持ってきたら10冊までしか借りられないことを表示する echo 'ごめんなさい、10冊までしか貸出できません。'; } }else{ if($book03 <= 5){ //5冊以下の場合は持ってきた冊数を表示する echo 'あなたの貸出可能冊数は'.$book03.'冊です。'; }else{ //5冊以上持ってきたら5冊までしか借りられないことを表示する echo 'は?5冊までしか貸出できないのだが??'; } } |
言い方って大事ですよね…。改めて考えさせられました。
さてさて、これでひとまず完成ですがここから応用編といきましょう。
2-2(余裕があれば)ソースをブラッシュアップする
上記のコードでも動くのですが、長ったらしいし、同じような処理が何回か出てきますよね。
できる限りソースをまとめてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //その①の人を判定してみる $person01 = 'koutou'; $book01 = 20; //同じことを何回も言いたくないから関数にしちゃいます function comment_ok ($book) { return 'あなたの貸出可能冊数は'.$book.'冊です。'; } //条件分岐は冊数からはじめる if($book01 <= 5){ echo comment_ok($book1); }elseif($person01 == 'koutou'){ if( $book01 <= 10){ echo comment_ok($book1); }else{ echo 'ごめんなさい、10冊までしか貸出できません。'; } }else{ echo 'は?5冊までしか貸出できないのだが??'; } |
こんな感じで複数回出てくる変数や処理をまとめるとすっきり見やすいソースになります。
が、いきなりそこを目指そうとするとハードルが高くなりがちなので、
慣れないうちは多少記述が重複していても、処理に漏れがないソースを意識して書くことを心がけて、それから不要な箇所がないか、まとめられるところはないか精査しましょう。
なお修正箇所は以下の通り。
if文で条件分岐していますが、この条件を見直しています。
なんと「江東区民かどうか」を先に判定するよりも「借りたい本の冊数が5冊以内か」を判定したほうがスッキリしたコードになるのです!
また、「あなたの貸し出し可能冊数はX冊です。」という文言が2回ほど出てくるので、これをまとめました。
おまけ:実務レベルに近づけてみた
先ほどは簡単な例を出しましたが、これをより実践で使うようなプログラムに変えていきましょう。
実際の図書館は決まった人数が来るなんてことはありませんよね。
いろいろな人がいろいろな本をいろいろなタイミングで持ってくるので、ひとつひとつ変数に書く…なんてこともありえないのです。
そこで、先ほどのプログラムを実践的なものに変えてみました。見やすくて機能的で修正しやすいソースを書くにはいろいろ勉強しないといけませんが、それはまた別の機会に…!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | //本を借りる人たち $people = array( array( 'ku' => 'koutou', 'book' => 9 ), array( 'ku' => 'minato', 'book' => 100 ), array( 'ku' => 'koutou', 'book' => 20 ) ); //貸出条件 $home = 'koutou'; //江東区こそ世界の中心 $limit_inner = 10; //江東区 $limit_outer = 5; //江東区以外 //職員の返事 function comment_ok ($book) { //OKの場合 return 'あなたの貸出可能冊数は'.$book.'冊です。'; } function comment_ng ($limit) { //NGの場合 return 'ごめんなさい、'.$limit.'冊までしか貸出できません。'; } function comment_out ($limit) { //めっちゃNGの場合 return 'は?'.$limit.'冊までしか貸出できないのだが??'; } //貸出処理 foreach($people as $person){ $address = $person['ku']; $book = $person['book']; if($book <= $limit_outer){ //冊数が5冊以上かどうか echo comment_ok($book); }elseif($address == $home){ //江東区民かどうか if( $book <= $limit_inner){ echo comment_ok($book); }else{ //上限を超えている場合(江東区) echo comment_ng($limit_inner); } }else{ //上限を超えている場合(江東区じゃない) echo comment_out($limit_outer); } echo "<br>"; } |
それでもプログラミングで詰まったときはどうする?
思った通りにいかない、なぜかエラーが出て進まない。そんなうまくいかないときだってありますよね。
ここでは漠然とした「うまくいかない」を具体的なものに落とし込んでいく作業が必要になります。
うまくいかない箇所を特定する
プログラミングで詰まったとき、一番良くない状態が「わからないところがわかっていない」ときです。
解決するためにググろうとしても、どう検索すればいいかわからないですし、人に聞くとしても要領を得ないのでお互いの時間を無駄にしてしまいます。
それを防ぐためにはどうすればいいのでしょうか。
先ほどの例で、少しコードを変えたものを用意しました。この人は品川区の人で、5冊借りたいようですが…?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $person04 = 'shinagawa'; $book04 = 5; if($book04 < 5){ echo $comment_ok; }elseif($person04 == 'koutou'){ if( $book04 <= 10){ echo 'あなたの貸出可能冊数は'.$book04.'冊です。'; }else{ echo 'ごめんなさい、10冊までしか貸出できません。'; } }else{ //5冊以上持ってきたら5冊までしか借りられないことを表示する echo 'は?5冊までしか貸出できないのだが??'; } |
この状態で実行すると・・・
出力結果 は?5冊までしか貸出できないのだが??
「は?持ってきたの5冊だが??」って感じですよね。なぜこうなってしまったのか。これから検証していきましょう!
変数をかたっぱしから出力してみよう
うまくいかない箇所を特定するのに一番手っ取り早い方法が、
かたっぱしから変数を出力することです。
「かたっぱし」って盛った表現をしたところで恐縮ですが、出力するタイミングは大体2通りです。
条件分岐の直後
例:if( 条件式 ){ ★ココ!★ }
変数を定義した直後
例:$current_date = date(“Y/m/d H:i:s”); ★ココ!★
ただ変数を出すだけだとわかりにくいので、以下のように変数名:値のように出力するとわかりやすくておすすめです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | echo '住所:'.$person04; echo '冊数:'.$book04; if($book04 < 5){ echo $comment_ok; }elseif($person04 == 'koutou'){ if( $book04 <= 10){ echo 'あなたの貸出可能冊数は'.$book04.'冊です。'; }else{ echo 'ごめんなさい、10冊までしか貸出できません。'; } }else{ echo 'は?5冊までしか貸出できないのだが??'; } |
住所:shinagawa
冊数:5
は?5冊までしか貸出できないのだが??
となります。江東区民じゃないしちゃんと5冊ですね…。一番最後の文が出力されているので、最初の「$book04 < 5」に入っていないのが問題です。
「どこ」を「どうする」かを文章にしてみよう
そう、「<」(=5冊は含まない)になっているのでうまくいかなかったわけですね!というわけで「<=」(=5冊を含む)に修正すると、無事に解決します。 このように、何行目(=どこ)の処理をどう修正する(=どうする)かをきちんと説明できるレベルまで落とし込むようにするのが理想です。
【まとめ】プログラミングを苦手にならないために
プログラミングの苦手意識をなくすためには、「可視化して」「分解する」ことが有効です。
言葉にすることでわからない点を可視化し、それを理解可能なレベルになるまでひたすら細分化するのがミソです。プログラミングに限った話でなく何か大きなタスクがあったときに分解して考えるのと同じですね!
また、言葉にするのが難しい場合、今度は絵や図で表せないか考えるのも、プログラミングと仲良くなる大事なポイントです。
いつでも書き殴れるように紙とペンを手元に用意しておきましょう!
最後にとある哲学者の名言で締めくくりたいと思います。プログラミングで詰まったときに思い出してみてください!
余談ですがデカルトは数学者としても功績を残しており、座標の概念を発明したのも彼だということです。
最後までお読みいただきありがとうございました!