プログラミング的思考とテクノロジーの感性

プログラミング教育とは、子供たちに、コンピュータに意図した処理を行うよう指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育むことであり、コーディングを覚えることが目的ではない。

–文部科学省 小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)http://www.mext.go.jp/b_menu/shingi/chousa/shotou/122/attach/1372525.htm

 

子どもへのプログラミング教育というと、「プログラミングのスキル(コーディングスキル)ではなくプログラミング的思考」という話がよく出てきます。

プログラミング的思考 は、ざっくりいうと、論理的思考の一部、みたいなもの、でいいかと思います。

 

それはすごく正しいと思っています。僕も、小さい子どもに、コーディングの細かいスキルを習得させることは重要ではなく、プログラミング的思考を伸ばすことの方が大切だと思います。

ただそうすると、アンプラグド(PCなどを使わない、紙などでのコンピューターサイエンスなどの学習)でもいいのでは?という疑問が出てきます。

コンピューターサイエンス、プログラミング的思考を伸ばすという目的では、そうかもしれません。もっといえば、別に将棋でも科学の実験でも、ツールはなんでもよい。

論理的に考えるとそのとおり、、なんですが、そのロジック展開に自分の中で違和感がありました。コンピューターと触れ合うことは必要ないのか、いやそんなことないのでは、、という違和感。それが最近、腑に落ちました。

 

 

それは、世界の広がりと感性 という軸でも考える事。

例えば外で子どもを遊ばせるときに、狭い公園より広い公園、もっといえば大自然の中で遊ばせられたらいいなと思いませんか?

音楽も、YouTubeやスマホ、CDで聞くだけじゃなくて、コンサートやライブを味わってほしくないですか?

スポーツも、プロのプレーを間近で見たくないですか?

何事も、もっと世界は広いんだよ、すごい体験いっぱいできるんだよ、って感じて欲しい。

 

コンピューターがあることで、できることが、世界がすごく広がるんですよね。プログラミングに限らず。

映画を作ったり、音楽を作ったり。写真を加工もできるし、キャラクターデザインなどもできる。ゲームも作れるし、世界中の人とネットでつながれる。

 

つまり、コンピューターを使うのと使わないのでは、世界の広がりがまったく違う。無限の広がりのなかで、知的好奇心を刺激し、感性を磨いてほしい。

これはアンプラグドでは達成できません。

 

プログラミングを正しく学べば、(プログラミングはコンピューターの可能性を広げているツールなので)分かりやすく、世界の広がりを感じられます。

ただ、別にプログラミングじゃなくてもいい。例えば動画編集のアプリだったり、作曲、編曲のツールだったり。3Dプリンターで遊ぶとかでもいい。

 

一方で、プログラミング学習で、子ども用の教材などで簡単にしすぎて可能性を狭め、「プログラミングってこんなものか」と、子どもが可能性を小さく感じて興味を失うことは避けないとダメ。プログラミング学習がまったくの逆効果になってしまう。

 

 

・プログラミング的思考を身につけること

・テクノロジーの無限の可能性を感じ、感性を磨くこと

 

この2つともが大事であり、かつこの2つは、相互依存せず独立している。

これを意識せず、なんとなく合わせて考えて、どっちつかずになって、両方共に効果が出ない(ときには悪影響を与える)、そんなことにならないようにしていくことが大切だと思います。

プログラミング学習は、うまくやれば、この2つともにとって、とてもいい教材の1つであることは確かです。

 

、、、ただ、もう1ついうと、これらの前に、ソフトスキル(非認知能力)もさらに大事だったりします。

諦めずに最後までやりぬける、失敗を恐れず行動できる、自発的に行動する、自己肯定感がある、などなど。

学習にショートカットはない

科学的センスは答えを知るときではなく、問いかけ、探求し、そして調査するときに身に付くものだと言うことです。

— パパート&フランツ, 1987  「作ることで学ぶ」 P38

小学生のキッズたちとプログラミング教室「ArSchool」をやって、5ヶ月程度。いろいろ学ばせてもらっています。

その中で痛感したのは、「学習にショートカットはない」ということ。また、答えを教えられても伸びず、「自身の体験を通じて」こそ成長するということ。

 

突然子どもたちができるようになることはあります。でもそれはショートカットしたのではなくて、日々連続的にじわじわ成長している中で、たまたまアウトプットが非連続的になっただけ。

急成長を求めて答えを教えても、それは遠回り。答えを与えられるのではなく、自ら考える体験、他者の体験や知識を咀嚼し自身のものとするプロセス、教材と戯れるプロセス、それらを通してでないと身に付かない、成長しない。

 

