瀬戸先生のデータベース本のリレーション(関係)の説明を読んで思ったこと(1)

瀬戸美月「徹底攻略データベーススペシャリスト 令和3年度」(インプレス)のp44,p46.p47に書かれている例について,自分が理解したことをまとめておく。

説明を考えるにあたっては,この本が直接的に参照していると考えられる増永良文「リレーショナルデータベース入門[第3版]」(サイエンス社)のp28~p33も参照にしている。これが一番正確な説明なので,正確なことを知りたい読者はこれを参照すること。

瀬戸先生の本のドメインとリレーションの説明(定義)がしっくりこないので,そこの部分の自分なりの理解を書いたのが以下である。

なお,これを書いている人間はDB持ちではあるが,文系(数学の訓練を受けていない)かつ専門家でもなく業務等でも関わっていないので,そのあたりの信用度も踏まえて読むこと。

以下の説明について現時点で自覚している欠陥

  • リレーションとリレーションスキーマの違いに触れてない
  • 元の文章(数学的文章)では書いていない暗黙の言葉の意味を付加した説明をしている(特に「ドメイン」という単語に関連した部分。例えば「取りうる値」とか「考えたくない組」という単語は完全に主観。)。
  • 表と集合の違いを強調していない。
  • 集合・要素・直積・ A \times B,\, (a,b) , {a,b}などの,数学的記法・用語の理解は前提
  • 完成形を最初に提示してから,そこに戻っていく説明が論理的にはしっくりこない。これは批判されたらその通りですとしか言いようがない。

正確な理解が必要な場合は,増永先生の本のp28~p33を参照にすること。

表を前面に押し出したふわっとした説明

f:id:baruku07:20201125003342p:plain

同じことを少しだけ集合の記号で書いた説明

f:id:baruku07:20201125003407p:plain

瀬戸本とここの説明の主な違い

  • 元の本は 「ドメインとは集合である」という(この表現・少し抵抗がある。特に「とは」という助詞。)色のない抽象的な定義に対して,ここでは集合に少し色を付けた書き方をした。
  • 本文では文章と数式風の記法(定義のない独自記法も含む)のみで説明されている。これに対して,ここでは表と数学の記号の説明を2つに分離した。
  • 数学の記法はできるだけ標準的な数学の記法に合わせた。
  • 直積の説明(定義)は既知とした。特に,元の本の「直積とは」の説明自体が混乱を招く説明なのでそれはスキップ。また,数学用語に対して下手な説明(定義)をつけるとまずいので,わからない人は調べてくださいというスタンス。

良い本なのは良い本なんです

瀬戸先生の本のこの部分は,わかりにくく不正確としか言えない。せめてわかりやすさか正確さのどちらかは満たして欲しい。特に,ここは変なことをしてしまうとダメージが大きい。ここでリレーションという用語を定義して,後でずっとこの定義をずっと使い続けるので。

具体的な批判は建設的ではないので,自分の理解を書くことにした。これなら自分主語の文章だから誰かを傷つけるわけじゃないから良いでしょうと。

引き続き違和感の正体を検討中

この本の表現がどう微妙なのか?を一言一句添削を入れる感じで書くと,誹謗中傷と言われても仕方がないぐらいの量のものが書けそうなので控えた。

文章の勉強も兼ねて,違和感の正体をつかんだり,著者がどういう意図でこう書いてしまったのかとか,あとはどう直せばきれいに直せるのかとか,そういうことを何度も読み返して考えている。しかし,そのたびに疑問が積み重なる。また,助詞の使い方がおかしい箇所が多すぎるのも,ストレスがたまる要因である。

次回は,この本の理論の説明の微妙さに対する対処法と,その他思うことについて書く。

数式の書かれたデータベースの本を入手することになってしまった

瀬戸先生の本を読んでいると,結局は増永先生の数式ばりばりの本を確認せざるを得なくなったという話。第2版をこの前捨てたのに(必要になったら第3版を買おうと思ってたので)。

自分で自然言語の説明を全て記号で考え直した

瀬戸先生の本を,第2正規系の説明から読んでいるときのこと。内容は知ってることなのに説明がしっくりこない。そこで,著者が使ってる言葉の定義を全部確認しておくかと戻ると,そこがもっと破綻していたと。

まず,言葉の定義を読んでると,理論の用語を自然言語で定義している。ただし,その定義とかその説明に出てくる用語の説明が少しおかしい。私の知ってる普通の数学と少し違うし,本の中のものに従うと色々と破綻してません?になる。

何度も好意的に解釈しようとするのだが,そもそもとして解釈が成立しない。最後は,書いてることを自分で数学記号に落として理解した。

色々読んでいると,必要もない不自然な説明もいくつかある。また,構成は明らかに増永先生の本と同じ。たぶん,増永先生の本を見ればわかるでしょう,という結論になり,本を買いに行くことになる。

破綻した説明を理解するのに1日が消えた

この本,致命的なセクションが少なくとも2つある。詳細は後日レビューする。現状は,理解で手一杯でアウトプットできる理解に到達していない。(何がおかしいかをパーツパーツで批判的に指摘できる理解まではしている。ただし,それを建設的批判として記述できるの理解に到達していない)

まず,リレーションのセクション。別にここが破綻していても実例で補えば良いのだが,最小ページ数で説明を突っ切っていくスタイルで説明されているため,例とか傍証で修正を試みることが難しい。

そして,とどめが第一正規系の説明。持ち出す必然性がない直積とべき集合を持ち出したあげく,両方とも説明が破綻している。別に第一正規系は飛ばせば良いのだが,初心者にその判断を求めるのは酷である。

