Python 3 エンジニア認定 実践試験 合格体験記

一度落ちたけど、三日後にリベンジして合格した。
というお話。

いよいよ、本番試験が始まりますね。
アーリー試験にて、先駆けて合格しているので、その体験談を記載します。
これから受験される方の参考になれば幸いです。

アーリー試験とは。
本番試験の前に、誤字などの間違いをフィードバックする事を条件に、本番試験に先駆けて受験できる試験のこと。
「ベータ版」という呼び名で実施されました。

主催の「Pythonエンジニア育成推進協会」の YouTube によれば、
・寺田学さん という方が問題を作っている。
・寺田さんの設問は正確なので、「基礎試験」でも、ほとんど手直し無しだった。
・「実践試験」でも、ベータ試験の内容を、ほぼ手直し無しで本番投入される見込み。
との事。なので、
この記事の体験談はベータ版ですが、本番を受験される方にも参考になると思います。

私の事前スキル

・BASIC を小学生の時に、少しイジって遊んだ事がある。
・Excel VBA を 5年ほど、仕事(集計の自動化など)で使用しています。
・HTML、JavaScript、CSS は時々使用。
 ※まだブログエンジンなど無かった時代、手書きでホームページを作っていました。

プログラマーとは言えませんが、頑張ればコードの流れが読み取れる程度です。

勉強の内容

動画講座

まず初めに、Udemy という動画の講座で勉強しました。

Udemy プログラミング言語カテゴリー

講師:酒井 潤 (Jun Sakai)さん。
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

※ゲリラ的に格安で購入できるキャンペーンが実施されます。
※時々チェックして、安くなっている時に買うと良いですよ。
※無料でプレビュー再生できる箇所があるので、事前に内容をチェックできます。
※「講師の話し方」が自分に合っているか、は「動画では大事」なので、値段だけではなくプレビューで内容もチェックする事をお勧めします。
※動画より書籍が良い人は、この動画の書籍版ともいえる、下記の本が良いかも。

一番初めにこの動画で勉強して本当に良かったです。
この動画が一番、基礎力になっていると思います。
この動画を受けてから、「Pythonエンジニア3 基礎試験」の難易度を調べる目的で受験してみたのですが、設問を見た時に、テキストよりも動画を思い出して、すんなり答えられました。
難易度だけ分かれば良くて、合格は目指していなかったので、ちょっと拍子抜け。
 ※動画だけで合格した訳ではないので注意。
 ※「基礎試験」では、37問/40問 、925点で合格。

書籍

次に、公式の「実践試験」のテキストを読みました。

Pythonエンジニア育成推進協会監修 Python実践レシピ新品価格
¥2,822から
(2022/11/7 02:39時点)

読むと言っても、通勤電車の中だけ(片道 20分ほど)。
平日 40分 × 2.5ヶ月ほど、トータルで 40時間ほどの勉強でした。

「実践試験」のテキストは、「基礎試験」のテキストより簡単に感じました。

・「基礎試験」のテキスト:
 Python公式チュートリアルが元になっています。
 Python公式チュートリアルが、プログラミング経験者を対象にしているので、
 プログラミング初心者には、とても意味が読み取り難いですよね。
 
・「実践試験」のテキスト:
 「基礎試験」の合格者を対象に、基礎試験の内容+α、と更に幅を広げた内容。
 文章は、「基礎試験」のテキストの様な、Python公式チュートリアルをなぞった書き方は取り払われている印象です。
 非常にスマートな文章に感じました。

余談:
とはいえ、やはりプログラミング経験のない人がいきなり「実践試験」のテキストを読むと、相当に難易度が高く感じると思います。
Python は学び易いのですが、プログラミング経験者でも、「実践試験」の範囲の広さと、70%が合格ラインである点は、相当にキツイです。
他のプログラミング試験や国家試験は、60%が合格ラインですからね。
まずは頑張って「基礎試験」を合格しておくのがお勧めです。
基礎をしっかり身に着けてから「実践試験」へのステップアップを目指せば、プログラミング初心者からでも、現実的に充分に合格できると思います。

試験の設問のスタイルや難易度は、「基礎試験」と同じ、と予測しました。
これはアタリ。
いきなり「実践試験」を受けるより、「基礎試験」を受けておく事をお勧めします。
設問のスタイルや難易度が分かっていると、すごく安心できますから。

「実践試験」も、すんなり合格できる、と予測しました。
これはハズレ。
1回目は落ちてしまいました。

不合格から 3日間で合格へ

