基本情報技術者試験をそこそこの点数(午前86.25点, 午後88.50)で合格したので勉強法を書く

平成30年秋期の基本情報技術者 (FE) 試験を表題の点数で合格しました。この記事は私が FE 試験の勉強をどのように進めたかについて、今後受験される方へ向けて一般的なアドバイスを絡めた受験記です。アドバイスというと偉そうで申し訳ないですが、こんなユルい理解度でも午後9割近く取れるんですよ、ということを肩肘張らずに伝えるのが本記事の主眼です。

この記事を要約すると

  • 試験までにやったことは
    • 教科書の通読
    • 過去問 4 回分を 3 回ずつ解く
    • 試験 1 週間前から過去問を再度通読
  • アルゴリズムのおすすめ本は『みんなのデータ構造
  • 基本情報の出題範囲は広い範囲をカバーしており良いが、理解していなくても試験は突破できる

この記事を読むと分かること

  • 試験勉強中の具体的な状況
  • どれくらい・どんな風に過去問を解いたら理解が深まったか
  • 気楽にじっくり勉強して合格を目指す方法
  • 試験中にくじけない方法(そんなものはない)

この記事を読んでも分からないこと

  • 短期間で合格する方法
  • Java、データベースの勉強法
  • 教材の良し悪し
  • テクノロジー系設問に関する深い理解に基づく洞察

前提条件(試験前の状況)

  • 筆者は非情報系専攻・非プログラマ・非SE
  • 情報系の用語には慣れ親しんでいたが、基礎的な理解がない
    • ソフトウェア:2の補数の計算方法を覚えていない
    • ネットワーク:OSI参照モデルを言えない
    • データベース:SQLを書いたことがない
    • いわゆる得意領域がない(ネットワークに強い、DBに強い、アルゴリズムに強い etc)
  • プログラミングは趣味でやっており多少分かる
    • 本試験は Java で受験したが、Javaをきちんと勉強したことはない

午後試験選択受験科目

問2〜7

ソフトウェア、ネットワーク、プロジェクトマネジメント、システム戦略

問9〜13 (言語)

Java

結果

  • 午前得点 86.25点
  • 午後得点 88.50点

勉強開始 (8月上旬, 2ヶ月半前)

テキストはオーム社の『基本情報技術者標準教科書』(https://www.ohmsha.co.jp/book/9784274221484/) を選びました。ネットで検索するとキタミ式がイラスト豊富でわかりやすいという評判でしたが、書店で各社テキストの内容を軽く確認して、教科書らしい記述スタイルの書籍が自分には合うと思い、オーム社の本を選びました(他社テキストを読み込んでいないため、この選択が良かったかどうかは今でもわかりません*1)。

テキストの勉強法は、片道40分の電車内で単に黙読していました。気楽に受験することを目的としていたので、やる気があるときにたくさん読むという態度で臨みました。約1ヶ月ほどで一通り目を通し、用語とその意味をうっすらと把握している状態になったと思います。

これは試験の性質上仕方ないのかもしれませんが、FEのテキストは情報系概念の理解を深めるというより、広範な分野の用語解説 (クイズ) 的な側面が大きいように感じました。もちろんアルゴリズムやネットワークなど、手を動かし計算する例題が提示される分野もあるにはあるのですが、やはりクイズ偏重に感じました。その意味で、テキストは午前試験の対策には役立ちましたが、午後試験に関しては前提的な知識を補う程度の役割しか果たしていないように思えました。勉強開始1ヶ月の時点でまだ用語の理解もなんとなく覚えている部分が多かったのですが、午後試験の合格を目指す上では、早めに過去問に取り掛かったほうがよいと考えるようになりました。

過去問を解き始める (9月上旬, 1ヶ月半前)

テキストは技術評論社の「パーフェクトラーニング過去問題集」を選びました。技術評論社の過去門集の良い点は、個人的にレイアウトが見やすく、(午前問の場合) ページ左手に問題文、右手に解答解説とすぐに答え合わせができるようになっている点です。すぐに答え合わせできる過去問のよいところは、どのページからでも試験問題を解けるので、勉強に取り掛かる心理的ハードルが低いということです。答えが別紙になっている場合、ある程度まとまって問題を解いてからでないと答えあわせしづらいため、この差は非常に大きいと思います。

実は私は試験当日まで一度も通し (午前午後を一気に解く模試的なスタイル) で問題を解きませんでした。なぜかというと、答えが合っているか不安を抱き続けながら過去問を解くのは気楽ではないからです :)。もっとも、そのせいで試験当日は合計5時間の試験に耐えられるのかそれなりに不安でしたが、そこはなんとかなったのでよしとしてください。私のように一度も通しをやらないのは心理的安全性の面から言っておすすめしませんが、きちんと問題を解けば本番のシミュレーションなしでも合格可能なことは請け合います。

