■はじめに
自分がプログラミングを始める時に、未経験からエンジニアになった体験談を探したのですが、PHPやRubyなどを使ったWebアプリを使ってエンジニアになる話は多いものの、未経験でSwiftを最初に触るパターンはほとんどなかった気がします。
そのため、表題のテーマに関して「せっかくだから書こう!」と思っていたのですが、早1ヶ月半が経ちました笑 未経験からアプリを触るって何から始めたらいいの?のような疑問を持っている方に対して少しでも参考になればと思います。
※本テーマについてお蔵入りさせまいと殴り書きのように記事を書いた結果、文章がだらだら長くなったので、記事の一番下に「まとめ」欄つくりました。ここだけ読めば大丈夫です。なので文章汚くて長いのは許してください。。
※今回はプログラミング学習に絞って書きます。転職活動の体験談は別途書く予定です。(予定です・・・。)
■そもそも記事書いてる人って?
・文系
・第二新卒から外れたアラサー
・エンジニアの採用に関わっていたことや、はてブのテクノロジー欄を毎日興味本位でチェックしていたので、どんな技術があるのかなど表面上のことは知っていた。
■学習体制
基本的に独学です。エンジニアへ質問できる環境はあったのですが、「わからなかったらすぐ質問するのではなく、自分で限界まで調べて考えて解決しようとしないと力つかないよ」と言われていたので、極力自分でググりまくって解決していました(つまずいた箇所の8割は自分で解決するイメージ)。スポットで教えてくれたエンジニアには本当に感謝しかないです!
■経過と振り返り
【2017年8月】
採用担当としてSwift関連のインターンを企画した時に、ふと「企画している人がSwiftを触ったことがないってなんかダサいな」と思ったので、MacBook Airを購入し、一緒に企画したエンジニアにSwiftの技術書選んでもらって簡単なアプリを作ったのが初めてのプログラミング経験です。
※この時はまだエンジニアになろうとは一切思っていませんでした。インターン後は特にプログラミングせず。
当時買った技術書がこちら(内容はSwift3で書かれているので注意!)
SBクリエイティブ:これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~
【2018年1月下旬】
App Storeへのアプリリリースを目標にプログラミング再開。インターンを実施した時期にGitHubとSourcetreeの使い方を教えてもらっていたのですが、完全に忘れておりググるところから始めました。(ちなみにその日は使い方ググって終わるくらい苦戦してた気がします笑)
当時の勉強法はProgateとインターンの時に買った技術書でした。
・ProgateはSwiftのレッスンを5周する
・技術書は残っていた部分をやる
※振り返り
Progateを反復する学習はよかったと思います。未経験だと入門書レベルも理解するのが難しいため、「入門書レベルを理解するための入門」として役にたちました。
取り組んだ技術書は、まず動かしてみて面白さを体験することに重点が置かれているため、写経するだけでアプリが完成するものです。しかし、ブロックの位置を間違えたり、エラーの意味がわからなかったり、本に載っている画面が出せなかったり、写経するだけなはずなのにできないことが多すぎて毎日イライラしていました笑 1つのエラーにつき3、4時間くらい費やしてたように思います。しかも、正直何もわからないまま完成したので、作った感触がありませんでした。始めたばかりということもあって楽しさは感じることができませんでした。。
【2018年2月】
以下入門書レベルの技術書を買い、写経しながら進めました。
詳細! Swift 4 iPhoneアプリ開発 入門ノート Swift 4 + Xcode 9対応
早くアプリを作らないといけないと思いながらも、今の状態じゃできない、と尻込みしまくっていました笑 実際、GitHubから作ろうとしていたアプリに近しいリポジトリ見つけて写経したものの、バージョンが違うこともありエラーが出まくる→エラー直せず断念。
※振り返り
プログラミング未経験であれば、まずはProgateと以下技術書を使って進めるのが良いと思います。
SBクリエイティブ:絶対に挫折しない iPhoneアプリ開発「超」入門 改訂第6版 【Swift4 & iOS11完全対応】
上記の技術書は入門レベルで、かつ、クラスやインスタンスの概念などを、例え話を使って初心者でもわかりやすく書いてある印象です。私が買った入門書はサンプルが豊富で助かるのですが、そこまで初心者へのフォローはされておらず、他言語の経験者が使う入門書寄りかなと感じました。
【2018年3月】
結局完成されたリポジトリを写経しても、書いてあるコードの意味を説明できなければ何も応用が効かない、エラーも解消できないという当たり前のことをようやく痛感し笑、一つ一つコードの意味を理解して進めるしかないと決めて、再度アプリを作り始めました。
なんとか形になりAppStoreへのリリースのため開発者登録しようとしましたが、AppleIDの登録の仕方など落とし穴が多く撃沈しまくりました。さらに、開発者登録ができても証明書、申請の流れもネット上で情報のない事象があったりして撃沈しまくりました。申請準備が整っても、リジェクトの恐怖が待ち受けていたので、著作権など調べて漏れがないように対策していました。結果リジェクトされずに3月末にAppStoreへリリース完了。この辺りの記憶があいまいになるくらい当時苦戦していました笑 ちなみにこのフェーズに対するエンジニアからのアドバイスは主に「気合いだ。」でした。。
※振り返り
アプリ開発は一気にやろうとせずにまず小さな機能を作ることや、自分が理解できる技術書やネット上にあるサンプルコードに小さな機能を追加していくことを意識したことがうまくいった要因でした。もしかすると、「サンプルコードを使うなんてズルくないのかな・・・?」と思う方もいるかもしれませんが、最初から全部作れるわけないので、参考になる情報は積極的に使っていきましょう。私の経験上、機能追加や修正を積み重ねたところ、サンプルコードは跡形もなくなり見事に自分が書いたコードだけになったので、気にしすぎなくても大丈夫です。
また、アプリリリース後の転職活動時期の話ですが、App Storeへのリリース環境を整えることに関して、苦しみを理解してくれるエンジニアが少なくて切なくなりました笑 企業の場合既に環境が整っていることがほとんどだと思うので仕方がないのですが・・・。リリースをやりきるのとそうでないのではかなりの差があると思います。
【2018年4月】
APIを使った機能を開発しアップデート申請→リリース。この時は完全に独力でやりました。なんども死にましたがあきらめなかったらできました笑 リリース後は、アプリのリファクタリングを進めたいと思い、エンジニアにレビューを依頼しコード修正。
また、4月中旬から技術ブログ開始しました。技術ブログはいつかやらないといけないと思っていたものの、既にある情報を書いたら調べる人のためにならない、誤った情報を書いたらどうしよう、叩かれたらどうしようと考えて、尻込みしていました。
しかし、「いいからやれ!」と言い聞かせ無理やり開始。レビューで指摘された内容を中心に調べて記事にまとめていました。調べる時間を含めて1記事あたり3時間くらいかかっていた気がします笑
※振り返り
APIを使った開発に関して、全く知識のないところから独力でリリースしきる経験は小さな自信になりました。3月のアプリリリースもそうですが、小さな自信を積み重ねることは、後に自分のやったことのない実装や、つまずいた時に「解決できるはず」と粘り続ける原動力へ繋がっている気がします。
技術ブログに関しては、書いているテーマの中で、自分が理解できていない箇所が明確になりますし、自分が参考にしたサイトをまとめておくことで、忘れてしまってもすぐ思い出せるのでよかったです。
【2018年5月】
アプリのリリースを通して、自分の知識不足を再確認できたので、入門書と技術ブログを中心に活動。一方で、実践が足りないことも自覚していたので、【サービス開発】サービス開発に挑戦してみる - Swift実践ブログ記事を書き退路を断って挑戦する・・・かと思いきや2日で断念。意思弱すぎ笑 この頃転職活動で実装課題が4社から出てたこともありできませんでした。という言い訳をさせてほしいです。。
実装課題ではFirebaseを使ったチャットアプリに独自の機能を追加してチャットボットのようなアプリを作っていたりしました。独自の機能のないチャットアプリの実装は以下記事にしています。
【Swift】Swift4でチャットアプリを作る(JSQMessagesViewController/Firebase) - Swift実践ブログ
実装課題を通して、新ためて実践することによる学びの多さを実感しました。
※振り返り
実装課題が出るまでは入門書で理解できない箇所を技術ブログにまとめていたのですが、成長が実感しにくくなっていました。実装課題に取り組み始めてからは、実践することによって自分がわからないことが明確になったり、問題を解決することで知識が身についたり、小さな自信をつけられたりと、実践のメリットの大きさを改めて実感しました。
【2018年6月】
実装課題で納期内に挑戦できなかった、API使ったチャットボットを作ったりしたものの、それ以外では転職活動が終盤に差し掛かり面接ラッシュであまり実践ができませんでした。結果入門書の写経が多かったように思います。(6月中旬に転職活動終了)
※振り返り
5月、6月頃はアプリリリースの経験や技術ブログの記事数、GitHubのcontributionといった目に見える実績が増えていたので、選考の進捗がかなりつくようになっていました。それに合わせて、学習面ではなかなか実践ができず。正直一番成長が鈍化してしまった月でした。
■おわりに
最近、プログラミング未経験からエンジニアになる方法に関する記事や、体験談の記事が度々出てきているように思います。プログラミングスクールを使って短期間で転職成功させるケースや、機械学習を使った成果物を作って転職するケース、Twitterで企業へ直接連絡をとってインターン経由でエンジニアになるケースなど、本当に事例は多岐に渡っている印象です。そしてそういった体験談は、私からするとすごいというか、きらきらしているというか、そんな印象を受けることが多いです。
私もプログラミング未経験からエンジニアになれたのですが、振り返ってみたところ相当地味な体験談でした笑 きらきらした話はできませんが、そういう体験談もある意味リアルなのかな、と自分を正当化してます・・・。
未経験からエンジニアになるまでの期間中に学んだことや感じたことを本記事では書ききれていないので、まとまれば記事にしたいと思います!
-----------------------------------------------------------------------
■まとめ
【個人的におすすめな学習手順】
1.Progate
↓
2.SBクリエイティブ:絶対に挫折しない iPhoneアプリ開発「超」入門 改訂第6版 【Swift4 & iOS11完全対応】
↓
3.アプリ開発する
サンプルコードが必要なら、以下技術書の追加購入もありかも
詳細! Swift 4 iPhoneアプリ開発 入門ノート Swift 4 + Xcode 9対応
↓
4.App Storeへリリースする
↓
5.リファクタリング、新しいアプリ開発など
【個人的に思う学習のポイント】
・独力でやろうとすることは、自分で解決する力が身につくだけでなく、小さな自信を積み重ねることができるので大切
・技術書の写経ばかりに偏らずに、実践すること
・自分の作りたいアプリをいきなり全部作ろうとすると、何からやればよいかわからなくなりやすい。小さな機能追加を繰り返しながら作りたいアプリにしていくのが挫折しにくいし実現しやすい。
・時には気合いが必要
・技術ブログは自分の頭の中が整理されるし、二度同じことを調べなくてもリンクをまとめておけば効率的に思い出せるのでおすすめ
-----------------------------------------------------------------------