1度目の結果は、60点/100点でした。
合格点が 70点ですから、10点足りません。
 ※なぜか 1000点満点で採点されていますね。
 ※ 1問 25点の計算。整数だと計算が楽、といった理由かな?

もう少しだけ勉強すれば答えられる問題ばかりなのに、
悔しいかな、解答できない問題が半分ほど。
2.5ヶ月も勉強したのに、、、受験の最中で、リベンジを決意。
最短で翌日に再受験できる仕組みだった記憶ですが、
ベータ試験の最終日が 3日後だったので、3日後にリベンジする事にしました。
帰宅してから、すぐに勉強を再開。
下図がリベンジの結果。

1回目より、プラス 5問を正答し、合格点に到達できました。

「的」を絞って追い込み

これは 1回目の受験中に気付いたのですが、
手堅く点を稼げると思っていた箇所で、意外に答えが出て来なかった。
(そんなはずはない)と思いましたが、焦っても仕方ない。これが実力なのだと痛感。

次のような追い込みをしました。

100%が取れた領域は勉強しない。

具体的には次の領域。

・Pythonの環境
・コーディング規約
・Pythonのクラス
・型ヒント (得意なのに 2回目で 1問落とした)
・日付と時刻の処理
・汎用OS・ランタイムサービス (得意なのに 2回目で 1問落とした)
・暗号関連

「まぐれ」で正答した箇所もあった記憶ですが、気にしない。
気にしないって、かなり勇気が要りましたが、気にしない。
何しろ 中2日しかありませんから。

手堅く点を取れる領域を、確実に固める

これ。
これに限ります。
「確実ではない」と思いながらも「何となく分かった」で済ませて力を抜いたのが、そのまま、
「あれ、覚えたはずなのに出て来ない」、「あれだよ、あれ」、「何だっけ?」となって答えられず、悔しい思いをしたので、これを繰り返さない事に焦点を絞りました。
具体的には、下記の箇所。4問も落としています。

・Pythonの言語仕様
・テキストの処理

ここは、「基礎試験」+α の部分ですから、点を落とすこと自体が恥ずかしい。
舐めていて痛い思いをしたせいか、この時の勉強はやたら頭に入りました。
目をつむれば文章が目に浮かぶ程に覚えました。

あ、でも、少し頑張るくらいじゃ覚えられそうにない箇所は、完全にスルー。
「もう少しで、しっかり覚えられる」という部分に集中しました。

ちょっと苦手な領域でも肉付け

手堅く答えられる箇所の勉強が、割と早く終わったので、少し領域を広げました。
ページ数が多いけど、必ず仕事で役に立つ、と言い聞かせて、下記も勉強しました。
ここでも、5問も落としている。

・データ型とアルゴリズム
・ファイルとディレクトリへのアクセス

これも、「もう少しで、しっかり覚えられる」という部分に集中しました。

これはやっておいて正解。
1回目で正答率の高かった領域から難しい問題が出て、4問落としているので、この領域で追加点を稼げていなかったら、2回目も落ちていたと思います。

完全にスルーしていた領域にも手を付ける(失敗)

これは失敗。
欲をかいて、手を広げ過ぎました。

「仕事で使わないし」と思って完全にスルーしていた、下記の部分も勉強。

・テスト
・デバッグ

ここを使うのは、本職のプログラマーでしょう。
ちょっとしたツールを作る程度の人は、まず使わない領域。
なので、完全にスルーしていました。

魅力的に感じたのは、範囲がすごく狭い(ページ数が少ない)。
難しい設問を作るのが逆に難しいほど、というと、ちょっと言い過ぎかも知れませんが、1回目の設問を見ても、ちょっと勉強すれば答えられそうな感触でした。

が、、、リベンジを決めた当初の、「的」を絞る、から外れていますね。
1回目で「まぐれ」で当たっていた 1問を 2回目で落とし、「追加で勉強した分」を 1問正答。。。
プラマイ ゼロ。。。
結果として、追加点には結び付きませんでした。
やはり、「的」を絞る、って大事。

追い込みの結果

正答率の高かった領域から分からない問題が出題され、4問落とし、
追加で勉強した箇所の設問では、9問の正答。
⇒ 差し引き、1回目より 5問多く正答となり、合格点に到達しました。

3日間で、600点から、725点に強化できたので、満足。
「基礎試験」で良い点が取れていたので、完全に舐めて掛かっていました。
これが一番の反省点です。

「基礎試験」ではしっかりエネルギーを掛けて勉強していたのに、
同じくらいのエネルギーで「実践試験」も勉強していれば、1回で合格できたのに。
完全に手を抜いちゃっていました。

