投稿日時:

皆さん、こんにちは。フロンティアリンクの佐藤です。前回の第一回コラムでは「世の中を動かす力-『プログラミング』技術」と題して、現在の世の中に欠かすことの出来ない技術である「プログラミング技術」について、その特色を述べました。今回のコラムでは、プログラミング技術は開発者・技術者だけでなく、ビジネスに携わる全ての人々にとって有効なスキルであり、プログラミングスキルがあらゆる仕事に共通の「基礎体力」を形成することに役立つことを述べていきたいと思います。

「ビジネスにおける基礎的な能力」というと、皆さんはどのようなスキルを想像されますでしょうか? 2012年8月に日経BPコンサルティング社が20代の若手社員及び40代の管理職合わせて約1,000名に対して行った「企業で必要なスキルと大学教育に関する調査」によると、「課題設定力」「グローバル視点」「能動性」「創造力」「伝達力(コミュニケーション力)」「視覚化力(プレゼン力)」等がビジネス上の必要な能力であるとのことでした。

私自身がビジネスに必要な基礎的能力を3点挙げるとすれば「創造力」「論理思考力」「コミュニケーション力」となります。先程の調査結果における「課題設定力」「伝達力」「視覚化力」は全て「論理思考力」がベースとなりますし、「創造力」を高めるためには自ずと「グローバル視点」や「能動性」が必要となります。そのため、どのようなビジネスにも共通の基礎スキルとしては「創造力」「論理思考力」「コミュニケーション力」の3点が重要であると私は考えますが、実はプログラミングスキルを習得することで、これら3点の力を「全て同時に」引き上げることが出来るようになります。だからこそ、私はプログラミング技術は開発者・技術者だけでなく、ビジネスに携わる全ての人々が習得すべき「基礎スキル」であると思っています。

まず、プログラミングスキルと創造力の関係について説明しましょう。前回のコラムで、プログラミングとは「人間の思考様式と行動を自動的に再現することによる価値創造手段」であると書きましたが、プログラミングとは「価値創造ツール」すなわち「無から有を生み出すことが出来る」ツールであるということが言えます。ただし、プログラミングだけで全ての価値が創造できるわけではありません。プログラム=ソフトウェアと、それと組み合わされるハードウェア=機械、さらにはそれらを活用する「人間」が存在することで、初めて様々な価値が創造されます。ここでの大切なポイントは、新しい価値を創造したいと思った際に、それが「ソフトウェアのみで出来ること」なのか、「新たなハードウェアも必要となるもの」なのか、あるいは「人間の関与が不可欠なもの」なのかを見極めることになります。この見極めこそがまさに「創造力」が最も発揮される領域なのですね。

ビジネスの目標を達成するために、

1. パソコンやスマートフォン等の既存ハードウェアや、その上で動作する既存ソフトウェアを活用し、目標達成のためのソフトウェアのみを新規作成する必要がある
2. 既存ハードウェアだけでは目標達成が出来ないので、追加ハードウェアを作成または購入し、さらにそのハードウェア用のソフトウェアも新規作成する必要がある
3. ハードウェアやソフトウェアでは解決しないので、人手をかける必要がある

これら3つのケースが存在するとした場合、必要なトータルコストは一般的には1→2→3の順に増加します。言い換えれば、実現したいことを出来るだけ「1」=ソフトウェアの開発のみで達成できるように様々な視点で考えることが必要ですが、この検討を進める上では「出来ること」「出来ないこと」の切り分けはもちろんのこと、ありとあらゆる代替手段を検討したり、あるいはビジネス目標(または目的)に立ち返り、本当に必要なものなのかどうかを熟考するなど、非常に高い「創造力」が要求されます。

