プログラミング始めて1か月の超初心者がPHP7技術者認定初級試験を受けてみた

自分の初心を忘れないために。
そしてプログラマを志す、文系や未経験の方のために少しでもなれば。

**注意1**
試験の概要や、合格のためのテクニック等をまとめたものではありません。
試験対策等は[PHP5技術者認定初級試験 合格必勝法](https://qiita.com/oh_rusty_nail/items/26ac7230aba94707f1fe)が参考になるかと思います。

**注意2**
7月中旬　見習いプログラマに。
8月中旬　初めてのPHPを購入。
8月下旬　初めてのPHPを読破。
8月下旬　黒本を読破。
9月初旬　PHP7技術者認定初級試験を受験。
ということで若干タイトルに偽りありっぽくなってしまった。
ただ、勉強を開始したのはプログラミング始めて1か月だったのは間違いないし、
受験した時点ではまだ1.5か月程度だったのでお赦しいただきたく存じます。。。

## スペック
- 20代半ば
- 文学部卒
- 転職して見習いプログラマを始めて1か月
- プログラミング未経験
    - 大学でほんの少しだけRの授業があった(けどかなりさぼって統計ソフトに頼りがちだった)
    - (噂によるとRubyの授業もあったらしいが、そもそもそんな授業があったことすら全く覚えていない)
    - 機械学習に興味があったので[ゼロからやさしくはじめるPython入門](https://www.amazon.co.jp/ゼロからやさしくはじめるPython入門-基本からスタートして、ゲームづくり、機械学習まで楽しく学ぼう-クジラ飛行机/dp/4839964696)とか[Pythonスタートブック](https://www.amazon.co.jp/Pythonスタートブック-辻-真吾/dp/4774142298)とかを読んだことはあった
    - 入社前に勉強しておこうと思って[基礎からのMySQL](https://amzn.to/2YYM1Sg)も読んだ
    - プログラミング教室等は行ったことない

## きっかけ
### 1. 研修でPHPの課題に取り組んでいた
- 書き方は正しいハズなのに意図しない挙動をすることがあり、その理由が気になった
- 裏でどのような処理がなされているのかを理解してコードを書かないといつまでもレベルアップできないと思った
    - [【PHP超入門】値の代入と値渡しについて](https://qiita.com/7968/items/58015344ddab5d5a8b93)を読み、そういったことの理解がほとんどないことを思い知る
    - [エンジニアの能力と今どきの難しさ](https://medium.com/@itog/エンジニアの能力と今どきの難しさ-ff497711946a)とか[プログラミング言語の習得に必要なもの](https://qiita.com/kmizu/items/e803f2ce4bac33dc8c7a)とかでいう①や②に近い部分まで理解したいと思う
- [オライリーの本](https://www.oreilly.co.jp/books/9784873117935/)にそれに近いことが書いてあるらしいと知る

### 2. 会社に社員のスキルアップのための制度があった
- [そのオライリーの本が基になっている試験](https://www.phpexam.jp/summary/novice7/)があると知る
- 受験料を支援してくれるなら、モチベーションのために合格を目指すのも悪くなさそう

## 勉強開始
### 1. [初めてのPHP](https://www.oreilly.co.jp/books/9784873117935/)
目的は資格をとることではなく、あくまでこの本の内容を理解すること。

### 2. [PHPマニュアル](https://www.php.net/manual/ja/index.php)
私のレベルではこれを端から端まで読んで全て納得できるわけではない。
「初めてのPHP」で出てきた内容をより詳細に調べる等で最初に参照する。

### 3. 彼を知る
ある程度勉強が進んできたら、試験突破のための対策も進める。
**彼を知り己を知れば百戦殆ふからず**[^1]というように、自分が対峙する相手のことを調べます。

- [PHP技術者認定機構の試験ページ](https://www.phpexam.jp/summary/novice7/)とか
- [PHP7技術者認定初級試験を受けてきた](https://qiita.com/rana_kualu/items/130fab56656c3e450d61)とか
- [PHP5技術者認定初級試験 合格必勝法](https://qiita.com/oh_rusty_nail/items/26ac7230aba94707f1fe)とか

### 4. [徹底攻略PHP7技術者認定［初級］試験問題集 徹底攻略シリーズ](https://amzn.to/2HcWdvz)
世間では黒本と呼ばれているらしい。
「彼を知る」の延長で、どういう問題が出題されるのかを知っておく。

### 5. [ITトレメ](https://jibun.atmarkit.co.jp/scenter/ittrain/122_cal.html)
通勤中等の電車内で手軽に問題を解くことができる。
忙しい現代人が時間を有効活用するためのもの。
ただし、PHP **5** 技術者認定初級試験向け(あるいは上級試験向け)なので注意。

### 6. [AtCoder](https://atcoder.jp)
本を読む、本の演習問題をやっているだけだとどうしても考えさせられている感が否めない。
たまに自分で頭を使って考えて、手を動かしてみたくなる。そんなときにとても良い。
朝、学習を始める前に目と頭を覚ますために数問解いてみたり、
知識のインプットに疲れたときに、一旦頭をスッキリさせるために数問解いてみたり。
PHPで競技プログラミングに参戦するわけではなく、過去問を解いて頭の体操をする感じ。
[プログラミング始めて1か月の超初心者がAtCoderを始めてみた](https://qiita.com/desho/items/f52c30c1e1043bee16a5)でAtCoderについて書いてみました。


## 結果
20分くらいで解き終わり、念のため解答チェックして計30分ほどで退出。
2問間違えてしまいました。
ただ、試験中に間違っているかもしれないと思った問題も2問だったので、想定通りという感じ。
帰り道でPHPマニュアルを読み直して、間違っていたのがその2問であることを確認。
![結果.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478717/1568526d-64d0-7741-599d-120dddf62d47.jpeg)



## 感想
### 本について
#### 初めてのPHP
思っていたよりも読みやすかった。
Amazonのレビューには「中級者向け」のような記述もあるけど、そんなことはないと思います。確かに全くプログラミングをやったことのない人が最初に読む本にしては難しいかもしれないが、私のようにまだ(実務でなく)研修1か月って人間でも十分読めるし、むしろわかりやすい。
サンプルコード等が実際に使用する場面を想定しているのがとても嬉しい。「そういうことができるのはわかるけど、なんでそれ使うの？それを使うとどう嬉しいの？」という疑問は私を含め初心者には多いのではないかと思います。
特に6章のオブジェクト、10章のクッキーとセッション、13章のPHPUnit、16章のComposerらへんはネット情報を漁って見よう見まねでやっていた人間からするととてつもなくわかりやすかった。断片化しまくっていた知識が体系化された感じ。
[初めてのPHPを読んで詳細に調べたくなったところまとめ](https://qiita.com/desho/items/1c7dfec14c9c79630f3c)でこの本で気になるところをまとめました。


#### 徹底攻略PHP7技術者認定［初級］試験問題集
既にPHPを実務等で使用しているような方なら、この本の14章の総仕上げ問題を眺めてどういう問題が出るのか把握しておけば十分だと思います。使ったことのないフレームワーク等について出題される可能性もあるので念のための確認くらいのつもりで。
私のような初心者であれば、念のため一冊全部目を通しておくと安心できるかと思います。
ただその総仕上げ問題に、答えが変わってしまうような誤植があったり、解答が間違っていたりととんでもない罠が潜んでいます。気づければ良いですが、気づけないと誤った認識をしてしまいかねないのでご注意ください。
これからこの本をお読みになる方は、[インプレスのサポートページ](https://book.impress.co.jp/books/1118101075)に訂正があるので、ご確認いただけると良いかと思います。

### 試験について
勉強している間に冷房病のような症状が出て、頭がぼーっとしたりすることもあったけど、試験に合格するという明確な目標がモチベーション維持に少なからずつながったとは思う。何かしら目的を設定するのに困ったら試験を利用するのは悪くないと思います。

黒本の総仕上げ問題を満点で終えていたのですが、噂によると黒本の問題はかなり簡単で、実際の試験はもっと難しいとのことだったので、かなりびびりながら受けに行きました。
実際は **試験の申込手順の方が遥かに難解** でした。
受験の申し込み方法はかなり難解で、というより正確な方法は(恐らく)どこにも載っていないので、自分が受けるつもりの会場に直接問い合わせると良いと思います。

試験自体は、満点を狙いにいくような試験ではないと思います。
あくまで資格試験なので、「そんなこと覚えてなくたって実務に支障ないし」といったこともあるかと思います。
そこらへんは割り切れるという方に受験をおすすめします。
逆に満点を取れるなら、記憶力に関する認定も受けたといえるのではないでしょうか。

## さいごに
少しでも初心者の方の心の支えになれば幸いです。
私の目標はC言語も学んで、PHPのソースコードを理解することです。
ですが、次なる短期的な目標を模索中です。

[^1]: [孫子](https://ja.wikiquote.org/wiki/孫子)