最近、どこの書店でも、「プログラミングはビジネスマンとして必須のスキルである」という内容の書籍がずらりとならんでいます。
「プログラミング的思考を身につけることは、どの職業のビジネスマンにとっても必須である」とも言い切っています。
なぜなのでしょうか?
書籍で言うところの「プログラミング的思考」とはいったいどのような思考なのでしょうか?
この流れに乗って、プログラミングを勉強しようと思っている方にとっては、今回の記事はあまり役にたたないと思いますので、スルーしていただいて構いません。
しかし、本気でプログラマーを目指している大学生や専門学生などは、しっかり覚えていただきたいことがありますので、今回の記事は有益なものとなると思います。
最近の流れに乗るな!プログラミング的思考のまやかしを見抜け!
はっきり言っておきますが、「プログラミングは必須のスキルである」と謳っている数々の書籍やネット記事、またはプログラミング講座などは、みんなまやかしです。
もう少し、柔らかく言えば、「トラップ」です。
罠を仕掛けられて、それに乗っかってしまっているだけです。
恐らく、2016年ころから、この手の書籍や講座などが活発になってきたと思います。
理由は、単純です。
政府が、2016年に、2020年から小学校でのプログラミングの義務化を発表したからです。
正式には決定はされていないかもしれませんが、間違いなく、義務化されるでしょう。
この流れを受け、ビジネスチャンスととらえ、どこもかしこも、あなたには必要なんですよと喚起するだけで、あとは勝手に売れていくという戦略です。
企業側の儲けの仕掛けに乗っかってしまっているだけです。
プログラミングを学ぶとはどういうことなのか?やプログラミングをスクールで学ぶ前に考えてほしいたったひとつのことでも書いていますが、プログラミングがビジネスマンに必須という根拠が非常に曖昧で、誰もが、同じように、「論理的思考」を取り上げています。
私の頭が悪いだけなのかもしれませんが、私が納得する、必須の理由がまだ見つけられていません。私が納得する理由をどなたかきちんと教えていただきたいものです。
論理的思考=プログラミング=ビジネスマンに必須のスキルなのでしょうか?
これを主張しているのなら、私は、到底納得できないのです。
論理的思考=ビジネスマンに必須のスキル ?
これなら、まだ理解できます。
きちんと、物事の筋道をたてて考えるというのは、仕事を効率的に行う上でも、コミュニケーション能力を高めるためにも重要だと考えるからです。
ですが、それに「プログラミング」がイコールとして加わるのが「???」なのです。
いったい、プログラミングを必須と主張している方々は、コンピュータのしくみをどれだけ理解しているのでしょうか?
箱であるコンピュータは、それだけでは何もすることはありません。
ですが、その箱に、こうしなさい、ああしなさいと順序立てて、命令を与えていくことで、何かをしてくれるようになります。
恐らく、上記の「こうしなさい、ああしなさい」という部分を論理的思考が身につくと主張していると思いますが、この部分は、プログラミングではありません。
じゃあ、何かといえば、それは、「アルゴリズム」と呼ばれるものです。
このアルゴリズムの部分を含めて、プログラミングと呼んでいるのだと想像します。
ですから、プログラミングは、論理的思考が身につくから、ビジネスマンには必須だという論法になるのかと思います。
ここに、まやかし、「トラップ」があります。
実際に、プログラムを勉強すると、どうなるでしょうか?
「こうしよう、ああしよう」ということは、とりあえずやっておいて、実際には、プログラム言語の書き方が中心になるのではないでしょうか?どのように書けばよいかということに重点が置かれ、肝心のこうしよう、ああしようという部分は、後回しになりがちです。
つまり、関数の宣言はどうで、変数の宣言はどうで、IF文はどうで、ループはどうでとなり、しまいには、早く結果が見たいから、とりあえず簡単なものを表示させてみるとか、キャラクターの向きを変えてみるとか、そういう結果だけを勉強または、授業になっているのではないでしょうか?
楽しんで学びましょうという、スローガンのもとに、楽しく、まずは、動かしてみる。触ってみるということが中心になっていませんか?
そして、簡単なゲームや教科書に載っているプログラムをちょっと改造しただけで、ああ、動きが変わった、すげー、というようなことで、プログラミングを少しできるようになったから、まあ、いいか。
と、このような流れになっていませんか?
これは、独学でも、スクールでも、ネット講座でも、書籍でも同様の結果になっていませんか?
このような結末で、果たして、論理的思考が身に付きますか?
ステータスとして、あるいは、趣味としてプログラミングをやるというのであれば、なんら問題はありません。
しかし、職業としてプログラマーを目指す人は、どうか、この必須のスキルというまやかしには乗っからず、まやかしを見抜いてください。本来のプログラミング的思考を学んでください。
本来のプログラミング的思考とは?
では、まやかしではなく、本来のプログラミング的思考とはどのようなものでしょうか?
先にも述べましたが、コンピュータを動かすために必要なものは、動かすための命令群です。
この命令群のことをプログラム言語とかプログラミング言語といいます。
つまり、とても単純に、コンピューターを動かすために命令を与えることが「プログラミング」というものなのです。
ここに、ものの手順は介在していないはずです。
ものの手順は、アルゴリズムというもので、組み立てます。その組み立てた手順に沿って、プログラム言語で、命令を与えるとコンピューターが与えられた内容に沿って、動くようになります。
このアルゴリズムを学ぶことは論理的思考を養います。これは間違いありません。
しかし、ここに、プログラム言語はまったく関係ありません。むしろ考えないほうがよいのです。邪魔なだけです。
例えば、「朝食を食べる」というアルゴリズムを考えてみてください。
ここに、日本語だろうが、英語だろうが、フランス語だろうが、言語によって、変わりますか?
国によって、はしやスプーン、ナイフとか手づかみとか手段は異なることはあるかもしれませんが、朝食を食べるという手順は、共通しているはずです。
「食べ物を口に運ぶ」ということは、言語によらず、共通している手順だと思いませんか?
日本語だと、切腹の国だから、「食べ物を直接胃袋に腹を切り裂いて入れる」なんてことはしません。必ず、口に運ぶはずです。
その手順を、日本語だとこうです、英語だとこうですと、言語別に話をしているだけなのです。
ですから、論理的思考は、プログラミングでは身につきません。身に付きようがないのが分かると思います。
そして、さらに、本来のプログラミングとは、命令をコンピューターに与えて、コンピューターがどのように動くのかを考えながら命令を与えるということなのです。つまり、コンピューターというハードウェアのしくみを考慮しながら、最適な命令を与えるということです。
恐らく、想像もしていなかったかもしれませんが、コンピューターがどう動こうが人間には分からないというのが常識です。
ですが、そもそも、コンピューターを発明したのも人間です。コンピューターがどう動くかをきちんと考えて作り出されたものです。それを理解していたのが、そもそものプログラマーたちです。
コンピューターは、0と1だけを理解するものであると、何かでは知っているかと思いますが、この0と1だけを理解する意味が分かりますか?
これは、具体的に0という数字と1という数字を認識することではありません。
では、なんなのか?
それは、電流が流れているか流れていないかを認識するに過ぎないのです。
電気が流れているのかいないのかだけです。
流れている状態を1、流れていない状態を0として認識させているだけなのです。
これが、コンピューターの一番末端のしくみです。
この0と1を表す単位として、「ビット」という単位が使われます。
1ビットでは、0と1という2種類の数字を表すことができます。
逆に言うと、1ビットは、2種類しか認識できません。ですから、コンピューターは、2進数を扱うのです。
当然、2種類の数字では、なにもできないために、情報量をもっと増やすべく、改良され、現在に至るわけです。
みなさんが使っているパソコンは最近では32ビット、64ビットのものが主流だと思いますが、つまり、情報量は、2の32乗、2の64乗まで増えているということです。
この情報量が増えるということは、命令の種類も増えるということを指します。また、1回の命令で扱える情報量が増えるということにもなります。
ですので、32ビットよりも64ビットマシンのほうが高速に処理ができるということは、こういう理由からなのです。
例えば、1回に100文字読めるのと、200文字読めるのとでは、後者のほうが断然早く読み終わることが分かると思います。要は、そういうことです。
このように、与えるコンピューターの性能に応じて、どこまで何ができるのかを把握した上で、命令を与えていたのです。できない場合、どうすれば、実現できるのかを考えて命令を与えていたのです。ここでの考え方は、アルゴリズムの手順とは別物です。
コンピューターというハードウェアのしくみを理解しながら、最適な命令を与えていたということです。
これが、本来のプログラミング的思考なのです。
なにか困ったことなどを実現させるために考える手順を「アルゴリズム」といいます。
この「アルゴリズム」に沿って、プログラミング言語で命令をコンピューターに与えていきます。これが「プログラミング」です。
この際、与える命令でコンピューターがどう動くかハードウェアのしくみ(CPUのスペックやメモリ量など)を考えながら、命令を与えていくのが本来のプログラミング的思考ということなのです。
ですが、現在は、このようにハードウェアのしくみを理解する必要すらありません。それはプログラム言語が、ハードウェアとのやりとりを全て隠蔽し、プログラマーには意識させないようになっているからなのです。
ですので、プログラマーを目指している方は、ハードウェアのしくみを意識できるようなC言語やアセンブラのようなプログラム言語を学ぶべきなのです。それ以外の言語は学ぶ必要なないと言えます。
なぜなら、基準となる言語を習得できれば、あとは、覚えなくても、応用できるようになるからです。
ぜひ、まやかしにかかることなく、本質を理解してください。
カテゴリ:プログラミング