プログラミング

熟練者ほど実践するプログラミングが上達する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学習をオススメする3つの理由
プログラミング
Laravel,PHP,SEO,WordPress
プログラミングでフリーランスを目指す人にPHP学習をオススメする3つの理由

  「フリーランスになるためにプログラミングを身に着けたい」 「セカンドキャリアで技術を習得したい」 「副業でパソコン1台で稼げるものに挑戦したい」   終身雇用が危ぶまれている現在、スキルを身に着けて転職やフリーランスとして活躍したいと考える人が増え、プログラミングの需要は年々高まってきて...

Toastr(トースト)活用編 PHPポケモン 100
プログラミング
JavaScript,PHP,PHPポケモン,ポケモン
Toastr(トースト)活用編 PHPポケモン 100

記念すべき第100回目です!   色々考えましたが、100回目だからと言って特別な内容ではなく、いつもの流れの延長での開発進行となります。ご了承ください。 今回は、何人かのプレイユーザーの声も参考にしながら、ユーザビリティをあげるための機能追加を進めていきます。   Toastr(トースト)と...

かなしばり編 PHPポケモン 95
プログラミング
PHP,PHPポケモン,ポケモン
かなしばり編 PHPポケモン 95

かなしばりとは 最近は技のアップデートをおろそかにしていたので、久々の追加実装です。へんしんという再現が面倒な技は乗り越えましたが、他の技も仕様がややこしいため、覚えるポケモンが用意できたタイミングに基本的に増やしていきたいのですが、バトルシステムを作り上げていく関係上、どうしても見逃せない部...

「数字を上げる」必勝マニュアル 〜再生回数・フォロワー・PV数〜
マーケティング
YouTuber,ブロガー,必勝マニュアル,自己啓発
「数字を上げる」必勝マニュアル 〜再生回数・フォロワー・PV数〜

  「継続は力なり」   色んな場面で言われます。何事も地道な努力が大事です。 しかし、地道な努力というのは成果が見えづらく、反応が得にくいことも確かです。   運良く勢いに乗れて、常に努力のし易い環境にいることで伸びていく人の確かにいます。 しかし、ほとんどの人がそうはいきません。...

【Wi-Fi6とは】スマホやPCの買い替えは必要?騙されないための基礎知識
ネットワーク
5G,IEEE 802.11ax,Wi-Fi
【Wi-Fi6とは】スマホやPCの買い替えは必要?騙されないための基礎知識

  本格的に5G普及への取り組みが始まり、Wi-Fi6といった新世代の規格が出たことによって、超情報化社会へ加速しました。 ですが、こういったナンバリングが一般化することによって、わからずに高性能な機器を斡旋されて無駄な購入をさせられたり、わからないことを理由に詐欺的営業を仕掛けてくる悪意ある人...

【Laravel7】既存makeテンプレートのカスタマイズ Requestサンプル有り
プログラミング
Laravel,Linux,PHP
【Laravel7】既存makeテンプレートのカスタマイズ Requestサンプル有り

  Laravel7では新しい機能が様々導入されており、Webアプリケーションの開発がよりスムーズなものとなってきています。その中でも、もどかしい場所へ手を届いたと感じさせてくれたのが、既存makeコマンドのstubを簡単にカスタマイズできるようになったことです。   今回は既存make用stubの取得コマンドと、リ...

ビジネス系次世代ブログ!?無料で企画書が読める「机上の空論」とは
ビジネスモデル
ビジネス系次世代ブログ!?無料で企画書が読める「机上の空論」とは

  この記事は、私の考えたビジネスモデルを紹介するコーナーです。考えるだけで辞めたものや、コストやリスクを考えて断念したもの、そこまでニーズがないと判断したものなど様々なので、読んだ方は自分なりの見解や根拠を踏まえて判断したり、各自ビジネスの参考資料としてご活用ください。   このブ...

オウムがえし編 PHPポケモン 68
プログラミング
PHP,PHPポケモン,ポケモン
オウムがえし編 PHPポケモン 68

オウムがえしとは 今回は久々に新しい技を実装します。それが「オウムがえし」です。 オウムがえし(ポケモンwiki) https://wiki.ポケモン.com/wiki/オウムがえし   初代で登場した技であり、序盤に登場するポッポやオニスズメがレベルアップで覚える技の1つです。最新世代ではオウムがえしという技は実...

カテゴリ

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