iOSアプリ開発に特化した出世払い型のオンラインスクールには意義があるのかもしれない

Effective Swiftという本を書きました

先月3月はEffective Swiftという本を書いて公開しました。また今度ゆっくりどういう本なのかを書きたいと思います。仕事でSwiftを触る人に向けて書いています。4月の時期に間に合うように頑張りました。

https://booth.pm/ja/items/3755447

iOSアプリ開発のオンラインスクール(ブートキャンプ)を考えています

ここ最近はiOSアプリ開発のオンラインスクールについて考えています。
Googleフォームでアンケートを用意したので、そこにオンラインスクールに興味があるとか、そんなことを書いてもらえたらありがたいです。

https://docs.google.com/forms/d/1ehrq-a6arbBSMWc2tMtXtrf7MAXmAxVCOUEuqH47PxY

世の中のオンラインスクール事情

なんとなくですが、プログラミングのオンラインスクールは評判が良くないところが少なからず目についてしまいます。たとえば広告で出てくる 「プログラマーになって月単価...円を目指す!(初期費用...円)」 みたいなの。あれは煽っているように思えなくないですか?情報商材っぽい雰囲気がしますがいかがでしょうか。あれはあれで悪くないこともあるんでしょう。ただ少年漫画ばっかり読んでる私からしたら、あんまり良いとは思っていません。

金額をびらびらして人を集める それは否定はしない、何かしら意義もあるのかしれない、でもそのやり方はな〜んかひっかかるんだよなあ。と感じています。もちろんたとえば5兆円位の束の上から1億くらいを目の前でビラビラしてほしいとは思って生きています。空中にばらまかれたらもう集めますよ、それはそう。

ソフトウェアエンジニア/プログラマは不足している

世の中はソフトウェアエンジニア/プログラマーが不足しています。そらもう不足しています。だからどこでもよくて条件がなんでもいいなら、未経験でもiOSアプリ開発したポートフォリオを見せたら会社に入れると思います。

今はそもそもAppleのフレームワークがiPhoneのセンサーをそこそこ使えるようにしてくれてる、それを知らない人からしたらめっちゃすごいことをやってるように見えます。だからまあポートフォリオはセンサーを使ったアプリにしたらすごいことやってるように見えるかもしれません...!

じゃあまあそれでいいやって気がするんですが、そんなに良くないかもしれない。

需要が高いから未経験からでも会社に入れてしまうことによる弊害もあるかも

まあ以下に辛い例を出してみます。

「どうしてもiOSアプリ開発ができる人が必要だ、だから経験がだいぶ浅いけど採用、でも募集する組織にはもともとテストコードもない、仕様もSlackかなんか探して会話が見つかる程度、よくわからんけど期限が決まってる」のでやる。というのが現実にあったら悲劇だと思います。さらに別の機能を作るためにオフショアで海外のチームにも投げている、やりとりするのは駆け出しのあなた、オフショアの方々はStringIntextensionでメソッドをがんがん生やす、さらにはStoryboardsegueのやり取り時に通信、あなたは「そんなこともできたんだー」。ってね。そんなことが現実にあったら悲劇なんです。世の中にそんなことあってほしくない。

または、明日までに機能をつくってほしい、みたいな要望がビジネスサイドからあったとき、「善処します」みたいな雑な答えをして結局できないみたいな。そういう努力はしますよってね、そんな答えをしてしまう人、いるんじゃないでしょうか。「善処します」って言われたらそりゃ頼んだ方はよっぽどのことがない限りできるもんだと思う。でも結果できなかったりしたら、もう信頼度みたいなメーターが落ちまくってぜんぜん仕事はつらくなる。

いやもちろん、言い分はあるでしょう。急に差し込まれたって他にやることあるんだしね。まあ分からないでもない。でもたとえば次のようなコミュニケーションする方法だってある。 「緊急だとは思うんで、それを考慮して他にやらないといけないこと一旦それを止めて、かつ、それを止めることで他の人またせてたらたぶんそれも止まりますけどそれでもやりますかね?自分はそれ詳しくないので時間的に今日残り3時間くらいやってみて、その段階で進捗共有するので明日までにできるかどうか一旦そこで完成度見て判断材料にしてもらえますか。明日朝にでもフィードバックもらえたらそこからやってみます」 みたいな。すごく雑な例で申し訳ないけど。

未経験からiOSアプリ開発者になれることと、より良いソフトウェアエンジニアになれることは違う

未経験からiOSアプリ開発者になれることと、より良いソフトウェアエンジニアになれることは違う。

良いサービスを作ることとは別の、もう土台となるためのiOSアプリ開発を何年も運用していくハードスキル、そしてチームで開発していくためのソフトスキルがあって、よりよくアプリケーションを提供できるんじゃあないですかね。それを繰り返していくことで、その体験があなたの筋肉となるんだと思います。そういう筋肉もしくはセンスを鍛えていくことが大切かもしれません。

そして、そういうのを身につけるのは、腕のいいソフトウェアエンジニアがいる会社に就職してその人の知識と技と心得を観察することだとも思います。

なぜオンラインスクールをやるのか

できれば会社を見極める力量、活躍する力量をつけてほしい

