Swift

Swiftを習うためのポイント

TL;DR

G's AcademyのdevコースでSwiftを勉強するのに知っておくと良いこと。

書いている人のバックグラウンド

dev8期でiOSコースを選択していました。
10年ほどWeb系のプログラマをやっていてインフラからバックエンド、フロントエンド、マネージャーからクライアントとの夜の付き合いまで一通りやっていました。なんでジーズに通っているのかよく聞かれましたが、代理で説明会に行ったらめちゃくちゃ面白そうだったからです。で、めちゃ楽しいです。誤解を恐れずに言うとここは「教わる場所」ではないと考えています。週に一度数時間を4ヶ月やっただけでバリバリとプログラム書けるようになるならプログラマなんて鼻クソなわけですよ。ここは「環境」なわけです。それがなんの環境なのかは人によって違うんじゃないかなと。

Swiftの授業について

完全にプロダクト指向型の授業です。略すとPOC(Product Oriented Class)?
細かい文法の事なんて授業時間にやっている暇ないです。いかにプロダクトを作るか。
プログラムも当然書きますがiOSの開発はxcodeに慣れるのが大切です。Swiftは書いていて気持ちがいいよく出来た言語だと思いますが、まずはとにかくxcodeをいじって、ビルドして動かしてみます。

覚えておいたほうがいいこと

プロダクトを作るのが正義ですが、iOSの授業を受けるにあたり少しは覚えていたほうがいいことや、躓いたら参考にするリンクを載せておきます。

コンパイル

swiftはコンパイラ型の言語です。JavaScriptみたいに書いただけでパッとその場で動きません。
書いて結果を見るためにビルドしないといけません。コンパイラが何かは下記リンク先を見て下さい。
よく分からなかったらとりあえず、アプリケーションを速く動かすために先に時間使って準備しておく行為だと思って下さい。
書いたら直ぐ実行出来るPHPやPythonなんかと比べるとswiftは同じ処理なら圧倒的に速いです。

参考リンク

Macのスペック

ビルドする時間やXcode、シミュレータの負荷を考えると本格的に開発するならマシンのスペックはできるだけいい方がいいです。
つまりiMac Proは大正義!!!

データ型

PHPやJavaScriptを使用しているとあまり意識しませんがプログラムにはデータ型というものがあります。
Swiftは型に関して厳しいです。なのでこれについては事前にチェックしておいた方がいいです。下記四つは最低でもなんだか分かったほうがいいと思います。

  • Int
  • Double
  • String
  • Bool

参考リンク

Optional型

これ分かりにくいけど、分かるとホント便利な概念です。そして、これに慣れておかないとSwiftを書くの辛いです。頑張ってください。
PHPでも7.1から返値の型として近い実装がされてるんですね。

参考リンク

クロージャ

JavaScriptやPHPと同じです。クロージャが何かわからなくても書かないと先に進めません。なので、この書き方はクロージャなんだなと分かるようにはしておきましょう。JavaScriptやPHPのクロージャが分かる人は逆に書き方で悩むと思います。

参考リンク

delegate(デリゲート)

超重要です! iOSのプログラミングで多用します。
でも、何やっているのかわからない。

hogehoge.delegate = self

って書かされます。よく分からないけどいいんです。自分で理解するのは中々難しいので分かっている人に聞きましょう。

参考リンク

おまけ

元々エンジニアだった人向け

Vim

XVim2というXcodeでVimのキーバインドが使えるプラグインがあります。
インストールが面倒な上にXcodeをバージョンアップすると消えるw
でもVimmerはこれが無いと開発出来ないはずです!

参考リンク

並列処理

SwiftというかiOSやMacOSは並列処理がめっちゃ簡単です。

参考リンク

参照カウント

Swiftはメモリの管理に参照カウント方式を使用しています。
なので、循環参照するとメモリリークします。GCが循環参照を回収してくれる言語もありますがSwiftはしてくれない?
循環参照しないように参照カウントを上げない方法があります。
コードを書いていてweakとかよく出てくると思いますがそれです。

参考リンク

体系的知識について

ジーズはプロダクト指向で授業が進みますが、エンジニアとして生きていくにはコンピューターサイエンスの基礎的な知識は必須です。
例えば、ドメインやSSL証明書の仕組み、秘密鍵公開鍵がなんなのかなどはジーズでは学びません。企画を最短で形にすることに特化しています。それは方向性として正しいと思っているし実際に成功していますが、エンジニアとしてやっていくつもりならできる限りこの辺の知識もつけておいた方がいいわけです。
上記の参照カウントの話も、メモリ、OSの役割,ガベージコレクション等を知っていればあっという間に理解出来てしまうわけです。PHPも参照カウント使っている事をしっていればさらにはやい。

日々新しい技術は出てきますが、それは計算速度が速くなったとか、ネットワークが太くなったとかいった状況の変化によって、さまざまある技術の中で重要とされるフォーカスが変わってきているだけであって、コンピュータの基本的な原理原則というのはこの50年くらい変わっていません。

だから、コンピュータサイエンスの基礎的な知識を持っていると、最新の技術が出てきても体系の中で理解できるので、非常に効率が良い。惑わされずに済むんです。逆に表面的なことだけを学んでいると、なかなか頭に入ってこないということがあり得ます。

まつもとゆきひろ氏が「生涯プログラマー」でやっていきたい若手に贈る3つの言葉から抜粋