【50代中高年・シニアのためのプログラミング】 独学を成功させる唯一の方法とは? 〜アウトプット学習法 日曜大工と暇つぶしプログラミングのすすめ
更新日:2024.06.25代表の高橋 与志です。 ご好評いただいた以前の記事 【50代中高年・シニアのためのプログラミング】ど〜しても独学でプログラミングに挑戦したい人のための学習ガイド : では、 中高年が独学でプログラミングを習得したい場合のロードマップをご紹介いたしました。 そして陥りやすい挫折ポイントについても解説し、「独学は不可能ではないが、とても険しい」ということを示唆させていただきました。
目次
1.かかりやすいインプット病
その後スクールの教授法を振り返る機会があり、「自発的なアウトプットを通じてプログラミングを好きになる」ことをTechGardenSchoolとして目指すことを決めました。元々「作りたいものを作りながら学ぶ」という理念を持っていますので、その内容を少し噛み砕いた感じです。
というのも、当スクールも少し「インプット病にかかりつつあったかも」という反省があるからです。
- ・教材をわかりやすいものに整備する
- ・動画などでも理解できるようにする
- ・更に講師が直接疑問点に答える
というプロセスで基礎コースを終え、応用コースに行く。 また、HTML/CSSをやったらPHP, PHPの次はJavaScript, ウェブアプリの次はスマホアプリ、更にPythonで人工知能・機械学習、といった具合です。
「作りたいものを作りながら学ぶ」という理念を標榜している我々としては、元々そのための準備として用意したカリキュラムが、あたかもメインであるかのようになってしまい、ちょっと忸怩たる思いなわけです。
確かに、生徒さんは好奇心を満たしつつ楽しんでいらっしゃるし、ITの世界を広げていらしゃいます。 素晴らしいことです。 でも我々はもっと先の喜びを味わってほしいし、なにより「好き」になってもらいたい。心から「好き」になれば、もうあとは勝手に進んでいきます。 勉強を勉強とも思わずに。
上記の内容は「インプット」です。インプットは立派な勉強ですし、必要です。でもそればかりやっていたら、本当の意味での醍醐味は味わえないし、役に立つ実学にもなり得ません。
まるで、トンカチやのこぎりといった「道具」ばかりを集めて磨いて、ちっとも家を建てない大工のようなものです。 さんざん、中高でインプットだけさせられた英語が全く役に立たないことは皆さんも経験済ですよね。
やっかいなのは「インプットは気持ちいい」し「インプットしていると尊敬される」ことです。時間を有意義に使っている、努力しているように本人も周囲も感じてしまいがちです。 プログラミングにおいても、独学の危険性はこの点にあります。ProGateの次はドットインストール、その次はSwitft Playground、PHPの書籍の次はRuby, その次はPythonという感じでついつい横展開してしまうのです。
書籍「アウトプット大全」には ベストなインプットとアウトプットのバランスは3:7と書かれています。私もその通りだと思います。 実際には皆7:3くらいでやってしまうそうです。 でも前述の英語ではアウトプットの比率はもっと低いですよね、多分。
「学びを結果に変えるアウトプット大全」 樺沢紫苑 (著) サンクチュアリ出版
2.アウトプット型学習が進まない理由
プログラミング独学者の中で継続して活動できている人がいるとしたら、アウトプット中心の活動をしている人でしょう。実際にホームページを作って公開している、そのウェブサイトに独自の機能を自分で追加している、小さな便利アプリやゲームを作って自分で公開している、などです。落ち着いて考えれば、私の知っている35歳以上のエンジニアの人たちは皆独学者で、子供の頃からゲームなどを作っていたそうです。
ではいつアウトプットするのか?
「今でしょ!」
そんなことできない、と皆言います。 この本が終わってから、このコースが終わったら。 でもそれは多分実現しません。 理由は2つ考えられます。
理由1) アウトプットする必然性のある状況にない
英語だって車の運転だって、教室と本番は違う。 どうやって話しかける? どうやって駐車する? 「 自分から主体的に考えて動いて」経験を積んでいくしかないのです。 車の運転は運転せざるを得なくなって「 自分から主体的に考えて動く」ことをします。 英語も海外に行って話さざるを得なくなって「 自分から主体的に考えて動く」のです。 このように英語や車の運転は「状況」を作れば、人は必然的に「 自分から主体的に考えて動く」ことでアウトプットをします。
ではプログラミングはどうでしょうか? プログラミングせざるを得ない「状況」とは?
まあ、一つにはスクールなどで課題制作をしないと卒業できない、とか。 IT企業に入ったのでやらざるを得ない、とか、でしょうか。 確かに私も含め人間はダメな生き物なので、そのような「状況」を作ることがある程度必要なんだと思います。
そして、プログラミング独学者はそのような強制的な「状況」に直面することはありません。 自分の「意志」だけでアウトプットするしかないのです。
理由2)「インプットする方法とアウトプットする方法は全くの別物だから」
もう一つの大きな問題は、インプットする時のプロセスとアウトプットする時のプロセスが異なるため、どうして良いか見当がつかないことです。 当スクールでも、「さあ、好きな物を作っていいですよ」と言った途端に「どうしていいかわかりません!」「どこから手をつけていいかわかりません!」という状況になる方は非常に多いです。これは、MBAを持っている私が集客に苦労したのと同じで、「使う手法」「使う脳の場所」が全く異なるからだと思います。
MBAで教えるのは、既にビジネスモデルができていて既に顧客がついているケースがほとんどです。 一部の起業クラスには顧客ニーズを検証する方法やMVP(最小限の機能の製品)を使ってビジネスを始める方法(顧客開発、リーン・スタートアップ)を教えることがありますが、それだってまだまだシュミレーションの域を出ません。
ましてや、ウェブサイトの作り方やコピーライティング、潜在顧客リストの集め方などを実践するわけではありません。
3.アウトプット練習法
ではどうすれば良いのか?
これはもうインプットとは別に、「アウトプットの練習」をするしかありません。 プログラミングを独学で学ぶ人を例に考えてみましょう。
ごくごく小さなパーツ
↓
ごく小さな機能
↓
小さなアプリ
の順にとにかくアウトプット優先で学ぶ訓練をしてみてはいかがでしょうか。 これはひいては自分の脳の回路をアウトプット型に書き換えることにもつながることです。
小学生などに対するプログラミング教育で最も使われているビジュアルプログラミングのシステムScratchの優れている点は、動かしたり、音を鳴らしたりして「即アウトプットの結果を見る」ことが前提の仕組みであるということが言えると思います。アウトプットできる内容が、Scratchの世界の内容に限定されているということはありますが、「学んだことを即現実にアウトプットするという脳の回路」を促進する良い例ではないでしょうか。
「学んだことを即アウトプットする脳の回路」を持つ人が増えれば、リアルの世界でも、色んなことに行動を起こす人が増えていくことにつながるかもしれません。 仕事で新しいことに挑戦したり、ブログやYoutubeで情報発信したり、自分の得意なことで仕事を受けるサービス(ココナラやクラウドワークスなど)に登録したり、ボランティアを始めることかもしれません。
ただ、これらリアルでの挑戦には摩擦やリスク、つまり「ストレス」や「恐怖」がつきまといます。 勤務先で提案して、上司や同僚に「余計なことするな」的な空気を出されたり、理由もなく却下されることのほうが多いし、ネットでの情報発信は炎上などが怖いし、仕事を受託する場合にも契約や金銭上のトラブルが発生する可能性は常にあります。
皆さんもよくご存知かと思いますが、こういったことが我々が行動をおこす時に立ちはだかる壁、つまり「アウトプットの障壁」になっており、幼いこところから社会からこの壁を突きつけられ続けるうちに、いつしか「自ら」アウトプットすることを我々は忘れてしまったのではないでしょうか。 日本人の悪い点、妬みや足を引っ張るという性質がその社会的空気の遠因だと思います。
プログラミングはアウトプットの喜びを取り戻すきっかけになるかもしれない、と今大きな可能性を感じています。 自分の考えをプログラミングやアプリ、ゲームなどを通じてアウトプットする時に、親や上司や社会がそれを止めることはできませんし、非難したり足を引っ張ることもできないのです。 だって、それは自分のPCのプログラムファイルの中だけで起こっていることなので、知ることも邪魔することもできないからです。
話がかなり脇道にそれましたので、もとに戻しましょう。上記の件はまた別の記事で論じたいと思います。
プログラミングのアウトプット型になるための「練習」とは何か?でしたね。
1)アウトプット練習手法1 サンプルアプリを土台にする方法 (対象 初級者)
まずは私が書籍や他の記事でも書いていて、また一般的にも言われていることからお話しましょう。 書籍やスクールのコースで使ったサンプルアプリを写経あるいはコピペして動かし、その後、「これができたらいいのにな」という気持ちが湧いた部分に注目し、機能の一部を修正したり、追加する方法です。
サンプルアプリを写経して動かす
↓
これができたらいいのにな
↓
① 微修正 : 色や見た目、内容だけを変える
② 機能追加・修正: 必要な技術を調べ、アルゴリズムやデータの扱いを自分で実装
① 微修正
まずは心理的ハードルの低い部分から取り組んで、成功体験を積みます。自分の意志をアプリに反映させることが想像以上に「嬉しい」ことで「感動する」ことであることを自分に経験させるのです。
最初は 文字の色を変えるだけでも良いですし、ボタンの名前を「登録する」から「申し込む」に変え、ボタンのサイズを大きくする、などでも構いません。 教材のサンプルアプリが「ハンドバックのECサイト」だったら、自分の好きなことである分野、例えば「釣り道具のECサイト」に内容とデータだけを書き換える、ということもオススメです。
こうすることで、更に自分の意志を注入し、モチベーションを高め、「もっとこうしたい」「これができたらいいのにな」という気持ちが湧きやすくしていきます。
② 機能修正・追加
更に欲が出て、「これができたらいいのにな」「もっとこうならいいのにな」という抑えきれない欲求が湧いたら、機能を修正・追加するために必要な技術を調べ、アルゴリズムやデータの扱いを自分で実装してみましょう。
この方法の良い点は、元になるアプリのコンセプトと基本機能があるので、それを土台に自分の意志「こうならいいのに」「こうだったらもっといいかも」という気持ちを誘発しやすい点にあります。
我々日本人は、良く言えば「完璧を求め、改善し続ける」、悪く言えば「重箱の隅をつつくあら探し」を自動的にしたがるDNAを持っているようなので、それを利用するのです。 もちろんそれが本当にユーザーにとって必要かどうかは、別物なんですけどね(笑)。 この方法は独学者にとっても使える方法だと思います。
☆ 落とし穴
あなたの「好きな分野や活動」に思い入れが強ければ強いほどアイデアや発想が湧きやすくなる反面、「あなたの実力をはるかに超えた機能」を設定しがちになります。そして更に重要なのはあなたが独学者である場合、「そのこと自体に気づくことができない」という点です。
ある機能を実装する時に、どのような技術やDB構造を使うことになるのか、を事前に見当をつけるにはアマチュア中上級のスキルが必要なので、独学を開始して間もない初級者にはわかりません。
そのような機能に初級者が挑戦するのは、あくまでも「アウトプットの練習」という観点からはあまり効率が良くないでしょう。 もちろん、その機能の実現に執念を燃やして1年くらい取り組むうちに自然に全般の知識がついて実力も上がる、というケースもあるかとは思いますが、万人向きではないでしょう。
プログラミング勉強会やコミュニティなどに所属して信頼できる専門家を探した上で、技術レベルを判断してもらって、今の身の丈に合わないと判断されたら、その貴重なアイデアは一旦メモしておき後日の挑戦にとっておくのがオススメです。 とても教育センスに優れた専門家ならば、あなたの技術レベルより少し上くらいの技術で達成できるようにレベルダウンしたものを提案してくれるかもしれません。
2)アウトプット練習手法2 極小のアプリを複数作る 方法 (対象 初中級者、中級者)
これもよく言われていることですが、何でも良いので単一の機能の 極小のアプリを複数作る(最低3つ)練習方法です。そのアプリが自分の興味関心のある内容であればより望ましいですが、とにかくなんでも良いので3つ以上作ることが大切です。 その理由は以下の通りです。
● 発想→設計→実装→品質チェック を繰り返し経験することで、アプリ作成のプロセスの勘所の理解が進む。
● 単機能とはいえ、実際に実装していく過程で様々な補完機能やコードが必要となることを知ることができる(簡単そうなものでも結構な作業になることを実感する)。
● 作って終わり、ではなく、より洗練されたコード、アルゴリズムへと改善する作業にも取り組みやすい。
● なによりも「自分で最後まで完成させた」という成功体験を重ねて自信を持つことができる。
● それらのアプリは転職活動などの際に、職務経歴書などに記載することで中高年にとって強力なポートフォリオになる。
(非IT系の面接官は、中高年がアプリを複数作ったというだけで尊敬するはずです! プロトタイプだろうがなんだろうがまず見分けられません 笑。)
アウトプット練習手法の1と2は、 例えて言えば、日曜大工みたいなものです。 家は建てられませんが、雨漏りを修理したり、かんたんな棚を設置したり、犬小屋を作ったりするイメージですね。 あ、これ十分生活に役立っちゃってますね。 趣味と実益を兼ねるってやつです。
プログラミングでも、家計簿作成や得意な料理のレシピの保存など、趣味と実益を兼ねることは十分可能なので、ぜひ挑戦してみてくださいね。
3) アウトプットの本番 : 公開前提で作りたいものを作る (対象 中上級者 上級者)
これはもう練習法からは離れてしまうのですが、プログラミングを勉強する究極の目的である「プログラミングで社会に価値を提供する」ことを前提にアプリを開発するのです。趣味レベルであれば、役に立とうが立つまいが自分が楽しめれば良い一方で、このレベルでは誰か一人でも良いからその人の困っていることを解決してあげたり、楽しませたりする(自分の子供のためだけでも良い)ことを目指します。
マインドセット的にも技術的にもこれまでとは次元が違います。その分、プログラマーとしてたとえアマチュアであっても、これをやったことがある人とない人の間には大きな経験に基づく実力差が生じます。 クラウドワークスなどから仕事の受託や、エンジニアになることなど「プロを目指すための挑戦権」を得たといえる段階だと思います。
このレベルの制作活動をおこなうにあたっては、信頼できる専門家からのアドバイスと検証が必須だと思います。なにせ、社会に公開してユーザーに使っていただくわけなので機能面のチェックのみならず、セキュリティやサーバーの安定動作など押さえなければいけない点は多く、そのあたりの最新の動向にも詳しくなければいけません。
そしてこれは「実務」なので、 それを書籍などで学ぶことはまず無理でしょう。ブラックジャックだって、医大には通っていたし実務も積んでいます。たった一人の力で無免許の名医になったわけではないのです。 そう考えると、あなたがプログラミングを学ぶ目的が単なる趣味だったとしても、遅かれ早かれいづれ独学では行き詰まる段階が来る、専門家の助けが必要になると思っておいたほうが良いでしょう。 少なくとも、専門家に教わったほうが効率が良い、ということは事実です。
これはお金を払う払わないの問題ではありません。世の中にはタダでも助言したいと思っている専門家は勉強会やコミュニティに入って探せばきっといると思います。 ただし、お金を払ったほうが専門家を早く確実に見つけることが出来て、その人があなたを最後まで助けることを契約によって保証させることができる、ということだと思います。
4.アウトプット脳を作るには教えてはいけない
現在のあらたな課題と新しい提案 〜 最初からアウトプット頭になる練習を始める
今までお話してきた独学の方法は一般的に良く言われていることで、多くの方がオススメしている方法なのでまず間違いはないと思います。私の経験上もそう思うのでぜひ実行してみてください。
さて、ここから先のお話は、スクールで中高年や超初心者の方々を長年お教えしてきて最近気がついた課題になります。それは、基礎や応用コースなどが終わり、いよいよ「作りたいもの」を作る、 となった途端に生徒さんの手がぱったり止まってしまう、何をどうして良いかわからなくなってしまう、という現象です。これは中高年の方々に限らず、慶応大の塾生スタッフも同じ症状を示すので、年齢やスキルレベルに関係ない課題だと考えています。
● 作りたいものがわからない
● やりたいことが見つからない
● どう発想していいかわからないし、最初の一歩の踏み出し方がわからない
先程も触れましたが、これはプログラミングに限らない「現代日本人病」なのかもしれません。 しかし、英語でもなんでもインプット学習に慣れきった脳に、急にアウトプットせよ、といっても無理があります。 教える側の手法にも大いに問題があるのです。 現にScratchなどは即アウトプットする仕組みで成果を上げていますよね。
プログラミングの初歩の段階からアウトプットする学習法や指導法ができれば、アウトプット脳を作ることができるのではないかと考えていますが、アウトプットを教える際に最も矛盾している点があります。それは。。。。
● 課題や問題を与えてしまったら、真のアウトプット脳を作ることにはならない
という点です。 もちろん課題や問題を与えられてそれをプログラミングで解決するスキルも「職業エンジニア」には求められますし、必要な能力です。
でも今は楽しく独学できる、プログラミングを好きになってもらって「勝手に」「勉強とも思わず」「時間を忘れて」独学できる体質を作る方法を考えていきたいと思っています。 そういう人がもしプロになると「わんぱくエンジニア」になります。新しい技術をメリットなど考えず、好奇心から貪欲に吸収して常に新しいことを試し続けます。だって楽しいんだもの。 当スクールの中田先生は「自分は仕事をしていると思ったことは一度もない」とおっしゃっています。私の知る他のCTOレベルのエンジニアの人たちも皆同じ事を言います。
そもそも、そういうレベルの人になる独学者を人為的に増やす方法を考える事自体無謀だし、できっこないことなのかもしれないですが、フィンランドの教育実績やNHK 奇跡のレッスンなどを見ていると、「人為的に自立心を引き出す」ことを諦めてはいけないよなあ、と思い直す今日このごろです。
世の親たちだって、我が子に最も教えたいのは自立心や自主性のはずです。 親は絶対に諦めませんよね。 でも最近ではその親自体が自立心や自主性をもっているかどうか怪しいものですが。。。また話がそれました。
● 爪の先ほどの意志でいいので、自分で感じて考えて動いてほしい。遊び感覚で。 その方法はないか?
● ごく初歩の教わった内容を使って即遊び感覚でアウトプットさせる方法はないか? (問題を与えてしまうクイズ形式はダメ)
つまり「教えない」「ゴールを設定しない」「答えを用意しない」手法です。 例えば、PHPで変数の概念を教えたとします。 で、いきなり
「変数と四則計算の概念だけを使ってプログラミングせよ」
といって放置するのです。 こんなものを作れ、とか この状況でこの問題を解決しろ、とかは一切なし。 だってそのことを考えること自体が実は真の目的でアウトプット脳を育成するための鍵なんですから。 これは、料理の材料だけを与えてレシピを与えず、
「ここにある材料だけで、料理とレシピを発明しろ」
というのに近いです。 私はこれ、なんだかワクワクしますね! 自分でその料理の名付け親になれます。 例えば「肉じゃが風ホワイトシチュー」とか笑。
いきなり変数と四則計算で何かやれ、というわけです。 何のために? その事自体に意味はありません。
5. 妄想と暇つぶしがアウトプットの母
そこで、こういう状況を妄想してほしいんです。
++++ 妄想シーン1 +++++
あなたは大学生で、とってもつまらない講義に出ざるを得ません。出席をとるし、それは最後だし。 試験に出る問題は毎年同じで、講義内容も板書も毎年同じで過去問も過去ノートも持っています。 でも、静かにしていないと怒り出す困った教授です。
あなたに与えられた暇つぶしの道具は、持ち込みが許されているPCの中にあるPHPのエディターと変数の知識だけです。 さあ、どうやって暇をつぶす?
++++ 妄想シーン2 +++++
あなたは会社員で、とーっても退屈な大人数の会議に出ています。 発言の機会はないけど、出席しないといけない空気のあれです。 しかも3時間もあるのです。 しかも業務の内職をしようにも業務PCの持ち込み禁止です。
あなたに与えられた暇つぶしの道具は、スマホに入っているPHPのエディターと変数の知識だけです。 さあ、どうやって暇をつぶす?
私がおこなった暇つぶしの例を見てください。
+++++変数を使った暇つぶしコード(1)+++++++
<?php $a = “山田太郎”; //宛名 $b = “中高年のためのプログラミング “ //メルマガ名 echo $a.”様”; echo ”いつもお世話になっております。この度は”.$b.”メルマガにご登録いただきまして誠にありがとうございました。ご意見ご感想などお待ちしております!”; ?>
+++++++++++++++
echo(表示せよという命令)の部分はなくても大丈夫。メールの定型文に変化させたい値(正に変数ですね!)、宛名とメルマガ名をそれぞれ$a, $bとして必要な値を代入してメールを完成させるプログラミングです。 これなんかは、MailChimpなどの実際のメルマガサービスなどでも皆さん経験されていると思います。「どうして、自分の名前がメルマガの件名や本文にでてくるのだろう? どんな仕組みなんだろう?」 と疑問に思っていた人も多いのではないでしょうか。
+++++変数を使った暇つぶしコード(2)+++++++
<?php $a = 500; $b = $a; $a = 1000; $c = $a + $b; $d = $a + $b + $c; $d = $d + 1 echo “クイズ: 現在のそれぞれの変数内の値を答えよ”; echo “解答 $a:1000, $b:500, $c;1500, $d;3001″ ?>
+++++++++++++++
変数の勉強のためのクイズになっちゃいました! 本当はフォームとか使いたかったところですが、それはなしで。 クイズと言いつつ、問題と解答が一緒に表示されちゃうんですけどね。 これ、順次実行が入った立派なプログラミングだと思うんですよね。
これらは、例題や例として出したら意味ないです。自分で妄想して内発的に出てくる過程自体に意味があるんですから。 え? じゃあ 私がどうやってこれを発想したかって? うーん。 それにお答えするのは結構難しいけど本質的ですね。掘り下げる価値のある質問です! 正直よくわかりません 爆。
自分の過去経験したものがヒントになっていることは間違いないですね。 メルマガだったり、自分が過去違和感を持った変数の特長だったり。
独学をしている人も、早い段階からこのような「暇つぶしエクササイズ」を日常的におこなうことによって、
● 内発的に課題を発想する脳の回路を作る
● 限られた自分の手持ちの武器でアウトプットする
事を行うことで、ついついハマりがちな「インプット病」にかかるのを防ぐことができるかもしれません。
6.「独学」か「スクール」かなんて大した問題ではない
なんだか独学を成功させる方法から始まって、教育手法の開発みたいな話になってしまいましたね。 でも、この2つの話はつながっていると本稿を書きながら思いました。だって、いくら先生がいたり学校があっても、優れた教材があっても、それらがあってもなくても、結局学ぶのは「あなた」個人なんですから。
学習者自身が、「頭と手を動かさずにはいられない」内発的・自律的な「アウトプット欲求」をどこかに持っていないと、独学を継続して成功させるのは難しいと思います。逆に、いくら優れた先生、教材、手法を用意して教育環境を整えたとしても、生徒の心にその意志を植え付けることが出来ないならば、その教育も「インプット病」による失敗となるでしょう。 戦後の日本の教育を見れば明らかですよね。
最後に、もしあなたが独学を突き詰めてあるレベルに到達したとしたら、 必ず同じ志を持った仲間や、尊敬できる師を求めるようになるでしょう。それは技術的な疑問や今後のトレンドを知りたいという次元の話ではなく、ある技術変化をどう捉えれば良いのかとか現代の設計思想で重視すべきことは何か、など「考え方」や「哲学」に触れたいと思うようになるからです。
そんなことは書籍にもネットにも書いてありませんから。 ついでにいうと、その仲間や師と面識があるとは限りません。 ネット上の技術フォーラムやgithubで知り合った人かもしれません。もちろん日本人とも限らないわけです。
こう考えていくと、「独学」か「スクール」かなんて大した問題ではないことがわかります。レールがひかれているか、ひかれていないかの違いはあるけれど、ほんの2−3駅先にいけば、個人のやるべきことや課題は同じになる(その2−3駅先に独学でたどり着くのに皆四苦八苦しているのが現状だと思いますが、動画などの発達で近いうちにそれも解決するでしょう。もういっそ「独学コンシェルジェ」的な人やサービスが必要でしょうね。一人で試行錯誤するのはあまりにも効率が悪いし、「プログラミングを独学する方法」自体を検索したり学んだりすることに時間をかけるのも正直どうかと)。
中高年のための「独学コンシェルジェ」サービスにご興味のある方は、info@club86.infoまでご一報ください。 カウンセリングセッションを無料で提供させていただきます。
中高年のための独学ロードマップがオススメのサービスとともに詳しく紹介されている無料e-Book/無料メール講座 「プログラミングの始め方 セカンドキャリアでの稼ぎ方」にご登録いただき、2万字以上の当スクールのノウハウの詰まった渾身の無料e-Bookを手に入れてくださいね! 登録はこちらから。