それで私がオンラインスクールをやるなら、

  • 会社を見極める力
    • 根底からやっていくならそのぶんの評価を受けられるか予め見極める
  • 入った会社で活躍する力
    • 課題やリスクの発見能力
    • 測定して観測する力

なども手に入れてほしいと思っています。

会社を見極める例

会社を見極める力とは、たとえば、たまーに求人とかで「現状組織の課題としてテストコードが書けていないのでテストコードを書く文化を〜」云々。いやいや、テストコードを書くかどうかはやればいい話であってそれを継続的にやってないのは組織の問題なんで、そんなの「水回りの掃除ができていないのでできる人募集中」みたいな話に思えます。

誰でもできるが今はやらんで良い、っていう判断をもし組織でやってるなら、それは新しく入る人がその組織を変えていくようなポジションなんすよね。そんな難しいことサポート無しでやるのは大変で、会社のそれなりのポジション(CTOなりVPoEなりエンジニアリングマネージャ)がそれをサポートする前提じゃないのー?という気がします。しかも結果としてテストココード書くようになったからと言って売上が伸びるわけでもないから分かりづらい。

なので面談か面接時に具体的に話を確認して、なんだか良くしてほしいけどあんまりよくわかってないだけだったら、イメージができていない。と思えます。水回りのお掃除のやり方、それを習慣とすること、それができてどうなるかがイメージできてない。だからそれをあなたがうまくやっても望む評価を受けられるかという面は疑問です。

入った会社で活躍する例

入った会社で活躍する力とは、具体的には真に課題を解決することが重要だと思います。そもそも課題を発見する(もしくは課題になる前のリスクを潰す)にはそれを発見する力も必要なんですな。そしてそれが本当に原因が正しいのか、まずは小手先のテクで回避したり、検証したりする。そうして見つけた課題を解決するには、やっぱり測定しないといけない。測定して、やったことが正しいのか別のリスクを生んでいないかを知る必要もありますよね。

具体例を考えると、iOSのEmbedded Frameworkによるマルチモジュール化があって、これのデメリットとしてアプリの起動時間を遅くしていたりしました。測定方法としてはDYLD_PRINT_STATISTICSをビルド時に1にしたりYESにするとXcodeのログにアプリの起動時間を遅くしている内容が出てくる。モジュールを増やせば増やすほど遅くなる。これはdyld3でダイナミックリンクするとiOSの場合は起動時にロードするからでしょう。つまりマルチモジュール化で設計や開発体験を良くしていったツケをユーザに起動時間を遅らせるという形で払わせていた。トレードオフとしてそれが許容できるならいいが、Embedded Frameworkによるモジュール追加でアプリ起動時間の単調増加はなかなかエグい。ほんとうにその選択がメリットがデメリットを上回ってワークしているのか、みたいなことは測定しないとわからないはずです。

そんで現状はどうなるか調べたらXcode 13.xではDYLD_PRINT_STATISTICSがなくなっていてInstruments(App Launchテンプレート)で実機で確認できそうです。

https://developer.apple.com/videos/play/wwdc2019/423/?time=1233

App Lifecycleが表示されている
WWDC19のOptimizing App Launch

どういうふうにオンラインスクールをやるのか

メンターと金額

そもそも説明を理解するには複数の説明方法が重要じゃないかと思います。

たとえば何かの論理を一つの文章で説明されたときにそれをすぐに理解できたらそれは良いことなんですが、たいていそれがすんなりうまくいかない。だから別々の文章や図で理解したりします。でもそれにも限度があって別々の人が説明するのがベストでしょう。そう考えるとどうしてもメンターは複数必要になりそうなるとどうしても金額は安くはできない。

だけど払う方が大変。なので奨学金的ななにか、もしくは出世払い的ななにかがあると良いと思っています。

箇条書きにしておきます

  • ある程度の金額はどうしても必要
    • メンターが負担する時間に対するリターンが必要
    • そもそもチュートリアルは作るのがめちゃくちゃ難しい
  • 入学金的なものは無いほうが良い
    • ミスマッチだったときのことをお互いが考えないといけなくなる
    • 物理的な何かを資本としているわけではないので入学金なんて必要ない
  • 月額費用
    • 出世払い的に後払いしてもらえるようになればお互いにとっていい
    • 普通に払ってももらえれば運営としては楽なのでそのリターンは必要

出世払い方式は面談というかある程度は審査が必要な気もしますが、社会的にもやる意義がありそうな気もします。

学習内容とどうやってそれをこなすか

どういう課題にするか

課題をどうやって出すか

雑ですが箇条書きで

  • GitHubに課題を用意
    • READMEに概要
      • docs/に教材
    • 学習者にforkしてそこに回答をpushしてもらう
    • 閲覧/編集の権限をメンターがもらう
      • fork先でマージ
        • マージしたら手動でチェック
    • 課題クリアしたら
      • GitHub Actionsで達成度
      • Slackに通知
    • 何からやってもOK

参考に

  • フィヨルドブートキャンプ法人利用

おわりに

繰り返しになりますがGoogleフォームでアンケートを用意したので、意見をいただけると幸いです。

https://docs.google.com/forms/d/1ehrq-a6arbBSMWc2tMtXtrf7MAXmAxVCOUEuqH47PxY