過去問は4回分を3回ずつ解きました。技術評論社の過去問は紙面に直近4回分、ウェブからダウンロードできるpdfでそれ以前の11回分の試験を収録しており、最初は15回分全部解くぞと息巻いていましたが、結局やらずじまいでした。そんなものなのです。たった4回分の過去問を解くだけで9割近く取れるのが基本情報という試験なのだと思います。

これは資格試験一般に言えるコツなのですが、選択問題は1回解くと正当肢を覚えているせいで、繰り返し解く際に問題文や選択肢を真面目に検討せずとも問題が解けてしまう現象が起こります*2。なので1回解いた過去問は解説を読んでからすぐに解き直さない方がいいと思われます。私の場合問題を解いた翌日に1回、翌週にもう1度解き直すといい感じに正答肢を忘れていて頭を使った感覚が生まれました*3

この時期は1日3時間ほど机に向き合っていました。具体的なローテーションを書き下すと、

  • 初日はH30春の午前問題を解く
  • 翌日はH30春午後問題を解き、H30春午前問題の復習
  • 翌々日はH29秋午前問題を解き、H30春午後問題の復習
  • 翌々々日はH29秋午後問題を解き、H29秋午前問題の復習
  • ...

という風に午前問と午後問をズラしつつ解き進めていました。システマティックに過去問と復習を繰り返すのはあまり気楽とは言い難いように思えるかもしれませんが、勉強のスケジュールは固定してしまった方が割と気楽にできます(とはいえ、このローテを厳密に守っていたわけでもなく、サボる日もありましたが…)。この生活スタイルを3週間程度続けたあたりで合格圏にたどり着いたなという感覚が生まれました。

9月1日から過去問を解き始め、9月20日の時点で試験勉強は一旦ストップしました。試験はだいたい理解していてだいたい解けるという内的感覚が生まれるまでやるのが重要だと思います。もっとも、その感覚を自制心をもって見定めるのが難しいのですが…

試験1週間前から空き時間を見て過去問を読み返し、頭の中でだいたい問題を解けるようになったところで試験日を迎えました。

午後試験へのコメント

ここでは午後試験科目について簡単にコメントします。選択科目は (冒頭に記した通り) ソフトウェア、ネットワーク、プロジェクトマネジメント、システム戦略で受験しました*4

問1 セキュリティ

毎度シチュエーションは変わるものの、過去問からそのまま同じ文面で出問されることもある分野です。似たり寄ったりの問題が多く、過去問反復が有効な分野だと思います。

問2 ソフトウェア・ハードウェア

過去の出題を見ると、論理回路(H30春)、セマフォ変数による排他制御(H29秋)、温度モニタ(H29春)、状態遷移図と構文解析(H28秋)という風に出題範囲が広いです。どれも情報系の大学生であればさして難しくないと思われる話題ですが、そうでない人々(私含む)は過去問を解き対策するという方式で勉強することができないため、難しいと感じられるかもしれません。しかし、問2は問題文中に正答するため必要な判断材料が全て提示されていることが多いです。そのため、問題をきちんと読むと、見たことも聞いたこともない問題でも初見で解けてしまいます。よって月並みですが、問題文をよく読んで把握することが正答への近道です。問題文を読み込む訓練になるため、この分野でも過去問の反復は一定の有効性があると私は考えます。

問4 ネットワーク

ネットワークと銘打っていますが、これも問題文自体に必要な知識が書いてある問題が多いです。典型的な例として、H29秋試験問4のコールセンタ設備の構成に関する問題を取り上げます。

