Tanti Anni Prima

雑食なエンジニアの本棚

ソフトウェアアレルギー患者が基本情報技術者試験を受けに行った話

 エンジニアとして働き始めて約5年が経過しようとしている。自分はその5年間をほぼ機構設計の領域に費やしてきたわけだが、その立場から言わせてもらうとソフトウェアのエンジニアは本当に凄い。メカの領域ならばある程度CAD等で視覚化ができるし、最初は複雑に見える機構の考え方や計算だって場数を踏めば割りと似通ったものになる。ところがプログラムはそもそも他人が作り上げた得体の知れない膨大な記述を紐解くところから始めなければいけない場合があるし、必死の思いで書き上げたコードをいざ実行しようとしても、連なるエラーの嵐に何度も心を折られそうになることだってあるだろう(しかもそのエラーの原因が結構しょぼかったりする)。傍から見てもかなりしんどそうな領域だ。しかしメカの領域とはいえ、プログラミングのノウハウを含め多少のIT知識を持ち合わせていないと技術畑でこれから苦労するかも知れない、と最近になって謎の不安が芽生えてきていた。そのITの知識を得る取っ掛かりとして選んだのが基本情報技術者試験(通称FE)である。

なぜ受けようと思ったのか

 資格を取るという話になると「ITの知識をただ得たいだけなら別に資格じゃなくてもよくね?」という声が聞こえてきそうである。確かにそれは一理ある。いや、百理ある。某論破王がかつてYouTubeで言っていたような気がするが、「座学で資格を一生懸命取る人よりも、実際に手を動かしてアプリやwebを作っている人の方がエンジニアとして活躍しやすい」という考えも非常に分かるのだ。だが自分に言わせれば、同じように勉強するにしてもゴールなき勉強の方がはるかにしんどい。確か平成28年度の社会生活基本調査かなんかで、社会人の1日の学習時間を調べるためのアンケートがあった。その結果はなんと「6分」というもの。「6分って...」と思うかも知れないが、95%の人がそもそも勉強時間が0と回答した上での平均である(ちなみに勉強している人の中で平均を取ると約160分)。この95%の人達は、最初はキャリアのために熱意を持って挑んでいたが、やがてなんのために勉強していたのかという初心を忘れ、途中で挫折してしまったのではないだろうか。そう考えると、たとえ役に立つかどうか分からなくても、資格取得というのはいいモチベーションのひとつなんじゃないかと思う。一定の基準に達することで自分の知識レベルを客観的に測ることができるし、今後自分のキャリアに関する武器にもなり得る、そして何より取得することで自信にもなる。種類にもよりそうだが、資格はあるに越したことはないと思うのである。
 基本情報技術者試験に挑むにあたって少々問題となっていたのが、自分がプログラミングの知識・ノウハウがかなり乏しいということである。自分は大学で機械工学を専攻していた人間である。そのため専門にするまではいかないものの、C言語などの簡単な情報処理を学ぶ機会があった。ところがそんな中、自分でも驚くほどにソフトウェアの理解度が低かったことを記憶している。(本来そんなもの存在しないはずだが)自分にはソフトウェアの才能がない、と当時はっきりと確信していた。当然応用力もあるはずがなく、当時の大学の試験も丸暗記のゴリ押しで通過していた。恐らくちょっとでも内容が変わるとプロセスが分からず混乱するはめになっていただろう。そして当時ロボティクスの領域を志して機械工学に入ったはずだったのだが、その分野の研究室を見に行った時に夥しいコードの羅列を見て、吐き気・目眩・蕁麻疹・呼吸困難・動悸が併発して志望する研究室を変えたほどである。そんな基本情報技術者はおろか応用情報弱者の状態で学習をスタートしなければならなかった。振り返ってみると中々の不真面目な学生だった。

