IT業界で気づいたことをこっそり書くブログ

くすぶってる系アプリエンジニアが、日々気づいたことを適当に綴っていきます(受託→ベンチャー→フリー→大企業→ベンチャー→起業(仮))

iOS/Android開発を習得するのにかかる時間

思いつきです

 

プログラミング言語」って書くと語弊があるんですよね。
一個の環境を習得するのにどのくらい掛かるか経験から考えてみました。

 

1.調べながら苦しんで書けるようになるまで 3ヶ月=500時間

2.ふわっと完成させられるようになるまで 1年=2500時間

3.あーもう慣れたわ、という状態 2年半=6000時間

4.自信が持てるくらい 4年=10000時間

(3でようやく1人前、4でフリーランスになれるくらい)

 

効率よくやったらこの倍くらいの速度は出るかもしれません。

個人的にいろんな分野で2の状態になりたいんですが、半分でも1250時間。普通にやれば2500時間。

 

2000時間と考えると

1日10時間やって200日(休み無しで7ヶ月)
1日8時間やって250日(普通に働いて1年)
1日5時間やって400日(2年)
週に10時間やって200週間(4年)


だめだ・・・業務でやらない限り無理ですね・・・

そもそも500時間の時点で厳しい、週10時間で50週間≒1年

プログラミング初学者にありがちな罠

こちらのブコメで暴言を吐いたので少し書きます。

www.vivi-life.com

 

東大の方みたいなので、私のような普通のエンジニアとはちょっと状況が違うかもしれません。
が、私や周りのエンジニアでも、若手の頃に同じ道を通ったな〜というものがありましたので、簡単に書いてみます。

 

悩む時間はもったいない?

あるある。
最初の数年、これが一番苦しいと思います。が、10年目でも20年目でも皆悩んでます。仕事ですら悩んでます。世界の名だたるギークも悩んでいます。

なので、悩んだときにどうするかという訓練はある種必要なものだと思っています。

分かってしまうと「なんだそういうことか」となるのですが、そこに至る時間をどう短縮するかの方法論という観点で考えたいです。

 

優秀なデキる人と働きたいの幻想

みんな一度はこれを言ってるような気がします。
自分が知らないだけで、デキる人の解法に触れられる機会があればもっと爆速で成長できるのに!と。

個人的に今となってはこれ反対です。

  • 優秀なデキる人がほとんど存在しない
  • その人がデキる人か判断付かない
  • デキる人は私に構わない、プログラミングは大概孤独
  • 優秀な人が何言ってるか理解できない
  • 問題を定式化できない
  • 解法がコロコロ変わる

プログラミングは非常に複雑なものだと思います。まったく同じケースというのに中々遭遇できません。将棋みたいに定石はあるでしょうが、定石もちょいちょい変わるので追いつくだけで吐きます。

それを逐一教えてくれる人というのは、実は存在しないし、そういう人の時間は超貴重なので大して絡むこともできません。せいぜい憧れるくらいです。

結局、最短経路にたどり着くためにそれ以上に血反吐を吐かなければならない状況に陥ります。

 

優秀な人はインターネットに居る

ちなみに本気で優秀な人は、StackOverflowに居たりQiitaや技術ブログに居たりします。あとは何かで登壇するとか。更に優秀な人はOSSコミュニティに居たりします。

素晴らしい師の教えはインターネットで共有されているのでリアルな人を求めずとも積極的に勉強することができます。リアルな人への期待は幻想に近いです。

言及先ブログにもありますが、OSSの中を覗いてみるのは大変有意義だと思います。ただし、あまりに高度すぎて大体理解できないはずです。分からないなら無理しない方がいいです。無理なもんは無理です。巨人の肩に乗りましょう。
でもたまーに分かりやすいコードもあるので、OSSの中を覗く癖は付けておきたいです。(基本難解なので徐々に見るのが怖くなるんですが)

 

複数人開発は重要(でも銀の弾丸ではない)

優秀じゃなくても、ちょっと先輩くらいの人と一緒に開発するのは大変有意義です。
(と言っても、その環境を用意するのは中々大変なのですが)

これは最短経路とか言う話ではなく、コードを見たり指摘されることでヒントがいっぱい貰えるからです。

とは言え、それを毎日やってるエンジニアですら不足感を覚えているはずなので、プログラミング山はどこまでも高く険しいです。ヒントが得られたくらいで、ちょっと有利になる程度じゃないでしょうか。

 

質問に答えてくれない

これも働いてみるとすごく意外なんですが、相互の質問はかなり少ないです。

  • 答えられない
  • ググったほうが早い
  • 説明するのが大変
  • どうせ知らない
  • そんな時間ない

