まったく書けないプログラミング コツは日本語で整理と写経を基に発想する


一生モノのスキルを身に着けたい、将来性のある仕事をしたいと思いプログラミングの学習を始めたばかりの方、以下のような悩みはありませんか。

・勉強を継続しているけどまったくコードが思い浮かばない
・エラーで詰まってしまい時間だけ過ぎてゆく

想像以上にプログラミングは上手くいかないですよね。
IT企業で、開発業務の経験をした筆者も同じつまづきを経験しています。
当記事では、初学者によくある挫折と挫折を乗り越えるためのプログラミングの考え方や書き方、エラーとの向き合い方を解説します。

自身で考えてプログラミングできるようになれば就職で大いに役立つはずです。
あくまで筆者の考える一例とはなりますが、参考にご一読くださいね。

プログラミング初学者の陥りやすい挫折

初学者にありがちなのは、自身でプログラムを組むことができないことではないでしょうか。ITやプログラミング独自の概念・用語を抑えた、教材に沿ってソースコードを記述したにも関わらずです。

考えた挙句、「こういう意図で書けば動くかも。」と、過去に学んだ内容をソースコードへ落とし込んだりしたことはありませんか。しかし根拠もなく感覚で書くと構文が違う、予期しない動作などのエラーメッセージにより先へ進めなくなるかと思います。

文章と違いコンピュータは、ニュアンスだけでは汲み取ってくれないので一向に進捗せず、筆者も心折れた経験がたくさんあります。

問題は分かった気になっていること 

ではどうすればプログラムが頭の中に浮かんでくるようになるでしょうか。プログラムが1行も思い浮かばない場合、復習が大事です。
教材やカリキュラムの最初から振り返ってみましょう。

サンプルコードの掲載をされていると思いますが、1行ずつサンプルコードは何をしているのか読み解いてみます。同時にコメントとして読み解いた内容を残しておくと良いです。読み解けるということは、どのような処理なのかを理解することにつながります。

そして写経を行うというのもポイントになります。写経とはサンプルコードを書き写すことです。
写経を開始した当初は、なぞっているだけで前に進んでいる感覚がせず、つらいでしょう。ですが同じ章を3回ほど繰り返しているとソースコードのパターンをつかめるようになると思います。ECサイトなどであれば『エラーチェックを行いエラーが無ければDB接続をする、SQLを発行し値を繰り返し文で取得する。』等といった流れが見えてきます。ひな形を感じるように成長していくのです。

このフェーズまで来ると、まったく書けないという状況からは脱していると思います。

自力でプログラムできる脳みその作り方

サンプルコードの写経および読み解きで、ざっくりとしたプログラムの流れは把握できるかと思います。
しかしそれだけでは不十分です。なぜなら、目的の動作を自力でプログラミングできないからです。

はっきり言うと自力でプログラミングをできなければ、就職をしても開発業務で大いに苦しむことになります。「こういった機能が欲しいんだけど。」と言われたときに、自力でプログラミングをできる脳みそを作ることがとても重要なのですね。

一例として「じゃんけんゲームを作成して欲しい。」という依頼があったとしましょう。

自力でプログラムを組めるようになるコツは、まず日本語で目的の動作を書き起こします。

日本語で目的の動きを記す


じゃんけんゲームは

・プレイヤーが、グーもしくはチョキ、パーを決定し『勝負』というボタンを押下

・『勝負』ボタン押下と同時にコンピュータの手(グーorチョキorパー)決定

・コンピュータの手は毎回、同じものだとゲームにならないためランダムにする

・プレイヤーの手とコンピュータの手を比較

・プレイヤーの手コンピュータの手ともに一緒ならあいこと判定

・プレイヤーはグーでコンピュータの手はチョキなら勝ちと判定

・プレイヤーの手がチョキとパーの勝利パターンも必須のため、チョキとパーの勝利パターンも書き起こし

・最後にプレイヤーの負けパターンを作る


以上のように日本語で起こすと、何をするのか明確になりプログラムの発想方法も絞れるようになるのです。

いよいよ実際のプログラムを書いていく


日本語に起こした後は、実際のプログラムを記述していきます。ここではHTML と PHP を用いて説明します。

じゃんけんゲーム開始です。

<!-- html

     プレイヤーの手となるグー、チョキ、パーを準備 

     グーチョキパーは、値と考えることができるので
     <input type="radio" name="select_hand" value="グー">というようにHTMLは記述する 
     valueは値-->

<form method="POST">
  <input type="radio" name="select_hand" value="グー">グー
  <input type="radio" name="select_hand" value="チョキ">チョキ
  <input type="radio" name="select_hand" value="パー">パー
  <button type="submit">勝負!</button>
</form>

<!-- 勝負ボタンを押下したらHTMLのフロント側からPHPのサーバー側へ値は渡る-->

次にサーバー側の PHP の記述です。

<?php

// 勝負!ボタンで送られてきたプレイヤーの値(グーorチョキorパー)を受け取る

