プログラミング

熟練者ほど実践するプログラミングが上達する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つの法則」についてご紹介しました。

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

 

注目の記事

ピカチュウから学ぶオブジェクト指向 〜進化編〜 7
プログラミング
PHP,PHPポケモン,オブジェクト指向,ポケモン
ピカチュウから学ぶオブジェクト指向 〜進化編〜 7

  ※前回(第6回)で意味不明な場所に空変数が入っており、ステータスが一部しか出力できないという問題がありました。修正しています。犯人は「$stats = [];」です。(GetTrait.php)   今回はポケモンのゲームでは欠かせない、楽しみの一つとなる「進化システム」を導入していきます。これからPHPポ...

プレイヤーのグローバル化編 PHPポケモン 78
プログラミング
PHP,PHPポケモン,ポケモン
プレイヤーのグローバル化編 PHPポケモン 78

2日ほどwiki作成にいそいそと励んでいましたが、開発をお休みしていたわけではありません。追加機能を実装するに辺り、色々と改善点が挙がってきたので、このタイミングでしっかりと見直しをしました。   本格的なシステム開発では、最初に仕様書や設計書が作成され、それに沿って作成していくことになります...

反動技編(はかいこうせん・とびひざげり)PHPポケモン40
プログラミング
PHP,PHPポケモン,ポケモン
反動技編(はかいこうせん・とびひざげり)PHPポケモン40

反動技とは ポケモンでは反動技というものがあります。反動によっても様々で、現在の仕組みのままでも実装可能なものや、新たに処理が必要なものまであります。なので、一律で反動技という同じ処理は出来ません。  反動技(ポケモンwiki) https://wiki.ポケモン.com/wiki/反動技 反動技(はんどうわざ...

人員配置計算機〜放課後等デイサービス・児童発達支援〜
プログラミング
JavaScript,児童デイ,児童発達支援,放課後等デイサービス,福祉,計算機
人員配置計算機〜放課後等デイサービス・児童発達支援〜

最近はずっとPHPポケモン開発にかかりっきりでしたが、そろそろ「役立つもの」を作りたくなったので、思いつきで作ってみました。 もちろん「汎用性」のあるものは、既に世の中に存在しているため、ありそうでなさそうなニッチなものを攻めてみます。   そんな中、今回挑んだのは「人員配置計算機」です。 ※実際に...

忘れさせる技選択 前編(覚えるのを諦める) PHPポケモン 55
プログラミング
PHP,PHPポケモン,ポケモン
忘れさせる技選択 前編(覚えるのを諦める) PHPポケモン 55

忘れさせる技の選択 PHPポケモンでは技習得時に忘れさせる技の選択が出来ず、古いものから順番に消えていっていました。ですが、これでは主力技として使っているものが、覚えたくもない技に消されてしまうということが起こってしまいます。 実際のゲームでも、技を覚えようとした際に既に最大数の4枠が埋まっていれ...

PHPポケモン「レベルアップ進化編」9
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「レベルアップ進化編」9

  PHPポケモン(旧:ピカチュウから学ぶオブジェクト指向)も第9回目となりました。前回GitHubよりコードを配布したので、これから学習しようと考えている人は、ぜひ参考にしてください。   最初からコードの内容について学びたい人は、ぜひ記念すべき第1回から順を追って取り組んでみてください。   ...

アーカイブのディスクリプションを管理画面で設定する方法【SEOに強いWordPressブログ・サイト作り】
プログラミング
PHP,SEO,WordPress
アーカイブのディスクリプションを管理画面で設定する方法【SEOに強いWordPressブログ・サイト作り】

  WordPressで作ったサイトやブログはSEO対策がしやすいという利点があり、より検索に強いサイトへ仕上げることができます。 ですが、SEO対策に特化しているテーマでもアーカイブページのディスクリプション設定ができないものは多く、別で設定する必要があるものがほとんどです。   今回は、より検索で強く...

LANとWANについて【第2回 ド素人のためのネットワーク講座】
ネットワーク
IoT,LAN,WAN,Wi-Fi
LANとWANについて【第2回 ド素人のためのネットワーク講座】

  YQUALがお送りする、ド素人のためのネットワーク講座。 栄えある第2回は「LANとWANについて」です。   フロントエンジニアや現在プログラミングを学習中の方を中心に、ネットワークについての基礎的理解を深めていくための内容になっています。 ざっくりとした説明で物足りない、または細かく見ていった...

カテゴリ

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

タグ

5G Adobe AfterEffects AI ajax amazon Animate api artisan atom Automator AWS Bluetooth CSS CVR description EC-CUBE4 ECショップ ESLint Facebook feedly foreach fortify function Google Google AdSense Honeycode htaccess HTML IEEE 802.11ax Illustrator Instagram IoT JavaScript jetstream jQuery jQuery UI keyword LAN Laravel Linux MacBook MAMP meta MLM MySQL NoCode note OS OSI参照モデル Paypal Photoshop PHP phpMyAdmin PHPポケモン PremierePro rss 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 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 認証 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力