ここらへんのせいです。やっぱり孤独です。

最近はQ&Aサイトが国内外問わずいっぱいあるので、あちらを使うのがまだ良いかと思います。(と言っても、問題の95%は既出の問題なんですが)。エンジニアはインターネットから毎日知識という大きな恩を受けているので、それを還元することにやぶさかでない人が多い印象です。

 

書籍との付き合い方

これは個人的にですが、アンチ書籍派です。

  • 実装にダイレクトに役に立つことが極稀
  • 質の悪い本が多い(良い本は大体洋書・・・)
  • 本に書いてることが真実だと思ってしまう(やがてそれは信仰になる)
  • 経験値が足りなくて本質を理解できないケースが多い
  • 一冊読むのに死ぬほど時間がかかる(理解+実装)
  • 自分で動かしてみなければならない
  • 古い(3年前の本でもう古い)

ぶっちゃけ未だによくわからないんですけどね、本の立ち位置。

私には合いませんでしたし、どの職場においても書籍は部屋の片隅で文鎮になってます。いや最近は本棚も見ないですね。

※初学者向けの最初の1冊とか、定番中の定番中の定番くらいの本はおすすめです(2人に1人は知ってるくらいの本)

 

その他

言及元ブログのその他は概ね同意です(冒頭はちょっとよくわかりません)
しかし本人が優秀な分、多くの普通の人は真似できないものが多いと思います

旧帝大院卒の私でもキツイです。無理です。
東工大卒の元同僚でようやくこのくらいのことしてます。しゅごい。ついていけない。

 

初学時〜若手時に大切なこと

もっと私のようなレベルで言えば

  • 楽しむ、自分は何が楽しめるかを理解する
  • コーディングはあくまで道具であると心がける、宗教にはまらない
  • 完璧な解はなく、優秀な人でも常に悩んでる、疑い続ける必要がある
  • 考え続けなければならない、じゃないと理解できない

あたりが大事な気がします。

 

そもそもプログラミングをするべきなのか考える

経験則ですが、プロダクトに興味がある人はほとんどの場合コーディングから離れる運命にあると思います。
優秀ならなおさらです。発注したほうが早いし。

アメリカなんかでは特A級の優秀な人がコーディングしてますが、あれはあくまでプログラムそのものが製品だからだと思います。
多くのサービスで言えば、コーディングの良し悪しはサービスの良し悪しに中々繋がりません。それでもやる理由があるかどうかは考えておかないと苦しくなっていくと思います。大体は単に好きだからやってる人ばっかりですが。

 

はてブを見る

同業者がどこで情報を仕入れているかが何となく分かる。

それで、労働集約型産業って何で悪いの?(散文)

散文(散らかってる文)

 

労働集約型産業って何で悪いんでしたっけ?

ここ数年ずっとこれ考えています。
たぶん答えが出ないんですが、定期的にまとめていきたいです。
何で気になるのかというと、社会の設計がプログラムの設計に似てるからでしょうかね?

※たぶんちゃんと調べればもっといい記事が出てくると思います

 

労働集約的産業の現状と課題
http://www.mhlw.go.jp/file/05-Shingikai-11601000-Shokugyouanteikyoku-Soumuka/62-75.pdf

 

労働集約型産業とは

労働集約型産業 - Wikipedia

労働集約型産業(ろうどうしゅうやくがたさんぎょう Labor-intensive industry)とは経済学用語の一つ。存在している産業の中でも人間による労働力による業務の割合が大きい産業のことを労働集約型産業と言う[1]

現代日本では接客を行う商業サービス業などと言った第三次産業が労働集約型産業とされている。かつての日本では製造建築も労働集約型産業とされていたが、科学技術の発達により、そこから従来ならば人間が行ってきた業務を機械で行えるようになっていることから、人間による労働力の占める割合が減少してきており、労働集約型産業ではなくなってきている[1]。現在のサービス業でもコンピュータの発達などから頭脳労働ではあっても機械が代行できるような業務から人手の需要が減少してきており労働集約型産業ではなくなりつつある[1]

 

第一次産業や、第三次産業がこれにあたります。
つまり普通にイメージできる仕事はだいたいこれと言っても乱暴ではない気がします。

 

これ以外には 

とかあるみたいです。
もちろんそんな単純な話でもないんですが。

 

労働集約型産業の特徴を探る

労働集約度というちゃんとした言葉があるようです。

付注2-1-14 産業別の労働集約度