設問1は、顧客からの通話要求をオペレーター席電話に繋ぐまでのシーケンス図を完成させるものです。これは本文中の以下の記述を、提示された図と比較しながら読解できれば正答できます。

コールサーバーはVoIPを行い、音声ゲートウェイから電話の接続要求があると、オペレータ席にある電話端末とPCの状態(以下、オペレータ席の状態という)を管理している着信分配サーバーに問い合わせて、接続要求待ちのオペレータ席の電話端末へ接続する。

このとき、VoIP、音声ゲートウェイ、着信分配サーバーといった用語にどんな意味があるかを知っている必要すらありません。どこからの接続請求を誰が受けて誰が何に問い合わせて接続するのかという名詞間の関係が読解できれば正答できます。その意味でFEのネットワークの問題を解くのに必要なものは文章読解力であり、ネットワークの知識は必須ではないのです。

設問2では待ち行列の話題が出ます。しかしここでも待ち行列の知識は不要です。M/M/sモデルやリトルの公式など仰々しい用語が出てきますが、必要な計算式は問題文中で提示されているので、算数ができれば正答できます。

問6 マネジメント

この分野は文章読解力があれば解けます。慣れないとサービスやプロジェクトの要件を把握するのに時間がかかるので、過去問による反復練習が効く分野といえるでしょう。ただし本試験ではアローダイアグラムによるスケジュール管理が出題されました。これはさすがに無知識だと厳しいので、ここだけは出題されても大丈夫なように事前準備しておく必要があると思われます。

問7 システム戦略

この分野は文章読解力と基本的な計算遂行能力があれば解けます。ただし、時たまH28年秋試験のように簡単な会計知識を前提とする問題が出ることがあります。そのような場合は諦めて余力がある時にその方面の勉強ができるといいのかもしれません(私はやりませんでした)。