この創造力を高めるためには、まずは当然ですが「ソフトウェアで出来ること・出来ないこと」の見極めが出来なければなりません。例えばある業務改善を行うために「Excel+マクロ/VBA」(=ソフトウェア)だけで処理が出来るのか、それとも「専用のデータベースサーバー」(=ハードウェア)との連携処理が必要なのか、というイメージですね。これが出来ないと「マンパワーの力業で解決する」という非効率な選択肢しか出てこなくなる可能性があります。そのためにはまずは「プログラミングスキル」を習得し、「プログラムとは何か」「プログラム=ソフトウェアで出来ることは何か」を知る必要があるということになります。逆に「ソフトウェアで出来ること・出来ないこと」の判断が可能になれば、思考回路の範囲を拡張し「人間でなければ解決できないこと」を創造的に検討することも可能となります。すなわち、プログラミングスキルは創造力を高めると同時に「問題の本質」を考えることにも役立つということになります。

次に、プログラミングスキルと論理思考力の関係について説明しましょう。プログラミングは「プログラミング言語」と呼ばれるプログラム記述のための仕組みを使って作成されます。実は、プログラミング言語のルール自体はさほど難しくはありません。実際、例えば弊社のVBAやJava等のプログラミングセミナーでは、プログラミングの基本ルールは1-2日で習得出来るようにカリキュラムを設定しています。ただし、ルール自体はそれほど難しくなくても、実際に「どのようにルールを適用するか」言い換えれば「自分が実現したいことを、どのようにプログラミング言語で書き表すか」を自分自身で考えられるようになるためには、膨大な練習が必要です。これがまさに「論理思考力」を強化するプロセスになるのですね。

論理思考の基本は「ピラミッド思考」すなわち「論点(階層)の掘り下げによる詳細化」「同一階層における事由や状況の網羅」
「各論点・事由等の順序指定」によって行われますが、プログラミングはまさにこの「詳細化」「網羅」「順序指定」を行うことで作成を進めていくことになります。開発したいテーマがピラミッドの最上段にあり、その機能毎に詳細化を行い、詳細化を行った各ブロックに対して、そのブロックに必要な開発要素を網羅し、さらに各要素間の実行順序を指定することで、全てのプログラムは作製されます。

言い換えれば「開発テーマはどのような大まかな要素に分解することが可能か」「それぞれの大まかな要素を実際にプログラムとして記述するためには、何をどのような順番で網羅すれば良いか」ということを繰り返し考えていくのがプログラムのロジック・アルゴリズム作成の基本的な流れであり、この作業を開発テーマ毎に何度も行うことになります。さらに論理思考を考える上での大切なポイントである「MECE(Mutually Exclusive and Collectively Exhaustive)=『漏れ・ダブり無し』」の考え方についても、「重複する機能・プログラム記述をひとまとめにして共通化する」ことを通じて「ダブり無し」の状態を徹底的に創り上げ、その上で必要な開発要素を「漏れなく」網羅していくことで、MECEの考え方を「実践的に」習得することが出来ます。まさに「よいプログラムはMECEである」と言えるわけです。

私自身も論理思考=ロジカルシンキングをプログラミング以外にもMBA等を通じて習得し、また実際にセミナーでも教える立場にありますが、自分自身の経験や、他の論理思考に関する書籍等を読んで思うのは「プログラミングほど論理思考の習得に適した仕組みはない」ということです。通常の論理思考の学習方法が抱える一番の問題は「現実(=業務上)のテーマに対する答えが分かりにくい」ことと「自習に適さない」ことにあります。論理思考を「考え方に筋道が通っているかどうか」と読み替えれば、筋道がきちんと通っているかどうかを判断することは最初は専門家(コンサルタントや講師等)の手助けを借りなければ、自分だけではなかなか出来ません。従って、通常の論理思考の学習方法は「仕組みは理解できるけれど応用が利かない」「自分一人では学習を進めにくい」というものがどうしても多くなってしまっているのが事実だと思います。

