iOSエンジニアとして一年やってきたことをまとめます

自分の中の知識の棚卸しと、これからiOSエンジニア目指す人が「一年目ってこんな感じなんだ〜」と参考になればいいかなと思います。手を出したけど中途半端になってることとかもありますが、正直ベースで書いていきます。

全体的な目標:1年でGoogleに入れる技術力を得る

大きく出たな、と思われるかもしれませんが、昔から目標は高い方がいいと思っているタイプでした。Google = 大学受験における東大みたいなもんだと思うので、東大を目指していれば、他の大学には余裕で入れるでしょ、理論です。狭いiOS開発力で突き抜けるのではなく、コーディング面接で問われるようなコンピューターサイエンスをしっかりわかってる感じのエンジニアになれるような勉強の仕方をしようと思っていました。

Swift/Gitを覚える(2019/7〜9)

入社してから、ひたすらソースコードと向き合いました。仕事的にはUI改善みたいなことをやったんですが、最終的に部門長的な人に見せたら却下されて萎えました。

iOSDC 2019に参加した(2019/9)

チームメンバーで、初の大規模カンファレンスに三日間参加しました。初カンファレンスですね。参加してどういう感情になったかというと、非常に暗い気持ちになりました。というのは、自分と同い年ぐらいの人が、既にめちゃくちゃハイスキルなエンジニアになって堂々と登壇しているのを目の当たりにしたからですね。僕はキャリアチェンジで入ってきたんで、自分よりできる人がゴロゴロいるのは当然なんですが、なんというか「今の時点でめちゃくちゃハイスキルな人が、貪欲にキャッチアップし続けている」というのを見てしまったので、「これ一生追いつけなくね?」と思ってしまったわけですね。中学の部活で強豪校と練習試合行ってボコボコにされた後に向こうが自分たちよりデカい声でお礼言ってきて、キビキビ後片付けはじめたときの感覚に近いかもしれません。

この辺の焦燥感は辛かったですが、だんだん仕事で成果出せるようになると、人と比べてもしょうがないと冷静になることができたので、2020年入ってからはあんま感じてないですね。

iOSアプリの全体像を把握する(2019/9)

「親切すぎるiOSアプリ開発」が良かったです。AppDelegateがどうとか、iOSアプリ自体のライフサイクル/ステータスとか、UIViewとUIWindowは何が違うかとか。

「iOSアプリ設計パターン入門」読む(2019/9)

理解度は6割ぐらい。読んだだけで実際に設計使って何か作ったわけじゃないので、理解度が浅い気がしています。会社で扱っているアプリは典型的なMVCパターンなので、実務でも使ってないですし。ここは今後の課題です。

テスト駆動開発/自動テストを勉強する(2019/10)

まずこれを見ました。

50 分でわかるテスト駆動開発資料: 50 分でわかるテスト駆動開発

それから下記二冊を読みました。

iOSアプリ開発自動テストの教科書 〜XCTestによる単体テスト・UIテストから,CI/CD,デバッグ技術まで

iOSテストのバイブル 「iOSテスト全書」

このテスト自動化については、社内でも実戦投入できたので、手応えがあります。

ドメイン駆動設計を勉強した(2019/11)

エリック・エヴァンスのドメイン駆動設計

読みました。正直内容の2割もわかってないです。

関数型言語を勉強した(2019/12〜2020/1)

[増補改訂]関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus)

これを読みました。Haskellちょっと書くもあんまわからず。問題意識としては、SwiftやKotlinなど、モダンな言語って多かれ少なかれ関数型言語から影響を受けているので、その思想を知っておきたいなというモチベーションから。

データ構造とアルゴリズムを勉強した(2020/2〜2020/3)

ノートは旧四十三庵に公開していました。

「データ構造とアルゴリズム」swift-algorithm-clubが教科書でした。実際にコード書くのが大事。

個人開発でApp Storeに公開した(2020/4〜2020/5)

個人開発しようというモチベはずっとあったんですが、しんどくてできていませんでした。GWで短期集中型にエイヤっとApp Storeにあげました。詳しくは。

Apple Pencilでのメモを気軽にするアプリ「Like a Paper」を個人開発したので大変だったことを共有します

Qiitaを書いた(2019/7〜)

記事の投稿数は70。「アウトプットは大事」という言葉を信じているのと、元々ブログやってるくらいなので文章書くのは苦ではないというのもあって、積極的に情報発信できているかな、と思います。一番最初の記事と一番最近の記事を比べると、僕自身のスキルの伸びっぷりが如実にわかると思います。Qiita経由でTwitterつながった人もいるので、ローリスクハイリターンだと思いました。

ただ技術記事書くの、純粋に時間食うので、「そんな時間あるならコード書いたら?」という意見もわからなくはないです。ネタは無限にあるんですけど、僕も書く頻度は減っています。

毎朝英語をやった(2019/7〜)

リーディングと音読。思ってたレベルまではいけてないが、やらないよりはマシだったかな、レベルです。ドキュメントに英語多いので、翻訳かけてもいいんですが、なるべく原文読んだ方がよいと思います。英語の誤読で仕事で対応ミスったことが二度ほどあります笑 英語力は技術力ですね