単純に考えれば、どれだけ手間が掛かっているかという尺度。あとは売上に占める人件費なんかで出せそうですね。
ただそれ自体は特に問題がないように見えると思います。
例えばIT受託なんて人件費がほとんどを占めますが、それ自体に問題があるわけではありません。

ただ、状況的にこういう特徴を持つことがほとんどだと思います。

  • 1人あたりの生産高に限界がある
  • 人が居るほど総生産高が上がる

これは小作人が分かりやすいです。
やればやった分儲かる、という状況です。

純化すれば、10やったら10儲かり、100やったら100儲かります。
100やった時、0になるリスクはあまりありません。
その代わりに100やった時、200になることもあまりありません。

 

労働集約型産業はなぜ人気か

100やったら100儲かる、というのは非常に魅力的です。
人はリスクを嫌う性質があるので

  1. 100やったら50%の確率で0儲かる、50%の確率で200儲かる
  2. 100やったら100%の確率で100儲かる

があったら、2を選択してしまうそうです。
期待値は一緒なのに、リスクはとれません(そりゃそうです。例えば連続で0が出ると死んでしまいます)

 

だから、より安定して稼げる労働集約型産業は大人気です。

 

人気になる→レッドオーシャンになる

当然の帰結です。
例外としては、専門的すぎて誰でもできるものではないケースや、資本が必要になるケースです。
これらを突き詰めると知識集約産業とか資本集約産業になるのではないでしょうか?

すると、あるラインを堺に供給過多になります。
100やったら100稼げていたのが、90になります。
しかしそれはゆっくり起こるでしょう。90になり、80になり、70になり・・・。
新規参入と脱出の平衡状態になるまで下がり続けるでしょう。

でも、安定はしているので人気度はなかなか落ちません。

 

やがて労働集約型産業は死ぬ

単価が上向くことは滅多にありません。
せいぜい他の産業が盛り上がった煽りで人手不足になる程度でしょうか?
あるいは特需レベルに需要が高まったり。
しかし長期的に見れば徐々に下がっていくのだと思います。

そしてある日突然労働集約型産業を脱出します。
それは破壊的イノベーションによってもたらされます。

今まで人手でやっていたのが、機械や仕組みに置き換わるわけです。
皆が大好きな自動化です。

労働者自体は他の作業をするので生き残るように見えるかもしれませんが、その仕事は死にますし、それに特化しすぎた人は路頭に迷うはずです。

 

労働集約型産業とは、安定度のライフサイクルなのではないか?

つまり、こういうイメージです。

 

f:id:otihateten3510:20180218012615j:plain

 

労働集約型産業とは、言い換えれば産業(稼げる方法)の末期に近いのではないかと思います。
なぜ労働集約型産業が悪いかと言えば、死にかけ・死に体だからでしょう。
(悪いというか、黄色信号というか)

 

なぜ地獄か:ブローカー

人が居るほど売上が立つ。

こうなると、労働力を扱うブローカーが必ず現れます。こいつらが話をややこしくするわけです。
その中の業界の人達は、どうにか儲けようと大量の人材を扱うようになります。
その状態でレッドオーシャンに突入すると、それはもう地獄にしかなりません。
海外から人を連れてきたり、多重派遣になったり。
みんなで一緒に苦しくなっていきます。

 

なぜ地獄か:破壊的イノベーション

脱出する方法がぶっ壊すしか無い状態です。
救いがありません。
業界ごと壊れるので、キャリアがぶっ壊れます。
入って5年で潰れたらラッキーです。20年目とかだとそれはもう地獄でしょう。

 

様々な回避策

救いのある回避策

昭和までは上記の方法が一般的だった気がします。より自由化が進んでなんかぶっ壊れましたが。

参考

otihateten.hatenablog.com

 

救いがあまりない回避策

  • 新規参入の阻止

破壊的イノベーションからの独占状態です。
最近だとこういうの多いですね。他が真似できないように工夫します。(もちろん私もサービスをそういう風に考えています)

 

労働集約型産業の難しい点

労働集約型産業の良いところは、リスクが少ない点です。

例えば、100やって0 or 200みたいな仕事があったとして、200を勝ち取るのは優秀な人です優秀ではないけど賢い人はそれがわかっているので、リスクを取ろうとしません

そう言った人たちが行き着くのが労働集約型産業です。
その選択は正しいように見えますが、実はリスクを長期に引き伸ばしただけなのです。

これがまだ、20年前の世の中なら良かったと思います。
あるいは高度経済成長時代みたいに、仕事がだめになっても別の仕事がジャンジャン生まれる状態なら良かったかもしれません。
しかし今の時代は、破壊的イノベーションは起こる割に新しい仕事がなかなか生まれない辛い時代だと思います。

