「ツールは手段。目的は課題解決。」という話をしたかった(過去形)


イントロダクション

Developers Boost』にてATEAMさんが企業ブースを出してまして、「Tシャツあげるからツールについてアドベントカレンダー書いてほしい♪」って言われたので書きます。

ただ、「ツールについて書いてほしい」って言われてたので、ツールの特性を知る意義について書こうと思ってたんですが、よくよく見てみるとそういうアドベントカレンダーじゃないんですね( '-' )

完全にやらかした( '-' )

Tシャツ貰っちゃったから書くけど( '-' )

◆お使いのツール名

  • Python

「ツールじゃねえじゃん」って思われるかもしれないが、『ツールは手段で、目的は課題解決』という観点からすると、課題解決のために必要な道具(=ツール)と考えられる。

◆この製品・サービスの良いポイントは何でしょうか?

  • ライブラリが多彩
  • 学習コストが低い
  • コード規約により誰でも同じようなコードになる(=保守性が高い)

機械学習や画像解析、感情分析や量子コンピュータなど、多様化している現代において、さまざまな要件が降ってくる。
それらを一から構築していくのは非効率的であり、スピード感を持って取り組む事が困難になる。
世の中には自分より技術力のある仏様がたくさんおり、その仏様方が用意して下さったライブラリを使用する方が圧倒的に早い。
(もちろん検証作業などは必要)

また、軽量言語の特長通り学習に対するコストが低く、コード規約により保守性の高いプログラムができるため、ストレスなく言語を触れ合う事ができる。

◆改善してほしいポイントは何でしょうか?

  • 特になし

やりたい事は全てできるし、やれない事は別の言語に任せればいいだけだし、特に改善してほしいポイントはない。
もっと利用者が増えて、コミュニティが大きくなり、今後も使い続けられるよう発展してくれればそれほど嬉しい事はない。

◆どのようなビジネス課題を解決できましたか?あるいは、どのようなメリットが得られましたか?

  • 大火事案件に駆り出され、1週間で10本以上の復旧ツールを作成
  • 提供されている機械学習ライブラリを用いる事で、持続的かつ確実に利益を上げられるツールの開発に成功
  • 社内での差別化が図れた

とある大火事案件に火消し要員として駆り出され、「復旧のためのツールを作ってほしい」と言われた。
要件を聞いてツールを作成、終わったら使い捨てて次の要件、、、というのを繰り返し、1週間で10本以上のツールを作成した。
コードを短く書けるため、1つのタスクにかける時間を短縮できるというのは軽量言語のメリットであると感じる。

また、機械学習について勉強をし始めて1ヶ月ほどしか経っていないタイミングで、仮想通貨と機械学習を組み合わせられないかと言われて着手した。
多くは語れないので割愛するが、最終的に、少額ではあるが確実に利益を出せるツールの開発に成功した。
機械学習について深い知識がなくとも成果を上げる事ができるライブラリがあるというのは、非常にありがたい。(他力本願)

そして、日本ではPythonはあまり普及しておらず、JavaやRubyなどの業務案件が多い。
うちの会社も同様であるため、Pythonが使える僕は差別化が図れたと考えており、最大のメリットとして感じる。

最後に

冒頭にも描いた通り、認識違いでエントリーしちゃったから、"Theありきたり"な内容になってしまった、、、
そもそもツールに固執した事ないし、「色んなツールについて知ってるといいよ〜〜」って書きたかったから仕方ない( '-' )←話聞いてなかった自分が悪い

『差別化が図れた』については、キャリア戦略的にも重要だと思うので、Pythonに限らず色々挑戦していきたいですね。



ちなみにTシャツは部屋着になりました。
ATEAMさん、ありがとうございました。




余談:元々書こうと思ってた内容(供養)

せっかく書いたので供養。

『目的』は一つ。『手段』は多いに越した事はない。

手段によるスピードアップ

目的に対する手段は多数あります。
富士山登頂でも、歩いて登ろうが、自動車を使おうが、馬を使おうが、遅かれ早かれどれでも目的に達成する事はできます。

ただ、目的に達するまでのスピードに圧倒的な差が出てきます。

技術やツールを知る意義

先輩や上司から「勉強しろ」とか「技術を知れ」とか口酸っぱく言われてる人もいるかもしれないですが、全ては課題解決のためであると考えられます。
「今回の課題は何なのか」「そのためにはどんな技術やツールが使えるのか」「それらが使えない場合はどうしたらよいか」という目的を考え、その目的のために技術やツールを使ったり、結果的にそれらを使う必要がなかったり、そもそも使えるモノがなかったり、という手段を考える必要があります。

「適した技術やツールを使う」というのも、一つの手段です。
「無駄に技術やツールを使わない」というのも、一つの手段です。
「使えるツールがないから作ろう」というのも、一つの手段です。

ただ、どんな手段を使っても、目的はただ一つです。
目的のために、技術やツールを知る必要があります。

技術やツールの特性を知る

世の中には便利な技術やツールはたくさんあります。
PythonもRubyも便利だし、DockerもJenkinsも便利だし、Excelもエディタも便利だし、色んな機能が付いてて色んな事ができます。

ただ、それで全てが上手くいくかというと、そんな事はありません。
技術やツールには得手不得手はあるし、要件に合う合わないも、課題解決できるできないも、もちろんあります。

目的のために必要な手段だからこそ、あらゆるパターンを知っておく必要があります。
手段は多いに越した事はありません。

哲学的な話

「知らないからできない」というのは当たり前の話で、それはそれで問題ないと思ってます。
『無知の知』というソクラテスの言葉の通り、知らないという事を知ってるというだけでも十分です。

ただ、そこからが重要で、知らない事を知らないまま放置して過ごすのは、傲慢で、怠惰で、他人事にし過ぎです。
「何故知らないのか」「知るためにはどうしたらいいのか」「本当に知るべき内容なのか」を考え、必要に応じて学び、それを続ける事が大切です。

「分かっちゃいるけど行動に移すのは難しい」というのはごもっともですが、それは孔子のいう『論語読みの論語知らず』と同義です。
理解してるだけで行動に移せないなら意味はなく、理解や行動するのに早いも遅いもないので、ぜひ行動に移してください。

また、相手が知らない事を批難するのもナンセンスです。
これもまた『無知の知』の話であり、自分がそれを知った気になって驕り高ぶるのは、同じく傲慢で、自分本意なエゴイストです。
お互いに知らない事を認め合い、知ってる事を共有し合えるといいですね。

「目的に合う手段を知らないのでできません」

例えば「富士山登頂したい」と言われて、「手段は歩くしかない。お前には体力がないから無理」としか提案できないのは非常に残忍です。
「車使えば5合目まで行けるからそこからは頑張れる?」とか「馬を使えば7合目までは行けるからそこからは頑張ろうか」とか、他の手段を知っていれば提案できるはず。

「目的に合う手段を知らないのでできません」だとチャンスを逃すだけなので、自分のためにも相手のためにも、できるだけチャンスを逃さないように最適解を提示できるように、色んなツールについて知れてるといいですね。

まあ、それもまた一つの人生なのでよいのですが。



少し哲学的な話になってしまいましたが、本来書きたかった内容は以上です。