未経験者が20日間でどれだけプログラミングが上達できるのか?【Python合宿レポート】
先日、沖縄Python合宿を開催してきました。
9月1日から9月20日までの20日間。
目安として1日8時間をかけていただきますが、時間の使い方は自由です。
合宿概要はこちら↓
沖縄本部リゾートプログラミング合宿20日間【Okinawa Python BootCamp 2024 summer】
結論として、3名の参加者のうち、2名が全カリキュラムを修了。
1名があと2日あれば修了という状況でしたが、全員が確実にプログラムが書けるようになっていました。
少なくとも彼らはChatGPTが解説する文章は理解できますし、新しい技術が出てきても、ChatGPTとともに成長できるためのスキルセンスは身についたと思います。
では、早速、総括してみたいと思います。
目次
■使用した教材カリキュラム
テックジムのPython基礎コース、1章から7章です。
出題数、履修にかかった平均日数、最終テストでかかった平均時間をまとめます。
1章: 9題 3日 70分
2章:11題 2日 55分
3章: 9題 2日 45分
4章:31題 6日 110分
5章: 9題 1日 20分
6章:19題 2日 60分
7章:11題 4日 120分
4章と7章が山場となっていますが、
4章については扱っているクラス数と出題数が多いのと、
7章は仕様変更の工数(手数)が多いところが難易度の高さに繋がっています。
■課題の進め方
各設問(1-1、1-2、1-3 …)において、答えを見なくても解けるようにする。
「見ないで解いたらクリア」と定義。
その際に、何回目で解けたか、かかった分数を報告。
例:2-6 2周目 15分 ✕✕〇
上記は、2回は答えを見て解いて、3回目にしてクリア。総時間は15分。
惜しかった時は「△」をつけるが、「○」がつくまでやる。
答えを見てるモードの時は、ChatGPTを駆使してもOK。最後まで解く。
ただ次に進むには「何にも頼らずに見ないで解く」ことが条件。
■受講者は何を目指すのか?
1周目、2周目、3周目、と進んでいくうちに、
トライアル回数は少なくなり、かかる時間も少なくなります。
例えば、最初は何回も答えをみて30分かかっていた設問が、数分で一発でクリアできるようになります。
過去の自分と比べて良くなっていることを確認しながら「上達」を実感します。
結果、理解がだんだん降りてきて、ChatGPTの言うことがわかってきます。
■補足教材(記事)
まず心得的なものから。
【自走できるエンジニアへの上達法】プログラミングの効率学習10のポイントとは?
【自走できるエンジニアへの上達法】プログラミングの効率学習10のポイントとは?
設問を解いているなかで、ChatGPTを使っていると色々な単語が出てくるのですが、
それだけだと、スキップしてしまう概念もあるので、下記、用語集を隙間時間に読んでもらいました。
【これで超初心者卒業】プログラミング理解度をチェックする質問集
【これで超初心者卒業】プログラミング理解度をチェックする質問集
【これで初心者卒業】プログラミング理解度をチェックする質問集
【これで初心者卒業】プログラミング理解度をチェックする質問集:オブジェクト指向を理解していないプログラマーが多いらしいので。
【これで開発現場へ】先輩エンジニアからプログラミング理解度を試される質問集
【これで開発現場へ】先輩エンジニアからプログラミング理解度を試される質問集
上記記事は、ChatGPTが生成した解説記事ですが、もっと詳しくは各自調べてくださいという感じです。
■よくあるNG行動集(講師が受講生に指摘したこと)
人それぞれに癖があります。それがいいとか悪いとかではありません。
ただ、それが学習効果を妨げる場合があるので、都度指摘しました。
これを読んでる方もあてはまるところがあったら、参考にしてみてください。
「ついつい考えこんでしまう」
プログラミングは仕様や設計がしっかりしていると、あまり考えこむことなく、スラスラを書けるものです。スラスラ書けないとすれば、練習量が足りないということになります。
世界級のプロサッカー選手の脳は、子どものサッカー選手の10%しか使われていないそうです。
「ついつい考えこんでしまう」人は、間違えたところを元に指示書をつくるようにしましょう。
次回解く時用にカンニングペーパーを作れば、さっさと解くができます。
実際の現場も、コメント文を残したり、指示書を作っているものです。
「自分の言葉に直そうとする」
一見、良いように見えるし、自分のものにしている感があります。
でも、だいたい間違っていますし、自分の言葉にしないと気が済まないという癖だったりします。
物事の言語化は「書ける」ようになった後の話ですから、理解を急いだところで書けなければ意味がありません。
これは一種の「老年病」。誰にも起こりうることです。
そういうときは、「どうせ自分の捉えていることはウソである」と決めかかって良いです。その方が吸収が早いです。
「エラーしたら答えを見る」
エラーが出た時は、まず自分のソースコードを見ます。
ただ、どこかで答えを見るだろうということで、先に答えを見ちゃうんですよね。
ChatGPTでも、解説を読まずに、できあがったコードをも読まずにコピペしちゃいがちです。
結論を先に求めるのは人間の合理的な癖ですが、学習においてはご法度です。
「あの時、講師がこういったから」
だいたいこういうとき、講師側はそう言ったつもりはない。何かの拍子に曲解されているのですね。
こんなことは、日常茶飯事です。だから疑問に思ったら真意を問い直す必要があります。
例えば、今回、「最初のうちは目コピでいいから、どんどんカンニングしてやってね。」という言葉がありました。
最終的に「見ないで解けるようになる」が前提なのに、ハナから答えを見てやってしまうから一向に覚えない。
「まずは見ないでやる」という言葉を付け足せば、この場合はよかったのですが、最終的なゴール設定は忘れないで欲しいです。
「理解しなくていいといったのに」
「まず書けるようにする」がテックジム方式の大前提です。
でも、ChatGPTはなんでも解説してくれるから、1周目がやたらに長い人がいます。
3周目あたりにやれば、わりと簡単に理解できることを、前倒しにするから余計な時間がかかります。
そんな時は時間をしばれば良いです。例えば「15分以内に解く」を決めれば、その時間軸で考えるようになります。
「書き順がちがう。再利用しない。」
コーディングには順序があります。
初心者によくあるのがただ上からなぞって書くということ。
関数であれば、複数のdef文を続け様に書いてしまいがちです。
「Def文を一つ書いたら、実行文を書いて、実行してみる。」が正しい所作です。
for文の中にfor文があれば、「まず内側のfor文を書いて、実行してみる」が正しい所作です。
また、仕様変更時に、元にあるコードを再利用せずに、改めて同じことを書くのは、不要なミスと無駄な工数を作ります。
このようにプログラミングは最小手数で、正しい手順で、小刻みに実行しながら進めていくわけです。
これは繰り返しやってみることでわかってきます。料理の段取りと似てますね。
以上、ぱっと思い出せたところを挙げてみましたが、いづれも、リアルに指導していれば、早期に対処できるものばかりです。
「なんかおかしいな、正答率が低いぞ、時間がかかってるぞ」と気付けば、その問題がどこにあるかがわかります。
まさに合宿だからこそ、素早く軌道修正できた事例です。
■ChatGPTとの付き合い方について
ChatGPTに依存しすぎると「プログラミングが書けなくなるのでは?」なんて、指導側は勘ぐってしまいがちです。
しかし、エンジニアたちが「生成AIを駆使してコーディングする」ことを前提に仕事をしている世の中です。
例えば、漢字がかけなくても、読めればタイピングできますし、
変換候補を間違えなければ、仕事や日常生活に差し支えはありません。
それと同じで、昔のやり方に固執したところで、プログラミング挫折者は減りません。
だったら初心者もそのつもりでやった方がいい。最初からガンガン使うべきです。
「テックジム方式」では、最終的に答えを見ないで書けるようにするというのがゴールにしてますから、
そのプロセスでいくらチャットGPTを使おうが構いません。
そして、書けるようになると、チャットGPTの言うことも理解できてきます。
今回の合宿では、ChatGPTを積極的に活用してもらい、逐一学習に有用かどうか検証しました。
そして「ChatGPTの言うことが理解できるならば、プログラミングをゼロから書く必要はない」という結論に達しました。
逆に最初のうちは理解できないから、とにかく書く。そしてまたチャットGPTに訊く、また書く。
とやっているうちに、理解できるようになるのです。
■ChatGPT時代の講師(教師)のあり方
合宿中にOpenAI.o1のリリースがX上で賑わいました。
東大の教授のポストで、「もはや、9割の人以上の知能レベルになってしまった。ChatGPTを使いこなす人と、できない人の生産性の違いは計り知れない」というのです。
「では、どうしたらいいのか?」と尋ねたところ、「使いこなしている人たちのプロンプトを真似る、考え方やマインドセットを聞いてみる」とのことでした。
確かに「なるほど」と思いました。まさに私がやっていること、そのものでした。
所作が間違っていたら指摘して、向き合い方が間違っていたら指摘して、時には褒め、時には叱る。
チャットGPTに聞けないようなことを先回りして、「ここ注意だよ」といった指示を出す。
講師はそこに存在しているから、生徒はさぼれないし、間違ったやり方をただそうとする。
いざ困ったらチャットGPTに聞けばいいですが、その前段や周辺のことを、必要なタイミングで指摘するのは指導者の役目です。そのためには、生徒をよく観察し、過去の似たような事例から、生徒との最適の関わり方を模索する。
ChatGPTの唯一の欠点は、強制力がないということです。
講師はある程度の信頼を生徒から勝ち取れば、さぼらず、諦めずに、学習を続けてくれます。
■プログラミングで挫折することは本質的にありえない
合宿では、はじめから順風満帆だったということはありませんでした。
最初の3日間ではありますが、関数が理解できないという人が2名でてきたのです。
確率でいうと3分の2は、最初からスランプを起こしたことになります。
「理解はあと、書けるが先。とにかく書いていきましょう」としかいえませんが、人としてどう対応するかも重要な事だと思いました。
具体的には、一緒に書いてみて、printしてみて、実際の動きを見せていきました。
手を変え品を変え、いろいろなことをしていくうちに、スランプはすぎていきます。
何よりも一緒にいることが大事なんだなと思いました。
プログラミングはある一定時間(テックジムでは200時間)向き合えば、誰でも書けます。
でも、独学のように一人で放ったらかしにすると、その時間を投下することなく諦めます。
ただ、みんなで集まって、やるぞと決め、挫けそうになったら、応援する人がいる。
こういった空間があれば、人は続けることができます。
合宿では「もう逃げ出してしまうかもしれない」と危惧したことが、ただの杞憂に終わりました。
これからプログラミングの学習をはじめる方は、サボれない環境、頑張れる環境を揃えてから行うことをお勧めします。
すべての日本人が日本語を話せるように、誰でもプログラミングは書けるようになります。すべては環境次第です。