一方でプログラミングの場合、そのロジック・アルゴリズム=論理を考えてプログラムを記述し、実行して結果を得ることができれば「自分の考え方は一応は合っている」ことが分かるわけです。「一応は」と付けたのは、重複する記述を共通項にくくり出していなかったり、非効率な(=プログラムのステップ数が多い)記述をしていたりしていても「実行」は出来るため、その点については自分自身で気をつける必要があるからなのですが、この点についても「同じことを実行するプログラムであれば、ステップ数が少ない方が良い」という原則を守るだけで、アルゴリズムのブラッシュアップも自分で出来るようになります。言い換えれば「より洗練された論理思考」を「自習で」身に付けることがプログラミングの場合は可能であるということなのです。

最後に、プログラミングスキルとコミュニケーション力の関係について説明しましょう。プログラミングスキルの習得とコミュニケーション力向上に関連性があるということには、少し意外に思えるかもしれません。特に先程の「論理思考力」との関連で、プログラミングは「自習」出来る点が他の論理思考力向上法よりも優れていると書きましたので。

「コミュニケーション」の定義を広辞苑で調べると

コミュニケーション【communication】社会生活を営む人間の間に行われる知覚・感情・思考の伝達。言語・文字その他視覚・聴覚に訴える各種のものを媒介とする。

とあります。この定義をもう少し整理して考えると、発信者から発せられた「情報」が受信者に伝わること、言い換えればコミュニケーションとは「複数の関係者間での情報伝達と共有」と言い換えることが出来ます。プログラミングの場合は確かに基礎的なものであれば一人で開発を進めることが普通ですが、より実践的かつ大規模なプログラミングを行う場合は「外部からの開発テーマ指示」の下に「複数の開発スタッフが機能分担をして」作業を行うことが殆どです。すなわち、実践的なプログラミングの場においては、様々な形での「コミュニケーション」に基づいて、複数の関係者間での役割・機能分担を行うことが一般的ということになるのですね。

プログラミングを進める上でコミュニケーションが欠かせない最大の理由は「開発テーマの決定プロセス」にあります。自分自身で開発テーマの詳細までを全て一人で決められるような立場や状況であればコミュニケーションは不要なのですが、業務上の開発テーマの場合、それが大規模なシステム開発であろうと現場レベルでのExcelを使った業務改善であろうと「自分以外の他者」のニーズ・要望を汲み上げることが殆どの場合で必要となります。要は、自分一人で完璧に完結する仕事であれば何をどのように進めても良いのですが、そのような仕事は一般的に見れば、非常に少ないということです。

従って、開発テーマを決める際には、社内外の関係者の様々な意見をまずは集約し、先程の「創造性」のところで触れたように「出来ること・出来ないこと」を一つずつ検討した上で開発内容の詳細を決めていきます(この作業は「要件定義」と呼ばれます)。この要件定義の際には、関係者それぞれが使う「言葉」の定義一つ一つにも気をつけていく必要があります。なぜならば、同じ言葉であっても人が違えば頭の中のイメージが異なるケースがあるからです。

コミュニケーション能力の高さとはつまるところこのような「人によって異なるイメージを持つ言葉の定義を明らかにし、共通化した上で情報共有すること」が出来るかどうかにあります。プログラミングを行う場合は、言葉の定義が関係者間で実際には異なっており、もし現場のニースと異なるイメージのものを開発してしまった場合には「最初から開発をやり直す」必要がある場合もあるため、できる限り綿密に言葉の定義の明確化を進める必要があります。そのため「言葉の端々まで注意をし、情報に行き違いがないかどうかを確認する」癖が自然と備わることになります。結果として、プログラミングスキルを高め、実践的な仕事を多く経験するようになると、自然とコミュニケーション能力も高まることになるのですね。

