応用情報技術者試験を受けて思ったこと

atma Advent Calendar 2020 12月3日

この記事はatma Advent Calendar 2020の12月3日の投稿です。

11月中旬にアドベントカレンダーの話題が社内に出てきて、まだ3週間の余裕があると思ってたけどもうきてしまった。。

実は、最近仕事ではプロジェクトマネージャーみたいなことをやっていたためあまり技術的にネタになるようなことがなかった。ブログ投稿数が自分のQOLの指標だと思っているけれど、9月以降一度も更新していなかったのがそれを表していると思われる

とりあえずネタないかなーと思ってたら、最近10月に応用情報技術者試験を受けたので思ったことバーっと書く

なんで受ける?/受けた?

めちゃくちゃよく聞かれた

年齢の割には技術指導的なポジションで仕事をさせてもらっているが、本当にそれが自分に相応なのかずっとモヤッとしていて、ある程度定量的に実力が出る応用情報技術者試験を受けることで自分の技術力が社会で通じるのかどうか確認したかったというのが一番大きい。あとは、最近は技術的に学ぶ機会が減っていると思っていたのでちょうどいい負荷になるかと思って受験を決めたのもある。

あと、情報系の大学を出てコンピューターサイエンスの基礎があるエンジニアと比べて独学で勉強した自分に多少の劣等感は感じていたという点と単純に心配性という点も大きい。

勉強した方法

あんまり参考にならないと思うけど。

amazonで情報処理教科書 応用情報技術者 テキスト&問題集 2020年版(以降、本とする)を購入して、本の前からマネジメントの章ぐらいまで多分3週ほど読んだ。会計とかマーケティングは知らない言葉ばかりだったのと、本の後半に書いてあって重要性が低いのだろうと思って捨てた。

その後空き時間にスマホで過去問道場の午前の問題をH24~H29ぐらいまで解いた。これは1週ほどしかできていないが、この時点で午前は通過すると思ったので午後試験対策に移行した

試験1ヶ月前になって過去問道場の午後試験の過去問を解いた。これは長文が多く、スマホでやるには厳しいと考えて印刷することにしたが、いい感じに自分の受験する分野だけのPDFが転がってないので自分で生成することにした

  • https://www.ap-siken.com/index_pm.htmlからリンク先を抽出(※1)
  • このリンク先とPDFのURLが紐づいているので、ごねごねしてPDFのURLを生成
  • nodejsでPDFをダウンロード(※2)
  • そのPDFをコンビニでA4に両面印刷

ちなみにPDFは2000ページぐらいでとんでもない分量だったが最新の試験や古すぎる試験は解く必要がないので省いて1000ページぐらいには収まった。それでも印刷代で4000円くらいかかったのでアホだったと思う。普通に紙の過去問買った方が安かったし早かったけど途中からムキになっていたので悲しい。

/img/2020-12-03.JPG

こんなにいらんかった...

それも結局5~6割ぐらいしか終わってなくて計画性のなさに呆れてた。

最後3日前くらいはもう一度本を前から読み直していた。午後の過去問を解いているときに本に載っていない情報が大量にあったので、そういう情報をは本にメモしていたので午後の過去問で得られた情報もうまく定着できたと思う

ちなみに試験前日に財布をなくしましたが、今までに財布をなくしすぎていて、ないことに気づいて30秒くらいで平常心に戻りました。(まだ見つかっていない)

勉強・受験してどうだった?

