プログラミング

熟練者ほど実践するプログラミングが上達する3つの法則

PHP
熟練者ほど実践するプログラミングが上達する3つの法則

 

「なかなかプログラミングが上達しない・・・」

「やったことはあるけど覚えられない」

 

プログラミングを習得しても、勉強と一緒で使っていなければ忘れてしまいます。また、どんどん上達する人や、長い間プログラミングの技術で生計を立てているような熟練者は、日頃からの取り組み方自体が違っているのです。

今回は、現在プログラミング学習で躓いている人や、なかなか上達せず苦戦している人に向けて「熟練者ほど実践するプログラミングが上達する3つの法則」をご紹介します。

 

 

マニュアルを読む

 

プログラミングに取り組む際、Google検索で情報が手軽に手に入れられるため、なかなかマニュアルを見るという機会は減っています。機能を実装するだけであればそれで構いませんが、よりプログラミングへの理解を深めるのであれば、マニュアルにしっかり目を通すようにしましょう。

 

ここで公式のマニュアルにこだわる必要はありません。中には公式よりもわかりやすくまとめているようなサイトは存在するため、自分が読みやすいと感じ、詳しい説明が載っていると判断できればそちらを参考にしても構いません。

 

 

構文を理解する

 

マニュアルを読んでまず理解すべきことは、構文(書き方)です。サンプルコードで済ませてしまっている人や、解決できてしまっている人の多くが構文の理解が浅くなってしまいがちです。

 

例えばPHPを例に見てみましょう。

※以下のオンラインエディターを使用しています

<?php

$test = 'テスト' + 'だよ';

var_dump($test);

 

「テストだよ」と表示されることを期待しているように見えますが、出力結果は以下の通りです。

# 出力結果
PHP Warning:  A non-numeric value encountered in /workspace/Main.php on line 2
PHP Warning:  A non-numeric value encountered in /workspace/Main.php on line 2

 

残念ながらエラーが返ってきました。JavaScriptの場合はプラス記号で文字列の結合ができますが、PHPではドットが用いられます

<?php
$test = 'テスト'.'だよ';
var_dump($test);

 

出力結果は以下の通りです。

# 出力結果
string(15) "テストだよ"

 

配列の最終要素にコンマの有り無し、ダブルクォーテーションやシングルクォーテーションの使い分けなど、基本的な構文を理解して置かなければ、些細なミスであっても解決できずに断念してしまうことになります。そうならないためにも、取り組む言語にはどのようなルールがあるかは理解しておきましょう。

 

 

返り値を知る

 

次にマニュアルから学ぶことは、引数や返り値など関数の理解です。

例えば、phpの配列並び替え関数のasort()について動きを見てみましょう。

<?php
$animals = [
    'cat',
    'alligator',
    'dog',
    'bear',
];
$animals = asort($animals);
var_export($animals);

 

$animalsという配列に4匹の動物が入っています。並び順をa-zにしたいので、asortという関数にかけました。並び替えされた配列が出力されること期待したのですが、結果は以下の通りです。

# 出力結果
true

 

期待に反してtrueという結果が返ってきました。これはasortの返り値を理解していないことが原因です。

公式マニュアルを確認してみましょう。

 

asortの返り値は整列した配列ではなく、成功したかどうかの判定結果が返ってくるようですね。

 

それでは、返り値を理解した上でコードを修正しましょう。

<?php
$animals = [
    'cat',
    'alligator',
    'dog',
    'bear',
];

asort($animals);
var_export($animals);

 

asort時に再度$animalsの変数に代入していましたが、それを無くしました。出力結果は以下の通りです。

# 出力結果
array (
  1 => 'alligator',
  3 => 'bear',
  0 => 'cat',
  2 => 'dog',
)

 

期待通りの結果が返ってきました。短いプログラムであればすぐに原因が見つかりますが、長くなってしまえば見つけるのだけで膨大な時間を費やすことになってしまいます。そうならないためにも、返り値としてどんな値を返してくれているのかは重要なのです。

 

他にも、関数周りであれば引数がどのように指定できるか初期値がどのように設定されているかを知っておくことが大事です。ライブラリを使用する場合は、その関数やオブジェクトにどういったメソッドやコールバック関数が使えるのかなど知ることで、開発が行き詰まってしまうようなことを防ぐことができます。

 

 

エラーメッセージを読む

 

