🚴‍♂️

R5に受験した基本情報の勉強/対策話

2023/08/21に公開

概要

2ヶ月前にはなりますが、基本情報を取得しました!
https://twitter.com/_TanukiMoon/status/1679697207820451841?s=20

インターネットの海にはたくさん合格記があるのでn番煎じではありますが、
自分がどうやって勉強/対策したかをまとめていきたいと思います。

想定する読者

・これから基本情報を取得したいと考えている人

基本情報って?

詳しくはこちら。
https://www.ipa.go.jp/shiken/kubun/fe.html

要約すると、ITで働くうえで必要な基礎知識を保有していることが証明されるよって感じですかね。
とはいえ、ガチガチの技術寄りというかはマネジメント寄りの知識も多いのでプログラミング未経験でも気軽に取れる資格だと思います。

試験は科目A/B(過去は午前/午後)に分かれていて、
午前は4択60問の暗記系(ストラテジ/マネジメント/テクノロジ)
午後は複数択20問の(アルゴリズム/セキュリティ)に分かれています。
このうち科目A6割以上、科目B6割以上を取ることで合格することができます。

ここ最近でCPAになったり科目Bのプログラミング言語が廃止になったりしています。
大体は過去の受験と一緒ですが、直近の情報として参考になればいいかなと思います。

筆者について

技術感

・現在24歳、大学は情報学部で組込みの勉強してました。
→ 仕事でプログラミングしてます。
それなりに下地はあったという感じです。

学習期間

・2ヶ月(23年4月から着手)
→ 通勤時間(往復2時間弱+昼休みにちょっと)
とはいえ毎日詰めてた訳でなく、やる気ない時は1週間勉強してなかったり。

科目A

勉強方法

僕は勉強が苦手で95%が科目Aの勉強/対策でした。

まずは概要を掴むために教本を読んで学習。
※僕はこのシリーズ読んでました。
https://amzn.asia/d/8onfo5m

この時、初めから全てを詰め込むより、
1周目は軽く読んで2周目に詰め込む方が良いと思います。

というのも基本情報の出題範囲は分野が違えど親和性があるものばかりなので、
先に基礎を固める方が応用もスムーズに学習できるからです。

また、初めから全て覚えようとすると1つの分野に時間がかかりモチベが低下する場合があります。
軽く読むことで分野の切替が素早くできるので、僕はモチベを保ちやすかったです。
(味変といいますか、同じことばかりすると飽きちゃう性格なので…)

そんなこんなで60%ぐらい覚えたなと感じたら後はひたすら過去問です。
過去問は下記のサイトでひたすら勉強しました。
https://www.fe-siken.com/fekakomon.php

四択は暗記と計算の2種類に分かれます。

暗記
当たり前かもしれませんが、設問と答えを合致させるのではなく、四択の意味を理解する学習がおすすめです。

設問と答えだけを結ぶと1問だけの知識量ですが、四択全てを覚えると一気に4問分の学習になります。

まあ、基本情報は過去問が結構な割合で出るので設問と答えを結ぶだけでも点数は取れるのですが、資格取得のために学習するのではなく実務で理解するために学習すべきだと思うので
きちんと用語の意味を覚える方法をおすすめします。

計算
計算は捨てるか悩んでいましたが絶対学習すべきです。
基本情報の計算は中学数学ができれば解けるものばかりなので、
過程さえ理解すれば案外解けます。
後、あからさまに違う選択肢も多いので絞り込みやすいのもあります。

僕が印象に残ってるのは下記の問題です。

・2/8/10/16進数の変換
・割合(ヒット率や人月計算など)
・並列と直列

そうして勉強し続けて、過去10〜15年分を9割取れるようになれば大丈夫だと思います。

本番は問題文に注意して落ち着いて取り組む。
きちんと学習していれば時間はたっぷり余るので、とにかく落ち着いていきましょうb

科目B

プログラミング未経験や初学者からするとこちらの方が鬼門かもしれません。

一方、経験者の場合は身構える必要はあまりないかもです。
というのも僕は、サンプル模擬を1周していけそうだったのでそれっきり学習せず合格できたからです。
競プロもしていない、実務も1年程度でもいけたことを加味すると難易度は高くないと思われます。

勉強法については、サンプル問題は必ず解いたほうがいいです。
個人的にはサンプル問題の解法を100%理解すれば他のテキストはいらないとさえ思っています。
ただ、未経験だったりで不安のある方もいると思うので科目Bを重点に置いたテキストの購入が
一番いいのかな・・・?とも。

とはいえ、それだと何も分からないので僕なりの注意点を記載します。
※本番は擬似言語ですが、ここではJavaで説明します。申し訳ありません。

順次・分岐・反復を理解する

当たり前ですが、このルールを意識するだけでコードを読む力は上がると思っています。

この中でもつまづきやすいのは「反復」だと思います。
反復はループを意味する処理で、一例としてよくfor文が登場します。

for文は4つの要素で成り立ちます。

・初期値の定義 - [1]
・条件式 - [2]
・増減式 - [3]
・実行処理 - [4]

// javaのfor文

for([1]int i = 0; [2] i < 2; [3] i++){
    [4]System.out.println("Hello" + i);
}

// 結果
--------------
Hello0
Hello1
--------------

ポイント
【初期値の定義】
・一番初めに一度だけ処理を実行する

【条件式】
・ループの初めに評価される。
・trueの場合処理を実行し、falseになると処理を抜ける。
・条件式はif文(分岐処理)もwhile(for文と違うループの書き方)も「true」の時、中括弧内の処理を実行します。
※ 僕はtrueかfalseか忘れたり悩んだ時はif文の書き方を思い出していました。