勉強を始める前は正直、PM/SEという仕事には役には立たないと思っていたけど結構役に立っていると思っている

  • うろ覚え・曖昧な記憶だった技術に対して集中的に土台から理解できる時間を取ることができ、クライアント・エンジニアとのやりとりの解像度が1段階上がった
  • 理解が弱かったネットワークに対する知識がついて、AWSのVPC/サブネット/NGWなどの用語が具体的にイメージできるようになった
    • public subnetがいわばDMZ的な使い方をされるようなことに気づくことができた
  • 午後試験のシステムアーキテクチャの過去問題を解いていると、よく出てくるアーキテクチャに関する理解が深まる
    • そもそもアーキテクチャを選定するという仕事の全体像がよくわからなかったが、問題をこなすうちにアーキテクチャという職務に対するイメージができた
    • 小さい会社のPM/SEだとそのような視点も必要になるので多少は知っておくべきだと感じた
  • DB簡単すぎた

その他

※1


let sikens = [1,3,4,5,6,8]
sikens.forEach(s=>{
  let b = document.querySelector("table[id='" + s + "']")
  let a= b.querySelectorAll("a")
  a.forEach(elem=>{
    console.log(elem.href)
  })
})

※2

// モジュールロード
var https = require('https');
var fs = require('fs');

// URLを指定 
const urls = [
    "https://cdn.ap-siken.com/pdf/01_aki/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/31_haru/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/30_aki/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/30_haru/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/29_aki/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/29_haru/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/28_aki/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/28_haru/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/27_aki/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/27_haru/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/26_aki/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/26_haru/pm01.pdf",
    "https://cdn.ap-siken.com/pdf/25_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/25_haru/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/24_aki/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/24_haru/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/23_aki/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/23_toku/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/22_aki/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/22_haru/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/21_aki/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/21_haru/pm09.pdf",
    "https://cdn.ap-siken.com/pdf/01_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/31_haru/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/30_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/30_haru/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/29_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/29_haru/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/28_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/28_haru/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/27_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/27_haru/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/26_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/26_haru/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/25_aki/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/25_haru/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/24_aki/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/24_haru/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/23_aki/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/23_toku/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/22_aki/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/22_haru/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/21_aki/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/21_haru/pm02.pdf",
    "https://cdn.ap-siken.com/pdf/01_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/31_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/30_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/30_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/29_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/29_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/28_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/28_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/27_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/27_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/26_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/26_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/25_aki/pm03.pdf",
    "https://cdn.ap-siken.com/pdf/25_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/24_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/24_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/23_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/23_toku/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/22_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/22_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/21_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/21_haru/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/01_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/31_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/30_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/30_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/29_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/29_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/28_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/28_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/27_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/27_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/26_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/26_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/25_aki/pm04.pdf",
    "https://cdn.ap-siken.com/pdf/25_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/24_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/24_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/23_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/23_toku/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/22_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/22_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/21_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/21_haru/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/01_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/31_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/30_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/30_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/29_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/29_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/28_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/28_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/27_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/27_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/26_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/26_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/25_aki/pm05.pdf",
    "https://cdn.ap-siken.com/pdf/25_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/24_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/24_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/23_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/23_toku/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/22_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/22_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/21_aki/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/21_haru/pm06.pdf",
    "https://cdn.ap-siken.com/pdf/01_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/31_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/30_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/30_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/29_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/29_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/28_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/28_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/27_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/27_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/26_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/26_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/25_aki/pm07.pdf",
    "https://cdn.ap-siken.com/pdf/25_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/24_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/24_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/23_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/23_toku/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/22_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/22_haru/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/21_aki/pm08.pdf",
    "https://cdn.ap-siken.com/pdf/21_haru/pm08.pdf"
]

const BASE_PATH = "/Users/xxxxxx/ouyoujoho-gogo-pdf-downloader/pdfs"

urls.forEach((url, index)=>{
    // 出力ファイル名を指定
    console.log(url)
    var outFile = fs.createWriteStream(BASE_PATH + "/" + index + "_" + url.slice(29).replace("/", "_"));
    var req = https.get(url, function (res) {

        // ダウンロードした内容をそのまま、ファイル書き出し。
        res.pipe(outFile);
    
        // 終わったらファイルストリームをクローズ。
        res.on('end', function () {
            outFile.close();
        }); 
    });
})

See also