エラーが返ってくればドキッとしますね。それがなかなか解消されないとなればうんざりしてしまいますし、現在運用しているシステムからエラーが返ってくれば冷や汗が止まらないなんてこともあるでしょう。しかし、エラーメッセージを出すプログラム側としては、間違いを知らせてくれているので、むしろ我々の開発を手助けしてくれています。

だからこそ、よりプログラミングへの理解を深めるためにはエラーメッセージを読み、何を伝えようとしてくれているのか解読すべきなのです。

 

 

検索する

 

手っ取り早い手段の一つが、出力されたエラーメッセージをコピーしてGoogleの検索ボックスに貼り付けて検索することです。よく起こり得るエラーであれば、同じような質問をしているQ&Aが表示されたり、その解決方法が書かれたサイトへたどり着くことができます。

エラーメッセージが長文の場合は、最初の行から順番に検索してチェックしてみましょう。言語にもよりますが、PHPの場合は比較的一番上の行に問題部分が表記されているため、よく起こり得るエラーの場合は解決策に早い段階でたどり着くことができます。

 

 

翻訳する

 

日本人の場合、どうしても英語で出力されるエラーメッセージに抵抗があるものです。検索しても解決できないのであれば、翻訳して読み解いてみるというのも1つの方法です。エラーメッセージになれてくれば、検索せずともメッセージの意味を読み解くことができるようになります。

 

以下のエラーメッセージを例に見てみましょう。

PHP Parse error:  syntax error, unexpected '=', expecting ']' in /workspace/Main.php on line 4

# 日本語翻訳
PHP解析エラー:構文エラー、予期しない '='、4行目の/workspace/Main.phpに ']'が必要です

 

完璧な翻訳はできなくとも、日本語にすれば大分読みやすくなったのではないでしょうか。1つずつバラして見てみましょう。

  • PHPの解析エラー
    PHP Parse error
  • 構文エラー
    syntax error
  • 予期しない’=’
    (unexpected ‘=’
  • 4行目の/workspadce/Main.php’]’が必要です
    expecting’ ]’ in /workspace/Main.php on line 4

 

まずはPHPの解析エラーということが宣言されています。次に、構文エラーと出ているので、記述したコードの書き方自体が間違っているということになります。

次の「予期しない’=’」は、想定外の部分に=が使われているということを伝えています。その該当箇所がMain.phpの4行目だそうです。

 

では、その問題Main.phpに書かれたコードを見てみましょう。

<?php
$animals = [
    'cat' => 'ネコ',
    'alligator' = 'ワニ',
    'dog' => 'イヌ',
    'bear' => 'クマ',
];

var_export($animals);

 

問題の4行目には「’alligator’ = ‘ワニ’,」と記述されています。これは連想配列なので、=ではなく=>にしなくてはなりませんね。配列内の記述がおかしいため、「’]’で閉じる場所が間違っていませんか?」ということを知らせてくれたようです。

 

それでは問題の4行目の間違いを修正しましょう。

<?php
$animals = [
    'cat' => 'ネコ',
    'alligator' => 'ワニ',
    'dog' => 'イヌ',
    'bear' => 'クマ',
];

var_export($animals);
# 出力結果
array (
  'cat' => 'ネコ',
  'alligator' => 'ワニ',
  'dog' => 'イヌ',
  'bear' => 'クマ',
)

 

正常に出力されましたね。

このように、エラーメッセージがどうしても解読できなければ翻訳してみましょう。意味さえわかれば、エラーメッセージはその原因箇所を詳しく説明してくれているというのがわかります。何度もエラーメッセージに直面するようになれば、英語が苦手であっても、エラーが伝えようとしていることがわかるようになります。

 

エラーメッセージは、我々がプログラミングを上達することに対して最後まで諦めず付き合ってくれている良き指導者でもあるのです。

 

 

理解しながら組み上げる

 

プログラミングをする際に、コピペで済ませてしまう人の多くが、理解できていないものを組みあわせているという状態です。

例えば、フレームワークやライブラリなどに関しては、そのコアとなるプログラム全てを理解しておく必要はありません。それは「理解しておかなくても使えるセット」として完成されたものであり、そのものをカスタムする必要性がないからです。

ですが、独自の処理を組んでいく場合であれば、その中身がどういった処理で成り立っているか把握しておかなければなりません

 

 

出力結果を確認する

 

