Edited at
YYPHPDay 10

45歳からはじめるPHPプログラミング、プログラミングを初めて16日目までの軌跡(クラスまで書けるようになったよ!)

本稿はYYPHP Advent Calendar 2018 - Qiitaの10日目の記事です。


はじめに

YYPHPという、PHPプログラマが集まって雑談するというイベントが毎週開催されています。これまで60回以上開催されてきました。筆者はこのイベントを運営する側ではあったもののインフラエンジニアなのでプログラムを開発したことがありませんでした(Bashは書いてる)。会を重ねていく毎に熱いPHPer達に会い、僕もプログラムを書いてみたいと思うようになり勉強をはじめました。週末の時間のある時に勉強するというスタイルのため進捗はゆっくりでしたが、効率的に確実に学びを得られたと感じたので、僕なりの学びの中で学んだこと学び方や、「こういうルートをたどって勉強を進めた人もいたよ!」ということを知ってもらえたらと思い書きました。誰かの最初の加速装置に少しでもなれたら嬉しいです。


  • YYPHPの参加方法を知りたい方は、connpassをご覧ください。

  • YYPHPの雰囲気を覗きたい方は、YouTubeの動画をご覧ください。

  • YYPHPの過去ログを読みたい方は、Qiitaに投稿されたイベントレポートをご覧ください。


PHPを学び始めるにあたって


  • この記事は、これからPHPを学び始める初学者が、自ら学んで理解を深めていく手助けになればと思い、16日の間、何をどう学んでいったかを簡単にまとめたものです。


はじめに


ツール


  • PHPの開発環境はMacに brew install php でインストールしたPHPを使っています。いま使っているのはPHP7.1です。

  • PHPを実行する時にターミナルを使います。デフォルトで入っている「ターミナル」でも良いですが、僕は「iTerm2」を使っています。

  • ApacheとかMySQLとかは最初は使いません。純粋なPHPだけです。

  • ApacheはWebサーバです。ブラウザでアクセスする場合はこれを使うのですが、Webサーバの構築のこと、通信のこと、ブラウザでのデバッグ方法などを学ばなくてはなりません。初心者、特に独学の人にはちょっと荷が重いかなと思います。ゆくゆくは必要になりますが、純粋にPHPのアルゴリズムを学ぶためには必須ではありません。

  • MySQLはデータベースサーバですが、Apacheと同じ理由で最初は不要です。


エディタ


  • Atom


    • 初学者はAtomで良いと思います。

    • 無料だし使いやすいです。

    • GitHubが開発したオープンソースのテキストエディタです。

    • 私はこのAtomを使っていましたが、師匠のreoringからコメントを貰い、いまは初心者は下記2つめのVS Codeがお薦めのようです。




  • Visual Studio Code(VS Code)(2018/12/17 追記)


    • マイクロソフトが開発したエディタです。

    • 無料でオープンソース。

    • macOS、Windows、Linux で動作。

    • Node.js、Java、Python などをビルドおよびデバッグできる。



  • PhpStorm


    • IDE(統合開発環境)です。

    • クラスとかを使って複雑なアプリケーションを作るとか、フレームワークを使うようになったらPhpStormをお薦めしたいです。

    • 有料ですが、誤りを指摘してくれたり、コードをレコメンドしてくれたり、関数やクラスを「コマンドキー+クリック」するとその元の場所へ飛んでくれたりするので、初学者には読み解け無いプログラムを読み解く手助けをしてくれます。

    • これだけでエラーに費やす時間を削減してくれ、仕事の品質を高めてくれます。

    • なので、IDEを使わずに費やす自分の時間を時給に換算したら安いものではないでしょうか。

    • PhpStormを使おう




動画で学ぶ


動画で学ぶコツ


  • 早送りを使う


    • 時間を節約できます。

    • Udemyは0.5倍速から2倍速まで調節でき、僕は1.25倍速と1.5倍速を利用しました。



  • 手を動かす


    • 見てるだけでなく、先生を真似て手元で手を動かしましょう。



  • 不明なところはインターネットで調べながら


    • 動画は止めたり戻したりがいくらでもできます。不明な言葉なんかも都度調べながら、HackMDなどにメモしながら進めましょう。




