# 今までに学んだ言語・分野について
「何ができそうか?」という判断基準を提供するために、今まで学んだ言語や分野について書いてみました。
コーディングスキルについては、面談時にペアプログラミングをしたり画面共有しながらコードを書く過程を見せたりすることもできます。
## 使用できる言語
- Lean
  - 一番好きで、よく書いている言語
  - 純粋関数型言語として使うのはもちろん、定理証明支援系として関数の正しさを証明したり数学的な概念の定義・証明がタクティクを自作したり
- Haskell
  - Leanに触れるまでは一番好きだった言語
  - オンラインで関数型言語をあまり触ったことがない人向けに教えたりすることがある
- JavaScript
  - 業務でチャットとビデオ通話ができるWebアプリを作ったことがある
    - React/Redux + Firebase + RxJS + WebRTC
  - 使い始めてから10年以上経っていて、一番使い慣れている
  - 型のある言語が好きなので、 TypeScript も使う
- Ruby
  - BtoBの業務システム案件に参加した
    - Rails + Trailblazer
  - TDD や BDD の学習のため、 RSpec や Cucumber の練習をすることがあるので書き慣れている
- Python
  - Numpy, Pandas, Jupyter Notebook などの使い方は分かる
  - scikit-learn と PyTorch をほんの少し触ったことがある
- SQL
  - CRUD や GROUP BY、サブクエリは書ける
  - N+1 問題くらいは知っているが、クエリプランを見ながらインデックスを適切に貼れたりはしない
- C#
  - 学生時代に Windows Phone / Windows 8 用のアプリを10個程度作ったことがある
    - XAML・データバインド・MVVM・ReactiveX について学ぶ切っ掛けになった。思い入れのある言語
- C言語
  - 簡単なOSを作ったことがある (30日でできる! OS自作入門)
- Kotlin
  - たまにオンラインのモブプログラミングで使うことがある
  - ほとんど使うことはないが、 C# とよく似ているので書き方は分かるつもり
- PHP
  - 学生の時に CakePHP のプロジェクト、業務で Laravel と EC-CUBE の案件に参加したことがある
  - (あまり好きな言語ではないので、好きな人に良さを訊いてみたい)
- Go
  - 簡単なサーバを書いたことがある
  - (あまり好きな言語ではないので、好きな人に良さを訊いてみたい)
- その他の書いたことのある言語
  - Rust, Swift, Scala, F#, Bash, ActionScript3, Coq, Idris, PureScript, Scheme
## 領域
- Webフロント・モバイルアプリ
  - クライアントサイドのMVCについて深く調べていたことがあり、フレームワークの使い方を知っているだけでなく、関心の分離を意識して設計できる
- サーバサイド
  - Rails や Laravel などの一般的なWebフレームワークの使い方は一通り分かる
  - DDD や Clean Architecture などに興味がある
  - 実践経験は少ない
- インフラ
  - 大規模にスケーラブルな構成を設計するようなスキルはないが、AWSは業務でよく使っていた
    - EC2, ELB, RDS, S3, CodePipeline など
  - Linux は開発環境としてはよく使うが、低レイヤまで理解できているわけではない
  - Docker や Docker Compose も開発環境としてはよく使うが、 Kubernetes はチュートリアルをやった程度
- Webセキュリティ
  - IPA 主催のセキュリティ・キャンプを修了しており、 XSS, CSRF, SQLi などの知識はある
  - 重点的に学んでいたのは1~2か月ほどなので、かじった程度
## その他
### TDD
- TDDBCに2回参加して1回主催している
  - 和田さんにサインしてもらったTDD本が密かな自慢
  - [TDDBC Toyama #1](https://tddbc.connpass.com/event/47843/)が初参加で、過去最高に楽しい勉強会だった
- 練習は結構してますが、そこそこの規模をTDDでやったことはないのでまだレベルが低いと感じる
  - 練習は主にRuby/RSpec、JavaScript/Jest でやっていた