AWS Certified Solutions Architect - Associate 試験 (SAA-C03)に合格した
概要
表題の通りですが、先日AWS Cetified Solutions Architect - Associate 試験 (SAA-C03)に合格しました。
AWSを体系的に理解しておこうという気持ちになり、せっかくだから資格を取ってみることにしたわけです。
AWS認定試験はいくつもありますが、動機と自分の状況を考えるとSolutions ArchitectのAssociateが適していそうと判断しました。
勉強
大体1ヶ月くらいかけて、余暇に試験のための勉強をしました。
結果に貢献したであろう勉強方法のみ記載してみます。
- 参考書 『AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版』を読む
- CloudTechの無料問題を3回解く
- YouTubeにある動画AWS ソリューションアーキテクト アソシエイト試験 対策動画 を2倍速で見る
- Udemyのハンズオンの動画【SAA-C03版】これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座を2倍速で見る
- Udemy 【C03版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(6回分390問)にて520問を1回解く
- 1、3、5をさらっと復習する
受けてみて
合格できて一安心です。
個人的には難易度は丁度良く、勉強を通してAWSやその周辺への理解が深まりました。
自作Cコンパイラでセルフホストを達成した
nand2tetris (コンピュータシステムの理論と実装) 完走しました
はじめに
コンピュータシステムの理論と実装(通称、nand2tetris)*1という本がありますが、ひとまず完走しました。 1年前くらいに買った本ですが、かなり放置していました。1行でも本を読んだりコードを書いたりしたのは2週間強くらいだと思います。
他のブログでもよく取り上げられているので本の詳細は省きます*2が、満足したのでその紹介と感想を簡単に書くことにします。
コンピュータシステムの理論と実装(nand2tetris)、とりあえず終わった〜。
— ゆいき (@yuikijp) 2022年2月17日
図1: 自作標準ライブラリとともにRust製自作コンパイラでコンパイルされ動作している「pong」 pic.twitter.com/NmmQhVcGpg
本の概要
NANDゲートを組み合わせるところから始め、最終的に高級言語で書かれたPong*3というゲームを動作させることを目的としています。
本書で扱うシステムはHackと呼ばれる16bitアーキテクチャのコンピュータです。16KBのRAMと512x256のスクリーンやキーボード*4をサポートしています。
なお、本書では最適化に関しては特別考慮しておらず、他の場所で学ぶことが想定されています。
感想
テストに関して
全体的に各種シミュレータやテストが提供されているので、それをパスすることを目指して作っていけます。テストが用意されていることでかなり実装しやすく感じました。 テストプログラムが各ソフトウェアの完成度に合わせて用意されているので、一度に全部作る必要はなく段階的に実装することが可能です。 ちなみに各ソフトウェアは自由な言語で記述できるので、私はRustを使いました。
パーサの実装について
パーサを実装しやすいようにJack言語はシンタックスが工夫されています。この頃たまたま「実践Rust入門」を読んでいて、パーサの実装に関して記載があったので参考にした記憶があります。
また途中でパースしたものをXMLで吐き出しそれをテストする流れになっていましたが、少し面倒だったので私はメモリ上でASTを作りました。
APIについて
各所で実装するプログラムはAPIが提示されているのですが、個人的には基本的には従うが完全には従わなくてもよいと思いました。 実装に使う言語によってはよりよいインターフェースがあるはずです。
nand2tetrisのアセンブリパーサのAPI、ちょっと実装しづらい…
— ゆいき (@yuikijp) 2021年4月16日
コンパイラについて
実装したコンパイラは、単純化のために例えばほとんどの演算子の優先順位が不定です。そのため、私は標準ライブラリの実装でコードをかなり書き間違えてしまい大変でした。 独自拡張として、慣れ親しんだ優先順位で解釈するコンパイラを作るのもありかもです。
括弧以外の演算子の優先順位が不定な言語でプログラム書くのしんどすぎるな
— ゆいき (@yuikijp) 2022年2月16日
制限
書籍としては完了したのですが、Pongを自前のVMやアセンブラを使って動作させることはまだできていません(速度の観点で)。最適化に関しては今後やる気が出たらやろうと思います。
大学の講義との関連
要所で大学で受講した講義のことを思い出しました。
- 1〜3章(論理回路): 「論理回路実験(ブレッドボード上で論理ゲート等を組み合わせてカウンタなどを作る)」
- 4章(機械語、アセンブリ): 「コンピュータシステムとOS(アセンブリを書く)」
- 10章(字句解析、構文解析):「オートマトンと形式言語」、「プログラム言語処理(パーサを一部実装する)」
- 12章(標準ライブラリ): 「主専攻実験: 組み込みOS(GBAのゲームを作る)」
大学のおさらい(一部)としてもなかなか良かったと思います。
まとめ
概念レベルでは知っていることも多かったのですが、ある程度動くものを一気通貫して作るという点では実際やってよかったと思いました。