2025年秋の応用情報技術者試験を受けてきました!
勉強期間としては、9月の頭から1カ月半ほどでした。
今の気持ちは解放感というより、「もう終わってしまったのか…」という虚無感の方が近いです。友人と切磋琢磨して毎にマックでコーヒー片手に勉強していたあの頃に戻りたいな~。この1カ月半の試験勉強を通して、自分でも驚くほど成長できたと感じています。 この応用情報技術者試験での学びを今後に活かしていけるよう整理してまとめてみました。
本ブログは、以下のような構成となっています。
- 学びの整理(気になった・印象に残っている技術等)
- 試験勉強を通じて感じた成長
- 今後の方向性
1. 学びの整理
システム構成
システムの処理形態(分散処理、集中処理)
- ロードバランサ
高信頼性・高性能システム
サーバの性能向上策(スケールアウトやスケールダウン等)
スケールアップとスケールダウンがサーバそのものの性能、スケールアウトとスケールインがサーバの台数。これややこしかったです。ただただ性能を上げるためだけにスケールアップ、スケールアウトをするのではなく、その時々に合った性能の上げ下げをすることが重要という事を学びました。
仮想化技術
キャパシティプランニング
ハードウェアとコンピュータ構成要素
プロセッサ関連(CISCやRISC等のアーキテクチャ、高速化技術、内部構造)
大学の実験でVDLを用いたALUの実装やKUE-CHIPによるRISCでの暗号化技術の実装をすることがあったが、その辺りと繋がりました。グループのメンバー本当は5人のところが1人しか来なくて、2人で乗り切った苦い思い出です。
メモリアーキテクチャ
記憶階層、主記憶への書き込み方式(ライトスルー・ライトバック(LRUアルゴリズム))などキャッシュメモリ周りの理解を深めることができました。しかし、キャッシュメモリの割付そのものやダイレクトマッピング方式をはじめとした方式についての解像度が低いため、実際に動かしながら知識を付けたいです。
OS
タスク管理(排他制御や同期制御)
プロセスとスレッド
並列処理使いこなしたいです…試験勉強中、PythonのThreadingライブラリを使って簡単なプログラムの実装をしてみたが、これ使いこなせたら世界変わりそうと思いました。プロセッサレベルは別のライブラリの方がいいみたいです。GoはGoRoutineにより並列処理が得意な言語として挙げられます。使いこなしたいです。
記憶管理
- キャッシュメモリ
- 仮想記憶管理
DB
DBMSの仕組み
インデックス
ストアドプロシージャ
3層クライアントサーバシステムにおいて、バックエンドサーバとDBサーバのデータ通信量を減らすことができます。実際どんな風に最適化されているかまでは学んでいないので知りたいです。
DBチューニング
バックアップ方法(redo/undoあたり)
分散データベース
- 2層コミットメント
CEP
リアルタイムで分析処理するやつ
ネットワーク
TCP/IP
IPv6有能。もう少し詳しく知りたいです、ヘッダーの仕組みなど。
SDN(OpenFlow)、NFV
制御部をソフトウェアの階層で実装するてどゆこと!?試してみたいです。
セキュリティ
ネットワークとソフトウェアは紙一重だなと感じました。脆弱性というのは意図的なものではなく、ソフトウェアやネットワークの仕組みをただ利用しているだけという印象を受けました。便利にするために仕方のない実装というものそうでないとその技術が有効に使えないという実装があり、それをカバーするために多段階防御という思想があるのではないかなと思いました。
認証周り
チャレンジレスポンス認証
ネットワーク上に直にパスワード等を流さない工夫が面白いかった。
攻撃手法
ポートスキャン
ネットワークの授業でポート開放した際にちゃんとポートを閉じといてねって言われたことがあったがこれとつながりました。でも試験では間違えた!(SYNスキャン時はSYN/ACKが返ってきたら、稼働中)
オープンリゾルバを悪用したDDoS攻撃
印象に残っています。当たり前かもしれないですが、セキュリティ攻撃を防ぐには、いったん攻撃者の視点に立ってみるというのは大事だと思います。私ならこの仕組みを使ってこう攻撃するな等、そこからこうしたら防げると試行錯誤を繰り返すことで、どんどん堅牢性が上がっていきます。もちろん堅牢性が上がれば上がるほど、使いにくくなったりと利便性が下がっていくので、そこでリスクマネジメントにより、リスクを経営や損失の面から分析し、評価し、どう対応するかが最も重要ではないかと感じました。
TLSアクセラレータ
TLSの複号の処理ってWebサーバにとって負荷が大きいらしく、この複号処理を別のサーバに分けてやることらしいです。めっちゃ便利です。実装してみたいです。
システム開発技術
オブジェクト指向
今回学び、本当にうまくオブジェクト指向をうまく使いこなせているかと聞かれたらうまくは使いこなせていない気がしました。もっと勉強していきたいです。
モジュール設計
STS分割、TR分割
STS分割は特に今まで実装が言語化されました。AtCoderで問題を解くとき、とりあえず、入力と出力が何であるかを抑え、出力がどのような性質を持つのかを羅列することで良い実装に繋がっていました。この性質をどれだけスマートに実装するかが腕の見せどころだと思うが… このような方法を実際に使いこなしていきたいです。
テスト管理手法
バグ管理図の形からソフトウェアの信頼性が分かるのはとても興味深かったです。 AIによるエンジニアリングにおいて、TDDが脚光を浴びているようですが、今後このあたりは変わっていくのでしょうか。まずこの意見が出てくる時点で私の理解は浅いのかもしれません。
マネジメント
タスクスケジューリング(クラッシングやファストトラッキング)
納期や一定の予算内でプロジェクトを完遂する方法論を学びました。一つ思ったのが、理論的には予算や納期に間に合ったとしても、実際に実現可能かは人間力などに関わっているのではと思いました。
マネジメントの本質は理論ではなく、人間力なのでは…? そんな人間になるにはどうしたらいいんだろうか…?????
ストラテジ
ユーザビリティテスト
利用者視点の使いやすさを測るにはこれしかないらしい。
エッジコンピューティング
実装してみたい技術です。自分のコンピュータのみでは資源が足りない際はこれを使えばいいのでは…と夢が広がりました。
2. 試験勉強を通じて感じた成長
技術の裏側を構造として捉える力
試験勉強を通して、自分でも驚くほど技術的な深堀ができるようになったと感じています!
例えば、最近だと韓国のデータセンターの火災の件に関して、今までは火災については「大変そうだな」と思うだけでした。 しかし今では、バックアップ取っていないという報道を見て、 「RAID構成で冗長化するべきだった」「定期的なフル・差分バックアップを取っていれば…」「障害時のリカバリの計画はどうなっていたんだろう」等、 内部でどんな対策が取られていた・取るべきだったのかを考えられるようになりました。(素人思考で恐縮ですが…)
これは単に知識を覚えたというよりは 「技術の裏側を構造として捉える力」 が付いたということかなと思っています。 Twitterで流れてくる技術的な投稿を読んでも、背景の仕組みや共通する原理を読み取れるようになり、理解の幅がかなり広がりました。
今まで異なるものに見えていた技術が点から線へとつながり、体系的に知識を吸収できるようになったかなと思っています。いつかはでっかい面になりたい(?) この技術の裏側を想像する知識が付いたことが今回の一番の収穫だと思います!
3. 今後の方向性
ある程度CSに関する知識が身に付いたと思うので、次に何をしていくかを2つまとめてみました。
技術トレンドを追う
”単に使いこなす” だけでなく その技術の原理やなぜ有効であるかまで掘り下げたいです。
使う → 理解する → 応用する というループを自走で回せるようになるのが目標です。
各分野の深堀
応用情報の学習を通じて理解が浅かったり、もう少し深堀したい部分を今後は手を動かしながら、深めていく。
- データベース(参考:『達人に学ぶSQL徹底指南書』,『達人に学ぶDB設計指南書』)
- SQLの基礎
- DBMSの仕組み理解(ストアドプロシージャやインデックスの設定)
- 各種DBの特徴比較(まずはRDBを中心に)
- ネットワーク(参考:『マスタリングTCP/IP』
- 各プロトコルの理解(特にWeb周り:HTTP/HTTPS, DNS, TLS等)
- 過負荷環境下でのシステム設計・分散処理
- AWS:入社先で使うらしい!
- セキュリティ
- 実装面の安全性(参考:『安全なWEBアプリケーションの作り方』)
- 攻撃の視点から防御策を理解(自作アプリに対して、模擬的に攻撃を実装)
- OS(参考:『ゼロからのOS自作入門』(みかんOS))
- 資源管理やスレッド / タスクスケジューリングの仕組み
- プログラミング言語
Java(オブジェクト指向の言語)
入社先で使う言語です。オブジェクト指向完全に理解したい。
4.最後に一言
「情報学部に通っているわけだし、これぐらいは取らなくては!」と自分にプレッシャーをかけながら、励んだ応用情報技術者試験でしたが、なんだかんだ応用情報技術者という肩書だけでなく、何か大切なものを手に入れることができたのではと思っています。
最近はめっきりAIの話題ばかりで、自分の将来が不安になることもありますが、今の私にできることは「今できることを最大限やる。」これだけだと思っています。
AIの進化により、プロセスを飛ばして"出力"だけを見ることが増えてきました。 そこで、重要な事は「なぜ」その出力がなのかを想像し、理解する事が重要なのではと思っています。 そしてその過程を想像するために必要なのが、応用情報技術者試験で身に付けられるような知識だと思っています。
この記事は私の学びの整理のために書いたものですが、誰かの役に立っていれば嬉しいです!!! 読んで頂きありがとうございました!!!!