プログラミング

熟練者ほど実践するプログラミングが上達する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ポケモン「タイプ実装編」15
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「タイプ実装編」15

ポケモンのタイプについて  2020年剣盾シリーズでのポケモンでは、全18タイプが実装されています。初代では15タイプ(あく、はがね、フェアリーを除く)からスタートして、たった3つのタイプしか増えていない、と感じる方もいるかも知れませんが、この追加に関してもバトルの歴史を大きく動かしてきたのです...

デザイン
サムネイル,デザイナー,バナー,広告
デザイナーにセンスは必要ない!誰でも作れるおしゃれなサムネイル

  「デザイナーになるためにはセンスが必要ですか?」   バナーづくりの小規模講習会を実施した際に、この質問した人がいました。 よくある質問なのですが、いつも決まって自分の回答は「NO」です。   実際に一流のデザイナーとして活躍するレベルまでいくには、確かにセンスと呼ばれているものが必要...

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

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

経験値取得アニメーション編(動画有り) PHPポケモン 47
プログラミング
PHP,PHPポケモン,ポケモン
経験値取得アニメーション編(動画有り) PHPポケモン 47

経験値取得アニメーションの実装 最近は技の実装が続いていたので、気分転換にフロント側の演出づくりをしていきます。その中でも今回実装するのは「経験値取得アニメーション」です。 経験値バーはポケモンの第2世代から追加実装された演出です。初代では次のレベルにアップするまでの数値を、わざわざポケモンの...

記事を書いてもブログが伸びないのは何故?SEOの評価を下げてしまう絶対にダメな3つのこと【知らない内に損してます】
SEO対策
SEO,ブログ
記事を書いてもブログが伸びないのは何故?SEOの評価を下げてしまう絶対にダメな3つのこと【知らない内に損してます】

  1年ブログを継続したけど、全くPVが伸びない・・・   ブログを育てるためには、毎日または定期的な更新が必ず必要ですが、それでも思うように伸びないという人は、実は他に致命的にな原因があることがほとんどです。 今回はそういった「努力しても結果が出ない」と悩んでいるブロガーやブログ運営者に...

「発想と企画を量産する」第3回 朝活のまとめ
イベント
三宮,朝活,神戸
「発想と企画を量産する」第3回 朝活のまとめ

  第3回朝活を実施しました。   この記事では、その中で取り上げられた内容について具体的な考え方や内容をまとめていますので、ぜひ興味を持たれた方は次回朝活へお越しください。   今回の朝活のサブタイトルは「発想と企画を量産する」になります。      「話のネタが無い」は禁物   ブログで...

ポケモン入れ替え編 PHPポケモン 83
プログラミング
PHP,PHPポケモン,ポケモン
ポケモン入れ替え編 PHPポケモン 83

ポケモンの入れ替え 複数ポケモンの所有、そして並び替えの機能が整ったので、いよいよバトルでのポケモン交代機能を実装します。ポケモンがバトル中に交代する方法は大きく分けて以下の4つです。 プレイヤー操作による交代 ひんしによる交代 相手ポケモンの技による交代 味方ポケモンの技による交代 ...

忘れさせる技選択 後編(新しい技を習得) PHPポケモン 56
プログラミング
PHP,PHPポケモン,ポケモン
忘れさせる技選択 後編(新しい技を習得) PHPポケモン 56

新しい技を習得 前編に続き、技習得時の処理分岐を作成していきましょう。今回は「新しい技を習得する」です。 前回は覚えようとしている技を諦めるだけだったので、ポケモンのオブジェクトを書き換える必要がありませんでしたね。ですが、新しく覚えようとしている技を既に覚えている技と置き換える場合は、ポケモ...

カテゴリ

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 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力