今後、身につけなければいけないと思っている技術は何ですか?
EMとしての力
1人でできることには限界があります。チーム全体を引っ張って、よく機能させる事のできるエンジニアになりたいと思っています。
信頼を得られるために自分ができる深さ・幅が必要なのはもちろんのこと、
チームの心理的安全性を高めたり、メンバーのキャリアに繋げられたり、プロジェクトをうまく回したり、そういった力をつけたいと思っています。
あなたが一番パフォーマンスを出せるのはどんな環境ですか?
枠にとらわれず常にいろんな方面に思考しているので、様々なことを積極的に議論できる環境だと嬉しいなと思います。
色々完全に指示通りであるよりも、仕様策定や設計に積極的に関わりたいと思っています。ただ事業的な決断力には自信がないので、自分だけで施策を進めるよりもチームとして議論しながら進めたいです。
コードに関して言えば、デザインパターンにとらわれず、細かな仕様変更があったときにでも、そもそもの設計が正しいのか、新しい仕様に対して論理的に矛盾しないのか考えます。
例えばバージョン情報をパラメータに付与する必要があったとして、そのまま文字列を保持するよりも新しいクラスを作ったほうが不正値の入力をコンパイル時に検知できて良いと思います。
さらに、バージョンは今後増える可能性があるので、enumで保持すると網羅性のために、追加時にすべてのswitchを書き換える必要があるため、staticフィールドで持つとより良く、またinitializerをprivateにすれば外部からのインスタンス化も禁止できて、より安全な設計になるかと思います。
```swift
enum Version {
case v1, v2, v3
}
```
```swift
struct Version {
static let v1 = Version(...)
static let v2 = Version(...)
private init() {}
}
```
さらに、Encodableを使えば、これをそのままstringにエンコードすることができます。
```swift
extebsion Version: Encodable {
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(value)
}
}
```
これで完全にStringになりすますことができます。
どこの勉強会でもこのような話を聞いたことはないですが、今ある仕様やデザインパターンなどに囚われず、常により良い設計・よりよい仕様について思考を巡らせています。