具体的には、「基礎試験」では、テキストをしっかり意味を拾いながら読んでいました。
ところが「実践試験」では、サラッと目を通すような読み方をしていました。
この差が、結果に出たのですね。

お勧めの勉強方法

・前述の Udemy の動画で基礎を固める
 超お勧め。

・「基礎試験」を受ける
 これ大事。
 「基礎試験」で設問のスタイルや難易度を掴みましょう。
 「実践試験」のテキストの内容が、「基礎試験」の時のように出題される
 と思って臨むと良いですよ。
 難易度が分かっていると、とても気が楽になると思います。

・「実践試験」のテキストを、ただただ、ひたすら勉強
 このテキストからしか出題されません(そうアナウンスされているし、その通りでした)。
 2回も受けた人が言うと説得力あるでしょ?
 テキストの、どの範囲から、何問出題されるか、もアナウンスされています。
 どの範囲から何点取るかシミュレーションをしてみると、勉強の「的」が絞り易いです。
 28問/40問の正答で合格。12問を落としても大丈夫、という計算。
 この記事の「まとめ」の後に、「出題内容と問題数」を記載しておきます。
 参考にしてみて下さい。

まとめ

基礎力が大事。
「基礎試験」を合格してから、「実践試験」を受けるのが良いですよ。
これは他のプログラミング言語の経験者にもお勧めの方法です。
「基礎試験」で、Python がどんな言語なのか、を勉強すると、「実践試験」の勉強も理解がし易いです。

基礎力には、Udemy がお勧め。
「基礎試験」を勉強するにも、「実践試験」を勉強するにも、その先がスムーズに理解できると思います。

Udemy プログラミング言語カテゴリー

講師:酒井 潤 (Jun Sakai)さん。
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

※動画より書籍が良い人は、この動画の書籍版といえる、下記の本が良いかも。
シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

以上、失敗談と、合格の為の力の配分などを書いてみました。
これから「実践試験」を受ける方の参考になれば幸いです。

出題内容と問題数

1章:Pythonの環境(1問)

・Pythonパッケージを管理する – pip
・仮想環境を作成する – venv

2章:コーディング規約(2問)

・Python標準のスタイルガイド – PEP8
・静的コード解析ツール – Flake8
・ソースコードの自動整形 – Black

3章:Pythonの言語仕様(7問)

・例外処理
・with文
・関数の引数
・アンパック
・内包表記、ジェネレーター式
・ジェネレーター – generator
・デコレーター

4章:Pythonのクラス(3問)

・class構文
・属性とメソッド
・継承
・dataclass
・オブジェクト関連関数

5章:型ヒント(2問)

・型ヒント

6章:テキストの処理(4問)

・一般的な文字列操作を行う – str、string
・フォーマットと文字列リテラル – f-string
・正規表現を扱う – re
・Unicodeデータベースへアクセスする – unicodedata

8章:日付と時刻の処理(2問)

・日付や時刻を扱う – datetime
・時刻を扱う – time
・IANAタイムゾーンデータベースを扱う – zoneinfo

9章:データ型とアルゴリズム(5問)

・ソート – sorted、sort、operator
・さまざまなコンテナー型を扱う – collections
・列挙型による定数の定義を行う – enum
・イテレーターの組み合わせで処理を組み立てる – itertools
・ミュータブルなオブジェクトをコピーする – copy

10章:汎用OS・ランタイムサービス(2問)

・OSの機能を利用する – os
・ストリームを扱う – io
・インタープリターに関わる情報を取得、操作する – sys
・コマンドラインオプション、引数を扱う – argparse

11章:ファイルとディレクトリへのアクセス(2問)

・ファイルパス操作を直観的に行う – pathlib
・一時的なファイルやディレクトリを生成する – tempfile
・高レベルなファイル操作を行う – shutil

13章:特定のデータフォーマットを扱う(2問)

お勧め。範囲が狭い。テキストも設問も難易度が低い。

・CSVファイルを扱う – csv
・JSONを扱う – json

14章:インターネット上のデータを扱う(2問)

・URLをパースする – urllib.parse
・URLを開く – urllib.request
・Base16、Base64などへエンコードする – base64

16章:テスト(3問)

・対話的な実行例をテストする – doctest
・ユニットテストフレームワークを利用する – unittest
・モックを利用してユニットテストを行う – unittest.mock

17章:デバッグ(2問)

・対話的なデバッグを行う – pdb、breakpoint
・コードの実行時間を計測する – timeit
・ログを出力する – logging

18章:暗号関連(1問)

・安全な乱数を生成する – secrets
・ハッシュ値を生成する – hashlib

コメント

タイトルとURLをコピーしました