【増減式】
・ループの最後に行う。

順序をまとめると
1 初期値を定義
2 条件式を評価(この時、trueの場合3を実行。falseの場合5を実行)
3 実行処理
4 増減式の実行後、2に戻る
5 for文終了

条件式はtrue/falseしかない

どんな複雑そうな条件文でも、trueかfalseでしか成り立たないという話です。

例えば「0<0」はfalseです。
日本語にすると「0は0より小さい」が成り立たない(false)だからです。

では「0<=0」はというと、trueです。
日本語にすると「0は0以下」なので成り立ち(true)ます。
(少しおかしい日本語ですが、意味は合ってますね…)

ここまでは簡単でしょうか。では、少し複雑にしてみます。

「0<0 && (6/2==2 || 3%2==0)」
※&&はAND,||はORです。

こういう時はまず、要素を分解します。

比較式
「0<0」は上述した通り、trueです。

「6/2」は3になるため、falseになります。
「==」は等しいという意味で、3と2は等しくないからですね。

「3%2」は3/2の余りで、1となります。そのため、等しくないのでfalseになります。

記号を当てはめる
記号と上述の解を当てはめると、「true AND (false OR false)」となります。
「false OR false」はfalseなので、
「true AND false」で答えはfalseです。

実際のコードや試験では「i < 1」のように変数が式に登場しますが、
値を当てはめることで上述の考えを使って解くことができます。

int i = 0;

// 0 < 1 は成り立つのでtrue
if(i < 1){
   System.out.println("True");
}

// 結果
---------
True

時間を減らす術をみつける

僕が試験をした時は早足でギリギリ見直し1周できたという感じでした。
そのため、時間短縮の方法は多く確立すべきだと思いました。

分解と当てはめを減らす
分解と当てはめは時間とトレードオフの関係にあります。
そのため、単純な処理は頭の中でできるようにしましょう。
※前述したfor文の処理順序や簡単な条件式など

明らかな誤答を見つける
例えば、for文の条件式が虫食いになった問題

255Helloと出力されるにはどうすれば良い?

for(int i = 0;???;i++){
    System.out.println("Hello");
}

1. i>256
2. i>255
3. i<255
4. i<256

この問題において1,2は間違いです。
初めの評価がfalseでループしないからですね。

問7 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。
関数 factorial は非負の整数 n を引数にとり,その階乗を返す関数である。
非負の整数 n の階乗は n が 0 のときに 1 になり,
それ以外の場合は 1 から n までの整数を全て掛け合わせた数となる。

〔プログラム〕
○整数型: factorial(整数型: n)
if (n = 0)
 return 1
 endif
return  ???(解答)

解答群
ア (n - 1) × factorial(n) イ factorial(n - 1)
ウ n エ n × (n - 1)
オ n × factorial(1) カ n × factorial(n - 1)

基本情報技術者試験 科目 B サンプル問題より
https://www.ipa.go.jp/shiken/syllabus/henkou/2022/ssf7ph000000h5tb-att/fe_kamoku_b_set_sample_qs.pdf

今回の穴埋めは1からnを掛け合わせた数を求めれば良いのですが、
掛け合わせるということで再帰やループが必要となりそうです。
なので。選択肢として明らかにループ(再帰)していないものが「ウ、エ」なので除外できます。
これだけで6択が4択になりました。

後は消去的に考えていくのが良さそうですので、簡単な値を当てはめて解を導きます。

n = 0 の時は1を返すので、次の値である「n = 1」を当てはめます。
アは0を掛けてしまい解が0になるため、違いますね。
イ,オ,カは全て「1」になるので合ってそうです。

「n = 2」はどうでしょう。2の階乗は「2*1」になれば求められますが・・・。

イ = f(1) = f(0) = 1
オ = 2 * f(1) = 2 * f(0) = 2 * 1 = 2
カ = 2 * f(1) = 2 * f(0) = 2 * 1 = 2

ここでイが脱落しました!では次は「n = 3」です。「321」になれば求められますね。

オ = 3 * f(1) = 3 * f(0) = 3 * 1 = 3
カ = 3 * f(2) = f(2)は上述した通り2 * 1なので = 3 * 2 * 1 = 6

ということで、答えは「カ」になります。

時間がかかりそうな問題は一度飛ばす

ここまでくるとプログラミングは関係ないんですが、一応。
特に科目Bは後半4問がセキュリティに関する問題です。
ここは科目Aの知識を応用でき、時間もかからないボーナス問題なので必ず埋めておきたいです。

セキュリティは現代ではうるさく言われているので、
常識的な答えを選べばノリでいけたりしますし頑張りましょう😇

添字は1から始まる

経験者特有の罠ですが、配列の添字は0からではなく1から始まります。
for文の時、配列の領域以上に値が入るからなんでやねん!って思っていたらこういうことでした。

科目Bの指針

・始めの数問は簡単なので確実に取り、時間を使わない
・分からない、時間がかかる問題はとりあえず飛ばす
・1周した後の時間次第で飛ばした問題に注力する
・不安な問題を見直す。試験終了!

まとめ

受験前までは油断せず、一つでも引き出しを多くできるように頑張りましょう!
逆に受験中は自分ならできるとポジティブ(*^◯^*)にいきましょう!!

それと書き忘れていましたが、基本情報は現在通年受験となっています。
テストセンターは土日が混雑しており自分が申し込んだ時は1ヶ月後に空きがあるという状態でした。
なので、期日がある人は早めに申し込むことをおすすめします。

もし分からないこと、タイポなどがあればお気軽に突っついてください!

長くなりましたが、以上となります。でわでわ~。

Discussion