プログラミング初学者が7週間でPython 3 エンジニア認定基礎試験に合格するまでの記録

## この記事の概要
プログラミング初学者です。
2021年7月13日にPythonの勉強を始めて、2021年8月29日に[Python 3 エンジニア認定基礎試験](https://www.pythonic-exam.com/exam/basic)に合格しました。
この7週間は日々頑張ってたなーと思っているので、その経過を記録しておこうと思って書いた記事です。

## 前提
### Pythonを勉強する前の私のスペック
- 文学部卒 30代前半 女性
- 今の勤務先（非IT系）に2021年6月に就業し、社内SEみたいな人の後継者になることを前提にOJTを受けている。
- 父の影響でPC自作もするので、文系だがコンピュータ全般に関してぼんやりとした知識がある。
- HTMLの基本を理解しているが、知識は00年代で止まっている。
- コマンドプロンプトにコマンドを打つとコマンドに定義された命令が実行されるということが分かっている。
- Wordやテキストエディタで文字列を検索・置換するための正規表現が分かっている。
- 夫がバックエンドエンジニアをしているが、どういう仕事をしているのか全くわかっていなかった。

### 7月13日より前まで
XMLを扱う業務で使うためのスタイルシートの書き方について勉強していた。

## Pythonを始めてから7週間の記録
### 7月13日 Pythonの勉強を始める
スタイルシートで出来ないことを実現するためにPythonを勉強してみろとOJTの教育担当者から言われる。

[ゼロからのPython入門講座 - python.jp](https://www.python.jp/train/index.html)
この入門講座の最初から最後までを実践してみた。
最後の「スイカ割りゲームを作る」は難しかったけれど、プログラムの設計から勉強できたし書いたコードを直していくのも面白かった。

### 7月14日頃 東京都のコロナ陽性者数のデータを使って練習する
何かテーマを決めて実践を積みたいと思い、東京都の日付ごとのコロナ陽性者数のCSVを作ってニュースで報道されているような先週の同じ曜日比や一週間平均を出力するプログラムを作ってみることにした。
ニュースを参考にわざわざ8桁の日付と人数だけのCSVを作ったけれど、よくよく調べたら[東京都が詳細なCSVデータを公開している](https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000089)のでCSVから作る必要はなかったかも……。
最初はfor文で日付を検索する方法すら分からず、真っ暗闇の中を目隠しして歩いているような印象だったけれど、この時にリスト内包の扱い方を覚えて少しずつプログラムが書けるようになっていった。

### 7月26日頃 実際の仕事に活かせるプログラムを書き始める
実際に仕事で扱っているXMLをPythonで処理するコードを書き始めた。このあたりでreモジュールやlxmlモジュールなどいろいろなモジュールの使い方を覚えた。
今までちまちま行っていた作業を自動化して一気に出来るようになっていくのが楽しいと思った。

### 8月6日頃 ログ出力を理解する
作業の自動化が出来るようになったので、教育担当者からログ出力のやり方を調べろと言われて実装した。
loggingさっぱり分からなかったけど設定ファイルをiniとJSONとYAMLで書いてみてやっとlogger以外を理解して、機能や出力先ごとに設定を分けられることが分かってloggerも理解した。

[【Python】仕組みを理解してログ出力を使いこなす &#8211; Hacker&#039;s High](https://hackers-high.com/python/logging-overview/)
こちらのサイトがとても理解の助けになった。図がわかりやすいので何回も見返した。

[Pythonでprintを卒業してログ出力をいい感じにする - Qiita](https://qiita.com/FukuharaYohei/items/92795107032c8c0bfd19)
実践的な面ではこの記事を参考にした。

### 8月12日〜8月16日頃 クラスを理解する
教育担当者からUMLを理解しろと言われてこの記事を読んだ。
[【UML入門】ソフトウェア設計図を描く前に知っておきたいUMLの基礎知識｜はやぶさの技術ノート](https://cpp-learning.com/uml/)
その上でクラス図の自動生成などを試してみるも、当たり前だがclassを何も設定していないので何も出力されなかった。
そこからクラスを理解しようと思って色々調べたわけだが、書き方もなぜ必要なのかもわからない。

[Python♪基本：クラスの初学でのモヤモヤを解消しよう | Snow Tree in June](https://snowtree-injune.com/2020/04/18/class-ptu001/)
ググって検索結果の2ページ目まで全部開いて見つけたこの記事がとてもわかりやすかった。
東京都のコロナ陽性者数のデータで練習していたとき、「複数の日付の出力ってこんなにたくさん変数作らなきゃならないの……？」と思っていたので、この記事に記載されているコードを参考にコードを直した。おかげでクラスの理解は早かったと思う。

[python♪基本：「クラス」って必要？def関数でいいんじゃない？ | Snow Tree in June](https://snowtree-injune.com/2019/02/11/python-class-necessity/)
クラスを理解したものの、タイトル通りのことを疑問に思っていたので、同ブログのこの記事もわかりやすかった。

クラスの使い方を理解したことで、loggingのloggerの使い方も更に理解が深まったと思う。

また、その流れでオブジェクト指向についても理解できた。
XMLの加工をし始めてから、変数に入るのが文字列や数字だけではなくオブジェクトなるものもあるというのはぼんやり分かっていたのもあるかもしれない。

[初心者向けに徹底解説！オブジェクト指向とは？](https://eng-entrance.com/what-oop)
この記事がとてもわかりやすかった。理解が深まったし、サンプルコードはJavaで書いてあるけれど何が書いてあるか理解できるようになっていたので驚いた。

### 8月22日 受験申し込み
クラスを理解したのと同時期に、なにかのサイトを見てPythonに資格試験があることを知り、せっかくここまでPythonを理解できたのだから、試験を受けようかなと思い始めた。
[夫が突然Professional Cloud Developerという試験を受けて合格した](https://clomie.dev/posts/20210823-professionalclouddeveloper)のもあって、自分も試験に受かるくらい勉強しようと思った。

ほとんど勉強せずに模擬試験を受けてみたら1時間まるまるかけて55%しか点数が取れなかった。それでもそのくらいは取れたんだからちゃんと勉強すれば受かる！と信じて「Pythonチュートリアル 第4版」を読み始めた。
どの記事でも書かれている通り、初学者には理解しづらい本なのでぶつぶつ音読しながら読んでいた。読んでわからない言葉や概念が出てきたらすぐググって書き込んでいたし、for文が連鎖しているところは分解して書き込み、lambda式もdefに書き直し、理解しようと努力した。
模擬試験は何度か繰り返して、間違えたところは理解できるまでPythonチュートリアルを読み返した。最終的に模擬試験は30分もかからず回答できるようになり、点数は95%取れるようになった。

この試験勉強で、Pythonには私が使っていなかった便利な機能がたくさんあるということを知れたし、当たり前のように使っていた仕組みについても理解が深まったと思う。

### 8月29日 試験当日
最寄り駅から一駅のPC教室で受験した。
模擬試験よりも解答を出すまでに時間がかからない問題が多かったけれど、Pythonチュートリアルをしっかり読んでいないとわからない問題も多かった気がする。解答を2つ選択する問題が1問あったと記憶している。
あ、これはちょっとわからない、というのが数問あったけれど、20分ほどで解き終えて、2回見直しして、大丈夫だろう、と判断して40分ほどで解答を終了した。

解答終了後に5問ほどアンケートがあり、アンケートを答えたあとに合格と表示された。この試行錯誤の7週間がこうして一つの形になったのは嬉しかった。
点数は1000点満点の800点だった。もうちょっと取れてたらよかったなと思ったけれど、模試と本番は違うので仕方ない。

## その後と今後の目標
OJTの教育担当者に試験に合格したことを報告したら「この短期間ですごい！」とたいそう喜んでくれた。
教育担当者の人と夫は私がプログラミング学習をする上で良きメンターであったので、人に恵まれていたと思う。
夫は私がプログラミングがわかるようになったおかげで仕事の話が通じるようになり、以前より楽しそうだ。

30代半ばにして必要にかられてプログラミングを始めたけれど、コードを書くのはとても楽しいし、自分の可能性が広がった気がする。
試験を受けて合格したことは自分の自信にもつながった。

今後はデータ分析試験も受けたいし、静的型付けのコンパイル言語もなにか勉強したいと思う。