どうも。
伊藤です。
一般教養は社会活動における土台や基礎となる教養です。
職業的、専門的な教養ではなく社会人として必要とされる「人間として持つべき基本的な教養」。
では、今学ぶべきこととは何でしょうか?
今学ぶべきこととは?
一般教養として直ぐに思いつく内容は数学、国語、社会、英語、理科など学生時代に学んだ科目ではないでしょうか?
当然ながら義務教育において受講する科目は必須で学ぶべきです。ただ、今回はこれまでに学習した科目ではなく2020年から小学校で必修化されたプログラミングを一般教養として学ぶべき、という持論を纏めました。
あくまでも持論ではありますが、国が小学校の必修科目にした点を考慮すると、あながち的外れではないと自負しております。後述しますが、国が必修科目にプログラミングを追加したのはパソコンスキルの向上やインターネットの知識を教育するためではなく、またIT企業に就職しやすくするためでもありません。プログラミングは今や職業的、専門的なスキルではなく、一般教養に移り変わったのです。
何故プログラミングを学ぶべきなのか?
プログラミングを通して学べるスキルが一過性のものではなく、10年、20年と生き続けるスキルだからです。そして、業界や職種を問わず、さまざまな場所で普遍的に役立つスキルが身に付くからです。
そのため、プログラマーやクリエイターになりたい人だけが学ぶのではなく、広く誰でも学ぶべき教養だと考えています。
人間として持つべき基本的な教養、、、とまで書いてしまうと責任重大ですが、何故今学ぶべきか?を得られるスキル毎に理由を纏めてみました。学生の方、就活中の方、社会人一年目の方の皆さん(もちろんベテランの方も)に、後述する普遍的なスキルを身に付けてもらいたい、という思いで書きました。プログラミングに全く興味がない方でもこの記事を見つけてしまった場合(笑)、せっかくなのでご一読ください。
プログラミングとは?
プログラミングは「コンピュータへの指示を人間が読める文字で記述すること」です。
身の回りにある様々なデジタル機器は、このプログラムに則り動作しています。記述していない動作はしれくれないですし、記述内容に不備があれば誤動作します。人間のように柔軟な動きはしてくれず、記述した通りに動くため、1文字でもミスタイプがあると動作しません。
1文字のミスタイプも駄目なの?とやる気を削いでしまったかもしれませんが、、、ミスタイプなどは簡単に見つけられる手段が多数あるため気にしないでください。それよりも指示を出すことでコンピューターが思い通りに動いてくれる喜びや驚きの方が遥かに大きいと思いますし、後述する様々なスキルを身に付けられるので一般教養として是非トライしてみてください。
1. テクノロジーの理解と肯定
プログラミングを学ぶ事で得られるスキルの1つ目は「テクノロジーの理解と肯定」です。
プログラミングと聞くと、未だに「オタクがやる事、一部の天才がやる事、難しそう、地味」など否定的な意見を聞く事があります。個人的な偏見もありますが、プログラミングに否定的な人はテクノロジーに疎い方が多いように思います。
今の時代、生活や社会の中でテクノロジーは必須であり、ありとあらゆる場所で使われています。そんな世の中でテクノロジーに疎いという事は様々な面で圧倒的なビハインドとなります。事務作業一つとっても作業時間に数倍の開きが生まれている可能性もあります。
最近よく耳にするDX(デジタルトランスフォーメーション)の変革やイノベーションに乗り遅れないためにも、テクノロジーの理解と肯定は今や必須スキルです。
プログラミングを学んでも一般教養同様に私生活で利用するケースは少ないです。
ただ、世の中のありとあらゆるものがプログラミングで成り立っている事が分かり、またその結果、我々が便利な生活を送れている事に気づかされます。このプログラミングを自分の手を動かし学ぶ事に価値があります。
簡単ではないため、ほとんどの人が苦労をすると思います。ただ、人間は一度でも体験をすると肯定的になる習慣があるため、テクノロジーを肯定し、またエンジニアなどテクノロジーを支える人達をリスペクトできるようになります。その結果、テクノロジーに強い人材になれます。
2. 論理的思考
プログラミングを学ぶ事で得られるスキルの2つ目は「論理的思考」です。
前述したように、コンピューターに感情は伝わらず、記述したプログラムの通りにしか動いてくれません。そのため、動きの順番(筋道)も厳密に指示が必要です。また、矛盾も許されず、記述内容が理にかなっている必要があります。様々な機能との因果関係についても明確にする必要があります。つまり、論理的な記述(指示)が必要です。
わたしはプログラミング以外の仕事(営業、コンサル、プレゼン、交渉、マネージメントなど全般)においては「6:4(または7:3)」の比率で「論理と感情」を使うように心掛けています。論理あっての感情というスタイルのため論理ありきですが、感情(意見や思考)も必ず織り交ぜます(勢いや感情だけで動く事が必要なケースもあり、プライベートでは理屈抜きに感情だけで動く事もあります。例えば愛や友情とかですかね(笑))。
ただ、プログラミングにおいて感情は全く使えません。それだけ左脳(論理的思考)を使い続ける必要があり、その結果、論理的思考が身に付きます。
また、コンピューターには必ず不具合があります。不具合のないコンピューターは世の中にない、と言っても過言ではないです。それはさておき、この不具合(問題)を解決するためにも論理的思考をフル活用します。不具合が発生した時、網羅的にすべての記述(プログラム)をチェックするのは不毛であり、これでは非効率でどれだけ時間があっても足りません。
事実(不具合) >>> 解釈(論理的推論) >>> アクション(検証)
事実は変えられませんが、解釈とアクションは無数にあります。これ(解釈とアクション)をできる限り要点を絞り高速に複数パターンを回す事が不具合対応のコツです。
そしてこの解釈の際に論理的推論で活用するのが帰納法と演繹法です。事実を分析せず、当てずっぽうにアクションしても解決はできません。何故なら相手はコンピューターであり、論理的にしか動かないからです。プログラミングはこのサイクル(事実 > 解釈 > アクション)の繰り返しです。自ずと論理的思考が身に付くのが分かっていただけると思います。
3. 仮説思考
プログラミングを学ぶ事で得られるスキルの3つ目は「仮説思考」です。
事実からの推論手法として帰納法と演繹法を挙げましたが、この手法に並ぶ推論として「アブダクション(仮説推論)」があります。昨今のマーケティングやデザインなどのように事実からの論理的思考(解釈)だけでは不適切なアクションになるケースもあり、デザイン思考やコンサルティング業務でよく利用される推論手法です。
事実(不具合)から論理的思考だけで解釈できない?プログラムであれば全て論理的推論で解決できるのでは?と考えがちですが、それはあくまでもコンピューターに問題(不具合)が発生した時など、コンピューターと対話するケースです。「プログラミング = モノづくり」です。誰かのために何かのためにモノを作ります。何故?どのように作ればよいか?どうすれば売れるのか?どうすれば喜ばれるのか?どうすればより多くの人に使ってもらえるのか?ここで必要となるスキルが仮説思考です。
仮説 >>> 検証 >>> フィードバック
「プログラミング = モノづくり」では、このサイクル(仮説と検証とフィードバック)を高速に回すことが良いモノづくりのポイントになります。目的をしっかり掲げ、このサイクルを何度も繰り返し行う事で自ずと仮説思考が身に付きます。
4. 抽象化・具体化・構造化
プログラミングを学ぶ事で得られるスキルの4つ目は「抽象化・具体化・構造化」です。
プログラミングをしてモノづくりをすると、いかに普段の会話や資料が曖昧なものかや整理されていないかを痛感します。会話や資料においては多少の不備があっても、不要なものがあっても、不明瞭な内容であっても大きな問題は起きにくいです。何故なら人間がよしなにリアルタイムに解釈するからです(人によって理解した内容が異なるという問題はあります)。ただ、プログラムはそうもいきません。不備があれば処理は止まり、具体的(明確)でないと予期せぬ結果となり、不要なものがあると処理は遅くなります。
この不備は論理的思考で解決するとして、不要なものは情報の整理や添削、つまり抽象化が必要になります。そしてコンピューターが分かるように具体化する必要があります。つまり、プログラミングにおいて、抽象化と具体化は否が応でも自然と必要となるスキルになります。
最後に「構造化」です。
綺麗なプログラムはコンピューターに対して同じ記述(指示)は書きません。人間の頭も同じですが、全てが組み合わせで構造的に構成されています。人間の動きに喩えると「走る」は “右足と左足を交互に前に出す” × “最大限に” であり、「歩く」は “右足と左足を交互に出す” × “最小限に” です。”右足と左足を交互に前に出す” は共通の動作として使い回しており、2つの組み合わせで構成されています。また動詞と副詞の組み合わせになっており、文章構成の意味が明確です。
例えばこの「走る」を “最大限に右足と左足を交互に前に出す” と頭にインプットしていた場合、1つ1つの行動毎に指示を覚える必要があるため覚える事が多くなります、そして文章構成の意味や文中語句の関連性が不明瞭なため使い回しもできません。結果的に頭は覚える事でパンパンになり、疲れ、汎用性もなくパフォーマンスは落ちてしまいます。コンピューターも同様であり、人間の頭より応用が効きにくいため、より無駄なく分解(抽象化)し、意味や関連性を明確にした上で構造的に構成する必要があります。構造化されたプログラムは第三者が見やすい、運用性が高い、汎用性が高い、など様々な利点が生まれますので重要度も高いです。
纏めるとプログラミングは「抽象化した頭の中のイメージを具体化し、更に創造(構造化)する」事です。結果的にこのスキルも自然と身に付きます。また決してプログラムはロジカルシンキングだけで成り立っておらず、個人の思考や思想が反映されるとてもクリエイティブなことという事が分かっていただけたと思います。
※余談
構造化の喩えで「右足と左足を交互に前に出す」を思いついた時、同時に「右ひじ左ひじ交互に見て」を連想してしまいました。そして検索してしまいました・・・良ければ箸休めににご覧ください(笑)
5. 探求心
プログラミングを学ぶ事で得られるスキルの5つ目は「探求心」です。
わたし個人として、プログラミングを学んだ事で一番身に付いたと感じているスキルであり、今では習慣になっています。
子供の頃からモノづくりが好きだったため、学生の頃には建築や飲食のモノづくりに携わるバイトをしていました。施工や調理などモノ(マンション、食事)が出来上がるまでの工程を色々と学びました。ただ、この当時に感じなかった事は「何故こうするのか?何故こうなるのか?」といった疑問です。今考えるとアルバイトという事もあり深いところまで経験させてもらえなかったのが原因かも知れませんが、なんとなく理由が分かった(つもりになっていた)からだと思います。物理的なモノがあり、一般教養で学んだり私生活で触れる事が多かったからか、疑問に思わず本質を理解しないまま受け入れてしまっていました。
ただ、プログラミングは違いました。学生の頃に一般教養として何も学んでいなかったため、全ての事象が謎だらけでした。無線通信って空気中に何か飛んでるの?電話の声はなぜ?どのように聞こえているの?糸電話は分かる気が、、、2進数?インターネットはどうやって世界中にデータを届けてるの?なぜこの命令(文字)で動くの?etc…
全てプログラムで実現しているテクノロジーです。毎日毎日分からない事ばかりで???の連続でした。プログラミングでコンピューターが動く事が不思議で、物理的なモノがないという点が「なぜ?」の強いきっかけになったと感じています。そしてこの「なぜ?」がきっかけで探求する癖が習慣になりました。
今では人、地理、歴史、不動産、食事、化学、宇宙、、、、過去に探求できなかった物理的なものでも何でも「なぜ?どうして?」の毎日です。このような探求心は本質を理解する上で必須のスキルであり、顧客(仕事)において重要な事は事実ではなく本質だからこそ、身に付けるべきスキルだと考えています。当然ながら、業界や職種を問わず、さまざまな場所で普遍的に役立つスキルです。
※プログラミングにおいても探求せずに学ぶ(覚える)こと自体は可能です。ただ表面的な理解だけの知識やスキルは長く生き続けませんし、他で応用できません。優秀なプログラマーは記述(書き方)を覚えるのではなく仕組みや本質を理解している人が多いです。
さいごに
プログラミングを学ぶことで得られるスキルを5つ書かせていただきましたが、実はそれ以外にももっとあります。長くなるため今回は省略しますが、例えば「調べる力、語学力(英語)、情報整理力」などです。これも職業的、専門的なスキルではなく業界や職種を問わず、さまざまな場所で普遍的に役立つスキルです。
これだけ得られるスキルが多いのですから、やらないという選択肢はないと思います(これからの小学生は必修です)。現代ではプログラミングを学んでいなくても特に驚かれる事はないですが、10年以内にはプログラミングを学んだ事がないと伝えたら「えー!?まじで!?」と言われる社会になると思っています。友人が「算数は勉強した事ないんだよね・・・」と言ってたらビックリしますよね?
学び方は色々とありますが、最近ではオンラインで学習できるサービス(progate、テックキャンプ など)も多数あるので、手軽に始める事も可能です。
ではでは。