競技プログラミング(AtCoder)に参加した(2020/6, 2020/2〜2020/3)

Google入ったエンジニアがAtCoder薦めていたので、ABCに何度か参戦しました。数えてみたら11回参加してました。バリバリの灰コーダーです。Swiftで参戦していると、レートあげるのはかなり厳しくない? というのは感じました。競プロのためだけにC++覚えようかと思ってましたが、今となってみるとレート上げることそんな意味ある? と思うようになってきてしまいました。

特に2020年になってから、僕は生活習慣をめちゃくちゃ大事にしていて、日曜21時に参加すると、月曜の仕事が辛くなるというのがあって、あんま参加したくなくなっています。

やってよかったこと/そうでもなかったこと

以上がやってきたことなんですが、僕の中で特にやってよかったなあ〜と思うことは、

  • テスト手法の勉強データ構造とアルゴリズムの勉強個人開発
  • の三つですかね。それぞれやった後は、明確に自分が一回り成長できた感じがありました。

    反対にそうでもなかったのは、

  • ドメイン駆動設計競プロ
  • の二つです。ドメイン駆動設計は、僕があんまり設計まで踏みこめてないので、役に立ってないだけなのかもしれません。でも少なくともエリック本いきなり読んだのは悪手でした。競プロもムダってことはないんですけど、一回個人開発でアプリ公開して感じたのは、ソフトウェアってやっぱ人が使える形になっていてはじめて価値を発揮するので、競プロはあくまでスポーツなんですよね。プログラミングを通じて、気持ちよく汗を流すための競技であって。学生なら全然いいんですけど、僕ももういい年したアレなので、完成したソフトウェアを残すことを意識したい、という気持ちになりつつあります。

    一年で見えてきた将来像と明確になっていないもの

    競プロの話と関連してなんですけど、「Googleに入る」という当初の目標は、一年実際iOS開発者としてやってみて、あまりにも解像度低い目標だったなと思っています。結局就活のときに漠然と大手企業受けていたような、「大手=正義」みたいな価値観から抜け出せていない。

    僕は自分のことをiOS Developerと名乗っています。タイトルで思いっきりiOSエンジニアって書いてますが、英語表記にするときはiOS Developerにします。これにこめている思いは、技術というのが最終目的なんじゃなくて、何か価値のあるソフトウェアの提供のための手段として技術を習得してるというものです。僕の知識は専門家には勝てません、それは問題ない、ただ専門家の発信している情報を吸収して、実際の製品としてユーザーに提供する、というのが僕のポディションなんだと思っています。つまり学ぶ人ではなく、つくる人(もちろんつくるためには結局勉強しないといけないんですが、学者とは違う、という意味合いです)。

    価値のあるソフトウェアってなんだ、というともうそれだけで一冊本書けそうなくらいたくさんの評価ポイントがありますが、端的に言うと、自分で使いたくなるソフトウェアなんだと思うんですよね。例えばですけど、docomoで働いている人が、実は自社のサービス(dメニュー)使ってないとか、ザラにあると思うんですけど、それは価値のないソフトウェアを提供しているんだというのが僕の評価です。

    どっかで書きましたけど、僕の場合、電子書籍なり創作活動なりに関わるソフトウェア開発に行きたい、というのが直近の野望です。Googleにも電子書籍部門はあると思うんですが、僕が入るのはあんまり現実的じゃない気がしているのと、「そもそも俺自身Googleの電子書籍ストア使わないじゃん」というのがあるので、「Googleに入る」という目標設定自体、ちょっと違ったんじゃない? というのが今の気持ちです。そもそも僕の実力で入れないでしょ、というツッコミはあると思うんですが、それを抜きにしても、入っても高待遇は得られても、自己実現は達成できないと思うんですよね。

    ここの価値観に正解はないと思っているので、↑読んで、「そんなことない!」と思う方もいるとは思うんですが、僕の今の価値観だとこう感じます。

    電子書籍なり創作活動なりに関わるソフトウェア開発にシフトするためにどうするかを考えたとき、そういう会社に転職しろよ、という話なんですが、とはいえ技術的に向上したいし、待遇だって上げたい、という気持ちもあります。

    自分の志向については明確になったので、やはり競プロはちょっと違うな、というのは断言できるようになりました。ただ明確になっていないのは、現実的にどこの会社のどういうポディションを目指して、将来的にどうなろうとしてるの、というところですね。特に将来的なところは全く見えません。

    一生エンジニアとして手を動かしたいのか、プロダクトマネージャーになるのか、テックリードみたいな存在になるのか、道は色々だと思うんですけど、その辺が全然見えてません。そもそもエンジニアやるにしても、iOS開発で一生食っていく気持ちもなくて、モバイルもWebも、バックもフロントも一通りわかっていたいという気持ちもあります。

    というわけで、一年で解像度が上がった将来像ではあるんですが、まだ先のことは全然見えていないなというのが実際のところです。終わりとしては歯切れが悪いですが、正直な現状ということで。

    (了)