自分はプログラムそのものを全く読めてないこと気付いた

JavaのSilverをやってるとなんかつらいなと感じていた。そのつらさは何からくるのだろうと考えてると少し発見があったのでまとめてみる。

日常のコード読み→人間の意図を読む

自分がコードを読むときのプロセスはこんな感じ。

  1. 問題文ややりたいとされていることをパーツ分解して,該当する箇所を探してぼんやりと意図をつかむ。
  2. プログラム数行のまとまりをなんとなく読んでその一塊の処理が何をしてるのかを推測する。
  3. 1.と2.を往復しつつ全体像を作りあげ,後は設問をつきあわせて,トレースとか細かなことをしてい

この読み方,一言でいうと「プログラムを書いた人間の意図を読むことによりプログラムを読む」というアプローチである。

Silverの問題を解くときはコンピュータになりきる

一方,Silverの試験は出題者の意図読みは難しい。まず,ストーリーなど何もない。ただの文字列が並んでる。そして,さらにコンパイルエラーとか例外とかいう選択肢が入ってくると,人間の意図読みは全く機能しない。機械のつもりでプログラムを読んでいくしかない。

もちろん,パターンをちゃんとストックしていっておけば一定のポイントを見て読むことはできるけど,そのポイントをみつけるにしても「プログラムの文字列」からそれを発見する必要がある。日本語ではない。

Silverは文法だけだから勉強で簡単?

文法だけを問われるということは,文法そのものがわからなければ終わりである。

知識がないときに,周辺文脈から類推することもできない。

勉強か経験がなければ終わりの試験である。

一方で,基本情報の問題は文法以外の知識・技能も求められる,と資格解説の文脈で言われている気がする。ゆえに簡単ではないともいわれる。しかし,これを裏返すと,文法以外の知識・技能でプログラムを読んでしまえば楽になる問題ともいえるのである。

どっちが楽かはあまりにも人それぞれすぎるような気がする。