集合の直積の定義が破綻気味とか,べき集合の定義が明らかに間違ってるとか,集合とその要素を混同した記述が多用されているとか,そんなの初心者に疑えというのかといった感じ。

元の増永先生の本にもこの2つの用語は出てきている。そして,元の本でも,この2つの集合を出すことの必然性は全く感じない。しかし,元の本の文脈だとわかりにくいが致命的な嘘というほどではない。また,例示の一つなので,少々破綻していても問題ない。

しかし,この本は元の本の文脈を全部ぶったぎり,かつ,説明の根幹として使ってるので破綻の影響が大きすぎると。

読み手が低学力なのが悪いとも言えるが

私が低学力なのが悪いという主張もありえる。しかし,低レベルの文系とはいえDB持ちで数学の教員免状も持っている。少なくとも想定読者ぐらいの知識はあると言って良いと思う。その人間が,これだけ理解にかかるのだから,普通の人はこれをまともに読めるとは思えない。

基礎が大事と言ってる人が基礎の説明で破綻するのは致命的

ものすごく良い本であるにも関わらず,超重要な基礎に見える箇所で破綻というのは,もったいなさすぎる。

最近,基礎理論は出題比率が減ってるので,別に破綻してても試験のテキストという意味では何ら問題はない。そんなとこの破綻で致命的に評価が下がりかねないというのは,非常に惜しい話である。

もっというと,不必要までに「数学的」を強調しておきながら,数学的に本を読んだ瞬間,その主張が数学的に記述されていないことが発覚する本を信用しろと言われても,普通は信用できない。

まあ,どこがどうなのかを色々と分析的に読んでみてそのうちレビューしようといった感じ。

瀬戸先生のネットワークのスペシャリストの本を買いに行ったものの,データベースの本の方が意外と良さそうだったので,買って帰ったのだが,こんな目に合うとは・・・・

数学的を随所で強調しなかったら傷が浅かったが

著者は数学の人ではないので,まあ多少は記述が数学的にちゃんとなってないのはしょうがないよね,と思いながら自分は読む。大学数学の訓練をそれなりに受けてないと,こういうものをきちんと書き切るのは難しいし。また,物を書くということの苦労もわからないでもないので。

ただ,そういうおおらかな感情で読んでいても,さすがに許容される破綻の度合いを越えてる。そのうえ,本文中で数学的とか理論的とかいうワードをしつこく強調されると,さすがに火に油が注がれることになる。そこまで数学と理論というなら,まずは自分がちゃんとできてることを記述で証明してもらえませんか?

自分は数学科原理主義にはついていきたくてもついていけないし,数学科の訓練を受けていないのでこの件はあまり何も言えない。ただ,数学原理主義的な書き方をする人が明らかに数学的に破綻していたら,さすがに生理的にいらいらくる。

自分の本で身を張って自分の主張を実践されるという皮肉な話

シリーズものは当たり外れがあるから中身をちゃんと読まずに信じてはいけない,とか,出版ビジネスの構造上,大学受験ほどのこの試験の参考書は質を担保できない,とか瀬戸先生は言っていた。それを改善するために自分の本を出したと思うのだが(だいたいはその意図は伝わってくるが),主張自体を自らの本で体を張って実証しなくても・・・・と思う。

今の自分の実感では,瀬戸先生のシリーズは

  • 支援士の本はものすごく良い(ただし応用情報用・他の難し目のテキストを読む前段の基礎テキストとして)
  • 応用情報の本は午前演習用の簡易辞書と午後問題の選択のために一冊手元に置いておくと良いかも。
  • ネットワークの本は微妙(まだ真剣には読んでない。ただ期待してた割にはでけっこうがっかり感はある。)
  • データベースの本は基礎理論の説明以外はものすごく良い。(応用情報・データベーススペシャリスト両方)

といった感じ。瀬戸先生のバックグラウンドからしても妥当な感じではあるけど。やっぱり人は得意なとこで仕事しないとな,と考えさせられた。

勉強して受ける応用情報の午後選択(7) 経営戦略は午後対策から入る

色々な人がこの試験について共通で言ってることとしては,

  • 午前対策は過去問中心に基礎を固める
  • 午後は過去問
  • 過去問以外の素材は著者の思い込みが入りがちなのでとにかく過去問を使う

といったところである。問題なのは,その順番や使い方である。ここは,人それぞれで適性もあるので適した使い方が違ってくる。

ここでは,経営戦略について,過去問の使い方については人とは違う視点で書く。通常は午前→午後の順番で演習するのだが,それを逆にするのはどうだろうかと。先に午後から入って,午後を午前の教科書替わりに使ってみながら勉強してみようと。それによって,

  • 午前の定着を高める(暗記でない感じにして暗記容量を少しでも空けられれば運が良い)
  • 午後で取れたらそのときは運が良い

というように考えてみませんかと。特に午前の羅列から入ると挫折しやすい人はそうしては?というのが一つの理由。

もう一つの理由は,実は理系ってストラテジの思考部分は普通にできる人が多いから,午後を先に触れることで早めにそれに気づければ運が良くないですか?と思うからである。以下,これについてだらだらと書いていく。

教科書の経営戦略の記述は公式・定理のみ書かれた本

応用情報の本は,このセクションはとにかく具体例が少ない。ページ数の関係上,仕方がない。