課題をやってみる(PHP Quiz)


  • 動画での基礎の学習が終わったら、実際に自分で考えてコードを書いてみましょう。

  • 何か簡単なものからで良いです。

  • 幸い、僕には課題を出してくれるsuinれおりんという師匠がいて、下記のPHP Quizを出してくれました。皆さんもぜひチャレンジしてみてください。


課題をやるコツ


  • 自分で考える

  • 考えて調べる。調べまくる

  • そしてわからないなりにとにかく書いてみる

  • 自分の頭で悩んで考えることが大切

  • var_dump($変数)を使いまくる


    • これを使うとそのタイミングで変数がどんな値を持っているのか(または持っていないのか)がわかります。




課題


  1. 九九の表を出力する


    1. 九九ができたら20x20をやってみる

    2. 桁がずれるので合わせる



  2. 45歳から始めるプログラミング PHP編 No1 多次元配列を1次元配列に変換する関数を書け!(再帰処理で)

  3. カレンダーを出力する

  4. 多次元配列から要素を一撃で取り出す関数を実装する


  • 2つ目の課題は再帰関数というもののアルゴリズムを書くのですが、これが書けるかどうかでプログラマとしての素養がわかるみたいです。最初は時間がかかっても頑張って考え抜きましょう。

  • 余談ですが、「実装する!」ってなんかカッコよくないですか!w


自分用の便利ツールを作ってみる


  • 実用性が大事です!

  • 実用性あると楽しい!

  • 自分が便利になるのでモチベーションが上がる〜!🔝


開発したもの


  • 僕が最初に作ったのがこちらです。



  • 最初は関数(function)を使わずに、知ってる書き方、調べてみて良さそうと思った機能や文法で思いつくまま書いてみる!

  • コードが増えてきたら関数にまとめていく


    • スッキリして可読性が高くなる → 何をどこに書いたかわかりやすい!

    • 嬉しい!



  • クラスにする


    • オブジェクト指向のエッセンスを学ぶ



  • いまこの「クラスにする」の途中で、機能を追加しながらファイル(バージョン)を上げていっています。


開発中のものを誰かに見てもらう



  • GitHubにコードを上げておくと、誰か(師匠とか先輩とか)に見てもらいやすくなる。その場にいなくてもリモートで時間のある時に見てもらえるから助かります。

  • Issueというのがあって、ここをこうした方が良いよって指示をもらえる。



  • ちなみに、先輩や同僚とかと一緒にペアプロするもの良さそうですよ!


今後の学び方

僕が16日目までで実践し学んだことは以上です。

今後、学びを深めて行くには、こういう方向性があるかなというのを挙げてみました。


他に考えられるPHPの基礎的な課題はこんな感じ


  • ifとforを使って作る系

  • 多次元配列の操作

  • 再帰関数

  • うるう年を計算する

  • 三角形

  • 生年月日から年齢を計算する

  • カレンダー(ウェブ版)

  • BBS


    • これは割とベーシックな課題みたいです

    • 面白そう♪



  • Twitterのクローンを作る


    • 仕様を真似できるやつはやりやすいため




心構え

一人では難しいことでも、諸先輩方の力を借りれば歩みはぐっと早くなります。可能な範囲で力をお借りするのは良いことだと思っています。ただし、力を借りまくったままでは良くないと思います。受けた恩は必ず何かで返すつもりでお願いしましょう。缶コーヒーでも、仕事で返すでも、ご飯を御馳走するでも。もし例え先輩に返せなくても後輩に受け継ぐという道もあります。良いつながりを作っていきましょう。


終わりに

以上ですが、いかがでしたでしょうか?

仕事でプログラムを仕上げなくてはならない場合は、考え抜いてる暇なんてなかったりすると思います。仕事は仕事でその時の最善の方法で進めて、自分のスキルアップは別軸でじっくり取り組むというのも確実なスキルアップの方法だと思います。最初はゆっくりの歩みでも、わかってくると最初に感じたわくわく感が何倍にもなり、学びのスピードも深さも喜びも大きくなっていくでしょう。頑張ってください。僕は頑張る人を応援します!!

YYPHPではPHPでの困ったことなどで聞きたいこと、伝えたいこと(想い、LTなど)、見てもらいたいこと(レビュー)など、PHPに関連することであれば何でも受け付けています。まだ参加したことのない人はぜひ一度参加してみてください!PHP歴マイナス15日の人も参加していますので(笑)、お気軽にどうぞ〜♪

最後に、出稿が遅くなったことをお詫びいたします。