if (isset($_POST['select_hand']) === TRUE) { $select_hand = $_POST['select_hand'];

そして、コンピュータの手を作ります。

<?php

/* コンピュータの手グー、チョキ、パーをユーザーは選択する必要がない
そのため、コンピュータの手はまとめて格納する 配列にする*/

$pc_hands = ['グー', 'チョキ', 'パー'];

/* じゃんけんゲームを成立させる要素、ランダムにする */

$rondom = mt_rand(0,2);
$pc_hands = $$pc_hands[$rondom];

/* $rondom = mt_rand(0,2);
   $pc_hands = $$pc_hands[$rondom];
   この記述で毎回グー、チョキ、パーは規則性なく表示される 
   0はグー、1チョキ、2パーと紐づいていて勝負ボタンを押下するたびに
   0~2のどれかが$pc_handsになるイメージ */

後はプレイヤーの手とコンピュータの手を比較するだけになります。

<?php

/*  プレイヤーの手はグー、コンピュータの手はチョキであれば勝ち
    プレイヤーの手はチョキ、コンピュータの手はパーであれば勝ち
    プレイヤーの手はパー、コンピュータの手はグーであれば勝ち*/

  if ($select_hand === $pc_hands) {
    $result = 'あいこ';
  } elseif (
    ($select_hand === 'グー' && $pc_hands === 'チョキ') ||
    ($select_hand === 'チョキ' && $pc_hands === 'パー') ||
    ($select_hand === 'パー' && $pc_hands === 'グー')
  ) {
    $result = '勝ち';
  } else {
    $result = '負け';
  }
 echo "結果:{$result}";

完成形のコードは以下です。

<?php

$result = '';
$selecthand = '';
if (isset($_POST['select_hand']) === TRUE) { $select_hand = $_POST['select_hand'];

$pc_hands = ['グー', 'チョキ', 'パー'];

$rondom = mt_rand(0,2);
$pc_hands = $pc_hands[$rondom];

  if ($select_hand === $pc_hands) {
    $result = 'あいこ';
  } elseif (
    ($select_hand === 'グー' && $pc_hands === 'チョキ') ||
    ($select_hand=== 'チョキ' && $pc_hands === 'パー') ||
    ($select_hand === 'パー' && $pc_hands === 'グー')
  ) {
    $result = '勝ち';
  } else {
    $result = '負け';
  }
 echo "結果:{$result}";

?>

<!DOCTYPE HTML>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>じゃんけんゲーム</title>
    </head>
    <body>
        <form method="POST">
         <input type="radio" name="select_hand" value="グー">グー
         <input type="radio" name="select_hand" value="チョキ">チョキ
         <input type="radio" name="select_hand" value="パー">パー
         <button type="submit">勝負!</button>
        </form>
    </body>
</html>

いかがでしょうか。解説では、するすると HTML と PHP のソース例を示しました。しかし実際にお手本もなく、自分で書こうとすると、どう書いていいか分からないときも多いと思います。

そういった時はまず写経で記したイメージで記述してみましょう。うまくいかなければこうしたら値が取れるのでは?という自由な発想で色々ソースコードを書いて試すことが必要です。色々試したとしても先に進めない状況も生まれます。

どうしても無理であればOpenAIを使用し細部は整えるのもよいでしょう。トレーニングと一緒で継続することにより、徐々にプログラムを書けるようになります。

エラーとの向き合い方

最後に、エラーとの向き合い方をお話します。前提としてエラーメッセージはよく読むことが大切です。プログラミング言語によって違いはありますが、最上行もしくは最下行にエラー解決の手がかりとなる内容が載っています。問題になっている行と処理の頭1文字目を記してあります。

問題になっている行と処理、もしくは周辺を探訪しても糸口が見つからない際はスタックトレースをやってみることをお勧めします。スタックトレースとは処理の足跡を出力しているものです。エラーメッセージに付随して表示されます。プログラムフローのどこで実行が停止し、この地点までどのように実行が到達したのかを教えてくれるのです。

二分探索というエラー原因を追う手法も存在します。処理の中で正常に実行されていそうなブロックと、エラーになり得そうな怪しいブロックに分ける方法です。片方のブロックをコメントアウトしてもう一方のブロックをデバッグ実行し、効率的にバグ(エラー原因)追及をします。

『コードが動かないので帰れません!新人プログラマーのためのエラーが怖くなくなる本』という書籍にエラーの追い方の詳細が書かれています。意外とネット記事や参考書においても、エラー解決のエッセンスを記したコンテンツは見つかりずらいです。

ノウハウを頭に入れるだけでも安心材料になります。開発現場に入場するまでには読破しておきたい内容になるでしょう。

参考書籍は以下↓

書籍名 コードが動かないので帰れません!新人プログラマーのためのエラーが怖くなくなる本
出版社 翔泳社
料金 2,200円(税込)
著者 桜庭 洋之 望月 幸太郎
Amazon Rakutenブックス等で購入可能
Amazon
Rakutenブックス

最後に


プログラムを自力で組めるようになるためには、日本語で目的の動きを整理します。そして、何度も自分の頭で「ソースコードはこう書いたらいいのでは?」と発想します。そして発想をプログラムに落とし込みエラーを経験することです。コードを作って壊しての試行錯誤により少しづつスキルとして蓄積していくのです。最初の一歩目は小さくてOK、継続が何よりの近道でしょう。

コメント