itLinkedInPocketCopyこんにちは、てぃってぃ(嫁)の夫です。2020年度より、プログラミングの教育が必修化されるそうですね。現役エンジニアとしては喜ばしい限りだと思う反面、実際の仕事でものづくりをするために必要な考え方を、学校の先生たちが教えられるのだろうか?という疑問があります。一回IT企業で働いたことあるならまだしも、たぶんない方達ですよね。本記事では、実際にIT企業でプログラミングを仕事としている筆者が、企業の開発現場で必要になる「プログラミング」について説明したいと思います。・そもそもプログラミングって何??・会社の開発現場ではどのような力が必要なの??・教育内容は、現場(会社)で役に立つの??といった観点について、個人的見解を書き綴ってみたいと思います。本記事では、教育の内容については、文科省の手引きを参考にしていますが、実際に私は教育現場にいるわけではないので、すみませんが詳しくは知りませんし書けません。本記事では「プログラミングの授業で良い成績を残す方法」等を説明しているページではありません。身近に溢れかえっているプログラム最近かなり有名になってきた「プログラミング」って、いったい何のことでしょうか。私達の身の回りにある、ありとあらゆる電子機器、例えば今あなたが使っているスマートフォン、パソコン等もそうですが、これらを制御しているのが「プログラム」であり、「プログラミング」とは、それらを開発する手段のことだと思ってください。上の写真のような緑色の基盤の上に、プログラムを搭載したメモリや、プログラムを解析するCPU、CPUが制御する各入出力装置があり、これらが電子機器の中に入っています。電子機器に搭載されているCPUは、メモリに書き込まれているプログラムを読み取り、プログラムの通りに機械を制御します。エアコンは、リモコンで26度と設定されると、出力を26度になるように制御します。これは、リモコンには「設定された温度を無線信号に変えてエアコンに送信する機能」をプログラミングしており、本体には「無線信号で受け取った情報をもとに設定温度を受信し、その温度になるように制御する」というプログラミングがされているからです。プログラムが間違えて「設定温度×10倍」を出力するようになっていたら、26度の設定で「260度」を出力しようとします(恐ろしいですね)。そのような意図していない動きは「バグ」「不具合」と呼ばれます。人命に関わるようなプログラムほど、バグが無いようにしっかりと製品化テストがされていて、現場で間違った動きをしないようにできています。1-2.プログラミングってどうやってやるの?では、実際「プログラミングをする」とはどういうことなのでしょうか。簡単に言うと、「プログラミング」には以下の工程があります。いう文言が出てくるため、考える力、おそらく1(プログラミング設計)についての教育が重点的に行われるのだろうと思います。ちなみにIT業界では、123の全工程を仕事にする人を「SE(システムエンジニア)」と呼び、23だけする人を「PG(プログラマー)」と呼びます。上流工程の、「どのような物を作るか考える」人が、皆さんご存じの家電メーカ(Panasonic、SHARP、等々)だったりします。1「設計」とは、とにかく「どうやってプログラムを組むのか」を考える、要は論理を考える工程になります。実現方法をまとめて、設計図を書きだすまでが仕事です。ちなみに、昔は紙で手描きで設計図作っていたみたいですが、最近ではMicrosoftOfficeのExcelやWordといったPCのソフトにて設計書を作成することが多いです。2「実装」の作業は、1で考えた設計図を、プログラム開発ソフトを使ってプログラミングを行う工程になります。こちらはほぼパソコンで作業になりますね。「コンパイラ」と呼ばれるアプリケーションを使用して、テキストでプログラミング言語にて作成した「ソースコード」を、プログラムモジュールと呼ばれる形式に変換します。3「試験」の作業は、12の工程を経て作った物を、実際に動かして試験をする工程になります。「テスト」とか「評価」とか「検査」とも呼ばれますね。ここで抑えきれなかった不具合は、そのまま製品として世に出てしまい、製品の自主回収や損害補償などを行わなければならなくなります。1-3.「プログラミング的思考」とは?では、「プログラミング的思考」とは何なのでしょうか。こちらは、文科省の資料にもたびたび出てきますが、「論理的に物事を考える力」と考えてよさそうです。・・・で、論理的ってなんだよ、って思いますよね。簡単に言ってしまうと、「論理的」とは、「合理的で、筋が通っている」と考えてもらっていいです。試しに、次の例題でイメージをつかんでみて下さい。例題あなたは「ベビーカー」が欲しいです。ベビーカーが売っているお店は、近所に5店あります。ムダが無く、ベビーカーを買うにはどうしたらいいでしょう?回答例は大きくは2パターンあると思います。確実な方法ではありますが、かなりムダがありますよね。5店ならまだ何とかなるけど、これがもっと珍しい商品だったりしたら、もうやってられないです。(ちなみにプログラミングの現場では、こういう手法を「ゴリラ」とか読んだりしますw)点数をつけるなら、0点となります。「電話で在庫を確認してから行く」こちらにすると、回答1に対して「売っていない店に行く時間・労力」が省けるので、合理的ですよね。このようなことを「考える力」を「プログラミング的思考」と考えていいと思います。1-4.プログラミングは難しい?ここまで聞いてきても、プログラミングのイメージが沸かない人がほとんどだと思います。「1-3」で説明した、設計する(考える)難しさと、実装する(作る)難しさを別々に考えないといけません。設計する(考える)とは、どのようにプログラムを作成するのか考える作業になります。料理で言えば、レシピを考えることになります。例えるならば『美味しいサンドイッチを作るにはどうすればいいか?を考える』、これが設計です。それには、サンドイッチ生地の選定から、材料の選定(卵を入れるなら相性のいいケチャップ、マスタードを入れる、など)、料理工程の段取り(卵を焼くのは何分、など)となります。実装する(作る)とは、設計した内容を実現、作り上げる作業になります。料理で言うならば、実際に手足を動かして卵を時間通りに焼いたり、マスタードを適量入れたりする力ですね。義務教育で求められるのは「設計する(考える)」力でしょうから、国語や数学といった知識的な力よりは、なぞなぞを解いたり、遊びを企画・段取りしたり、チームリーダーとして皆を動かしたりすることのできる、地頭の良さや要領の良さが求められると思います。2.IT企業について2-1.SE、PGの仕事では、IT企業の開発現場とは、どのような仕事をするのでしょうか。ついて、どれか1つを専業とする会社もあれば、全てを扱っている会社もあります。設計~試験までを行うエンジニアを「SE」(システムエンジニア)と呼び、実装を中心に行うエンジニアを「PG」(プログラマ)と呼ぶことが多いです。IT企業の需要ですが、皆さんが今使われているスマートフォンや家電製品などが日に日に進化していっているのは、それらを設計している家電メーカーと、それらを実現するSE・PGの頑張りがあるからこそなのです。これからも電子機器はますます進化していくと思われるので、SE・PGの需要もドンドン高まると思います。昨日の技術が今日では通用しないぐらい、毎日新しい技術が生まれるような忙しい業界でもあります。常に新しい技術・環境に適応できるように、「プログラミング」とはただの「実現手段」であることを理解しておかねければなりません。いう風に、教えておいてほしいな...。今覚えた実装技術は、子どもたちが社会に出る頃にはきっと古いものになっているのです。技術より設計(考え方)を教育するというのは、いいことだと思います。ちなみに・・・お給料やその他の待遇についてですが、1-2に記載した通り、大企業のシステム開発を請け負うことも多いため、必然的にたくさんお金が入ることは多いです。業界平均のお給料は良い方だと言われています。詳しくはこちらの記事に(結構リアルに)色々と書きましたので、良かったら見てみて下さい。【現役SEが教える】システムエンジニア(プログラマー)の給料は?出会い・結婚は?こんばんは、てぃってぃ(嫁)の夫です。本記事で言いたかったこととなる、IT企業に求められる人材、およびプログラミング教育とのギャップについてです。会社にもよりますが、残念ながら、「プログラミング座学で高得点を出せる人材」が欲しいわけではないので、学校のプログラミング教育が開発現場で使えるかと言われるとかなり微妙です。ここは掘り下げて、理由を2つほど説明します。設計だけ、実装だけ出来ても意味がない実際にものづくりの仕事をしていると分かるのですが、結局、最低限のプログラミング実装技術がないと、設計が出来ないです。プログラミングの設計って、単純なるパズルじゃないんです。「特殊条件つきパズル」です。この特殊条件というものが厄介で、作成する物固有の前提知識やルールといったものが山ほどあるのです。(無線の実装であれば無線技術だとか、これらを踏まえた上で、「その制約の中で、どう物を作るのか」が重要であって、最初っから条件無しの設計なんてほとんどありえないんですよね。要は教育課程のプログラミング教育は、実体にあっていないただのお遊びになっていないか?という疑問です。例えるならば、資格勉強と、その資格を生かせる実務みたいなものです。資格とったけど仕事では何の役にもたたんわ、みたいなやつ。コミュニケーション能力もかなり重要いざ開発現場で仕事をしていると分かるのですが、「設計」する(考える)力、「実装」する(つくる)力は、やる気があれば、誰でも社会に出てからでも、十分に身につけられます。それよりも圧倒的に大事なのは、以下のような力です。チームをまとめる力(リーダー力)社外、社内と仲良くなる力(コミュニケーション能力)厳しいスケジュールでもこなす力(体力、根性)最近の(仕事面ができない)新入社員さんは、「実装する力」が最も重要だと思っている人が多いです。プログラミング=PCと向き合って1人で黙々とおこなう仕事だと思っているのでしょうが、1人で完遂させられる仕事などありません。いうIT業界の開発現場のイメージを、おそらくプログラミングを教える教育現場の先生方も知らないでしょう。IT企業を志望する学生も勘違いしてしまわないかと、言うところが気になりますね。プログラミングの座学でいい点とれました!という人より、「生徒会長をやってました!」という人や、「クラブで優勝しました!」といった人の方が、確実に活躍できるのです。(この業界に限らないことだと思いますけどね)3.まとめIT企業の開発現場の意見をリアルに書いてみました。今プログラミングの座学を頑張っておられる方、勉強も大事だけど、残念ながらそこで覚えた知識がIT企業への就職や開発現場でそのまま役に立つかというと、結局のところ分からないので、他にも人間面での武器をたくさん養っておいてほしいなと思います。他にも聞きたいことがあれば何でも答えますので、お気軽にお聞きください。本記事が皆様のお役に立てばと願うばかりです。ご購読、ありがとうございました。「Unity」で開発環境を構築するこんばんは、てぃってぃ(嫁)の夫です。「スマホでローグライク開発」第2回です。...ホストOS(Windows10)からゲストOS(Windows2000)への共有フォルダアクセス設定Windows10→Windows2000への共有フォルダアクセスの設定手順。...若くして出世したはいいけど胃炎になった話こんにちは、てぃってぃ(嫁)の夫です。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。てぃってぃコメントありがとうございます。ご指摘通り、上書きしてしまいますね。改訂履歴に記載し、修正しました。てぃってぃコメントありがとうございます。書いてる事に矛盾がありますね。てぃってぃコメントありがとうございます。すみません、ソースがもう今のPCにないのでパっとは見せられないです。