イメージで言うと,数学や理科の教科書で,定義は書いている・公式らしきものは書いてある。しかし,数値例すら書かれていない,といった感じである。あとは,少し4択の過去問がついてます,みたいな感じ。

数学や理科でそんな本で勉強しろと言われて勉強ができる人がどれだけいるのだろうか?しかし,なぜかこの試験になるとできるという人が多いのである。

ストラテジは,羅列の書き方でも,経済・経営慣れがあれば(これは本の上だけとは限らない。社会人経験とかニュースをどれぐらい見てきたかとうかそういのも含む。)頭に入るのだとは思う。自分の場合は,なんとなくの経済学経験で補いながら読んでるのでまあ読める。

しかし,そういうイメージができない人にとっては,ここは単語カードコースである。それは覚えにくい。やってられるかになるのは必然である。

覚えるのが面倒なだけであって考え方は意外といけるのでは

経営戦略について,あまり覚えてなかったとしても,いざその場で取るとできることがある。そして,こんなの日常とか常識だとか後から言う。

なぜそうなるか?実は,だいたいの人は頭の使い方はわかっている。ただ,それを過去の学者がどう名前をつけたかを分類して整理して覚えていくという作業をやってない(やりたくない)だけなのである。特に,午前はそういう作業なので,やってられるかになる。

言い換えると,多くの理系の人(を中心としたこの試験の受験者層)たちはフレームワークとかモデル思考で考えることは本質的には可能なのである。ただ,それを意味もなく並べて暗記するのが無理だというだけである。教科書は,このただ並べただけの書き方をしている。

だったらどうするか?ケースから先に入るのである。ケースで思考法だけ先にやっておいて,それに対して後から本で一つ一つラベルをつけていく。あるいは,ケースと同時にラベルと対応付けていく。そのケースとして午後の問題を使うのである。あるいは,午前の知識暗記のトリガーとして午後のケースを使うとも言える。

ただし,フレームワークを社会というものにあてはめること特有のあいまいさとかに耐えられない人は,そもそもここは無理。そういうのさえなければ割といける,といった感じ。

最近の問題傾向を逆手にとって午後問を経営戦略の教科書にする

最初にも書いたが,最近の問題傾向として,これ午前ですか?みたいな問題が最初に並ぶ。経営戦略もその感が強い。

そこで,それ午前ですか?も解きつつ,教科書に戻って例と説明を一体で理解していくのである。

R2のPESTだったら,Political, Economy, Society ,Technology(何回これを覚えようとしても忘れる・・・・)とかして覚えるまでは当然なのだが,そっからの具体例がストーリーでないと覚えられない。

R2の午後問題を見ると,これをどう適用して分析をしていくのかが書かれている。したがって,この例を読み込んでおくと,このフレームワークは覚えやすくなるだろうということである。少なくとも,覚えようとしていることは,無意味な文字の羅列でないと錯覚させるには十分である。

この作業,言い換えると,教科書分類とは別の方向で,過去問で何本か暗記軸を作る作業とも言える。

演習用の問題がなくなるのでは?

本命で取りに行く問題なら,演習がないという視点もありえる。しかし,この分野は保険なのである。保険にガチなど必要ないのである。

こっちが狙ってる効果は,最初にも書いたように,ケースと概念の往復をすることで,

  • 午前の定着を高める(暗記でない感じにして暗記容量を少しでも空けられれば運が良い)
  • 午後で取れたらそのときは運が良い

という効果しか考えてない。午前の反復演習よりは楽しく取り組めて,運が良ければ午後もできるでしょう!的な勉強法である。

あと,テクノロジ系と違って結局は最後はセンス,みたいなとこがあるので,そういう意味でも演習による点数の変化は高くない。よって,残しておかなくても良いでしょう,という感覚もある。

お勧めの薄い辞書

午後を読みながら知識を確認するための補助の本としては,

  • 薄くて図がしっかりあって
  • そこそこわかりやすい説明がある
  • 読み飛ばしたときのレイアウトが良い(毎日パラ見しての定着学習を意図してるので)

ぐらいの条件が欲しい。最近,そういう本をやっと見つけた。

日経文庫のビジネス・フレームワークを使う。これを読み飛ばしに使っても良いし,出てきた用語とこれを関連付けるだけにしても良い。著者が工学系(理系)なので,わりと理系理系した人にも肌に合う説明だと思う。

理系感覚との類似

別の記事でそのうち書くが,理系の人は,監査・サービスマネジメントより,経営戦略の方が頭の使い方が近いような気がする。良い本・良い演習メソッドさえ確立されれば,普通にSM・監査より良い問題に化ける感覚がある。

勉強してない状態で前半の知識穴埋めはさっぱりだが,後半の記述のポイントは当てられる,という人はそれなりにいそうで,そういう人にとってはこれを勉強しない手はない。

こういう人は理系にそこそこいそうという実感はある。こういう人は,午前から入るとやってられるかになるが,午後から入るといける,と感じる人もいそう。よって,こういう記事を書いてみた。

専門家との共通点・相違点

三好先生は,午前・午後を別に考えて固めていく,午後は過去問を教科書にすると書いている。ただ,いきなり午前をしっかり知識として固めていくという作業は,単純暗記系の苦手な人にはやりにくいのではないか?という問題意識である。

その問題の解決の一つとして,午前の無意味暗記を有意味にするためのトリガーとして午後を使おう,というのである。午前と午後がある程度は独立している(午後が知識偏重ではない)こと,難しい積み上げ系理論ではないので,それは実行可能だろうと。