システム開発やサイト制作のスピードを上げるためには、一気に構築していくことです。しかしそれは、ある程度理解ができているからこそできるのであって、関数の挙動や処理の内容が理解できていなければ成立しません。

どういった結果が出力されているかなどは、わからなければその都度試したり、別で書いてどういった動きをしているのかを自分の目で確認してみることです。最初に挙げたように、マニュアルを読めば書いてあることは多いですが、結果の全てを想像するのは難しいということもあります。そういったときは、実際に試すことが最も効率的で確実なのです。

 

 

「なんとなく」を解消する

 

関数やクラス、ライブラリやモジュールなど、言語によって様々ですがプログラミングをする上では覚えなくてはならないものが多くあります。その全てをマスターする必要はありませんが、自分がそれを使う状況になれば、「動いているからOK」というような「なんとなく」は解消しておきましょう

 

例えば、DateTimeクラスについて見てみましょう。

<?php
$date = '2020-08-01';

$now = new DateTime();
$date = new DateTime($date);
 
$diff = $now->diff($date);
echo $diff->format('%a日');

 

出力結果は以下の通りです。

# 出力結果
23日

 

処理を実施したのは2020年8月24日です。最初に$dateに代入した’2020-08-01’との日数差が計算されているのがわかりますね。

今日との日数差を計算したいと思い、上記のサンプルコードをコピペすれば内容は理解しておかなくても、$dateに入れる日時さえ変えれば十分に動かすことが可能です。記述量も少なくわざわざ理解しなくても「なんとなく動いているからOK」だと考えてしまいがちです。

しかし、こういった些細な部分をおろそかにせず、どのような処理が行われているのかを理解しておく、「なんとなく」を解消することが上達へのステップになります。

 

まず$nowに現在の日時をセットして、$dateの値もDateTimeクラスにセットしています。そこから差分を算出するために、$nowDateTimeインスタンスからdiffのメソッドに比較対象である$dateの日付をセットします。

最後は$diffに格納した日数差を出力するために、formatメソッドを使用して%aで日数差を出力しています。

 

もちろん余裕があれば、DateTimeクラス自体がどうなっているかなど、深く掘り下げていっても構いません。そこまでしなくとも、自分の作るサイトやシステムで使用している処理だけでも、作った段階で把握しておくようにしておきましょう。この積み重ねが、プログラミングの上達につながるのです。

 

 

まとめ

 

いかがだったでしょうか。

今回は「プログラミングが上達する3つの法則」についてご紹介しました。

現在プログラミング学習に取り組んでいる方、これから副業や趣味、メインスキルとしてプログラミングを検討している方は、ぜひ参考にしてくださいね。

 

注目の記事

プレイヤー情報作成編 PHPポケモン72
プログラミング
PHP,PHPポケモン,ポケモン
プレイヤー情報作成編 PHPポケモン72

プレイヤー情報の作成 少し前よりプレイヤーをホーム画面に表示させるようにしましたが、ただイメージとして配置しただけでプレイヤー情報自体は設定していませんでした。なので、今回はプレイヤーとして持たせる必要のある情報を作成していきましょう。   クラスの作成 初代ポケモンではプレイヤー情報として閲...

【JavaScript】ESLint下でToastr(グローバル変数)を使用する方法
プログラミング
ESLint,JavaScript,jQuery,Toastr
【JavaScript】ESLint下でToastr(グローバル変数)を使用する方法

  ESLintはシステム全体で見れば便利なツールと言えますが、ライブラリなどを読み込む際に通常紹介されているような方法では使えなかったり、慣れていない人からするとどうしても躓くポイントが多くなるのも事実です。 ですが使いこなせるようになれば、開発がスムーズになることはもちろん、保守性やコードの...

レポート(試験)編 PHPポケモン 94
プログラミング
PHP,PHPポケモン,ポケモン
レポート(試験)編 PHPポケモン 94

今回の内容は、あくまで試験的なものとなります。実際にそのままの仕組みで導入するかは未定です。 ※セーブ機能の実装自体は予定しております   また、今回はセーブするための仕組みの部分にのみにフォーカスを当てています。非公開ディレクトリやパーミッション等による最低限の対応は施していますが、試験的にア...

両隣のポケモン取得編(配列の隣の要素)PHPポケモン 92
プログラミング
PHP,PHPポケモン,ポケモン
両隣のポケモン取得編(配列の隣の要素)PHPポケモン 92