答えを教えることは、子どもを成長させることではない。(場面によっては、答えを教えることで、子どもの理解を助け成長を促すこともあります)

子どもなりに教材などと向き合い、戯れること、その時間を取ることが大事。

 

逆に、結果に一喜一憂することなく、各自のペースで、それぞれが必要としていることに取り組めば、絶対に伸びます。アウトプットはすぐに出ないかも知れないけど、確実に伸びています。子どもの成長は、本当にすごいです。

 

 

 思えば、社会人やインターンでも、優秀なエンジニア、スキルがぐんと伸びる人は、例えばプログラミングの本やWEBのカリキュラムのお題を与えて勉強するにしても、

・書いてあることをそのとおりにやって、すごく順調に、「できました!」となる人

・書いてあることをやりつつ、知的好奇心に任せ、「この場合はどうなるんだろ?」とチャレンジする人(だいたいそういう人は、「すいません、、動かなくなりました」って聞いてくるけど)

だと、後者の方がむちゃくちゃ伸びてますね。教材の正解をトレースするのではなく、プログラミングと戯れ、それを自己の体験として再構築できる人。

社会人のIT学習:#1. プログラミングとDB

前回、”社会人のIT学習:企画の予算感を把握するには” の続きです。
企画の予算感を把握できるようになるための学習として、プログラミングとDBを学習するにはどうしたらいいか書きます。
(エンジニアとしてのスキルをつけるためには、ここに書かれている内容では足りないです)

 

概要

プログラミングを学ぶと、どうプログラムが動くのか、どういう機能が大変(コストがかかる)か、イメージしやすくなります。
プログラミングに必要なインプットや求められるアウトプットが分かり、また、インフラなど他項目の学習効率も上がります。
なので、最初にプログラミングをある程度学ぶのがいいと思います。

また、多くの機能では、データの保存と抽出 が処理の主要部で、DB(SQL)をプログラミングとセットで勉強することをお勧めします。

プログラミングとDB(SQL)は、最低限、実際に手を動かした方がよいと思います。
あー、こういう機能は作るのが面倒だな、とか感覚が掴めます。

では、具体的にどういう学習をしていけばいいのか、下記3ステップを推奨します。カッコは目安時間です。

 

学習ステップ

#1.1. SQLの学習 (15h)

#1.2. プログラミングの基礎的な学習 (40h)

#1.3. WEBフレームワークの基礎的な学習 (30h)

#1.1. SQLの学習

多くのWEBシステムではでDB(データベース)を用います。DBにも多くの種類がありますがまずはMySQLからでいいでしょう。(*1)
DBとやりとりする命令文がSQLです。

プログラムとDB(SQL)との関連性は、例えば、このブログについて考えると、下記のようになります。

ブログを投稿する機能
→画面で入力された内容を、DBの記事テーブルに保存する。

ブログのトップページを表示する機能
→DBの記事テーブルに保存されている中から、(下書きでなく)公開済みの記事を、新しい順に10件取得して表示する。

個別の記事を表示する機能
→DBの記事テーブルに保存されている中から、URLにある記事番号に該当する記事を取得し表示する。下書きなど、公開でない場合は表示しない。

このように、多くの機能が、DBと密接に関連します。
実際のプロジェクトでも、「DBにどういう形で保存するか」「DBにあるデータをどういう条件で取ってくるか」を考えて、それ容易かどうかで見積り額を調整をすることが非常に多いです。

弊社では、研修で下記本のレベルのSQL学習を一通りやってもらってます。

書き込み式SQLのドリル 改訂新版
https://www.amazon.co.jp/gp/product/4822296210

やさしいSQL、のような、基礎的なものでもなんでもいいです。
ポイントは、実際にSQLを書いてみて、
・こういう風に書いたらどうなるかな?
・こういうデータを取る場合はどうやって書くんだろう?
と知識をなるべく横に広げながら、テキストの内容を習得することです。
単にテキストの内容を、そのまま書いて想定どおりの結果となっても、身に付いてないと思います。
SQLは、次のプログラミング学習に必要となるので、優しい内容は身に付くまで学習しましょう。

 

(*1) DBにもいろいろな種類があり、主にパフォーマンス要件によって使うDBが変わり(あるいは併用し)、開発手法も変わってきます。
例えば処理がむちゃくちゃ速いDBや、大量のデータに強いDB、検索に優れたDBなど。
ただ、一般的には、RDBといわれるものが使われる事が多く、特にMySQLがWEBサービスでは主流です。RDB同士では少なくとも基礎学習においては大きな差異はないです。

 

 