勉強法

 あくまで試験を突破することのみを考えるならば、基本情報技術者試験の勉強でやるべき(というか個人的にやってよかった)はざっくり言えば以下の2つである。
 ・過去問の周回
 ・トレース技術の習得
 過去問の周回が効果的なのは、(知っている人も多いと思うが)基本情報技術者試験において過去問の引用率が異常に高いからだ。最近試験形式が午前・午後試験から科目A・科目Bのように変わったのだが、科目Aは相変わらず過去問の引用率は依然として高かった。もちろんテキストである程度単語の意味を覚える作業は必要であるが、科目Aに限って言えば、テキストを2~3周した状態ならば後は過去問の周回に専念してもいいと思われる。ちなみに科目Aは科目Bと違って、長時間机に向かって解く必要はない(模擬試験をやるなら別だが)。むしろスマホアプリを導入していつも手元に置き、すきま時間を利用してポチポチやる方が遥かに効率的であった(気付けば馬鹿にできない積算時間になっていた)。
 また、科目Bおいて身につけてほしいのが2つめの「トレース」である。これは自分と同じようにコードを見ると吐き気を催してしまう人には効果覿面であると思われる(有識者の方、「それはあたりまえやろ」とか言わないで欲しい)。トレースとはプログラム上で命令の実行を順番にたどって各段階の状態・状況を確認する作業である。とてつもない長文コードに対しては個人的に未だしんどい思いをするが、このトレースができるようになってからはプログラムの理解度も大幅に上がった実感があった。ちなみにトレースの練習は最初は超簡単なプログラムでいい。「1+1=2」を生成するプログラムとかでもいい。最後まで読み解けずともトレースを使って回答を絞ることができる可能性があるので、今後のためにも是非とも身につけたい技術である。

勉強時間

 自分が記録していたのを振り返ってみると、100時間超を費やしていた。たまに「すでにある程度の知識がある人の勉強時間は50時間程度」という情報を目撃する。しかし、この「ある程度」は生半可なある程度ではなさそうである。恐らく情報系の学部や専門学校に数年間在籍して、情報の学問に日々向き合ってきた人の事を指すのだろう。自分のように「専門ではないけど試験に登場する単語とかはちらほら聞いたことがある」レベルの人はどうしても絶対量が必要になる。「量より質」などと贅沢なことは言わずに、まずは時間を確保して頂きたい。また、よく「3ヶ月で合格」のような内容を謳っている参考書も目にするが、実際に3ヶ月で合格するのは結構大変な人もいるだろうと思う。ちなみに自分は本試験で一度失敗している。試験合格までに合計100時間費やしたうち、半分の50時間程度勉強した段階で一度試験を受けに行った(当時は形式が変わる前)。午前試験は合格点60%に対して62.5%とかなりギリギリで通過したものの、午後試験は合格点60%に対し53.5%ほどであった(午後試験で基準に届かず落ちた)。そこからさらに50時間費やして今回受けた結果が下記の通り(合格がそれぞれ600点以上)。


・・・あんまり成長してなくね?とも思ったが、かたいことは言わずにひとまず合格は合格。しかし、これは最低ラインだとも思った。他の合格体験記を見ると「1日3~4時間勉強した」という書き込みを目にする。ところが人によっては平日にこんなに時間を確保することは難しいだろう。ましてや残業が多い人は、疲れ果てて平日1日1時間勉強するのだって一苦労だろう。合格者の平均勉強時間は約125時間くらいらしいが、自分の勉強時間と結果の点数のギリギリさを照らし合わせても、割と妥当な数字だと思われる。平日に勉強時間を確保するのがしんどいから休日に固めるという意見もありそうだが、一度ゼロにしてしまうとそこから勉強のモチベーションを上げるのは中々難しい。毎日小さくてもいいから「ゼロにだけはしない」という心がけは意外と大事なのかも知れない。

使った教材

下記の通り(あくまで参考。もっと三種の神器とか言われる教材があったっぽい...)

【教本】
・基本情報技術者合格教本(技術評論社)
・基本情報技術者パーフェクトラーニング予想問題集(技術評論社)

【アプリ・Webサービス】
・基本情報技術者科目A一問一答問題集(TokyoInteractive)
・Javaプログラミングを使った、科目B対策専門コース(Udemy Business)

終わりに

 基本情報技術者試験は試験が易化しているとの情報もあり、もしかしたら資格としての価値はこれから薄れていくのかも知れない。それでも合格レベルで身についた知識はこれから使えそうなものばかりであるし、勉強を継続できるようになったのが何よりの良い財産になっていたりする(信じられないが、インプットしない日があると気持ち悪いと感じるようにまでなった)。IT業界の入り口として基本情報技術者、おすすめです。


それでは。