C#とSwiftの好きなところとポエム

2016年はSwiftと出会って幸せになった年といっても過言ではないので、Swift愛を吐き出すためにポエム書きます。

# C#と就活

## C#の好きなところ

修士1年の春、就活を考え始めるシーズン。僕はC#とVisual Studioが好きでした。
具体的には C# の以下のようなところが好きでした。

#### 静的型付け

`静的型付け` で、コンパイル時に未然にバグが見つかるところが好きでした。

#### 拡張メソッド

`extension` (`拡張メソッド`) で、直感的にインスタンスに対する操作が行えるのが好きでした。

#### 型推論

`var` と書けば変数の定義時に型推論してくれるのが好きでした。

#### プロパティ

`プロパティ` があって、getterやsetterをわざわざ書かなくて済むのも好きでした。

#### null 合体演算子

`??` で書けるのが直感的で好きでした。

#### デフォルト引数

`デフォルト引数` が使えるのも便利でした。

#### インデクサ と 演算子オーバーロード

`インデクサ` や `演算子オーバーロード` が定義できる大胆さが好きでした。

#### `struct` の扱い

`class` に対して、`struct` が値型として定義されているのも直感的で好きでした。

#### IDE のサポート

Visual Studio の強力な `入力補完` が好きでした。
使われていない変数があるときに注意してくれたり、未然にバグが防げる仕組みがあるのも好きでした。

## C#の仕事探しと実情

学校で使うことが多かった言語は Java や C でしたが、すごく便利にやりたいことができる C# は魅力的に見え、自然と C# でお仕事ができればなぁと考えるようになりました。

しかし、 C# で求人を探すと出てくるのは大半が Unity を使ったゲーム開発か、BtoB 向けの業務用アプリ案件でした。ゲームもあまりする方ではなかったので[^1]、 C# で身近に使っているようなサービスが作れそうな新卒向けの求人には出会うことが出来ませんでした。[^2]

### 結局時間切れに

結局 C# でのお仕事がみつからないまま就活期間は時間切れを迎え、「いつかはC#でお仕事もしたいなぁ」と思いつつ、内定をもらった Web 系の会社になんとなく入社することになりました。

# Swift との出会い

2016年4月、新卒として配属された僕は、研修期間のはじめに、先輩社員から「アプリとサーバーサイドあるけど、どっちが良い？」と尋ねられました。

僕は、その時点では「たぶん、この会社ではサーバーサイドやっていくんだろうなぁ」と思っていたので、
研修期間にできるだけ触ったことない分野のことを教えてもらおうと思い、半分遊びのつもりでアプリを選びました。

そのときに先輩社員におすすめされたのが、はてな教科書の「プログラミング言語 Swift」でした。

https://github.com/hatena/Hatena-Textbook/blob/master/swift-programming-language.md

それまで Xcode と Swift は「よくわからないけどうさんくさいもの」という印象だったのですが、これに衝撃を受けて、一気にSwiftが好きになりました。

## Swift の好きになったところ

### C#の好きな要素がほぼある

上の方で挙げた、 C# で良いなと思っていた要素や特徴は、ほぼほぼ Swift にも当てはまりました。

* 静的型付け
* extension
* 型推論
* プロパティ
* nil 合体演算子
* デフォルト引数
* インデクサ と 演算子オーバーロード
* `struct` の扱い
*  IDE のサポート

`async/await` など C# にしかない好きな要素もありますが、以下のような点はSwiftのほうがより良いなと感じました。

### 書き方が簡単

C# では比較的書くのがめんどくさかった `Array`, `Dictionary`, `Tuple` なども、とにかく面倒くさくなく、スッキリ直感的に書くシンタックスシュガーが多く感動しました。

### 安全に書ける仕組み

安全に書く仕組みが整っているところも良いと思いました。immutable な変数が `let` 1語ですっきり定義できたり、変更されないのに var で宣言されている変数があると、 「let では？」とコンパイラが注意してくれたりするのはありがたいです。switch 文で return を書かないと怒ってくれるのも好きです。

### 自然と読みやすい書き方が身につく

「ネストが深くならない分かりやすいコードを書くには早期 return すべき」という考え方がありますが、Swift には `guard` や `guard let` があるので自然と「これは guard で書けないかな？」といった思考になり、読みやすさが担保されやすいというところも良いと感じました。

### あの『iPhoneアプリ』 がネイティブで書ける！

そして何より、「いつも触っているiPhoneで動くアプリがちゃんと実用的に書ける」言語であることに感動しました。

## Swift と出会って以降

それ以降は、アプリ開発をやりたいとアピールしていたところ、アプリ開発にアサインされました。4月には未経験の状態でしたが、開発できるようになるまでは本当に速かったです。

周りに教えてくれる人がいたからというのもすごく大きかったですが、書籍が十分わかりやすく書いてあるので [^3] 、独学でも習得できそうとも思いました。

多くの部分で Visual Studio や Eclipse で開発した経験がそのまま応用でき、「ジョブズが言っとった『点と線を繋ぐ』というのはこういうことなのかもしれない…」と思いました。

## Swift はいいぞ

Swift は好きなところを語り始めたら止まらない、本当に素敵な言語だと思います。

以下のように考えている就活時期の僕のような人がいれば、ぜひ一度触ってみてほしいと思っています。

* ストレスの少ない便利なプログラミング言語がやりたい
* モダンなプログラミング手法に触れたい
* IDE で開発がしたい
* スマートフォンで動くアプリが作ってみたいけど、書いたことはない…

僕は結果オーライでハッピーになれましたが学生の時からやっていればもっとハッピーになれると思います。勉強会やカンファレンスの雰囲気もとても良いので、学生のうちから参加したかったなと感じています。

Swiftは本当に学習が容易な言語だと思いますが、無限に新しい発見や、覚えること、やりたいことが出てくる奥深さがあり、2017年も引き続き楽しんでいきたいなと思います。

------------

[^1]: 昔はめっちゃゲームやってましたし今思うと当時やってたスマホゲーでめっちゃ Unity 使われてましたが

[^2]: 言い訳が多いですが結局のところ、そこまで熱心に求人を探したり、C#のコミュニティで活動したりしていなかったため、みつからなかったというところが大きいと思います。スマホアプリが書ける Xamarin は希望でしたが、どうやら世の中iOSとAndroidそれぞれを別に作っていることが多いようで早々に「仕事にならなそう」と諦めてしまいました。`ASP.NET` はアルバイトなどでも触っていて素晴らしいなと思っていたので、もっと真面目に探してもよかったかもと思います。

[^3]: 本気ではじめるiPhoneアプリ作り (https://www.amazon.co.jp/dp/B01C804DNO) はとてもわかりやすかったです。