#1.2. プログラミングの基礎的な学習

プログラミングは、さまざまな言語があり、大きく分けると、サーバで動くものと、PCやスマホなどの端末で動くものがあります。
まずはサーバで動くものからやるとよいです。
PHP、Ruby、Python、JAVA、C#、GOなど種類がたくさんありますが、どれか1つでよいです。最近はPythonやGOなどが流行っていますが、PHPかRuby(On Rails)あたりが、資料も多く学習がやりやすいと思います。Pythonもいいかも。

まずは、基礎的な文法を学びます。いろんな関数がありますが、どのみち使うときはググることが多いので、関数の名前などはそれほど覚えないでもいいです。

弊社では、下記本を新入社員にやらせてます。

やさしいPHP 第3版 (「やさしい」シリーズ)
https://www.amazon.co.jp/gp/product/4797380896/

こちらもポイントは、ただ本に書いてあることをやるだけでなく、
・こう変えたらどうなるのか?
・こういう場合はどう書くのか?
を意識しながら、ちゃんと理解してスキルを身につけましょう。でないと、見積りにいかせません。

 

#1.3. WEBフレームワークの基礎的な学習

WEBサービスを作るときには、大体の場合、WEBフレームワークを用います。WEBフレームワークとは、WEBサービスを作りやすくするために、便利な機能をセットで提供するもの、というイメージです。
Ruby on Railsが有名です。PHPだとLaravelとかCakePHPとか。年々進化してます。

弊社ではマイナーなフレームワークを使うことが多いので、独自で研修プランを組んでいます。
本で学習するなら、10日で覚えるXX、のようなのでいいかと思います。

フレームワークは、お互い、持っている機能は似ていますが、やったことがないものだと学習コストがかかります。また、自由度の高いものや処理速度を重視しているものなど、それぞれ特徴があります。
フレームワークを勉強する際は、”はじめてフレームワークを使うときはこれだけ学習コストがかかる”というのを理解すると良いでしょう。

 

次回は、

#2. ネットワーク・インフラ・サービスレベル

です。

 

 目次

 社会人のIT学習:企画の予算感を把握するには

社会人のIT学習:#1. プログラミングとDB

社会人のIT学習:#2. ネットワーク・インフラ・サービスレベル

社会人のIT学習:企画の予算感を把握するには

先日、小学生向けにプログラミング教室 ArSchool(アルスクール)をはじめました。

その縁で、社会人のスキルとして、あるいは保護者の知識としてプログラミングを知りたい、勉強したいというお話をいただくことが多くなりました。
その中で質問されたことについて、一般的な内容なので深掘りしてここで紹介します。

質問 :

Web系サービスの立案で予算感を把握できるスキルを付けたいが、どういう学習をすればよいか?


回答 :

見積りに影響を与えるファクターは、思いつくだけで下記があり、条件次第で見積りはすぐ数倍の差がでます。
(分からない用語は読み流してください)

WHAT
・サービスの機能
・サービスのUI(デザイン等)
・ネットワーク/インフラ構成
・想定アクセス数、データボリューム
・パフォーマンス要件
・セキュリティレベル
・OSやブラウザなどの対応範囲
・SEOやOGPなどへの対応範囲
・納品物

WHO
・要件定義の粒度
・作業範囲
・発注側の熱意やスキル(リテラシー)

WHEN
・開始時期、納期

WHERE
・開発場所、開発環境

HOW
・プロジェクトの進め方(アジャイル、ウォーターフォール、承認フローなど)
・テストやQCの要求レベル
・運用保守への要求レベル(CIにどこまで対応するかなど)
・対象言語などの制約
・契約形態

WHY
特になし

 

これらを学ぶにはどうしたらいいか。

1つの方法として下記学習ステップを提唱します。カッコは、想定学習時間です。

#1. プログラミングとDB (85h)

#2. ネットワーク・インフラ・サービスレベル (30h)

#3. 開発フロー、運用フロー (20h)

#4. UI・デザイン概要 (20h)

#5. 契約やその他ファクター (20h)

#6. 市場の相場感把握 (?)

 

#2〜#5が少ないのは、手を動かさずに知識だけ学ぶ前提だからです。
#3, #5は特に、実際のプロジェクト以外で実習が難しいので。。

ただ、学習時間は学べる環境と個人のスキルで大きく左右されます。
特に#2〜#5は、きちんと学べる環境にいれば、おそらくこの6割くらい。

