見出し画像

学習を忘れた大人たちへ

こにちわございまする。ゼバ会です。
本日はやけに意味深なタイトルで始まりましたが、こういう詩的なタイトルってどうでしょうかね?
評判が良かったらこれからずっと詩的なタイトルを使おうかな。。。?

・エンジニア物語
・縮みゆくプログラマー
・食べて祈って仕事して
・デイ・アフター・リリース

。。。うん、やめとこか。
嫌な予感しかしない。

はい。本日は「学習コスト」という考え方の話です。
まぁ、聞きなれた人にはお馴染みの、このような会話の話ですね。

リーダー「これからがんばってね、よろしく頼むよ」
メンバー「はい! がんばります!」
リーダー「こないだ頼んだ案件、理解できた? 期日までにはまだ間があるけど、間に合いそう?」
メンバー「問題ないと思います。ただ中身はこれからですね。少し学習してみて、実際の工数を見積もってみます」
リーダー「え? これから学習!? おいおい、学生じゃないんだから。プロなら学習くらい学生時代に終わらせとけよ」
メンバー「、、、え? 何の話です?」
リーダー「いや、だから学習これからなんでしょ?」
メンバー「はい、そうですが」
リーダー「、、、え?」

さすがにこのレベルで無知なリーダーはいないでしょうし、というよりこのリーダーさんは「学習」って言葉が嫌いなだけですね。
学生時代にウェイ系パリピだったのかな?

でも、案件が始まって製造工程に入ってから学習し始めることに対し、心情的に理解はしつつも難色を示す、くらいであれば割とあることです。
そういう人は多分、学習行為それ自体に「いつ終わるか分からないもの」というイメージを持ってるんじゃないかな、と思います。
だから「もう製造が始まってるのに、そんな悠長なことでどうするの!?」と思っちゃうんでしょう。

〇なぜ製造が始まってからの学習が必要なの?

なぜ学習コストなんて面倒なものが必要なんでしょうか。
「昭和時代はそんなものなかったのに! 人類は衰退しました!」とか内心思ってる人も、もしかしたらいるかもしれませんね。

でもエンジニアはあくまでコンピューターのプロなだけで、別に何でも知ってるスーパーマンではありません。コンピューター以外の知識はほとんどない人も多い反面、お客さんは逆にコンピューター以外の何かのプロです。
ですから、プログラマーがお客さんの専門分野について、案件が始まってから学習するのはごく一般的なことです。
なぜならプログラマーは、お客さん先で行われる(であろう)マネジメントメソッドを、上級現場リーダーと同レベルで完璧に理解・把握しなければならないからです。
プログラミング以外は何もできないただの一般人なのに、です!

もちろん、営業さんが常に、既存知識しか必要のない案件だけをくれればいいのですが、世の中そうは問屋が卸しません。
知らないことにチャレンジせざるをえない状況は当然あります。

むしろ、知らないことにチャレンジしなければエンジニアとしての成長もありません。
ですので学習コストを会社が負担するのは、IT企業が成長していく上でとても大切なことなのです。

とはいえ、ここでいう学習とは、学生に戻って1から学び直すという意味ではありません。
たまたまお客さんが法律事務所だったからといって、大学法学部の試験を受けて4年間の課程を経ていてはキリがありません。
ここでいう学習とは、今回の案件製造に当たって、現時点で知らない知識を補完するくらいの意味です。
ただ、その補完作業に、昔と比べて時間がかかるケースが増えているのです。

そして、その作業にかかる時間には概ねざっくりな相場があって、その時間数のことを「学習コスト」というわけです。

〇学習コストはどれくらいを見積もるべきか

ただし、仮に学習コストの存在に十分に理解がある人であっても、その見積りは甘い傾向が高いのが今の社会の現状です。
法律事務所がお客さんだった場合、さすがに「丸々4年」はがんばりすぎだとしても、別に5分10分で終わるわけでも、終業後にちょっと新聞とか読めば済むものでもありません。

たとえば、私事で恐縮ですが、つい最近AI技術に手を出し始めました。
今までずっとWeb系の言語ばかりを仕事で使っていましたが、とうとう Python に手を出すことになったのです。
当然ながら、システムの環境構築の仕方や、モジュールの追加の仕方なども全て手探りです。

プログラマーとしては20年以上キャリアがあるにもかかわらず、変数の代入の仕方すら分からない日々が続いています。
まあ、分からないことは検索して調べればいいので、疑問点を1つ解消する時間自体は5分10分なわけですが、でも Python に慣れた人であれば必要のない検索をしているうえ、そのような疑問が1日に5個も10個も、それも毎日毎日出続けるのです。

慣れた人なら15分あれば十分に組めるプログラムを、私の場合は合計10時間くらいかけて作っています。
1日あたりの作業量は、プライベートタイムを1日1時間ほど削ってる感じなので、まぁだいたいざっくり製造期間2週間といったところ。
私の場合、内部で使う1つ1つの技術について予め知見くらいはあったのですが、それでもこんなにかかっています。
なので全くの完全なド素人だったら、もっと時間を食っていたでしょう。

要は、未知に挑戦するというのは、想像以上に時間がかかるものなのです。