問8 疑似言語(アルゴリズム

人によって難易度が大きく変わる分野だと思います。考えるために必要な情報は全て問題に提示されているので、一見分からないとくじけそうになっても絶対に諦めずに頑張りましょう…。過去問の演習はくじけない心を養うためには役に立つかもしれませんが、対策としては十分でないと思います。正攻法で完答を目指すなら、アルゴリズムの本を読んでじっくりと取り組むべき分野だと思います。

しかしながら、試験問題の疑似コードは教科書のように簡潔なアルゴリズムではないこともあるので、問題を解くのにすぐ効く本というのはない気がします。試験対策用に書かれたアルゴリズム本もあるようなので購入を検討してみるのもよいかもしれません。

私がアルゴリズム全般の学習を目的として推薦する本は『みんなのデータ構造』です。この本はウェブ上で無料でダウンロード可能であり、ある程度高度な内容についても簡潔にまとめられた良書です。疑似言語版とC++版、Java版と3種類用意されており比較対照しながら読解できるのも高ポイントです。その他私が(きちんと)読んだと言えるアルゴリズム系の書籍の中で、試験にかすりそうなものを難易度順に挙げると、『なっとく!アルゴリズム』、『アルゴリズムクイックリファレンス』、『入門 データ構造とアルゴリズム』(ただしこの本は有用だが異常に誤植が多い)です。

『なっとく!アルゴリズム』はいわゆる超入門者むけの軽い本で、扱う話題に網羅性はありません。網羅性が低い代わりに一つ一つのアルゴリズムの説明が丁寧です。また後半ではダイクストラ法や動的計画法やk-近傍法など、それなりに高度なトピックを取り上げている点も良いです。他の超入門書にありがちな、最後まで読んでもクイックソートユークリッド互除法など、本当に初心者向けのトピックだけ紹介して終わってしまうような代物とは一線を画しています。

アルゴリズムクイックリファレンス』は疑似コードとC, Javaのコードが交互に掲載されているのでこれもアルゴリズム問題向きの参照しやすい本と思います。

『入門 データ構造とアルゴリズム』は疑似コードではなくCの実装が載っている本です。この本のよいところは、演習問題が非常に多い点です (600問程度)。座学に終始することが多い他のアルゴリズム本と違い、演習に取り組むという形式で力が付きます。この本の悪い点は誤植やコードの間違いがありえないほど多いところです。私が確認しただけで章によっては1ページに1箇所というペースで間違いがあるので、読み進めるにはある程度の忍耐力が必要になります。

本試験は整数式の解析が出題されました。これは過去問と比較すると易しかったと思います。ただ私は計算ミスで2問落としてしまったのでやや悔しい結果でした。

問11 Java

この分野は事前準備が必要と思われます。「思われます」と書いたのは、私は試験のためにJavaの勉強をあまりしなかったからです。プログラミングは得意なものの、Javaは特に詳しくないので普通に慢心していたのだと思います。これを真似することはおすすめしません。対策は『Java本格入門』に軽く目を通した程度でした。ラッキーなことに、本試験では言語固有の知識はあまり問われず、問題も簡単であったため満点でした。ただしH30春のパッケージ間アクセスのような、Java固有の知識を問われていたら普通に完答できなかったはずなので魔が差していました。

試験当日

試験当日はかなり緊張していました。試験勉強はおおむねよくやったという感覚があったのですが、それでも不安がありました。あまり覚えていない分野が出たらどうしようとか、アルゴリズムで頭真っ白になって全問落としたら…というような思いがよぎっていました。

午前の基礎理論は口ほどにもない問題ばかりと思っていましたが、なんと試験当日では1問目の16進数を10進分数にする手順が頭から飛んでしまいました(というか分数を忘れました)。5秒考えてやり方が頭から引き出せないことを確認した後、落ち着いて次の問題に移りました。他の問題を答えたらようやくやり方を思い出しました。単純なテクニックですが、やはり頭が真っ白になったら一旦問題を飛ばすというのは有効です。

午前は過去問の焼き直しが多い半面、高得点を獲るのは難しいなと感じました。特に用語の正しい説明を選ぶ系の問題は、知らないと答えようがないものです。ただし、たとえ知らない用語であっても、言葉の意味と説明を照らし合わせると答えが推測できる場合があるので、ある程度諦め悪く問題文を読み返すのは意外と有効です。

午前試験は2時間ほどで途中退室しました。答えの見直し、マークズレのチェックなどやれることはやったほうがいいと思います。

ちなみに午前試験が終わった時点で長丁場がつらく帰りたいという気持ちが大きかったです。ヘタレですがそういうものなのです。

今回の午後試験は、難しい問題はありませんでしたが、やはり緊張しました。問6のプロジェクトマネジメントはアローダイアグラムについて出題されましたが、始め最早開始日と最遅開始日の定義が思い出せず、かなり苦労しました。問7のシステム戦略は一読して問題文を理解できず辛かったのですが、落ち着いて冒頭から一行ずつ丹念に読み込むことでようやく要件が把握できました。問題文が頭に入ってこないと大変辛い気持ちになり焦りもするのですが、そういうときこそ落ち着いて初めからやり直すのが正答への近道だと思います。

試験が終わった時点では「合格はしてるだろうけど高得点は厳しいかな」と思っていました。(Java以外は)割と勉強したつもりでしたが、最終的には運要素もあるという気持ちです(身も蓋もない)。

試験を終えての感想

基本情報の出題範囲はまんべんなく様々な分野を抑えており、悪くない試験だなと思いました。実際シラバスを見ると、それぞれの分野で最低限必要と思われる基本概念を広く抑えていることが分かります。ただし試験自体はその分野の概念を正確に把握していなくても解けるものが多く(特に午前は類推で解ける問題が多い)、合格は知識の証明にはなるものの、実力の証明になるかと言うとそんなことはないという認識です。この辺はネットでよく言われている基本情報技術者の評価と異ならない評価に落ち着きました。合格した感想としては、国家資格であるため合格すると国に認められた感じがしてなんとなく気分がよく、IT系でやっていく自信を付けるにはいい資格だなと思いました。

*1:オーム社テキストの記述には概ね不満はありませんでしたが、単位系の扱いが若干粗雑な部分があります。

*2:そんなアホは私だけかもしれませんが

*3:この辺りは俗に言うエビングハウス忘却曲線と適切な復習タイミングのネット記事の受け売りです

*4:データベースの選択も検討しSQLの勉強も進めていたのですが、試験問題でSQL文を見ると目が滑るというしょうもない理由で断念しました。どうでもいい言い訳を重ねると、SQLという言語自体は好きです。スッキリわかるSQLを読んだ程度ですが