このように、プログラミングスキルを習得することで「創造性」「論理思考力」「コミュニケーション力」といった、ビジネスにおいて共通の基礎能力を効率的かつ効果的に高めることが可能となります。しかも、プログラミングスキルを習得することで、現場レベルでの業務効率化も実際に進めることが可能となるメリットも生じるところが、他のいわゆる「机上の学習」とプログラミング学習の最大の違いです。

例えば現場のスタッフがプログラミングスキルの基礎を習得していた場合、様々な業務改善案を実現可能か否かについて効率的かつ創造的に考えることが出来るだけでなく、実際の業務改善を自らの業務として進めることも可能になりますので、他者に任せる場合に比べて時間短縮やコスト低下も期待することが出来ます。さらに、もしマネジメントレベルがソフトウェア・ハードウェア等の技術面にまで踏み込んで「出来る・出来ない」の判断を自らのスキルで出来るようになれば、意思決定に必要な時間も大幅に短縮可能となります。

プログラミングスキルを習得することの最大のメリットは、「プログラミングの仕組み」のイメージを理解することで、様々な業務課題やお客様の抱える問題の解決策をシステマティックに検討することが可能になることです。プログラムによる自動化だけで解決できるのか、新たなハードウェアが必要なのか、それともマンパワーが不可欠なのか、あるいはこれらの組み合わせなのか。この視点で物事を捉えることが出来れば、業務は大幅に効率化し、ビジネスチャンスも大きく広がります。

ここまで読み進めて下さった皆さんには、プログラミングが決して開発者・技術者だけのためのものではなく、ビジネスに携わるあらゆる人々にとって有益なスキルであることをご理解いただけたのではないかと思います。ただし、前回のコラムでも書いた通り、プログラミングの習得には「時間」が必要です。先の「論理思考力トレーニング」の部分に、一般的には2-3年程度の時間が必要となります。早く習得すればその分、早く実務に応用することが可能ですから、興味をお持ちの方は是非、まずは基本的なところから学習を始められることをお薦めいたします。

投稿日時:

皆さん、こんにちは。フロンティアリンクの佐藤です。2012年9月からのフロンティアリンク オフィシャルブログ開始に伴い、「社長ブログ」も開始することになりました。私自身は文章を書くことがそれほど得意な方ではないのですが、今後ビジネスを進め、皆さんのお役に立てることをしていきたいと思った際に、私自身が考えていることをこのような場を通じて表現していくことは大切な「きっかけ」の一つになると思い、社長ブログを始めることにしました。今後とも引き続き、どうぞよろしくお願い申し上げます。

さて、第一回のテーマは「世の中を動かす力-『プログラミング』技術」と題して、今後のビジネス教育において注力すべきと私が考える「プログラミング」について、記していきたいと思います。

皆さんは「プログラミング」と聞いて、どのようなことを想像されますでしょうか? 「よく分からないけど難しそうなイメージ」という答えを受講者の方からはよく聞くのですが、プログラミングほど世の中に「ありふれている」技術はないと私は思っています。

このブログ記事を書いているのは9月の上旬ですが、つい1ヶ月ほど前にNASAの火星探査機「キュリオシティー」の火星着陸に関するニュースが出ていました。個人的には久々にワクワクするニュースだったのですが、この着陸はこれまでの惑星探査にはない「高難易度」のミッションでした。地球から火星までの通信には数分間を要するため、着陸時の地球側からの細かな通信制御が出来ません。一方で今回の探査機は「自動車1台分」ほどの大きさ・重量があるため、従来の火星探査機で使用していた「エアバッグ」による「着陸時の衝撃吸収」も使用できないため、クレーン搭載の母船を火星上空20mほどで逆噴射により静止させ、そこからクレーンで地表に探査機をつり下ろすという手順を踏むことになりました。先程書いたようにこの作業には「地球からの通信制御」が使えないため、全自動で行う必要がありました。これを「恐怖の7分間」と呼んでいたのですが、キュリオシティーは無事にこのミッションを完遂し、現在では火星の様々な画像を送信するなど、順調に探査ミッションを行っているようです。