逆に、完全に独学だと、そもそも習得できるか微妙な上に、時間も倍くらいかかるかも知れません。
特に#6は、機密保持契約などにも絡んでくるので、学習が難しいです。

 

では、続いて

#1. プログラミングとDB

を書いていきたいと思います。

BBQ入門 この夏の第二弾、第三弾

BBQはこの夏、3回しました。初心者脱出なるか??

1回目は前回書いた、こちら(那須で子連れキャンプ(キャビン泊)超入門)です。

 

2回目は、お盆に、親戚(大人3人、中学生1人、小1、年少)で。公園でやりました。

身内ということもあって、色々実験しました。初心者は、ググっても、やってみないとよく分からないのです。

 

実験1: ホイルで丸焼き(さつまいも、玉ねぎ)

さつまいも

ググると、下記手順。

1. 新聞紙を水で濡らして、さつまいもに巻きつける

2. その上からアルミホイルを二重三重に巻く

3. 後は炭火にそのまま入れる

 

素人疑問。まず1. から。

新聞紙のインク、写らないの?大丈夫なの? > 不安だったので、キッチンペーパーにしました。

この水分で蒸されるのかな?けっこうビシャビシャでやった方が良さげです。インクはよくわからないし、新聞とってないのでキッチンペーパーでよいです。

 

2. は、普通のアルミホイル二重だと、トングで持ったときに破れました。

アルミは熱伝導がいいので、何重だろうと熱の通りはほぼ変わらないと思います。安全に三重くらいがいいのかなと思います。

 

3. は、ほんとにそのまんま(アルミのまま)放り入れて、焦げないの?あるいは炭が弱くならない?という疑問。

結論からいうと、全然だいじょうぶ。焦げない。炭も、元々そんなにぎゅうぎゅうで入ってないから大丈夫。

3,4人前のコンロだと、2,3本は入れられるかな。

 

で、20〜30分弱くらい待ちました。途中で1回、ひっくり返すといいらしい。

結論からいうと、かなりうまいです!石焼き芋の味。

かんたんだし、手が掛からないし、子供受けするので、おすすめです。(ただし時間が掛かるので、子どもの期待値を最初に上げないほうがよい。)

水加減、火加減次第だと思いますが、皮の近くが、干からびて食べにくかったので、細い芋より太い芋がいいと思います。

火が通るか怖くて、細いのにしちゃったけど。

これは定番昇格でいいですね。

 

玉ねぎ

そのまんま皮も剥かずアルミホイルでくるんで、炭火にポン。

20分くらい待って食べました。

うーーん、、美味しいんだけど、早かった。。

オニオングラタンスープのようなのをイメージしてたんですが、トロトロにはならなかった。

奥さんと、切れ目を入れたほうがいいかもね、という話になりました。胡椒とか書けてもいいかも。

どのみち、うちの子は食べなそう。今度はもうちょっと長くやってみたい。

 

 

実験2: アヒージョ

器に、オリーブオイル、にんにく、鷹の爪、塩を入れて具材を入れるだけ。

具材は、エビ、ブロッコリー、エリンギで実験。

結論からいうと、イマイチだったけど、次はうまくできそう、という感じでした。

 

失敗点

・先にオリーブオイルを加熱しすぎた

火にかけてからにんにくが見つからず。。温度が高くなってからにんにくを入れたので、すぐ焦げて、にんにくの香りを活かせなかった。

具材も、炒めてる感じになりました。

 

・塩が少なかった

結構多めに入れたほうがいいです。

 

あまり温度が高くないとこで、オリーブオイルを軽く加熱してからにんにくと鷹の爪投入し、香りが付いたら具材投入、これがいいと思います。

 

 

その他、学んだ点

・具材はコンロの近くに置く(置けるような机か棚があるとよい)

・焼けたものを取る大皿があった方がいい

どちらも、焼いてる途中に行ったり来たり、動線がぐちゃぐちゃになるし、せわしなくなります。

 

・キッチンバサミは使える

・鉄板はなくても、厚手のアルミホイルで十分(後片付けが楽)

7mmのアルミホイルとか売ってます。それはむっちゃ使える。アヒージョのお鍋にもなります。焼きそばの残りを鉄板ゴシゴシ、って大変よね。

 

・ウィンナーの消費が早い

・豚肉も結構人気

子どもは別に、牛じゃなくてもいいのよ。牛も好きだけど。

 

色々チャレンジしたいけど、怖いよねw

ということで、簡単そうなとこからレパートリー増やしつつ、効率的なやり方を覚えたい。

バタバタしてて、写真全然撮らなかったw