では、学習コストをなるだけ下げようとして、もし私が Python の学習を避けて、自前の知識だけでAI開発しようとしていたらどうなったでしょうか。
自明の理ですね。
Python であれば比較的簡単に利用できるAI関連のシステムを、自分1人で全て手組みする必要が生じていたのです。
つまり、学習コストの捻出を避けようとして、さらに高難度の学習コストが必要になっていた可能性が高いということです。

〇学習コストを払わずに抜け道を通るメリット

無論、学習をなるだけ避けるという考え方も一理はあるし、その考え方にも一定のメリットはあります。
今回の私の場合、Python の学習を避けた場合の抜け道は、前述の自前の知識だけで何とかする以外にも3つありました。

・がんばって慣れたシステム向けライブラリーを探す
・お金を出して有償サービスを使用する
・AI関連技術を使うことをあきらめる

今回の私の場合、目的は私好みのシステムを組むことであって別にAIはそのための手段にすぎなかったので、AIを使わない手も、もしかしたらあったかもしれません。
同じように、自分で学習することを避けたいがために、なんかあるともう凄いがんばってオープンソースのライブラリーとか探しちゃう人もいます。

何年か前にあった実例でいうと、「正規表現の勉強をするのが本当に嫌で、必要になったら検索で何とかする」という人がいました。
たかが正規表現くらいがんばったらいいのに、、、と思いはしましたが、その人にとっては重要なことだったんでしょう。
もちろんそういう人でも納品物に問題があったわけじゃないし、私の彼に対する不満は致命的にイケメンだったという点だけでした。
(イケメン、ニクイ)

学習コストを払うことを徹底的に避ける人の心理としては、世の中ですでに評価を得ているシステムを使った方が、自分で作るモノよりもハクもあって上を納得させやすいというのはあるでしょう。

ただ1つ、そういう方向性を好む人がよく言うセルフで、個人的にちょっと気になるものがあったりします。

「オープンソースの方が楽だから」

。。。。え!? 楽!?
オープンソースは中身がアンコントローラブルなんだよ!?
(や、まぁ、ソースがオープンって意味では完全なアンコントローラブルではないんだけどさ)

新たにアプリを導入すると、自分自身のやりたいことをどう実現するかに加えて、導入するアプリをどう使うかという学習も必要なのに、それ本当に楽!?
手間とか全然変わってないんじゃないの!?

同じ要領で「オープンソースの方が安全」も違うと思うんです。
だって、新たなアプリを導入するってことは、そのアプリを使いこなせないリスクそのアプリが将来の要件に耐えられないリスクを抱えるってことじゃないですか。

。。。って私なんかは思うんですよね。

〇学習コストを払わないデメリット

もちろん、オープンソースに意外とメリットがないからといって、使わない方がいいということではありません。
そりゃあライブラリーを使わず手作りの方が後でメンテナンスは楽だし、メンテナンスの容易性はシステム構築のカナメでもありますが、だからといって手作りにこだわるあまり学習コストを支払うこと自体が目的になってしまっては本末転倒です。

世の中手作り料理がなんでも美味しいわけじゃないし、天然自然素材が常に安全・安心なわけでもありません。
「今度新しく入った新人君、ちょっと天然自然素材なんだよねー」っつったら、プロジェクトチームとしては明らかに黄色信号でしょう。

でもだからって、楽をするために、とか、安全重視で学習を避けるというのも、ちょっと違うと思うんですよね。

エンジニアってのは、業務をこなすために日々物凄い広い範囲の物事を考慮してる反面、なるだけ多くの時間をビジネスの最適化に割くのが世の中的なベストという現実はあります。
つまりシステムロジックを作る時間を減らしビジネスロジックを作る時間を増やすことが重要なのであって、それは必ずしも楽になる道ではありません。

手作りを避けてライブラリーを導入した場合であっても、未知の新しいことに挑戦する精神負荷は普通に増えるし、将来の要件とバッティングしてトラブルになる可能性だってあるし、あるいは未知の脆弱性を抱え込むかもしれません。
ですから学習を避けても別に楽にはならないのです。

それでいうなら、一番楽で一番安全なのは、交通事故を避ける一番の方法が外出しないことなのと一緒で、何もしないのが一番安全です。

つまり重要なのは、

学習コストを最低にするために、あえて学習することを選ぶ

ということなわけです。

そしてそれは完全に0にできるものではないし、工数見積もりの段階でちゃんと数値に入れておかないとマズいんじゃないかなー、ということ。
学習コストを0で見積もるって、要は自分達のチームメンバーがスーパー天才であることを前提にするってことだし、そんなことしちゃったがゆえに後で炎上したプロジェクトなんかも、世の中に例はいっぱいありますからね。

〇 まとめ

はい。
まとめると、学習コストはただ避けるのではなく、避けられないことを前提としたうえでどうやって小さくするかを考えることが重要ということでした。
「学習」というのは別に苦労することそれ自体を目的とするものではないし、むしろ苦労そのものが目的化しちゃってる人は、それはそれで幸福恐怖症という病気なので、産業医によるラインケアなどが必要となるでしょう。

学習時間を最低にするために、あえて学習する道を選ぶ。
そういう心構えを持ってもらうと、精神的にも後々楽になると思います。

学習を避けがちな人は、少し考えてみてはどうでしょうか。

いいなと思ったら応援しよう!