この「全自動での着陸」においては、様々なプログラムが裏側で動いていたものと推測されます。母船を上空20mで静止させるための逆噴射制御プログラム、クレーンの動作プログラム、探査機が地表に到達したことを判定するプログラム、クレーンからの切り離しプログラム、等ですね。プログラミング技術がなかったら、キュリオシティーが現在火星で元気に動き回ることも出来なかった訳です。

話は変わりますが、今年の夏は非常に暑かったですね。北海道出身で暑がりな私はエアコンのお世話になることが多かったのですが、最近の省エネエアコンは部屋の温度や人のいる場所などを自動的に計測し、スポット的に冷風を送る機能や、細かな風量制御をする機能が付いていたりします。これも実は全てプログラムで制御されています。温度を測定し風量を調整するプログラム、人や熱源の場所を判定するプログラム、熱源に応じて風向を調整するプログラム、等ですね。プログラミング技術がなかったら、「寒いからエアコンを切ろう」「また暑くなってきたからエアコンを付けよう」の繰り返しをしなければならなかったと思います。

このように「宇宙探査から家庭まで」プログラミングはありとあらゆるところに使用されている技術であり、この技術がなかったら現在の便利な生活は「全て」放棄しなければならなくなります。パソコンもスマートフォンもインターネットも、公共交通機関も物流も金融システムも「全て」止まってしまいます。要は、コンピュータが普及する前、イメージとしては江戸時代のような状況に戻ってしまうということです。もちろん、それで生活していた時代もあったわけですから、生きていけないわけでは決してありませんが、現状の便利な生活からいきなり江戸時代にタイムスリップすることになったら・・・ちょっと不便を感じるかもしれませんよね。

ビジネスの現場でもプログラミングが必要とされる場面は多く存在します。弊社のセミナーでも「VBA」「Java」「Javascript」「PHP」といったプログラミングに関する講座があるのですが、これらの講座には毎回多くのお客様が参加されています。例えば、日々の集計・分析業務で「基幹システムからデータファイルを出力してExcelに取り込み、必要なデータの加工を行ってからピボットテーブルを作成して分析する」作業を毎回手作業で行っているけれど、大変なので自動化したいからVBAを学習したい、あるいはWebページとデータベースを組み合わせて、最新のデータベース上の集客情報を表示するWebページを自動的に生成するようにしたい、といったニーズを実現するためにプログラミング技術を覚える必要があるのですね。一昔前まではこれらの「業務効率化」については専属のIT・システム担当部署が携わることが多かったのですが、現場での仕事量が増え、またコスト等の問題でIT・システム部署の縮小等も起きた結果、現場自体がプログラミングの対応をしなければならないケースが増えてきているのだと思います。

一方で、プログラミングスキルを持つ人材は、慢性的に不足しているという別の事実があります。スマートフォンの爆発的な普及に伴い、スマートフォンで動作するアプリケーション(アプリ)や、Webページと連動して動作する「Webアプリケーション」の開発ニーズが非常に高まっていますが、これらも全て「プログラミング」によって実装されます。ですが、プログラミング技術を習得するためには、最低でも1年、一人前になるためには3-4年の「習熟期間」が必要なため、高まる開発ニーズに人材の供給が追いつかないという状況が発生しています。結果として、能力の高い人材はもちろん、初級者レベルの人材でも引く手あまたという状態となっており、例えばソーシャルゲーム開発を行うグリーやDeNA等では、新卒の初任給が1,000万円を超えるというニュースも聞かれたくらいです。