最終的に考える仕上がり状態は大きくずれてないとは思う。要は,分類・整理・暗記から入っていくか,ストーリーから入っていくか,の違いでどっちが向いているかだけの問題である。そして,暗記段階でも分類・整理から入るのでなく適度にストーリーを入れる方が暗記の手段としても効率的という知見もないこともない。

勉強して受ける応用情報の午後選択(6) システムーアーキテクチャを他分野を理解するツールとして使う

今,重症患者向けに,セキュリティをやるにはセキュリティだけでは,みたいな記事を書こうとしていろいろ考えてる。

基礎が大事といっても,全分野とかやってたら挫折する。濃淡は付けないといけない。

そういう考察をする中で,システムアーキテクチャは,色々なところで使う感覚の基本になるのではないのかということ感じている。セキュリティ・ネットワーク・データベースを3つとも勉強する人にとっては,これは実際に選択しなくても過去問だけは解いておく価値がありそうだと。一言でいうと,学習素材としての質が高いと。

総合格闘技状態

システムアーキテクチャは大昔は回線計算・稼働率待ち行列あたりの取りやすい問題だったと思う。待ち行列の公式だけ頑張って直前に覚えるとして,後はそこそこの数学力と読み取り力があれば点数をくれるありがたい問題。しかし,最近は様相が一変していて,なんでもありの総合格闘技の問題になってきているような気がする。

R2では,それは問1では?なセキュリティの問題まで混ざっていた。NoSQLなどは,データベース側でなくこの問で扱われているようである。アーキテクチャの選定に必要な知識だろうし,範囲を読むと新技術全般なので間違ってはない。

定性問題だと,ストラテジの(情報戦略のごく一部)・サビマネ・プロマネのごく一部の視点も必要(国語風)なこともありそう。

しかもそこに傾向は全くない。

システム開発の選択にも相通じるところがあるが,この2つはある意味なんでもあり出題である。なんでもあり出題なので,自分にとってはまると当然簡単な問題である。よって,その場で取るか決めれば良いというのが普通の意見である。

しかし,問題文を読めば読むほど,勉強段階ではこの過去問を学習素材として使うには良い問題なのでは?と感じだした。

他分野に波及させる勉強素材として使う

一言でいうと,この分野の過去問を解くことで

  1. 他で使う共通のスキルを鍛えること
  2. 他の分野で出てくることの知識の補充
  3. 各分野の知識を違う角度(統合された角度から見ること)による知識の定着

あたりを図ろうということである。

分野横断型の問題でNW・DBなどを含む知識を入れる素材

この問題,色々なことを聞いてくるだけあって,解くことで色々なことが頭に入る。

本番で解く側からするとやってられるかなのだが,勉強段階であれば逆にありがたいとも考えられる。一度に色々なことを身に付ける素材として活用すれば良い。

傾向がないということも,知識を身に付ける素材として使う立場から見ると好ましいと言える。毎回違う知識を身に付けることができるのだから。

それぞれの分野の問題と同じ素材を違う角度で見ることにもなるので,知識の定着にもなる。

ネットワーク・セキュリティで必要なサーバとサーバのつながり感覚を身に付ける素材

セキュリティの午後の問題を解くとき,置いてあるサーバがどんな感じでつながってるかがしっくりきてると,問題状況の把握が楽だったり問題が解きやすかったりする。問題文や図をみたときに,これはこのサーバとこのサーバがこんな感じでつながってて,だったら,たぶんここを答えさせようとしてるのだろう,みたいなのが見えやすくなる。

応用情報の午後のシステムアーキテクチャは,サーバの間がどういう感じでつながってるかというのを,問題文から読み取り,それをベースにして問題を解いていく感じになることが多い。この読み取りのスキルは,ネットワークやセキュリティを解くときも同じ感覚を使ってるような気がする。

また,ここで見た構成のパターンそのものも,他の分野の問題文読み取りのための知識として使えるとも言える。

紙で身に付けにくい「流れ」を問題を通じて身に付ける

サーバ間のつながりとかなんとなくの流れは,知識が順番に並んだ紙の本では身に付けににくい。過去問を大量に見ているうちに身に付く人もいるが,それはセンス・経験依存だと思う。もっとも,センスがある・アプリを作ったり実務を経験したりするなどの人は,これを勉強レスで何らかの形で身に付けてると思う。

しかし,そうでない人は,ここは紙の本だと身につけにくいところである。他の分野の過去問大量でも行けるのだが,「つながり」だけを要素にしていないので,そういう部分が見えにくかったりする。だったら,システムアーキテクチャの問題を教材にして,こういう典型的なサーバ同士のつながり感覚を身に着ける,ということができるのではないのかと思う。

(付録)

ハイリスクハイリターン

センス + 理系力でその場で高得点が取れることも

自分は16点時代にシステムアーキテクチャの問題にお世話になった。当時の新傾向問題・難問とされる問題を解き切って,この貯金で合格した。世間では,当時の定番ではないためか難しかったらしい。しかし,無勉強の私からすると何それ?である。公式知らなくても解けるし,かつ周囲も解けないなんてなんてありがたい問題なんだ(記述の部分点が甘くなる効果を期待),っていった感じ。

見ていると,読み取りで高得点が取れる回もそれなりにある。ただ,そこそこの一般教養は前提になるけど。

難易度の分散も大きい

ありえないぐらい難しい回がある。しかも,そいう問題に簡単設問が用意されてないとか。