両隣のポケモンを判別する パーティーの中からID指定でポケモンを特定するためのメソッドは実装されていましたが、その両隣にどんなポケモンが控えているのかを判別する手段がありませんでしたね。 なので、今回は両隣のポケモンを判別するためのメソッドを準備して活用していきましょう。   パーティー まずは...

ポケモン預かりシステム編 PHPポケモン 85
プログラミング
PHP,PHPポケモン,ポケモン
ポケモン預かりシステム編 PHPポケモン 85

ポケモン預かりシステムとは ポケモンは手持ち(パーティー)に6匹しか入れることができません。そのため、ポケモンを捕まえた際にその上限に達していれば、ボックスへ転送するという仕組みをPHPポケモンでも実装していきます。これが、ポケモン預かりシステムです。 今回は前段階であるボックスの仕様決めをメイン...

システムエンジニアとプログラマーの違いって?仕事内容や必要スキルについてわかりやすく解説します【SE・PG】
プログラミング
システムエンジニアとプログラマーの違いって?仕事内容や必要スキルについてわかりやすく解説します【SE・PG】

  システムエンジニアってどんな仕事? プログラマーとどう違うの?   プログラミング教育が必修化になり、SEやPGの職業が注目された今、この違いについてわからない、教えて欲しいという質問が後を絶ちません。 今回はそういった人たちのために、システムエンジニア(SE)とプログラマー(PG)という職業に...

ポケモン預かりシステム編 システムの実装 PHPポケモン 87
プログラミング
PHP,PHPポケモン,ポケモン
ポケモン預かりシステム編 システムの実装 PHPポケモン 87

ポケモン預かりシステムの実装 システムの仕様とクラスも整ってきたので、いざ実装をしていきましょう。 前回までに作成した項目で、いくつか変更になったものがあるので、まずはじめに挙げておきます。   シャットダウン機能 ボックスの選択を解除するというものでしたが、こちらを不採用にしました。ボックスは...

戦闘用アイテム編 プラスパワー PHPポケモン96
プログラミング
PHP,PHPポケモン,ポケモン
戦闘用アイテム編 プラスパワー PHPポケモン96

戦闘用アイテムとは バトル中に使用できるアイテムはいくつかありますが、その中でも「バトル専用」のアイテムがあります。それが戦闘用アイテムであり、主にドーピングと呼ばれるものです。 アイテムカテゴリとして、プレイヤー対象(スプレーなど)、敵ポケモン対象(ボール類)、味方対象(キズぐすり)の3つに...

カテゴリ

SEO対策 イベント デザイン ネットワーク ビジネスモデル フリーランス プログラミング マーケティング ライティング 動画編集 雑記

タグ

5G Adobe AfterEffects AI ajax amazon Animate api artisan atom Automator AWS Bluetooth CSS CVR description EC-CUBE4 ECショップ ESLint Facebook feedly foreach function Google Google AdSense Honeycode htaccess HTML IEEE 802.11ax Illustrator Instagram IoT JavaScript jQuery jQuery UI keyword LAN Laravel Linux MacBook MAMP meta MLM MySQL NoCode note OS OSI参照モデル Paypal Photoshop PHP phpMyAdmin PHPポケモン PremierePro rss SEO SEO対策 Sequel Pro Skype SNS SSH Symfony TCP/IP title Toastr Trait Twig Twitter UCC V系 WAN WebSub Wi-Fi wiki Windows WordPress XAMPP xml Xserver YouTube YouTuber Zoom アーティスト アウトプット アクセス層 アニメーション アフィリエイト イーブイ インターネット インプット エンジニア オブジェクト指向 お金配り クリック単価 クリック数 コミュニケーション能力 コロナ コンサルティング サムネイル システムエンジニア スタートアップ スタイルシート スパム データベース ディープフェイク デザイナー デザイン テレワーク ナンパ ニュース ネットワークモデル ノマドワーク バナー ピカチュウ ビジネス フィード フリーランス ブロガー ブログ プログラマー プログラミング プログラミング学習 プログラミング教育 プロトコル ホームページ制作 ポケモン マークアップ マーケティング メール リモートワーク レンダリング 三井住友 三宮 仕事依頼 児童デイ 児童デイサービス 児童発達支援 公開鍵 初心者 助成金 勉強法 営業 広告 広告収入 必勝マニュアル 放課後等デイサービス 朝活 楽天 深層学習 無線LAN 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力