これまで述べたように、プログラミングとはまさに「現在の世の中を動かす原動力」なのですが、そもそもプログラミング自体が「目に見えない」ものであること、目に見えないが故に「どのように」世の中で役立っているのかが分かりにくいということがあり、どちらかと言えば「ハードウェア=目に見えるもの」偏重の日本ではプログラミングは軽視されてきたように思えます。ですが、世界を見渡すと、パソコンの普及と様々な業務の効率化に大きな貢献を果たしたWindowsもMicrosoft Officeも、スマートフォンのブームに火を付けたiPhoneも、新しいコミュニケーションの手段を提供したFacebookやTwitterも、全ては「ソフトウェア=目に見えないもの」によって付加価値が創造されています。

私が最近注目しているキーワードの一つに「TED」というのものがあります。これは「Technology, Entertainment, Design」の頭文字を取ったもので「世の中を変えるようなアイデアは、Technology、Entertainment、Designの3つの領域が一体となって生まれる」という理念の下、新しいアイデアの発表等をプロデュースするイベント団体の名称なのですが、TEDが主催する「Ideas worth spreading」(拡散させる価値のあるアイデアを18分以内で話すプレゼンイベント)では、アマゾン創業者のジェフ・ベゾスや英ヴァージン・グループの総帥リチャード・ブランソン、元アメリカ合衆国大統領ビル・クリントン等、数多くの著名人が講演を行っています。考えてみれば、爆発的なヒット商品-一昔前のウォークマンや、iPhoneなど-は、全てこの「TED」の要素を満たしています。そして大切なポイントは、この「TED」を実現するキーポイントの一つが、プログラミング技術だということです。

iPhoneを世に送り出したスティーブ・ジョブズの言葉に「Appleという企業は、常にテクノロジーとリベラルアーツの接点に立とうとしてきた」というものがありますが、私自身はこれを「単なる機能の提供にとどまらない、人々の感性や文化・生活様式に影響を与え、よりよい方向へ導く手助けをするものを提供したい」という意味と解釈しています。これを実現するためには、機械に人間的な「温かみ」を加え、単に便利なだけでなく、親しみやすさも感じさせるような仕掛けを施す必要があります。実は、人間的な温かみを機械に与えることが出来るのは、当然ですが人間にしか出来ません。そして、その手段がまさに「プログラミング」なのです。人間が「このようなときには、このようなことが出来たら良い」と思うこと。言い換えれば、状況を判断してそれに応じて適切と思われる行動や結果を示すこと。それを「自動的に」行うことが、プログラミングの本質なのです。プログラミングとは「人間の思考様式と行動を自動的に再現することによる価値創造手段」なのですね。「TED」をこれからの製品・サービス開発でますます意識しなければならないとするならば、プログラミングは今後より一層重要な技術になります。

プログラミングはこのように、現在の世の中で最も重要な技術の一つであり、その重要性は今後ますます高くなると私は考えています。一方で、先にも述べたようにプログラミングスキルを持つ人材は慢性的に不足しており、習得にも長い年月を要することから、「習得を始めるなら出来るだけ早めに開始する」方がよいとも私は考えています。私自身も弊社のセミナー等を通じ、プログラミング技術の効率的な習得をより多くの人が可能になるようなサービスの提供を今後も続け、プログラミング技術を持つ人材の育成に貢献していきたいと思っていますが、そもそも「プログラミング技術」の持つ重要性に気づかなければ、習得を開始することは出来ません。ですので、本コラムを読まれた皆さんには是非、まずは「プログラミング技術が世の中を動かしている」という事実、そして「プログラミング技術は、今後ますますその重要性を増していく」ということを知っていただけたらと思っています。

ですが、もしかすると「プログラミングが大切だということは分かったけれど、自分には関係ないのでは?」と思った方もいらっしゃるかもしれませんね。実は、プログラミング技術はIT系の技術者だけでなく、ありとあらゆる職種・職位において役立つ「基礎スキル」になると私は考えています。特に「ビジネスでより大きな成果を出していきたい」と思う方には、MBAよりもずっと実践的に役立つスキルであると私は思っています。この話については、次回にお話しすることにしましょう。次回コラムを、どうぞお楽しみに!