個人的には,H30の秋の問題はすごいという印象。だいたい,簡単目と思われる設問も色々とパニックになった。ここ回帰分析とか意味わからなくても読めるけど読みにくくない?となったり。さらに最後の計算問題も?って感じで・・・なんとか考えて必死に解答らしきものにたどりつき,そしてlogの値を評価したのにその解答か・・・・みたいな。あとは,解く前にたまたまちらっと答えが目に入たため(別の演習の解答見た時に)自力では解いていないが,ノーヒントでSPOFとか,それネットワークスペシャリストの問題の単語の穴埋めレベルでは?と唖然としたり。

LinuCのレベル2でもシステムアーキテクチャは,昔これネットワークスペシャリストでやったよな感がある感じで踏み込んでたり。世間での常識のラインが昔よりかなり高まってるのかな。。。ただ,教科書の改訂が追い付いてない。。。というかたぶんもう入れ込めない。構造的に。

テクノロジの問題,解けば解くほど,マネジメントに逃げたくなる世間の気持ちへの共感は強くなってくることは否定できない。

解いてて楽しい

今もだが,システムアーキテクチャの問題は普通に解いてて楽しい。教科書を真面目に読んでると何の面白みもないが,これを解いていると普通に楽しいウ。これは,組み込みを解いてて楽しい人と感覚は似てるかもしれない。

ネットワークスペシャリストはここも範囲に近い

明示的に範囲になっているわけではないが,テイストが近い問題があるって感じ。

勉強して受ける応用情報の午後選択(5)理系の汎用能力で10点の押さえに使う プログラミング

この分野は取れない人は取れないと言われてる。いわゆる0-100分野である。

しかし,ここでは少し違う使い方を提案してみる。

応用情報のプログラミング問題,知識ではなく,ある種の読み取り力を試している問題だと思っている。マネジメントより読み取り問題だとすら言える。必要な概念は全てその場で読み取れるように書いている。それを(プログラミングに落とし込むために)読み取れる能力があるかどうかを試してきている感じ。

この能力,理系の他の学問でそれを身に付けている可能性がそこそこありえる。そうなると,特別な勉強をしなくても選択できるという展開が出てくる。

要約

ここでは,

  • 何をやってるかを具体例で確認させる問題は理系の汎用能力で取りやすい
  • コードそのものはそんなにごちゃついてない。軽くコードをかければ,この部分も理系学力の転移で行ける。
  • 例え本番で10点しか取れなくても,節約した学習時間・(10点で割り切ることで)節約した問題を解く時間・他の問題を1問捨てられるようになったこと,を使って他で点数を取る。

ということを見ていく。

応用情報のプログラムは処理より抽象能力寄り

応用情報のプログラミングは基本情報のプログラミングと大きく違う。こちらの方が楽ともよく言われる。一方ではるかに難しいという人がいる。

何が違うか?求められていることが全く違う。基本情報は

  • 典型アルゴリズムを知っているか?(知ってると少しだけ有利)
  • コードがトレースできるか?
  • 選択したプログラミング言語の言語知識(とその言語固有の概念・Cならポインタ・Javaならクラス)

あたりを聞いてきてる。どちらかというと,知識と処理を追う忍耐力を聞いてきている感がある。

ところが(最近の)応用情報は,処理を細かく追えるかを聞くことはほとんどない。その代わりに,全体の流れを追えてるか?を聞かれているように見える。そして,そのベースに必要な力は汎用的な理系的な読み取り能力である。ゆえに基本情報のプログラミングがしんどくても応用情報のプログラミングが楽ということはありえるのである。

基本的な設問構成

応用情報の典型的な設問構成は

  1. 数式(といっても最大高校文系数学)を含むこともある与えられた概念をその場で理解できるか(例を通しながら)
  2. 1.の理解を元にして要求されていることをコードに落とせるか
  3. 概念・コードの全体の流れを理解したうえで改善の応用ができるか?

である。こういう設問構成だと,理系学問によって身に付ける汎用的なスキルでなんとかなってしまうのである。

1. 例を通した概念の理解

設問1は,一言でいうと知ってるかでなく読み取れるか?を聞いている。午前程度の軽い知識ぐらいはあることは前提。ただ,知ってれば有利かもしれないが,知らなくてもちゃんと読み解けるように作ってある。知ってるかどうかというより,読み解く能力があるかそのものを試している問題である。

この読み取りのレベルも,汎用的な理系の読み取りレベルでいけるレベルになっていると感じる。古めの問題,特に旧試験時代の問題を見てると,この読み取りの段階で情報を専門にしていないと日本語が日本語に見えないレベルであった。しかし,最近のレベルはそうではない。文系の自分でも普通に読み取れる。

ここの読み取り問題は,マネジメントの国語問題よりよほど国語だと思う。国語というと聞こえが悪いが,(理系寄りの数式も含むこともある)要求が書かれた文章をプログラミングに落とす前に,数値例を使いながらその手触りを理解できるか?というスキルを聞いていると言える。

このスキルは,理系であれば持っている人が多いスキルのはずである。理系の教科書を読むときには日常的にやりそうなことである。よって,超高学力でなくても,そこそこの学力があればこのスキルは持っている可能性が高いスキルである。

なお,お勉強(知識の暗記)をしなくても解けるの問題ってどうなの?という人向けに誤解のないように強調しておくが,このスキルは普通の人は訓練ゼロで身に付くものではない。あくまで他の勉強(高校数学・高校理科・大学の主に理系の専門の勉強)によって培われた汎用的なスキルである。ここの問題は,それを転移させて解きやすい問題だと言っているだけである。

