PCPP1合格体験記（PCPP1™ – Certified Professional in Python Programming 1）

海外のPython資格である [PCPP1™ – Certified Professional in Python Programming 1](https://pythoninstitute.org/pcpp1)に合格しました。
PCAPやPCEPまでの記事は見かけますが、PCPPはほとんど見かけなかったので書き残したいと思います。

# PCPPについて
## 概要
Python Instituteというポーランドの団体の認定試験です。
PCEP - PCAP - PCPPという３段階のレベルがあります。試験、テキスト、全部英語です。

## Exam Syllabus
以下の配点になってます。

Section 1: Advanced Object-Oriented Programming (35%)
Section 2: Coding Conventions, Best Practices, and Standardization (12%)
Section 3: GUI Programming (20%)
Section 4: Network Programming (18%)
Section 5: File Processing and Communicating with a Program's Environment (15%)

簡単にそれぞれ説明すると

1. OOP全般（class, inheritance, exception, abstractclass, metaclassなど)
2. PEP8, PEP20, PEP257
3. tkinter module
4. socket, requests, json module
5. sqlite3, csv, xml.etree.ElementTree, logging, ConfigParser module

のような感じです。

# 前提スペック

- 大学で情報工学部なのでプログラムの基本的な知識はあります
- Python歴は2,3年くらい
    - 学び初めにオライリーの`入門 Python 3`を読み、8章までで止まっている
- 仕事でプログラミングすることはほぼ無しだが、自発的に何かを作ることはある
- TOEIC 535点
    - IT系の簡単なドキュメントなら読めます（意味が理解できるとは言ってない）


# 合格までの流れ
いきなりPCPPを受けたわけではないので時系列で書いていきます。
スコアも書いていくので受験する参考になればと思います。

## Pythonエンジニア認定基礎試験受験(7/22)
PCPPを受けるきっかけになったのがこの試験。とりあえず受けてみるかという感覚で受験して合格。（スコア950/1000）

## PCEPとの出会い(7/24)
会社の奨励金申請の準備をしているなか、資格一覧からPythonという単語で検索したところ、PythonInstitute系の資格があることを知る。
業務終了してから色々ネットで調べてたらPCEPはテストセンターに行かずに自分のPCで受けられれることを知り、その場で即受験し合格。（スコア91%）
</br>
</br>
Pythonエンジニア認定基礎試験と同じ脳みその状態で受験してこのスコアだったので、だいたいこの２つは同じようなレベルだと思います。

## PCAP受験(7/27)
PCPP合格後次はPCAPかなと思ってこちらも色々調べていると、リトライ１回無料がデフォルトで付いていると発覚。
とりあえず受けてみるか！と思い7/27にテストセンター予約し、25,26と就業後に勉強して27日10:00に受験して合格。(スコア88%)

勉強方法は公式テキストを使用し、あまり中身を知らないsection1.2のmodule(math, random, platform)部分を勉強しました。（多分もう１モジュールくらいやった気するけど覚えていない・・・）


自信があるならPCEP受けずにこっちから受けても問題ないと思います。


## PCAP学び直し(~8/11くらいまで)
順序はおかしいですが、PCAP受かったあとにPCAPの公式テキストを使って一通り勉強しました。（labo,test,quizはやってない）
だいたい1日3時間は勉強していたはずなので合計42時間はPCAPに時間を割いていたと思います。
公式テキストのStudy Timeは58 hoursになっていますが、大体この目安通りの時間なのかなと思います。


## PCPP受験(8/19)
PCPPのテキストが終わった8/11に、8/18受験でにテストセンターを予約しました。
その後、テスト前日の8/17に「あと１日あったらいけそう」と思って受験日を１日後ろにズラし、8/19に受験して無事合格しました。（スコア80%）
勉強内容は後述します。

# 勉強内容について

## 勉強方法
公式テキストをグーグル翻訳にひたすらコピペして文章を読み、サンプルコードはそのまま実行せず、同じ意味を持つコードを自分で作ってからローカルのインタプリタで打ち込んで動作確認をする、という方法で勉強してました。
また、自分で理解した結果はすべてローカルのメモに記載しています。このおかげでコード実行＋メモの２重で記憶に残りやすかったはずです。

あと、PEPについては電車内でまとめ記事みたいなのをでよんでました。完全に短短短期記憶勝負でした。


## 公式テキストについて

7日+AMの時間しかなかったので、以下の順と割合くらいでテキストを読んでました。

