2022年に触った技術を振り返る
2022年は、42 Tokyoの課題やインターンなどを通じて、様々な技術に触れることができました。そこで、今年一年で触った技術について振り返ってみようと思います。
触った技術一覧
言語
- C言語
- レイトレーシングプログラムやソケット通信を行うプログラムの実装を行いました。
- C++
- Go
- 42の課題から基本的な文法について学びました。
- 興味はあるけど、実践的に触れられてないので来年以降に学びたい言語の1つです。
- Ruby
- 書籍を読んだりAtCoderのAB問題を解くなどしました。
- TypeScript
- フロントエンド、バックエンド共に活用しました。
2022年の前半はC/C++を中心の開発を行ってました。42でのコードレビューなどもあるため、自分でコードを書かなくても携わる機会は通年を通してあったように思います。後半に入りTypeScriptでの開発が増えていきました。
フレームワーク
- Ruby on Rails
- Next.js/React
- フロントエンド業務の大半でReactを使っていました。
- 初めのうちはHooksに苦戦してましたが、書籍や実務での経験から少しずつ慣れていくことができたので、来年もまた使っていきたいです。
- Nuxt.js/Vue.js
- Nuxt.jsを他のフロントエンドフレームワークに刷新するプロジェクトに参加していたので、適切にコードの意図を読み取ることに注力していました。
- NestJS
- Socket.ioを用いたチャットアプリの作成を行いました。
- 公式ドキュメントが充実しているため、スムーズに開発を進められることができました。
- Prisma(ORM)
- テーブル定義やクエリの発行など直感的に行えるため使いやすかったです。
- Material UI
- チャットアプリの作成に使っていました。簡単にスタイルが当てられるので便利です。
- Tailwind CSS
- コンポーネントの組み合わせで作るReactと相性がいいなと思いました。
インターンでWebサービスの開発を行うようになってから、多様なフレームワークを扱う機会に恵まれました。
技術的な本
Web
- Webを支える技術
- Web技術がこれ1冊でしっかりわかる教科書
- インフラデザインパターン
- ネットワークはなぜつながるのか 第2版
- Real World HTTP 第2版
設計・考え方
言語
- たのしいRuby
- りあクト! TypeScriptで始めるつらくないReact開発 旧3.1版
- TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発
- Vue.js&Nuxt.js超入門
その他
- 問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本
- プログラマの数学
- ブロックチェーンプログラミングのためのコンピュータサイエンスがわかる本
新しい言語やフレームワークを学ぶときは、まずは公式ドキュメントのチュートリアルを試してみて、それから書籍で体系的に学んでいくという方法が自分には合っている気がしました。
設計や考え方の本から新しい視点を養うことによって、開発生産性の向上に繋がったと思います。
おわりに
2022年は、様々な技術に触れることで新しい学びがたくさんありました。 RustやElixirなど気になっている言語もあるので、来年挑戦してみたいです。
引き続き精進あるのみ。2023年もがんばります。
2022年11月振り返り
2022年11月の振り返り記事です。
42 Tokyoで取り組んでいる課題や、その他の活動について振り返ります。
42 Tokyoでやったこと
TypeScriptでオンラインゲームを作るチーム課題
先月に引き続き、チャット機能の実装を進めています。
WebSocketを用いたメッセージの送受信や公開、非公開などのチャットルームの作成、フレンドを表示する機能などを実装しました。
これからDMでの個別チャットや、ミュート、ブロック機能などを作っていく予定です。
ここ最近で一番学べたことは、データベースのテーブル設計です。 あまり設計段階から携わることがなかったので、この課題でガッツリ触ることができて良い感じです。
全体の進捗としては50~60%くらいかなと思っているので、年内に一度提出することを目標に進めていきたいです。
AWS Cloud Questに参加した
各キャンパスごとの対抗戦という形で、AWS Cloud Questをやるイベントに参加しました。 ゲーム形式で事前知識なしでも学ぶことができて良い教材だと思います。
他キャンパスの学生が必死に取り組んでいる様子も伺えて刺激を受けました。 最終的に10個のクエストをクリアして証明書となるバッジをもらうことができたので満足です。
以下に感想記事も書きました。 ryo-manba.hatenablog.com
インターン
引き続き週3日ほどインターンに参加していました。
サーバーサイドのタスクが中心で、APIの設計から実装までを一貫して行うなど幅広く業務に携わることができました。 こまめにサポートしてくれる先輩方には大変お世話になっております。感謝です。
読書記録
今月は2冊読みました。
TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発
Storybookやユニットテストを用いた開発からレンダリング手法による違いなど、幅広い内容を取り扱っており、一通りの用語や作法を学ぶことができます。 実用的なコード例が豊富で、とりあえずReactで何か作りたいって人にはうってつけな内容だと思いました。
超・箇条書き
聞き手とそのコンテキストを考えることや、レベル感を整えることなど、人に伝わる箇条書きを書くための手法が数多く紹介されています。 リモートワークでテキストコミュニケーションが主体となった今、身につけておいて損はないスキルだと思います。
おわりに
12月に入って一気に寒くなりました。鍋が食べたいです。
【感想】りあクト!を読んだ
一度は読んでほしいと知人からオススメされていた「りあクト!」3部作を読みました。 対話形式ということもあり、意外とカジュアルな内容なのかなと思いきや、そんなことはなかったです。 評判通りの分かりやすい噛み砕いた説明と充実した内容に感銘を受けました。 以下にそれぞれの感想をまとめてみたのでご覧ください。
1冊目 JavaScriptとTypeScriptの基礎を学ぶ
JavaScriptがプロトタイプベースであることやthisの注意点など、構文以外にも包括的な内容で初めて知ることが多かったです。 以前インターンでthisの扱いに苦戦した事があったので、対処法が複数提示されていたのは参考になりました。
他には、関数型プログラミングとはどういうものか、TypeScriptにおける型の扱い方など、歴史的な経緯から学ぶことで理解の促進に繋がりました。 やはり型があることで、コードの見通しが良くなっていいですね。
2冊目 Reactの歴史や周辺技術、コンポーネントの基本を学ぶ
Reactを取り巻く技術の話では、モジュールバンドラやリンター、フォーマッタなど開発に必須なツール郡の使い方やセットアップなどを学びました。 新しいものだと、ビルドツールのViteやJSランタイムのDenoがどういう技術なのか、どういった経緯で登場したのかなど興味深いトピックもありました。 Viteを初めて使ったときの起動の速さには驚きましたね。
Reactが登場するまでのフロントエンドの歴史では、Googleマップから始まり、MVC、MVVMアーキテクチャから、コンポーネントベースのアーキテクチャにトレンドが移り変わった経緯についてみっちりと説明されています。初見では、Reactのコードが複雑に感じましたが、成り立ちを知ることによって、なぜそうするのかが少しは理解できるようになった気がします。実際にコードを書くうえで役立ちました。
3冊目 Reactの応用テクニックを学ぶ
Mixins、HOC、RenderProps、そしてHooksとこれまで主流だった技術やコードの書き方について学びました。 クラスコンポーネントは馴染みがあるため、ぱっと見で何をやっているのかがわかりやすい一方でHooksは機能に主眼を置いているため、概念を理解するのに苦労しました。 現在の主流はHooksなので、徐々になれていきたいです。
コンポーネント設計の章で気になったのは、コンテナ・プレゼンテーションパターンです。アプリケーションロジックとビューを切り分けることで関心の分離を実現することができるようです。 小規模なプログラムだとあまり活用する機会はないかもしれないですが、今後機会があれば試してみようと思います。
最後にReduxとContext APIによる状態管理の仕方も学びました。 そもそもReduxによって実現可能なFlux パターンとは何なのか、それが実現できると何が嬉しいのかについても知ることができます。 グローバルに状態を扱おうとすると、考えることが増えて一気にコーディングのハードルが上がりますね。 複数のコンポーネントにまたがるような変数の管理は、極力避けたいなと思いました。
おわりに
想像以上に内容が盛り沢山でしたが、対話形式ということもあって楽しく読み進めることができました。 今使われている技術だけではなく、歴史的背景や周辺知識も含めて体系的に学んでみたいという方にオススメしたいです。
AWSをゲーム形式で学べるAWS Cloud Questをやってみた感想
無料で試すことができるクラウドプラクティショナーコースをクリアしました。
12個のクエストがあり、内容としては
など様々なクエストが存在しました。
すべてのクエストをクリアすると以下のバッジが手に入ります。
各クエストは、簡単なものから始まり、少しずつ難易度が上がっていくので、AWSの知識がない人でも抵抗なく進めることができると思います。
クエストを進めていくにつれ、報酬で街に新しい建物が設置できたり、バイクのような乗り物で移動できるようになったりと、モチベーションを維持するための仕組みが色々とありました。
また空中に飛んでるドローンを撃ち落とすと、選択形式やパズル形式のクイズが出題されたりとゲーム要素も多かったです。
ちなみに、特に面白いと感じたクエストは、EFSという共有ストレージサービスを作成し、EC2 からマウントするというものでした。
マウント時にエラーが発生してしまうことがありましたが、しっかりとスライドを確認して、改めてやり直したら正しく動作しました。 最終的に複数のEC2で接続してそれぞれでファイルを編集すると、ちゃんと共有されていることが確認できて嬉しかったです。
おわりに
全文英語なので、理解するのに時間はかかりますが、そこは英語の勉強も兼ねて取り組むといいのかなと思います。
これ以外のコースは有料になりますが、ソリューションアーキテクトやセキュリティのコースなど、今後AWSの学習をするタイミングがあれば利用してみたいです。
2022年10月振り返り
2022年10月の振り返り記事です。
42 Tokyoで取り組んでいる課題や、その他の活動について振り返ります。
42 Tokyoでやったこと
TypeScriptでオンラインゲームを作るチーム課題
この課題は、バックエンドはNestJSという指定があるものの、フロントエンドはフレームワークが自由に選べることになっています。
私達のチームでは、Next.jsを使用することになりました。(ルーティングとか楽なので)
現在は機能ごとに分担して実装を進めています。 ゲーム、マッチング、チャット、認証の4つの中から私はチャット機能を担当しています。
Socket.ioの使い方やNestJSとPrismaの連携など、実装を進めながら学習しています。
インターン
週3日ほどインターンに参加していました。
少しずつ難易度が高いタスクも任せていただくようになりました。
その分、これまでよりも抽象的な問題を解決しないといけないので、苦戦することも多かったです。
問題に対して、前提となっている事象や、その背景を確認すること、また考えることの重要さが身を持って学びました。
今月もまたできることを増やしていきたいです。
読書記録
10月は技術書以外の本が多かったです。
りあクト! TypeScriptで始めるつらくないReact開発 第4版【③ React応用編】
応用編とのこともあって、実践的な内容が豊富にまとまっていました。
また現在主流となっているReact Hooksがどのようにして生まれたのかを知りました。
これまで起きてきた問題を再び繰り返さないためにも、歴史的な背景を知ることは大事だなと思いました。
チームのことだけ、考えた
特に印象的だった考え方としては、「事実」と「解釈」を明確に使い分けるということです。 事実は人を通じて解釈になる。事実と解釈の使い分けを浸透させることで、不毛な議論からの脱却を果たしたとのこと。 他にもサイボウズの成り立ちや、個性豊かな制度がどのようにして生まれたかなどが書かれていました。
以下はこちらの動画で紹介されていたのがきっかけで読んでみました。 www.youtube.com
おもろい話し方 芸人だけが知っているウケる会話の法則
中身のない話で会話のハードルを下げるっていうテクニックが面白いなと思いました。
初対面だったり、まだ親しくなれていない人とは、中身のある話をしないといけないと感じてしまう心理があるそうです。たしかに、家族や親しい友人には、中身のない他愛もない話が気軽にできるので納得がいきました。
「ビジネスマナー」基本の基本
身だしなみから、話し方、ビジネス文書の書き方など、幅広く一般的なマナーがまとまっていました。 最低限のマナーは知っておきたいところです。
手ぶらで生きる。見栄と財布を捨てて、自由になる50の方法
布団も持たずに床で寝ているという内容があり、さすがにやりすぎなのでは、と思いましたが、体調を崩してから布団を買ったそうです。 ポエムっぽい内容なので、好みが分かれる気がします。
お金のむこうに人がいる 元ゴールドマン・サックス金利トレーダーが書いた予備知識のいらない経済新入門
投資とギャンブルは何が違うのか、ジャイアンリサイタルのチケットはなぜ完売するのかなど、切り口が斬新で読み物として面白い内容でした。 身近なテーマから裏ではどのように経済が回っているのかについて学ぶことができました。
おわりに
今年も残り2ヶ月…ってコト⁉︎
2022年9月振り返り
2022年9月の振り返り記事です。
42 Tokyoで取り組んでいる課題や、その他の活動について振り返ります。
42 Tokyoでやったこと
docker-composeを使った課題
WordPress、nginx、MariaDBをそれぞれ別々にコンテナを立てて、セットアップするという課題でした。 Dockerを使って、1つのコンテナで同じようなことをしたことがあったので、スムーズに進められたと思います。
docker-composeは、下記のサイトを(1)~(4)まで実際に手を動かしながら進めてみると、ざっくり理解できました。
networkの仕組みがわかりやすくてよかったです。
ちょっとしたsandbox環境の構築など、これからもDockerを活用していきたいですね。
TypeScriptでオンラインゲームを作る課題
First Circle最後の課題です。4人でチームを組んで進めています。
9月の終わり頃に始めたばかりなので、まずはReactとNestJSのキャッチアップをしていました。
今後は役割分担をして、一度プロトタイプを作ってみる予定です。
コーヒーマシンお披露目会
42 Tokyoの校舎にコーヒーマシンが導入されました。 そのお披露目会でアクアクララの方からコーヒーマシンや水の話をしていただきました。 マイボトルを使って、コンビニで水が入れられたらいいよねという話がおもしろかったです。
その後の交流会では、ふだん話したことがない人ともコーヒーを飲みながら談笑したりと、良い時間を過ごすことができました。 コーヒーを飲む場ができたことで、学生同士で気軽にコミュニケーションをとる機会が増えるといいですね。
私もたまには校舎に足を運んでみようかと思います。
インターン
9月は週3日ほどインターンに参加していました。
最近はフロントエンドのタスクを中心に取り組んでいます。
はじめのうちは、React Hooksの構文にかなり苦戦していましたが、最近ようやくHooksの気持ちがわかり始めてきました。
42の課題でもReactを勉強をしているので、相乗効果でどちらも成果を上げられるようがんばりたいです。
読書記録
9月は3冊読みました。
達人プログラマー(第2版): 熟達に向けたあなたの旅
今年読んだ中で一番学びがある本でした。 プログラマーとしての大切な考え方について今の時点で知ることができてよかったと思います。
感想記事を書いたので、興味ある方はそちらもぜひご覧ください。 ryo-manba.hatenablog.com
りあクト! TypeScriptで始めるつらくないReact開発 第4版【① 言語・環境編】
https://oukayuka.booth.pm/items/2368045
こちらは3部作の1冊目です。
JavaScriptの構文からTypeScriptの型の仕組みなどを中心に書かれていました。
Reactを使う上で大事な関数型プログラミングの仕組みなどが学べました。
りあクト! TypeScriptで始めるつらくないReact開発 第4版【② React基礎編】
https://oukayuka.booth.pm/items/2368019
Reactが登場するまでのフロントエンドの歴史をたどりました。 Google mapからさまざまな技術的な革新があり、どういった経緯でReactが普及していったのかを知ることができておもしろいです。 Reactのコンセプトについても細かい説明があり、コードの背景にある考えを知りました。
おわりに
ブログやnoteの更新頻度を上げていきたいぞε=┏(·ω·)┛
【感想】達人プログラマー(第2版)を読んだ
ITエンジニア本大賞2022の技術書部門大賞を受賞していたので、興味が出て読んでみました。 感想としては、評判通りの名著だなと。 生産性を向上させ、効率的に仕事を進めていく上での大切な心構えがまとまっていました。 100個ものTipsがありますが、一つ一つが簡潔にまとめられているため、好きなタイミングに読めるのもよかったです。 今回は特に印象的だったTipsを3つほど、感想とともにまとめてみました。
Tip 15 DRY Don’t Repeat Yourself(繰り返しを避けること)
普段Railsで開発しているので、DRYという言葉はよく聞きます。自分の認識では「プログラム中にソースコードのコピペをしてはいけない。二重化は避けろ。」という程度のものでした。 しかし、このTipsから自分は、DRY原則の本質を理解していなかったということに気がつきました。それは、 避けるべきはコードの二重化ではなく、知識の二重化である ということです。
例えば以下のような、処理内容が重複しているコードでも、知識の二重化ではありません。
bool validate_age(int value) { return validate_min_integer(value, 0); } bool validate_quantity(int value) { return validate_min_integer(value, 0); }
これは、あくまで2つのものごとが同じ規則を有しているだけであり、それは偶然にすぎないからです。
これまで同じような処理は1つのメソッドにまとめればいいんだなくらいに考えていたことを反省するとともに、普段何気無く使っている言葉も、本質的に理解しているのかをしっかり確認すべきだなと思いました。 今後はデザインパターンや設計思想など、なんとなくで使ってしまいそうな言葉もしっかり理解した上で使うようにしていきたいです。
Tip 27 エディターに熟達すること
このTipsでは、エディターを使いこなすことで、生産性を高められる ということを学びました。 当たり前のように感じるかもしれませんが、日々のコーディングで、何度もマウスやトラックパッドを使うことはないでしょうか。 もしあるのであれば、それが、エディターの機能によって、コマンドラインで行えないか調べてみるといいかもしれません。
ちょっとでも、面倒だと感じることは、エディターの機能を最大限に活用することで、無駄な時間を削減していくことができます。 日常的に、繰り返す動作については、なるべく効率的に、かつスムーズに行える習慣を取り入れるべきだと思いました。
ショートカットや拡張機能などは、使わなくても支障をきたすことはありません。 そのため後回しにしがちでしたが、今後は積極的に活用し、それを無意識に使えるようにしていきたい思います。
Tip 66 テストとはバグを見つけることではない
テストを書くことで、そのコードが要件を満たしているのか確認することができる。 実はテストにはそれ以上のメリットがあるということをこのTipsから学びました。
それは、テストを実行しているときよりも、テストについて考えて、記述しているときの方が大切 だということです。 その考えは、コードを書く段階から重要になってきます。
テストがしやすいコードを書くためには、結合度を下げる必要があります。 境界条件やエラー条件を考えておけば、関数の構造もすっきりさせることができるはずです。
新しく実装するときは、必ずその機能とセットでテストについても考えながらコーディングしてみようと思いました。 それによってコードの質を向上させていきたいです。
さいごに
今年読んだ本の中ではダントツでよかったです。 今後も達人プログラマーの考えを取り入れていくように、読み返してみようと思います。 コーディングや設計、開発手法、ユーザーに良いサービスを提供するための考えなど数多くのTipsがあるので、興味ある方はぜひ読んでみてください。