基本情報より応用情報のプログラミングが簡単と感じる(プログラミング慣れしていない高学力の)人が多い理由はここにあると思っている(そしてわりと自分もそっち側)。

2. 読み取ったことをコードに落とす

さて,設問1で読み取ったことだがそれをコードに落とすわけだが,これも基本情報より楽である。まず,疑似コードが圧倒的に読みやすい。日常言語感覚で読み下せる。軽くPythonぐらい一通り勉強しておけば読むのには困らない(そしてたぶんだいたい理系1回生ぐらいで一度は触れるレベル)。

さて,本文の説明をプログラムに落としていくことになるのだが,これも細かな文法とか処理はいらない。ある種の抽象化されたレベルで処理を追っていれば解答が導ける。

  • コード全体が何をやってるかをざっと把握する
  • 穴埋めを要求させるか箇所が何をしようとしている箇所なのかを理解する
  • 文中のどの部分に対応するかを見つける

のプロセスで行ける。(これらのプロセスは往復が何度も入る)

非常にシンプルである。トレースをひたすら積み重ねないと解答が出にくい基本情報に比べると,はるかに抽象的な把握でいける。そして,部分的にわかったら部分的に点数が取れるようにもできている。

3. コード(処理方法)の改善

ここも,コードの改善というかなんというか抽象的な改善とか理解であることが多い。コードの細かな挙動で捉えるというよりも,ある種のストーリー(モデル)のように読むことを求められていることが多い。

1.は何かの理系学問をやってれば自然と身に付けてるスキル。2はまあコード力次第だが,ごちゃごちゃはしてないのでやりやすい。3.は2.をそうすると,1と3はほぼ汎用の理系学力,2はちょっと軽くPythonぐらいが書ければ良いになる。

完璧主義を捨てて引いた目で問題を見る

プログラムは理論的には高得点が取れる。手が滑れば0にもなるから怖い。そして,それだけに目がいきがちである。完璧にいけないしミスも怖いから,自分は取るのをやめようになりがちである。良くわからないマネジメントの方が魅力的に見えたりもする。

しかし,冷静に引いた眼で考えてみたい。20点近くを取ろうとするから大変なのである。10~12点取ろうとしたらどうなのか?そうしたら,問題によっては選択することが得な場合も出てくる。特に,理系でそこそこの学力があるのなら(まあこのそこそこも人それぞれで難しいのだが),このケースは相当にある。

全てを完璧にミスなく取れと言われれば確かに厳しい。超高学力・経験・習熟・センスのうちのいくつか必要になる。しかし,手をつけてみると1は取れました,という回はけっこうある。そして,2も埋めてみたら一部の欄は独立に良い感じで埋まったとか,3は全体は良くわからないが聞きたいことは流れでこうじゃない?でなんとなく行けることもある。そうなれば,いつの間にか5割~6割の点数は積み重なっている(配点非公表なので断言はできないが)。

先入観にとらわれず,こういう展開に持ち込めないかを事前検討して,軽く訓練をしておく価値は十二分にある。もちろん,プログラミングなので,試験後に大勘違いが発覚でゼロというリスクや爆発の魅力とは隣り合わせにはなるが。

ローコスト勉強で1題を軽いボギー(5割)で消化したと考える

対策も,そこそこの勉強時間でいける(というか行ける場合に選択する)。知識ではなくその場で読み取るしかないので,短期で伸ばすのは無理なので対策はやりようがないとも言える。そこで得た対策時間をどうするかというと,セキュリティとかネットワークとか知識や演習セット数が命となる分野に対して投入をするのである。あるいは勉強時間のかかるデータベースにつぎ込んで,データベース選択を目指す。そうすれば,ここで失った2点は取り返せる。

勉強して受ける応用情報の午後選択(4)努力派の最後の頼みの綱 データベース

DBはうっかりしているとSQLの知識不足で落とすことはある。しかし,そもそもの知識量はそんなに多くない。10回に1回ぐらいくる変な(ER図もSQLもないという意味)問題以外は,問題はほぼ一定傾向である。

満点を取れと言われると大変。しかし,練習によって半分をコンスタントは万人向けではないかと思う。

勝負に使うにせよしのぎに使うにせよ,努力派なら使うことをぜひ考えたい分野である。

要約

  • 数学向いてないとかプログラミングとか文系だからとかで先入観を持って選択しないのは損
  • ER図とキーは問題数が少ない代わりに取りやすい難易度にしてくれてる
  • SQLは努力のためのツールが多くある
  • ER図+埋めやすいSQL+もう1題何かがんばるで5割

向き不向きも激しいと言われるが

学校数学ができないからデータベースができないとは限らない

数学苦手だと厳しいとか論理思考苦手だと厳しいとかは言われるところである。しかし,これも先入観で避けているという可能性もないこともない。データベースに学校数学特有の面倒な処理などはない。

高校数学文脈でいうと,ただ単に数1や数2っぽいただひたすら計算は苦手だが,なぜか確率や数列だけはできる人がいる,といったのと似たことが起こってもおかしくはない。

論理といっても,昔の午後1のバリバリの正規化理論をやるわけでもないのであまり関係ない。

SQLとプログラミング能力も違う

たとえ事務職だとしてもSQLはできる可能性を探るのは十分にありだと言われている。以下に書くようにツールもあるので,やりこんでみたら実は向いてました,となってたら超幸運である。

臨機応変力が少なくて済むありがたさ

コンスタントに点数を計算するために一番ありがたいこととして,この分野は問題文の読み書きとか臨機応変に対応するとかがわりと少なくて済むのである。少なくとも12点取るぐらいなら大丈夫だと思う。このメリットは,学力自信ない派・努力カバーからすると非常に大きい。