この時代において、リスクを取っても勝てないと判断した人たちに救いが無いわけです。
これじゃどう足掻いても二極化ですよね。真面目にやっただけじゃ勝てないのが地獄度高いです。
一部だけが儲かっても業界全体の地獄度は変わりません。

 

※統計があるわけじゃないので想像ですが。ただ二極化は世界的に進んでいるそうですね。日本も同様。

 

真の回避策はあるのか

どう足掻いても勝者と敗者が出て、それがどんどん鮮明になるこの状況。

完全にぶっ壊すには、経済学的な力学を無視した対応を生むしか無いように思えます(語弊がありそうですが)

 

もう一つの解法

これをずっと考えているのですが。

破壊的イノベーションが外部から行われるのが一番不味いんだと思います。

業界内で、例えカニバリになろうがイノベーションを起こし、その上で参入障壁をきちんと作れれば、今より安定するのではないでしょうか。

 

まあ、もちろんそれを全産業で起こすには中々大変です。
だとしたら、業界内から破壊的イノベーションを発生させることを目的とした企業が世に必要なんじゃないかなぁと感じています。どうしても最近のイノベーションは業界を食ってる感が否めないと思うのです(まだふわっとした印象ですけど)

 

ティール組織というのが話題らしい

mirai.doda.jp

 

nol-blog.com

 

http://www.reinventingorganizationswiki.com/Teal_Organizations

 

f:id:otihateten3510:20180214215917p:plain

 

話題にしたいらしい。

 

新たな商材かな?

 

組織論は好きなので、ちょっと期待したんですが、ガッカリでした。

好景気の受託開発で起こりがちな失敗

好景気ですね(たぶん)
 

実際に好景気かどうかは置いておいて、仕事が溢れた時受託開発で気をつけたいことを考えてみます。会社単位で見ればよくあることですし、その時には気づかなかったことが色々ありました。

せっかく仕事が多いというチャンスなのに、対応次第でリスクになってしまうケースがあると思います。

 

図解!!

色々文章で説明しようと思ったのですが無理でした。
うっかりするとこうなります。

 

f:id:otihateten3510:20180214211630j:plain

 

これが数年スパンで起きるケースがあります。

 

少し解説

この図のフローが起きて怖いのは、

  • 仕事を大量にこなすのに、上がらない利益率
  • 優秀な人が出ていって地獄
  • とにかく仕事が多い
  • 例え切り抜けても、大きな図体と一段レベルが落ちた従業員が残る

ここらへんだと思います。

 

やらかす最大の要因としては「リーダー格の割合が減る」です。仕事があふれるせいで採用を厳選しづらくなります。(回避しようとして外注を増やしても結果は好転しません)

 

回避するには?

  • 従業員の数に見合った仕事量
  • 従業員のレベルアップ
  • 社員全体のレベルバランスを壊さない(兵隊ばかり雇わず、ちゃんと収束できる人を増やす)

を心がけるしか無いと思います。

 

でも、回避が難しい理由

このくらいのこと、PMや経営陣はわかってると思います。

しかしクライアントも好景気には必死なので「何とかお願いします」と言ってくるわけです。そうなると引き受けざるを得なくなってしまいます。

中々仕事量のコントロールは難しいはずです。

これらを解決できるすごい会社だけまともに成長していくのでしょうね。私には自信ありません。

 

エンジニアとしてどう対処するか

自分が壊れる前に逃げるです。

フローを見れば大体わかりますが、そこから好転する目が見つかりません。ジリ貧です。もはやこれまでとなると、本当に優秀な人から抜けていきます。地獄度は刻一刻と上がっていくだけです。

 

もちろん、そうなる前に社内でよく話し合うことができればいいんですけど。中々難しいです。
個人的にも、もっと上手くやれたパターンの話を聞いてみたいです(失敗パターンばかり見てきている)

アプリ開発者は、Webサイトをどうすればいいか問題

www.publickey1.jp

 

PWAでいいのでは?

あれ、PCでPWAって表示できるんですかね?

 

でも、iOSアプリ作って、Androidアプリ作って、PWA作ってって
同じような機能を3回作るのはつかれるので、ハイブリッドがまた流行るんでしょうかねぇ
さすがに3プラットフォームとなると、1人でやるには中々しんどいものがあります
会社でやるにも2人×3で6人くらい必要になっちゃいます

 

 

PCは順次対応とのこと

www.suzukikenichi.com