ソフトウエアエンジニアで業務コンサルタントにも携わる岩松洋氏。プログラミング初心者向けの講習会も開催し、後進の指導も行っている。同氏の新刊 『紙とえんぴつで学ぶアルゴリズムとフローチャート』 は、そうした“新米プログラマー”向けにプログラムの設計を指南する1冊だ。焦点を当てているのはアルゴリズムとフローチャート。実はプログラミングに限らず、ビジネス全般でも業務プロセスを“見える化”し、改善や効率化に役立てることができる有用なツールなのだ。それはなぜなのか。岩松氏に自身の体験を交えながら説明してもらった。
プログラミング初心者の多くがぶつかる壁が「それなりに勉強はしたのに自力でプログラムを作れない」という悩みです。実はプログラミングは大きく「どういうプログラムを作るのか」という設計の段階と、それを「コンピューターに実行させるためのコードを書く」というコーディングの2段階に分けられます。ところが初心者は、後半のコーディングのやり方しか勉強していないことがほとんどです。前半の設計の段階が空白で、なおかつそれをトレーニングするための教材もあまり見かけません。
設計が空白のまま、コーディングに必要なプログラミング言語の文法などを学ぶだけになってしまうと、いくら勉強しても自分ではプログラムを作れない状態になりがちです。既に出来上がったプログラムのコードなら読み解けるものの、自分で作るとなると簡単なプログラムでも「うーん」と首をひねったまま、なかなかコーディングができなくなってしまいます。
仕事の一環で編み物を始めました
実は私も最近、同じような経験をしました。
私がコンサルタントとして関わっていることの一つに「作り手の想いを着る人に届けるプロジェクト」というものがあります。ニットデザイナー、ニット工場、副資材(箱や下げ札)メーカー、販売店と、ニット製品の生産から販売までを担うメンバーが集まって、「想いを込めたニットを作り、その想いを着る人にも届けよう」と、これまでにない新しい商品開発をするためのプロジェクトです。
お客様(=着る人)にニットを届けることを考えたとき、工場もデザイナーも販売店も、製品に携わる全ての人が「作り手」として意識を持って、製品を届ける側に立つべきではないか。そういう発想の下、このプロジェクトは始まりました。参加メンバーは全員が作り手としての自覚を持ち、作り手としての役割を分担しています。その上で、ニットという商品に込めたデザイン、素材の意味なども明確にし、単に製品を販売するだけでなく、普通はなかなか着る人に直接伝わりにくいこともしっかり伝えるようにしてお客様に届けたい。そのような趣旨で活動をしています。これまでにTシャツやポロシャツなど、ニットなのに夏場でも涼しく着ることができる製品を開発しました。汗の臭いが気にならない素材で作った夏用のニットを、私も繰り返し着ています。
「ニット」と言われてもよく分からない人もいるかもしれませんね。ニットというのはセーターやマフラーなど「糸を編む」ことでできる商品のことです。現在、ニット製造のほとんどは機械化され、製品は「編み機」で作られています。編み機に糸をセットしてプログラムを入力すると、プログラムした通りのニットを大量に作ることができます。セーターのプログラムを入力したらセーターが、マフラーのプログラムを入力したらマフラーが出来上がります。
編み機のプログラムは、表目や裏目、編み目の飛ばし方などを一つ(一目)ずつ指定するようにして作成するそうです。編み物経験のある方でないと、編み物の専門用語が多くてちょっと戸惑うかもしれませんね。ここで私が言いたいのは編み機のプログラムの話ではありません。このプロジェクトで私たちが取り組んでいる「編み物」の話です。
私以外のメンバーは、立場や役割は違えどニットのプロ。プロジェクトは、そうしたプロの集まりです。デザインのプロ、製造のプロ、副資材のプロ、販売のプロ。ところが、そんなニットのプロ集団であるにもかかわらず、ニットを製造することはできても、メンバーは実のところほとんどニットを編むことができません。つまり、棒編みやかぎ針編みといった、手編みでニットを作ることができる人はほぼいなかったのです。
「ニットの『作り手』なのに編めないって、ニット作りの想いを理解していると言えるのか?」――あるプロジェクトメンバーの言葉をきっかけに、プロジェクトメンバー皆で手編みを始めました。50歳を過ぎて編み物を始めることになるなんて思ってもみませんでしたが、皆で毎月少しずつ自分の手で編んでいく作業を進めています。幸い、プロジェクトには1人だけ、編み物の経験があるデザイナーがいました。そこで、その人に先生役を引き受けてもらい、初歩の初歩から教えてもらいながら編み進めています。
編み物に費やす時間は月30分から1時間だけです。プロジェクトのミーティングを月1回開催しており、その最後を全員で編む時間に割り当てて、みんなで一緒に棒針と格闘しています。短時間のことなのでなかなか上達しませんでしたが、半年も続けるとだんだん編めるようになってきました。最近は思った通りに棒針を動かせるようになってきて、調子がよいときは1時間で3往復ぐらい進みます。こうやって編み進めるうちに15cm×15cmぐらいのニットの生地を編むことができました。
もう「編むことができる」と胸を張ってもいいレベルじゃないでしょうか? かなりハイペースで編めるようになってきましたし、編み目もだいぶ奇麗にそろえられるようになってきました。半年かかりましたが、ゼロから始めてようやくここまで上達しました。これからはもっとペースを上げて編んでいけると思います。
編むことはできてもセーターは作れない…
でも、「セーターを編めるか?」と聞かれるとさっぱり編める気がしません。手袋も丸っきり編み方が分かりません。セーターも手袋も一目ずつの編み目でできているので編めるはずなのですが、どうすればセーターを編み上げることができるのか、全くイメージできないのです。
長くなりましたが、今の私の編み物の実力は「編み方は分かるけれど、セーターを編める気がしない」という状態です。これは「プログラミング言語の勉強をしたけれど、プログラムを作れる気がしない」状態と似ていると思いませんか。
私はセーターを着たことがあるので、着る側としてセーターがどういうものかは分かります。でも自分で作るとなったときに、首周りや袖の部分、裾などをどうやって編むのか? パーツごとに別々に作ることもあるのでしょうけれど、そうしたパーツ同士をどうやってくっつけるのか? そういったことが、さっぱり分かっていません。このあたりが「編み方は分かるけれど、セーターは作れない」理由です。
文法を学ぶだけではプログラムは作れない…
プログラミングの学習を始めたばかりの段階だと、同じような状況になる人がいます。決して少なくない人が「自分でプログラムを作ることができない」という壁に行き当たり、なかなかその壁を乗り越えられずに苦労しているのをよく見かけます。
例えば「じゃんけんのプログラムを作りましょう」と言われたらどうしますか? 何から手を付けますか? 実はプログラミングを始めた頃は「これがじゃんけんのプログラムです」とプログラムを見せられたら、そのプログラムを読み解くことはできるけれど、自分でゼロからプログラムを作るとなると、どうコーディングすればよいか分からない状態になる人が多いのです。じゃんけんを知らない人はいないでしょう。でも、それをプログラミングするためにじゃんけんのプロセスを、「じゃんけんぽんと言う」「手を出す」「手を比べて勝ち負けを決める」という手順に分解したり、分解した手順を1つずつコーディングしてプログラムとしてまとめ上げたりするとなると、そう簡単にはできない人が多いのです。
この記事をご覧の皆さんにも、こういった「コーディングはできるけれど、じゃんけんのプログラムを作れない」という状況になっている方が、いらっしゃるのではないでしょうか? 冒頭から編み物の話をしたのは、編み物を学んでいる自分が今、まさにその状況にいるからです。今この段階で自分ができていないこと。それが、今の壁を突破するために必要なことだと分かります。
私にとってプログラミングと編み物には共通点があります。「こういうものを作りたい」と思ったところから、実際に完成品を作るまでのプロセスが似ているのです。
プログラミングでいうと、「こんなプログラムを作りたい」というひらめきがあったとき、最初にすることは頭の中に浮かんだことの全体像を把握することです。次に、分解して必要な部品を見つけることです。部品を見つけたら、その部品をコーディングします。コーディングが終わったら、部品をくっつけて、テストをして動いたら完成です。
最初は上手に部品を見つけられなかったり、作った部品同士がうまくくっつかなかったりすると思います。ですが、練習を繰り返せば作れるようになります。簡単なプログラムから作る練習を繰り返すとよいでしょう。
全体を把握して、部品へと分解し、再構成する。これがまさしく設計です。プログラミングの世界ではこれを、「アルゴリズムを考え、フローチャートに書き出すという作業」とも言います。自分の頭でぼやっとしたイメージでしかないプログラムを、少しずつ実際のコードに近づけていく作業です。どのようなデータを扱い、それをどのように処理していくのか。それを具体的に書き出し、プログラムで「何をするのか」を整理します。これがアルゴリズムになります。ぼやっとしたイメージでしかなかったプログラムですが、どのような処理をするのかを“見える化”できたことで、具体的なプログラムの姿になってきました。
そうやって整理した処理や手順を、どのような順番で、どのような条件に従って進めていくのか。これを分かりやすく表現するのがフローチャートです。適切な手順で詳細なフローチャートとして見える化できれば、もうあとは迷わずコーディングするだけになっていることでしょう。「どうやってプログラムを作ればよいか分からない」という悩みは、設計スキルで解消できるのです。
そのためのスキルを身に付けるのは簡単ではないかもしれません。繰り返しイメージからコードにつなげる設計のプロセスを繰り返し練習することで少しずつプログラミングできるようになっていきます。具体的な方法は、書籍『紙とえんぴつで学ぶアルゴリズムとフローチャート』で紹介しました。プログラミングに悩んでいる方はもちろん、プログラミングを勉強し始めたところという人にもお薦めです。本書を活用して、プログラミングにおける設計、つまりアルゴリズムとフローチャートの作り方を身に付けていただけたらと思います。
ここまで、分かっていてもうまく落とし込めないこと、分解や再構成をできないことの例として、編み物とプログラミングについて見てきました。そうした悩みを解決する有力なツールがアルゴリズムとフローチャートです。
アルゴリズムとフローチャートはビジネスに応用が利く
実は、このアルゴリズムとフローチャート、決してプログラミングの分野だけのものではありません。皆さんのビジネスの現場、日常業務でもかなり有用なものです。毎日の業務について、フローを見直してムダを省いたり、効率の悪さを解消してスピードアップを図ったりといった必要に迫られている人も多いのではないでしょうか。その際に必要な、業務の全体像の把握や細かい業務への分解、そして再構成――それに役立つのがアルゴリズムとフローチャートです。
毎日やっている業務だから、業務そのものは問題なく遂行できていることでしょう。でも、その業務に携わるスタッフが増えた、あるいは自分が別の部署に異動することになったといった理由で、手慣れた業務を誰かに教えるとき、どうもうまく相手に伝えられなくて困ったという経験はありませんか? できる人が自分でやる場合にはいちいち考えなくとも自然に手や頭が動くように業務を進められるはずです。でも、そういう人ほどその業務を教えるのが苦手な場合が多いのです。自然とできていることをどう言語化するか。それには全体を把握して、部品へと分解し、再構成するという手法が役立ちます。
このとき、アルゴリズムとフローチャートの考え方を日常業務に応用することができます。一見するとプログラミング専用の考え方のように思えてしまうかもしれません。でも、目的がプログラムを作ることになっているだけで、やっていることは業務全体を把握し、細かな業務に分解し、業務フローという形に再構成することです。業務フローの形に整理することで業務全体が見えやすくなり、細かく分解した業務一つ一つを把握しやすくなります。いわゆる“見える化”ですね。これができれば、その業務を誰かに説明するのがかなり楽になります。マニュアル化もできそうです。この過程で、改善すべき点まで見えてくるかもしれません。
アルゴリズムとフローチャートの考え方は、ビジネスの現場でもとても有用です。プログラミングに興味がない方にも身に付けていただけたら…と思っています。興味のある方、ぜひ紙とえんぴつでアルゴリズムとフローチャートのトレーニングを始めてみませんか?
文/岩松 洋
入門書や入門講座でプログラミングを勉強したのに、なぜか自分でプログラムを作るとなるとさっぱりできない…。それは、プログラムの“設計”スキルが身に付いていないからです。最短距離でビギナーが設計力を身に付ける方法を本書が指南します!
岩松 洋著、日経BP、2200円(税込)