SQLを白紙から書くのが厳しいと敬遠してしまうかもしれない(実は昔の私もそう思ってた。これはプログラミングも同じ。)。しかし,解答を一度ざらっと見て欲しい。全文を空で書けと言ってるわけではない。1フレーズや2フレーズである。問題文の日本語から丹念にひねり出すのに比べれば,(頭にある前提で)頭からこれをひねりだすのは,格段に楽である。私は基本情報より簡単だと思ってる(変な選択肢から選ぶよりよほど素直)。

SQLは努力のための教材が多くある

SQLはトレーニングのための良い教材が山ほどある。これは努力派にとっては決定的にありがたいことでする。

まず,ここも高度の教材を使うという選択肢がある。三好先生の本はうまくできてると思う。というか,そういう使い方のためにも使えると明言している。

初心者の基礎積み上げ教材もたくさんある。

SQL書き方ドリルみたいな本とかProgateとか初心者が,ドリルのように学ぶ教材も多くある。基本情報向けの教材もかなりある。

自分は暗記4択は苦手だが,そういうのが好きな人は,例えばOracle(標準SQLとは微妙に違うらしいが)とかOSS-DBとか,何か他の積み上げ系4択資格をペースメーカーに使うのもありえる。

他の問題に比べると,努力系選択肢は充実している。その意味でも,時間をかける・地道な努力をすることを苦と感じない人にはお勧めである。

SQLの書きの比率が高いことは,短時間・実務関係ない派からは普通は嫌われる(いちいち覚えてられるかと)。しかし,地道系・努力の人はこの裏返しで,(訓練をベースにして)覚えていればOK,非常にありがたいとなる。

(11/21追記)

考えていたら,SQLのトレーニングでSQL問題が解けるとは限らないことに気付いた。きっかけは瀬戸先生のデータベーススペシャリスト本の前書きの「データベースの理論や仕組みと組み合わせて文法を理解する」を読んだこと。はっとさせられて,直感的にも正しそうな主張だとも納得して,ちょっと例を探してみるかと考えてて気付いた。

例えば,joinの条件考えるためには,問題文の要件とかER図とか表の出力結果数行をイメージする必要があることがある。これは文法ドリルで身に付かない。データベース設計のトレーニングの結果としてできるようになることである。

自分は読み取りが得意なのと訓練で設計問題ができる側になってたので,結合条件のとこぐらい書けば取れるだろうと思ってた。しかし,冷静に考えると違った。初心者の頃は,確かにどことどこjoinするかを問題文から読むのは大変だった。

文法の練習で行けるところとそうでないところは,問題を分析して仕分けして考えてみないとならなくて,それはそのうち行う。

ただ,仮に設計もそれなりに必要という結論が出たとしても,設計問題側も努力で訓練可能なので,努力でなんとかなるという結論はあまり変わらないとは現時点では思っている。

ER図は努力でなんとかなるレベル

ER図と外部キーの習熟には習熟に時間がかかる。絶対安定をさせるには,絶対に常識で軽々と判断して線を引かない,という訓練を一回はする必要はある(適当でもだいたい合うが,それは得点源とは言わない)。それにもかかわらず4~6点しかないのはやってられるか(問題数から配点を推定)と思わないでもない。

しかし,そういう位置づけの問題なので,勉強さえしておけば4点~6点取れる親切な難易度で止めてくれている感がある。ということは,努力すれば解ける道が見えている。

努力で勝負をかけるならSELECT系以外もしっかり

R2のように,いきなり参照制約が出てきたりもする。いきなりGRANTとかも出てきた回もある。こういうところも,事前にしっかり押さえておく。押さえておきさえすれば点になるのだから,努力派からするとありがたいと思う。

データベースも10点の意味でお勧め

ER図・簡単目なSQLの穴埋めでまずは8点ぐらいを確保

ER図とSQLの簡単目な穴埋めでだいたい6~8点ぐらいは埋まる。

後は運を天に任せる(といっても任せ度はマネジメントほどではないが)

ER図+簡単に埋めれるSQLに加えて,だいたい8点ぐらいである。

あともう一個がんばって穴埋めをするか,考察問題の部分点でなんとかするか。それで5割ぐらいまで行きそうである。

その場国語はやれば確実に取れるとは言えない。ただ,SQLかその場国語かどっちかが取れれば良いで割り切きりは聞く。そして,その他の国語も他の分野の国語よりよほど楽な国語。

ボギー寄りのパーでとどめるとしても

ここもボギー寄りのパーでとどめるとしても,,選択問題を1個捨てれるオプションができたと認識できる。この効果は前のエントリで書いた通り。

押さえとして置いたとしても14点取れて良かったもありえる。まあ,それは押さえとした場合は期待値としては計算しない。

14点勝負の期待値に使う場合は,めったにでないトピックも含めてしっかりとやっていく。

それでも勘違いで14点になるのは仕方がないとしておくのが精神衛生に良い。

雑記 心理的なもの

何回やっても落ちてるとか取れないなると,できないできないの疑心暗鬼になる。

こういうのを解消するには,何かで自信をつけるのが速い。

ここで考えたSQLのように,それだけを徹底的にやることで努力で習熟まで行ける素材は,そういう自信をつける素材として使いやすい。