3.5日　Section 1: Advanced Object-Oriented Programming (35%)
1.0日　Section 4: Network Programming (18%)
1.5日　Section 3: GUI Programming (20%)
0.7日　Section 5: File Processing and Communicating with a Program's Environment (15%)
0.5日　Section 2: Coding Conventions, Best Practices, and Standardization (12%)

1日あたりの勉強時間ですが、大体1日8時間くらいはやってたかなと思います。こんなに充実した夏休みは入社して初めてでした。

時間的に１００％テキストをカバーできたわけではありませんので、それぞれどこまでやったのかを記していきます。

### section 1
これは完全に一通りやりました。
一応42時間を想定してるテキストではありますが、PCAPと被っている内容もあるので、PCAPの勉強ができていれば42時間フルでかかることはないと思います。
テキストにあるなんちゃって試験も3回くらいはやりました。
このセクションで88%(=30.8%)とれました。配点も多いので時間かけてやるべきです。

### section 4
これもsection1同様、一通り＋テストをやりました。
requestsはちょいちょい使うので、ほとんど時間かけることなくできました。多分全部やったとしても想定の21時間はかからないと思います。

ただスコアは72％(=12.96%)で意外とギリギリでした。

### section 3
モジュール１と２がありますが、１＋テストだけやって２はまったくやっていません。
tkinterも１度だけ触ったことがあり、イベントやpackの引数など多少はわかっていましたが、思ったより時間がかかりました。想定21時間という割にはかなりテキストの中身が多くて内容が濃いセクションです。

モジュール２ができてなかったとはいえ一部はモジュール１の再掲なので、覚えなきゃいけないウェイトとしては7:3くらいであり、問題の出方によっては２に手をつけなくてもほぼ問題なくいけます。私は運良く91％(=18.2%)取得できました。

### section 5
ここからはテキストの内容を読むのをやめ、コードを見てわからないものがあったら動作を確認するという効率?重視の方法でやりました。
一応テキストを一通りやり、テキスト内のテストも７０％を取れたので良しとしました。

その結果なのか、38%(=5.7%)という悲しいスコアを叩き出してしまいました。
時間があるなら甘えないほうがいいですが、何かを捨てなれけばいけない場合はこの章を捨てるのが正解かもしれないです。

### section 2
これはテキストすら読んでいません。
`PEP8　日本語`とかでぐぐって出てきたQiitaまとめ記事を見てました。電車でも粘って見てました。

[神記事](https://qiita.com/sartan123/items/7385e907400c4c407eae)におかげで100%(=12%)正解でした。
テスト受かるだけならこの方法が素晴らしく効率的だと思います。

### 各セクションのテストについて
各セクションにはテストがついてます。一部の問題については本試験でも似たような問題が出てくるので、時間があるならしっかりやったほうが合格に近づきます。

あと、このテキストのテストでは英文で何かを聞いてきて答える問題が多いです。（`what is Class?`みたいな）
このような抽象的な問題文のときの選択肢は英語が長くてTOEIC500点台には理解できないパターンがあります。
が、このような問題はあまり本試験では出て来ず、逆にコードが書いてあって出力どうなるかみたいな分かりやすい問題のほうが多いです。
なので英語に自信がなくても問題はありません。安心してください。

# 試験を受けて

## 難しかった点
全問選択なので難しいというところはないです。覚えているか覚えていないかの二択です。
それよりも、この試験と出会うことのほうが難しいかもしれません。

## 簡単だった点
覚える範囲も深さもそこまで広く深くではなかったです。
重箱の隅をつつくような問題もいじわるな問題もなく、むしろ親切な問題が多いです。
15分以上時間が余ったので試験量も多すぎることはないです。

## 他の試験と比較したときの難易度について
去年の年末にCCNP ENCORのBootcampを受けましたが、ちょうど7日+半日で今回と同じくらいの勉強時間でした。
なのでCCNP ENCORと同じくらいか、それよりちょっと下のレベルだと思います。

## 感想
ストレートで合格しましたが久しぶりに勉強という勉強をした気がします。
短期記憶というところもあるのと、そもそも使わないと忘れてしまうので、取ったからといって慢心せずにこの試験で学んだことを積極的に使って脳内にへばりつけていきたいです。


# 最後に
Professionalという名前はついていますが、敷居が高いわけではありません。

これらの情報がPCPP受けてみたいと思っている人の手助けになれば幸いです。