擬似言語は暗記が必要?覚えるべき部分と覚えなくていい部分を整理
擬似言語って、結局どこまで暗記すればいいんだろう。
参考書を開くたびに、覚えることの多さに不安になっていませんか?
記号、書き方、ソートや探索のコード。全部覚えないと科目Bは解けないのでは、と感じている人は少なくないはずです。
先にお伝えしておくと、大丈夫です。擬似言語で丸暗記が必要な部分は、思っているよりずっと少ないです。
私はエンジニアとして10年以上、Webシステムの開発や運用に携わってきました。その間に何種類ものプログラミング言語を使ってきましたが、ライブラリの細かい書き方までは今でも覚えていません。
それでも仕事が回るのは、どの言語にも共通する処理の流れを理解しているからです。書き方は調べれば分かりますが、流れを読む力は調べても手に入りません。
この記事では、擬似言語で覚えるべき部分と覚えなくていい部分を整理します。科目B全体で擬似言語がどんな役割を持っているのかを先に確かめたい人は、親記事から読んでおくと話がつながりやすくなります。
【関連記事】基本情報技術者試験の科目Bとは?擬似言語・アルゴリズム対策を初心者向けに解説
擬似言語で暗記が必要と感じてしまう理由¶
まずは、なぜ暗記が必要だと感じてしまうのかを見ておきましょう。原因が分かれば、不安の大部分は小さくなります。
見慣れない記号が多いから¶
擬似言語には、← や ≠、mod のように、普段の生活ではあまり見ない記号が出てきます。初めて見ると、外国語の単語帳を渡されたような気持ちになるかもしれません。
ただ、記号の種類そのものは多くありません。数えてみると、よく使うものは十数個ほどに収まります。
解説がコードの形で書かれているから¶
参考書や解説サイトでは、バブルソートや二分探索がコードの形で紹介されています。それを見ると、このコードを覚えておかないと本番で書けない、と感じてしまいます。
けれど、科目Bはコードを書く試験ではありません。問題文に示されたコードを読んで、動きを答える試験です。
この違いに気づくだけで、勉強の重心は大きく変わります。覚えたコードを再現する力より、初めて見るコードを追える力のほうが、点数に直結するからです。
過去問の答えを覚えると点が取れた経験があるから¶
科目Aの勉強では、過去問を繰り返して答えを覚える方法がある程度通用します。同じような問われ方をする問題が多いからです。
その感覚のまま科目Bに入ると、同じやり方で乗り切ろうとしてしまいます。科目Bで答えの暗記が通用しにくい理由は、過去問演習との付き合い方を扱ったこちらの記事でも詳しく書いています。
【関連記事】基本情報は過去問道場だけで合格できる?科目Aと科目Bで変わる答え
覚えるべき部分と覚えなくていい部分¶
ここからが本題です。擬似言語の学習内容を、覚えるべきもの、覚えなくていいもの、その中間に分けて整理します。
全体を一覧にすると、次のようになります。
| 区分 | 具体例 | 向き合い方 |
|---|---|---|
| 覚えるべき | ← や ≠ などの記号、if と endif の対応、要素番号の数え始め | 早めに確実に覚える |
| 覚えなくていい | ソートや探索のコード全文、過去問の答え、変数名 | 覚えようとしない |
| 型として身につける | 合計、最大値、数え上げ、探索、交換の流れ | 何度も読んで慣れる |
表のとおり、確実に覚えるべきものは一番上の段だけです。そして、点数を大きく左右するのは一番下の段です。
覚えるべきもの:記号と書き方の約束¶
記号や書き方の約束は、文章でいえば文字や句読点にあたります。ここがあいまいだと、どれだけ考えても正しく読めません。
特に、配列の要素番号をどこから数えるかは必ず押さえておきましょう。科目Bの問題では、要素番号が1から始まると問題文に書かれていることがほとんどですが、プログラミング経験がある人ほど0から数えてしまい、1つずれた答えを選んでしまいます。
もうひとつは、÷ と mod の違いです。整数どうしの割り算で、商を求めるのか余りを求めるのかで、結果がまるで変わります。
記号の一覧は、早見表の形でまとめた記事があります。覚えるときの確認用に使ってください。
【関連記事】擬似言語の記号・記述形式一覧|試験前のチェック早見表
覚えなくていいもの:コード全文と過去問の答え¶
一方で、ソートや探索のコードを一字一句覚える必要はありません。科目Bでは、同じアルゴリズムでも変数名や細部が問題ごとに変わるからです。
覚えたコードと少しでも違う形が出ると、暗記に頼っていた人ほど混乱します。見覚えがあるのに、どこかが違う。その違和感で手が止まってしまうのです。
過去問の答えも同じです。答えの記号を覚えても、問題文の数値が変われば役に立ちません。
中間にあるもの:処理の型¶
覚えなくていいとはいえ、毎回まったくゼロから読むのは大変です。そこで身につけたいのが、処理の型です。
型とは、合計を取るならこう、最大値を探すならこう、という流れのパターンのことです。暗記とは違い、何度も読んでいるうちに自然と目が慣れていくものです。
暗記の代わりに身につけたい処理の型¶
ここでは、科目Bで特によく出る型を見ていきます。型が見えると、初見のコードでも全体の流れをすばやくつかめるようになります。
代表的な型を表にまとめました。
| 型 | 見分けるヒント | 最後に得られるもの |
|---|---|---|
| 合計 | 0 で始めた変数に値を足し続ける | すべての要素の和 |
| 数え上げ | 条件が真のときだけ 1 を足す | 条件に合う要素の個数 |
| 最大値・最小値 | 今の値と比べて大きければ置き換える | いちばん大きい値・小さい値 |
| 探索 | 見つかったら印を立てる、またはループを抜ける | 見つかった位置や有無 |
| 交換 | 一時的な変数を使って2つの値を入れ替える | 並びが変わった配列 |
この5つを知っているだけでも、科目Bのコードの多くはどこかに見覚えのある形になります。ソートも探索も、これらの型の組み合わせでできているからです。
型は「流れ」で覚える¶
実際の例で確かめてみましょう。次のコードは、配列の中でいちばん大きい値を返す関数です。
○整数型: findMax(整数型の配列: data)
整数型: maxValue ← data[1]
整数型: i
for (i を 2 から data の要素数 まで 1 ずつ増やす)
if (data[i] > maxValue)
maxValue ← data[i]
endif
endfor
return maxValue
このコードを丸ごと覚える必要はありません。見てほしいのは、仮の答えを最初に置き、比べて、勝ったら置き換える、という3つの流れです。
この流れさえ分かっていれば、変数名が max でも best でも、比べる向きが小さい順でも、同じ型だと気づけます。暗記が文字を覚えることだとすれば、型は意味を覚えることだと考えてください。
型が分かると変化球にも対応できる¶
科目Bでは、型をそのまま出すのではなく、少しひねった形がよく出題されます。たとえば、最大値ではなく2番目に大きい値を求めるコードなどです。
丸暗記している人は、見たことのない形だと感じて手が止まります。型で理解している人は、最大値の型に比べる相手が1つ増えただけだ、と落ち着いて読めます。
実務でも、まったく同じコードに出会うことはほとんどありません。私が新しいシステムの保守を引き継いだときも、細部は初めて見る書き方ばかりでしたが、集計や検索の型を手がかりにすると、驚くほど早く全体像がつかめました。
科目Bでよく出るアルゴリズムの型は、こちらの記事で一覧にしています。どの型が何の処理に使われるのかを確かめる地図として使ってください。
【関連記事】擬似言語で押さえるアルゴリズム一覧|科目Bで出る型を整理して解説
型を体に入れる練習のしかた¶
型は、眺めているだけではなかなか身につきません。ここでは、無理なく型を自分のものにする練習法を紹介します。
トレースで流れを確かめる¶
いちばん効果があるのは、具体的な値でコードを動かしてみることです。さきほどの findMax に、data として {4, 9, 2, 7} を渡したときの動きを追ってみましょう。
値の変化を表にすると、次のようになります。
| i | data[i] | data[i] > maxValue | maxValue |
|---|---|---|---|
| 開始前 | ― | ― | 4 |
| 2 | 9 | 真 | 9 |
| 3 | 2 | 偽 | 9 |
| 4 | 7 | 偽 | 9 |
最後に 9 が返ります。i が 2 のときだけ置き換えが起き、あとは比べるだけで終わっているのが分かります。
こうして一度でも自分の手で追うと、型の流れは記憶ではなく体験として残ります。次に同じ型を見たとき、思い出そうとしなくても動きが浮かぶようになります。
トレース表の作り方に自信がない場合は、こちらの記事で手順を確認しておくと安心です。
【関連記事】擬似言語のトレース表の書き方|科目Bで変数の値を追う手順を解説
1つの型を少しずつ変えてみる¶
型に慣れてきたら、条件を少し変えて動きを予想する練習をしてみましょう。不等号を > から ≧ に変えたら何が変わるか、開始の i を 1 にしたらどうなるか、という具合です。
この練習をすると、科目Bの選択肢でよく狙われるポイントが自然と見えてきます。境界の値や開始位置は、まさに選択肢の差が生まれる場所だからです。
記号の暗記は短期集中で終わらせる¶
記号や書き方の約束は、長々と時間をかけるものではありません。数日かけて一覧を見返し、トレースの中で何度か使えば、自然と定着します。
暗記に使う時間と、型を身につける時間の目安を比べてみます。
| 学習内容 | かける時間の目安 | やり方 |
|---|---|---|
| 記号と書き方の約束 | 学習の最初に短く | 一覧を見て、トレースの中で使って定着させる |
| 処理の型 | 学習期間の大部分 | 例題を読む、トレースする、少し変えて試す |
| 過去問の答え | かけない | 答えではなく、読み方の手順を復習する |
表のとおり、時間の大部分は型の練習に回してください。記号の暗記に何週間もかけるのは、もったいない使い方です。
暗記に頼った勉強で起きやすい失敗¶
最後に、暗記に頼りすぎたときに起きやすい失敗を見ておきましょう。自分の勉強に当てはまるところがないか、確かめながら読んでみてください。
本番で見たことのない問題に固まる¶
いちばん多いのは、本番の初見問題で固まってしまうことです。練習では解けていたのに、本番では手も足も出なかった、という声はよく耳にします。
これは能力の問題ではありません。練習が記憶の確認になってしまい、読む練習になっていなかったことが原因です。
解説を読んで分かったつもりになる¶
もうひとつは、解説を読んで理解した気になることです。解説を読むと流れが分かるので、自分でも解けるような気がしてきます。
けれど、解説の流れを覚えることと、自分で流れをたどれることは別物です。解説を読んだら、必ず自分の手でもう一度トレースして確かめましょう。
時間がかかる割に点が伸びない¶
暗記中心の勉強は、覚えた量のわりに点数が伸びにくいのも特徴です。覚えたコードがそのまま出る確率は低く、覚えた分だけ報われるわけではないからです。
もし勉強時間のわりに手応えが薄いと感じているなら、暗記から型の練習へ切り替える合図かもしれません。
Giji Academy のシミュレーターで型を動かしてみる¶
型を身につけるには、コードが動く様子を何度も見ることが近道です。紙のトレースに加えて、実際に動かして確かめる機会を作ってみましょう。
Giji Academy の擬似言語シミュレーターでは、擬似言語のコードを1行ずつ実行し、変数や配列の値が変わる様子を目で確かめられます。最大値や合計の型を動かしてみると、仮の答えが置き換わる瞬間がはっきり見えます。
手で追った結果とシミュレーターの結果が一致すれば、その型は身についています。ずれたときは、ずれた行こそが次に練習すべき場所です。
まずはGiji Academy の擬似言語シミュレーターで、集計や探索の講座を選び、今日紹介した型を実際に動かしてみてください。
まとめ¶
擬似言語は、全部を暗記しなければ解けないものではありません。覚えるべき部分を絞り、残りの時間を型の練習に回すことで、初見の問題にも落ち着いて向き合えるようになります。
この記事のポイントを振り返っておきましょう。
| ポイント | 内容 |
|---|---|
| 覚えるべきもの | 記号、書き方の約束、要素番号の数え始めを確かめる習慣 |
| 覚えなくていいもの | アルゴリズムのコード全文、過去問の答え |
| 身につけたいもの | 合計、数え上げ、最大値、探索、交換などの処理の型 |
| 練習のしかた | トレースで流れを確かめ、条件を少し変えて試す |
| 時間の配分 | 記号の暗記は短く、型の練習に大部分を使う |
覚えることが少ないと分かれば、気持ちはずいぶん軽くなるはずです。あとは、型を1つずつ自分の手で動かしていくだけです。
焦らなくて大丈夫です。今日はまず、最大値を探すコードを1本だけトレースしてみてください。