自信というのは非常に大きい。ある分野がこれで仕上がるなら,もしかしたら他の分野もこれで仕上げていけるのではという展望が開けてくる。あるいは,本番で「これだけやってこれだけ知ってて,でそれでできませんなら,問題が悪い,というか誰もできない,絶対ぐらいの開き直りもできる。

他の分野だったら午後は毎回バラバラなトピックで出てくる感じがあるので,勉強してもできるようになった,という実感を得にくい。疑心暗鬼にもなる。しかし,SQL(とER図)はほぼ毎回出題なので,このできた,という実感を得やすい。そういった自信回復の意味で,データベースはお勧めの分野でもある。

勉強して受ける応用情報の午後選択(3) パー寄りのボギーで安定できる問題の価値

前回,選択をする予定にするにも関わらず,2点程度の失点を許容する分野を作る,と書いた。多くの人は,5~6割では選択をすることの意味がないと考える。しかし,(少ない労力で)ボギー寄りのパーで1題が消化できたと考えれば,それなりのメリットはある。

特に,どんな問題がきても5割~6割というのが1~2題あれば,かなり気楽になる。

こういう問題については,少ない負荷で1題の問題が消化できると考えるのである。それによって,

  1. くじをシンプルにすることによる認知負荷の減少
  2. 不慣れな問題を解くことによる消耗の減少
  3. 1, 2.で得た時間・集中力を勝負すべきところに集中投入

ということを狙って利益を得ると考える。特に10点で良いと割り切れば,時間・集中力は大幅に節約できる。そうすると,投入すべきとこに時間と集中力をより注げるようになる。

これは,言い換えると,確実に10点が取れる問題によって2点の失点を払い,その対価としてガチャの不確実度を減らして様々な余裕を買おうということである。そして,その買った余裕で他の部分で良い点数を取ろういとう作戦である。 (この考え方って業界人以外不自然なのかな。。。。)

以上で自明な人には自明なのだが,以下でいちおうだらだらとは説明してみる。

1. くじをシンプルにする

くじを引くといっても,10題から4題引けと言われると,選択するだけで大変である。しかし,選択する問題数を減らせば何を選択するという問題はシンプルになり,かつ消耗も防げる。

例えば,選択問題が8題から2題のくじであったとしよう。これは得意分野以外についてはくじを引くという多くの人の発想だと思う。この状態と,追加で1題確実に10点取れる問題がある,という状態を比較する。すると,

  1. 8→2で,合計24点を取る。
  2. 7→1で,合計14点を取る。

の比較となる。私は後者の方が楽なくじだと主張しているのである。

問題選択の認知リソース

言うまでもないことだが,問題は読まないと選択できない。だいたい,(勉強していない分野の)くじ引きなど,読むことそれ自体でエネルギーを大きく消耗する。

14点取れそうな問題が時間をかけずに3題ぐらい発見できるなら良い。しかし,これはなかなか難しい。実際は,14点取れそうな問題を1題見つけた上で,12点ぐらい取れる問題をもう1題みつけることになる。この2つ目の発見が相当てこずると思う。

実際は,残りの得点状況も見ながら,得点の期待値と分散の両方を考えての選択になる。例えば,得意分野で取れてそうなら,基礎票が取れそうな問題を選ぶし,そうでなければリスクは高いが高得点が取れそうな問題を選ぶ,などという要素が絡むということである。こんな面倒な選択を試験中に2題もやってられるか,という話である。

また,1題選択と2題選択では読む量が違う。1題選択なら,まあいいや,でだいたい良さそうなところで探索を打ち切ることなどもできるので読む量は知れているが,2題の場合はそうはしにくい。

2. 不慣れな分野を解くことによる消耗を減らす

わかっていない分野は,たとえ点数が取れる良いくじが引けたとしても解く段階で非常に消耗する。結局,問題文からその場で学習しているようなものなので,そうなりがちである。

1題ぐらいはそういうことをやっても大丈夫だが,2題3題とやっていると色々と影響が出てきそうである。他の基本問題の精度が甘くなるとかがあってもおかしくはない。

3. 節約した集中力・時間を集中投入

くじ引きの2つの側面

勉強をそれなりにしていった場合,問題くじには2つの側面がある。もう1つは勉強していった分野の予想より高得点のくじ。これは勉強をしてなかったら引けなかったくじである。

もう1つは,純粋に残り1題の良い問題を選ぶためのくじ引きの大会への参加である。これが世間で言われているところのくじ引きである。このくじ引きをいくつもしてたら,それこそ運になる。

1問を合格ラインマイナス2点で確実に消化することで,この両方のくじの難易度を下げようとしているのである。

1題に時間と集中力を注ぐなら点数はそれなりに取れることもある

得意分野のくじについては,言うまでもない。時間と集中力かあれば勝率は自然と高まる。高得点くじもそうだし,基本問題を落とさない方向に時間を投入して点数を高めることもできる。

一方の問題くじについていえば,時間を投入することで取れる分野を選ぶということができる。

例えば国語系問題は節約した時間を投入すれば点が取りやすい。また,システムアーキテクチャや組み込みは,問題によっては時間を湯水のように投入すれば解きやすく,かつ,14点ぐらい取れる可能性はないこともない。システムアーキテクチャや組み込みの計算問題は,10分ぐらいかけて5回ぐらい検算するとか,色々な角度から検算するとかをするかで,正答に至る確率は大きく変わることがある。組み込みも時間をかけているうちに流れがつかめてくる,というのは十分にありえる。

アルゴリズムも同様のことが言えるが,これは外した場合の0リスクがあるので私はお勧めしない。余裕がものすごくあるときと追い詰められたときだけは別。)