擬似言語を自分で書いてみる|読むだけで終わらせない練習法
解説を読めば分かるのに、自分で1行も書ける気がしない。
擬似言語の勉強が、読むだけで止まっていませんか?
科目Bの問題を解いて、解説を読んで、なるほどと納得する。その繰り返しで少しずつ読めるようにはなりますが、どこか手応えが薄いままの人も多いのではないでしょうか。
それは、あなたの理解が浅いからではありません。読む練習しかしていないので、頭の中の知識がまだ受け身のままになっているだけです。
私はエンジニアとして10年以上、Webシステムの開発や運用に携わってきました。新しい言語を覚えるときも、他人のコードを眺めているうちは分かった気になり、いざ自分で書こうとすると最初の1行で手が止まる、という経験を何度もしています。
そこで1行でも自分で書いてみると、急に見え方が変わります。どこに変数を置き、どこでループを閉じるのかを自分で決めた経験が、他人のコードを読むときの目印になるからです。
この記事では、擬似言語を自分で書いてみる練習を、3つの段階に分けてお伝えします。科目B全体の中で擬似言語がどんな位置にあるのかを先に確かめたい人は、親記事から読んでおくと流れがつかみやすくなります。
【関連記事】基本情報技術者試験の科目Bとは?擬似言語・アルゴリズム対策を初心者向けに解説
読むだけの勉強で止まってしまう理由¶
最初に、なぜ読むだけだと伸び悩むのかを整理しておきましょう。理由が分かると、書く練習に何を求めればいいのかがはっきりします。
科目Bは20問を100分で解く試験で、そのほとんどは初見のコードを読ませる問題です。読む試験なのに、なぜ書く練習が必要なのか。そこが今回いちばん大事なところです。
読めるのに書けないのはなぜか¶
コードを読むとき、私たちは書かれている行を順番に受け取っています。どの変数が必要か、どこで繰り返すかは、すでに作者が決めてくれた状態です。
一方で書くときは、その判断をすべて自分でしなければなりません。この判断の経験が少ないと、読むときにも作者の意図が見えず、1行ずつ追うだけで精一杯になってしまいます。
たとえるなら、地図を見て道をたどるのと、自分で地図を描くのとの違いです。描いたことのある人は、初めて見る地図でも、どこが大通りでどこが脇道かをすぐに見分けられます。
書くと科目Bの読みが速くなる¶
書く練習を少し積むと、問題文のコードを見た瞬間に、これは合計を取る形だ、これは見つけたら抜ける形だ、と型で見分けられるようになります。型が見えれば、細部を追う前に全体の流れがつかめます。
空欄補充の問題でも効果は大きいです。空欄に入るのは、自分が書くならここに置くだろうという1行であることが多いので、書く側の感覚がそのまま正解の手がかりになります。
書いた経験と読む力がどうつながるのかを、表で並べてみます。
| 書く練習で身につくこと | 科目Bで効く場面 |
|---|---|
| 変数の役割を自分で決める | 問題文の変数が何を表しているか素早く分かる |
| ループの始まりと終わりを決める | 繰返しの回数や範囲を取り違えなくなる |
| 条件分岐の向きを選ぶ | 不等号や境界値の選択肢で迷いにくくなる |
| 戻り値を決める | 関数が最後に何を返すかを先に予想できる |
表のとおり、書く練習で鍛えられるのは、どれも読むときに必要な判断です。読む力を伸ばすために書く、という順番だと考えてください。
書く練習は3つの段階で進める¶
いきなり白紙から書こうとすると、ほとんどの人が手を止めてしまいます。そこで、負担の小さい練習から順に進めます。
3つの段階を、先に一覧で確認しておきましょう。
| 段階 | 練習の中身 | ねらい |
|---|---|---|
| 1 写す | 解いた問題のコードをそのまま手で書き写す | 記述の形を手に覚えさせる |
| 2 書き戻す | 1行だけ隠して、その行を自分で書く | 1行ごとの役割を考える |
| 3 仕様から書く | 日本語の説明だけを見て、コードを最初から書く | 判断を全部自分でする |
段階1と2は、すでに持っている教材だけでできます。段階3まで進めば、読むだけでは得られない手応えがはっきり出てきます。
段階1:解いた問題のコードを写す¶
最初の段階は、写経と呼ばれる練習です。解説まで読み終えた問題のコードを、ノートやテキストエディタに一字ずつ書き写します。
ただ眺めるより手間がかかりますが、その手間に意味があります。for の後ろにどんな言葉が続くのか、endif はどこに置くのかといった細かい形は、手で書いて初めて記憶に残るからです。
写すときは、1行書くごとに、この行は何のためにあるのかを心の中で一言つぶやいてみてください。合計を足す行、見つけた印を立てる行、という具合です。
記号や書き方に自信がない場合は、早見表を手元に置いて写すと安心です。
【関連記事】擬似言語の記号・記述形式一覧|試験前のチェック早見表
段階2:1行隠して書き戻す¶
写経に慣れてきたら、次は書き戻しです。写したコードのうち1行を紙で隠し、その行に何が入るかを自分で書いてみます。
隠す行は、代入の行やループの範囲を決める行がおすすめです。ここは科目Bの空欄補充でもよく問われる場所なので、そのまま本番の練習になります。
書けたら、隠していた元の行と見比べます。違っていても、自分の書いた行で同じ結果になるなら正解です。
段階3:日本語の仕様から書く¶
最後の段階は、日本語で書かれた仕様だけを見て、コードを最初から書く練習です。ここで初めて、変数を何個用意するか、どの順で処理するかをすべて自分で決めることになります。
最初は短い仕様で十分です。合計を求める、最大値を探す、条件に合う数を数える、くらいの5〜10行で収まる処理から始めましょう。
次の章で、実際に1つ書いてみます。
実際に書いてみる:条件に合う数を数える¶
ここからは、段階3の練習を一緒にやってみます。手順をそのまま真似すれば、白紙からでも書き始められるはずです。
今回の仕様は次のとおりです。整数の配列と基準の値を受け取り、配列の中で基準の値以上の要素がいくつあるかを返す関数を書きます。
手順1:日本語で処理を箇条書きにする¶
いきなりコードを書かず、まず日本語で処理の流れを書き出します。ここで考えるのは記号ではなく、手順そのものです。
今回なら、数える箱を0にする、配列を先頭から1つずつ見る、基準以上なら箱を1増やす、最後に箱の中身を返す、の4つです。この4つの文が、そのままコードの骨組みになります。
手順を言葉にできない処理は、記号にしても書けません。逆に言葉にできれば、あとは決まった書き方に置き換えるだけです。
手順2:使う変数を決める¶
次に、必要な変数を決めます。日本語の手順に出てきた名詞が、そのまま変数の候補になります。
数える箱は count、配列を見る位置は i とします。受け取る配列は data、基準の値は border という名前にしておきましょう。
手順3:擬似言語に置き換える¶
手順と変数が決まったら、擬似言語に置き換えます。書き上げたコードがこちらです。
○整数型: countAtLeast(整数型の配列: data, 整数型: border)
整数型: count ← 0
整数型: i
for (i を 1 から data の要素数 まで 1 ずつ増やす)
if (data[i] ≧ border)
count ← count + 1
endif
endfor
return count
日本語の4つの手順が、そのまま4つのかたまりになっているのが分かるでしょうか。count ← 0 が箱を0にする行、for が先頭から見る行、if の中が1増やす行、return が返す行です。
自分で書いたコードは、どの行も自分が決めた理由を持っています。この感覚が、他人のコードを読むときの物差しになります。
手順4:トレース表で動きを確かめる¶
書いたら、必ず具体的な値で動かしてみます。data が {3, 8, 5, 10}、border が 5 のときを、表で追ってみましょう。
| i | data[i] | data[i] ≧ 5 | count |
|---|---|---|---|
| 1 | 3 | 偽 | 0 |
| 2 | 8 | 真 | 1 |
| 3 | 5 | 真 | 2 |
| 4 | 10 | 真 | 3 |
最後に count の 3 が返ります。8・5・10 の3つが基準以上なので、仕様どおりの答えです。
ここで注目してほしいのは、i が 3 の行です。基準とちょうど同じ値でも数えるので、不等号は ≧ でなければなりません。
もし > と書いていたら、答えは 2 になってしまいます。こうした境界値の確認は、書く練習の中でいちばん得をする部分です。
トレース表の付け方そのものに不安がある場合は、こちらの記事で手順を確認できます。
【関連記事】擬似言語のトレース表の書き方|科目Bで変数の値を追う手順を解説
自分で書くときにつまずきやすい点¶
書いてみると、読んでいるときには気にならなかった細かい点で手が止まります。それは失敗ではなく、書く練習でしか出会えない学びです。
初心者がよくつまずく点を、表にまとめました。
| つまずき | 起きること | 直し方 |
|---|---|---|
| 変数の宣言を忘れる | どの型の値か分からなくなる | 使う変数を最初にまとめて書く |
| endif や endfor を忘れる | どこまでが中身か分からなくなる | 開いたらすぐ閉じる行も書く |
| 添字を0から始める | 先頭の要素を飛ばす・はみ出す | 擬似言語の配列は1から数える |
| 初期値を入れ忘れる | 合計や件数がずれる | 数える変数は必ず0から始める |
| 不等号の向きを迷う | 境界の値で答えが変わる | 仕様の以上・より大きいを書き写す |
表の中でも、特に多いのが次の2つです。
開いたら閉じる、を先に書く¶
if や for を書いたら、中身を書く前に endif や endfor を先に書いてしまいましょう。そのあとで、間に中身を差し込みます。
実務でも、括弧やブロックの閉じ忘れは、ベテランでも起こすありふれたミスです。私も現場では、先に閉じてから中を書く癖を付けて、こうしたミスをほとんど防げるようになりました。
添字は1から数える¶
プログラミング経験が少しある人ほど、配列の添字を0から始めてしまいがちです。科目Bの擬似言語では、配列の要素番号は1から始まります。
自分で書くと、この違いを体で覚えられます。for の範囲を 1 から data の要素数 まで、と何度も書いているうちに、問題文を読むときにも自然と1から数えるようになります。
書いたコードの答えが合わないときは、どこで値がずれたのかを順に探していきます。直し方の手順は、こちらの記事にまとめています。
【関連記事】擬似言語の答えが合わないときの直し方|値がずれた場所の探し方
書いたコードを確かめる方法¶
自分で書いたコードは、正しいかどうかを教えてくれる解答がありません。だからこそ、確かめる方法を持っておくことが大切です。
確かめ方は、大きく分けて3つあります。
| 確かめ方 | やり方 | 向いている場面 |
|---|---|---|
| 手でトレースする | 具体的な値で表を作って追う | 短いコードの動きを理解したいとき |
| 境界の値で試す | 0件・1件・基準と同じ値などを入れる | 不等号や範囲の誤りを見つけたいとき |
| シミュレーターで動かす | 実際に1行ずつ実行して値を見る | 手で追った結果と照らし合わせたいとき |
この3つは、どれか1つを選ぶものではありません。手で追い、境界を試し、最後に実際に動かして答え合わせをする、という順番がおすすめです。
境界の値で試すと穴が見つかる¶
さきほどの例で、配列が空のときや、すべての要素が基準より小さいときを考えてみてください。どちらも count は 0 のまま返るので、仕様どおりです。
このように、普通の値だけでなく端の値を入れてみると、書いたコードの穴が見つかりやすくなります。科目Bの選択肢も、こうした端の値で差が出るように作られていることがよくあります。
シミュレーターで動かして答え合わせをする¶
手でトレースした結果が正しいかどうかは、実際に動かせばすぐに分かります。Giji Academy の擬似言語シミュレーターでは、擬似言語のコードを1行ずつ実行し、変数や配列の値が変わっていく様子を確かめられます。
自分の予想と実際の動きが一致すれば、それは理解できている証拠です。ずれたときは、ずれた行こそが今いちばん学ぶべき場所です。
まずはGiji Academy の擬似言語シミュレーターで、集計や繰返しの講座を選び、自分の書いたコードと同じ形の処理を動かしてみてください。
書く練習を続けるコツ¶
書く練習は、最初の数回がいちばん大変です。続けるためのコツを、いくつかお伝えします。
1つ目は、1日1本、10行以内と決めることです。長いコードを1本書くより、短いコードを毎日書くほうが、書く感覚は早く身につきます。
2つ目は、題材を自分の身の回りから取ることです。家計簿の合計、テストの最高点、歩数が目標を超えた日の数など、日常の数字は擬似言語の練習問題にそのままなります。
3つ目は、書いたコードを捨てずに残しておくことです。1か月後に見返すと、同じ処理でも書き方が整っていて、自分の成長が目に見えて分かります。
練習問題そのものを自分で増やす方法については、こちらの記事で詳しく紹介しています。書く練習と組み合わせると、演習の材料に困らなくなります。
【関連記事】擬似言語の練習問題が足りない人へ|自分で作って力を付ける方法
まとめ¶
擬似言語は、読むだけでもある程度は伸びます。けれど、自分で書いてみることで、読む力そのものが一段深くなります。
今日お伝えした内容を、最後に振り返っておきましょう。
| ポイント | 内容 |
|---|---|
| 書く理由 | 変数やループを自分で決める経験が、読むときの物差しになる |
| 3つの段階 | 写す、1行隠して書き戻す、日本語の仕様から書く |
| 書く手順 | 日本語で手順を書く、変数を決める、置き換える、トレースする |
| つまずき対策 | 先に閉じる、添字は1から、初期値と不等号を確かめる |
| 確かめ方 | 手でトレース、境界の値、シミュレーターで答え合わせ |
最初の1本は、短くてぎこちなくて構いません。動かして、ずれを見つけて、直すところまでが練習です。
自分で書いた数行が思ったとおりに動いた瞬間は、読むだけでは味わえない嬉しさがあります。その小さな成功が、本番で初見のコードに向かうときの自信に変わっていきます。
まずは今日、合計を求める5行のコードを1本だけ書いてみてください。