見出し画像

経営者のためのAI & CS講座 2:プログラミングって難しい?

経営者の皆さんは、日々の経営の中で、プログラミングの話を直接することは少ないかと思います。しかし、何かをシステム化しようとした時に、どれくらい大変なのか、どれくらいの工数がかかるのかイメージできると、意思決定にかなり役立つ事は賛成してもらえるはずです。

何かをシステム化しようとした時に、どんな機能を作り、どんな機能を諦めるか、その際の工数がイメージできると、システムの仕様を決めるのに役立ちます。例として、ビジネスサイドでシステム仕様を考えて、開発サイドに仕様を提示すると、「え!そんなに時間かかるの?」とびっくりした経験ある方も多いのではないでしょうか。重要な機能だけならすぐ開発できるのに、あまり重要でない機能の作成も「仕様通り」作らなければと思ってしまい、開発に余計な時間とコストがかかってしまう。開発サイドのマネージャが、「この機能削ったらこんなに早く仕上がります!」とか、「この機能はこういう感じでも代替できるので、ユーザインターフェースは若干異なりますが、こんな仕様でいかがでしょう?」と言ってくれるような方だといいのですが、なかなかそういうことが出来る開発マネージャがいないのも事実です。その背景としては、ビジネスサイドの意図が正確に伝わらず本当は何がやりたいかを理解しないままシステムを作ってる現場が非常に多いです。

なので、経営のトップ(ビジネスサイドのトップと言い換えても良い)が、開発現場の都合に対してイメージが湧くのと湧かないのでは開発コストに雲泥の差が出てきます。経営者自らちょっとコードが書けるようになるだけでいいことがたくさんあるのです。でも、なかなか勉強を始められないですよね。よくわかります。何から手をつけていいかわからないし、時間もないし、昔理系苦手だったし、、、やらない言い訳は簡単に山ほど出てきます(笑)

プログラミングって難しい?

実はこの疑問に対する答えは、みんななんとなく「難しいに決まってる!」と思い込んでるだけなのではないでしょうか?

僕は大人になってからプログラミングを学んだのでよく覚えていますが(フィックスターズの社員たちは、子供の頃からプログラミングが好きで趣味プログラミングという人が多い=プログラミングに最初に取り組んだ頃を覚えてない)、1ヶ月もみっちり取り組んだら、まあまあ何となく難しいことはわからなくてもプログラマの気持ちみたいなのもわかるし、バグと格闘する経験もできるし、開発チームとの会話も弾むし、いいことだらけです(笑)。そうだとしても1ヶ月も無理!という方に、もう少し簡単に開発チームと仲良くなれる方法を伝授します。

プログラミング言語

世の中には数多くのプログラミング言語があります。最低数百。方言合わせると数千という説もあります。ではどのプログラミング言語から学ぶべきかというと、まあ何でもいい気がします。有名どころのPythonでも、JavaでもCでも何でも良いかなと。いい小説を書くのに、何語で書いたらいいだろう?と言ってるのと同じような質問です。日本語に詳しくてもいい小説が書けるわけではないと同様、特定のプログラミング言語に詳しくてもいいシステムが作れるわけではありません。天才プログラマーなら、書いたことない言語でも、言語指定してこれでこういうシステム作ってねと言ったら、その言語経験が長いエンジニアよりずっと早くいいシステムに仕上げてくれます。特定の言語でシステムを作る場合、その言語でシステム作った経験よりも、プログラマとしての才能、スキルを重視した方が結果としていいシステムに仕上がります(これは論争になりそうですが、僕は確実にそう思う)。

ちと脱線しましたが、言いたいこととしては、別に日本語でいいから、システムを作る際のアルゴリズムを学べば、とりあえずシステムを作るイメージが湧くかと思います。細かくは、オブジェクト指向だとか、関数型だとか、あーだこーだ色々あるのですが、簡単に考えればやりたいことを、フローチャートにできれば、あとは開発者がよろしくやってくれるでしょう。実現したいことを上から順番に手順を書いてやる。できることは、分岐と繰り返しだけ。あとは一つ一つ手順を考えられれば、それでシステムイメージになります。

(例)ユーザ登録画面を作る

  1. Webページに登録してほしい情報の入力画面を作る。

  2. 登録ボタンを押された際に入力が正しいかチェックする。

  3. 入力が正しければ、サーバに情報を送信する。入力が正しくなければエラー表示して再入力を促す(分岐処理)。

  4. サーバ側では入力情報を受け取って、データベースに保存する。正常に保存できたら、正常終了ですとのメッセージをブラウザに送信する。

  5. ブラウザ側に、「正常終了です。ありがとう。」とメッセージを表示する。

これでプログラム完成!です。ChatGPTくんがそのうちこれでシステム作ってくれるようになるでしょう!

問題は、このアルゴリズムを解きたい問題に応じて正しく作れるかどうかで、これをどのプログラミング言語でどう書くかは、覚えようと思えばちょっと頑張れば覚えれるし、近い将来AIくんが書いてくれるようになるだろうし、大きな問題ではありません。エンジニアでも特定の言語に詳しいと自慢するタイプは、当たり外れが大きいです。特定の言語はよく知ってても、アルゴリズムを組み立てられないと、システムは綺麗に仕上がらない。実際のシステムでは上記より何百倍も何千倍も複雑な問題に取り組みますので、アルゴリズムを考える能力の方が、特定言語に詳しいことよりも重要なのは間違いないです。

アルゴリズムを考える能力

「アルゴリズム」という言葉も、まあ色々なニュアンスで使われますね。ピンと来ない方も多いかと思います。上記文脈では「アルゴリズム」を「やりたいことの実現のための一連の処理手順」的なニュアンスで使っています。キングダムでは李牧と小平君がお互い戦に勝つために、どの手順でどこをどう攻めるかを必死に考えていますね。順番を間違えると負けるし、どう攻めるかが理に適ってないと負けます。プログラミングも似てるなぁと思っていて、やりたいことを、最短で最小限のステップでどう実現するかを考えることが重要です。世の中の実際のコードを見ると、やりたいことに対して、ちょーーーーー遠回りして、不要な処理がいっぱい、本当は20ステップで済むのに200ステップもかけてる!しかもタイミング悪ければバグっちゃう!的なものが散見されます。こういう例は決して少なくありません。日本語で質疑応答してても、質問にまっすぐ答えないで、遠回りして、結局違う方に行っちゃう人も多いですよね(笑)。そういう人のプログラムは日本語と一緒であっちこっちいっちゃうことが多いです。システム工学的にもやりたいことを実現するステップ数(プログラム行数)が少ない方がバグが少ないという研究結果があります。

話が長くなりましたが、「プログラミングって難しい?」の回答としては、プログラミング言語で書くことは難しくないが、難解な問題を解くための正しいアルゴリズムを綺麗に考えることは難しいとなります。言い換えると、身近な問題を解くためのアルゴリズム作りはそんなに難しくありません。とりあえず経営者のみなさん、なんかプログラミング言語選んで、分岐と繰り返しだけで、アルゴリズム考えてみてください!きっとエンジニア達と仲良くなれます(笑)。

いつか1週間の経営者向けのプログラミング合宿を開催したいと思っています。山にこもって、サウナで汗をかいてワイン飲みながらの1週間合宿。ある程度プログラム書けるようになるかな。少なくともエンジニアの気持ちは少しわかるようになると思います。希望者多ければやろうかな(笑)


この記事が気に入ったらサポートをしてみませんか?