渡るネットは嘘ばかり

元文系、米国大学院CS修士号持ちITエンジニア。自称エンジニアが撒き散らすゴミを少しでもキレイにしたい

プログラミング教室第2期生(2名)募集します

先月働きまくって残業代(超過作業分の追加発注扱い)が結構いったので、3Dプリンタを買いました。最初の印刷は小さすぎたのもあり、1層目が剥がれてそこからはノズルの先で玉になってしまいました…。スティックのりを付けるって聞いてたけど、そういうことですね。色々小物作ってます。

プログラミング教室の題材でDBの資料をまとめてた時に某侍うんちゃらのページをうっかり見てしまい(プログラミング教室の技術情報ページは誤りが異常に多い)、データベース管理システムをDBSと略してるのを見て、そっとページを閉じました。Database Management SystemでDBMSでしょ。管理除いてどうすんねん…。どう考えても普段DBいじってないですね。あと、基本的にabbrebiation使う場合、元の語を意識できたほうがいいです。流石にManagementを忘れる人はそうそうおらんと思うけど、DFS(Depth First Search)とかBFS(Breadth First Serch)とかLIFO(Last In First Out), FIFO(First In First Out)辺りは覚えてたほうが良い気がする。スペルミスとかは置いといて。意味と繋がるし。
にしても、書いてる人インストラクタって書いてあったけど、ガチですごいな…CSの学部3年の方が知識ある気がするけど…。技術情報のページの全部が合ってる必要はないけど、DBMSとか最低限合ってるべきレベルです。

プログラミング教室1期生を教えてみて

プログラミング教室のモニターを2人取ってモニター参加して頂きましたが、やはり、モニターが無料であることの問題点を感じたりもします。俺は一学期、90〜100万位払ってアメリカの大学院に通っていました。自費でです。返済不要の奨学金をもらったりもしていたんですが、それでも大変で、1円も無駄にならないように頑張ろうと、全ての課題で満点を目指してました。満点を取れるというのは教師がわかって欲しいと思ったことを100%理解できたという証明だと思っていました。そこを目指して欲しいんですよね。無料だし、できなければできなくていいか、と思わないで欲しい。少なくとも努力の形は見せて欲しいんですよね。俺は出してる宿題の3〜5倍の量をやってきたので、無理な”量”ではないと思っています。1教科だけなわけだし。僕は3,4教科取って、1個に付今回出してる2〜5倍の課題やってました。まぁ、他に仕事があったり学校があるのはわかります。ただ、少し背伸びすれば届くレベルの問題を出してるつもりなので、毎日30分〜1時間程度、しっかり時間をかけて問題を理解して解いて欲しいな、と。また、モニターとして無料で教えてる関係上、なるべく継続的に授業を受けて欲しいんですよね。最低週1は参加して欲しいし、時間も調整します。2週間とか開けられるとこちらとしても中々来年の開始に影響出てきます。なので、その辺はモニター参加条件に盛り込みたいな、と。

内容としては1ヶ月でだいたい基本的なアルゴリズム(再帰、分割統治法、動的計画法)あたりをやって、データ構造もスタック、キュー、配列、連結リスト、ツリー、グラフあたりを教えて、その他、入出力あたりを教えています。統計とか分析計進みたい人には最終課題にベイズ分類器の問題を出して、そこに繋がる知識を教えたりしています。

わからないことを理解する仕組みが必要

学習するということは失敗すること。アメリカの語学学校で習って1番いいな、と思った言葉です。失敗は恥じることではありません。語学学校で知り合った全く英語できず、中学レベルも理解できれない一番下のレベルに入った奴が、誰よりも積極的に欧米人に話しかけて、失敗を積み重ねて学んでいるのを見て、こいつはすごい、と思った。彼とその後会社を作ったわけですが、自己都合で一旦離れてそのままになってたりします。またいっしょに面白いことをしたいので、近日中に会うつもりですが、それは置いておいて、日本人は何がわからないか理解すること、伝えることがすごく苦手に思います。失敗も恐れるから、わかってる体で進めると全くわかってなかったりします。だから、授業の最初に復習で対話で問題を出して答えてもらったりしましたが、そういうのはすごく大事だと思いました。課題を出して不正解だったとして、すでに次のトピックに行ってしまってるので戻るに戻れなかったりも。現状、わからないことを視覚化するのが課題です。家庭教師とかに近いマンツーマンでやってるので、分からない部分を補足するのはそんなに大変な話ではありません。

知らないとできない

独学系のプログラミング教室(オンラインで学習してわからないとこを聞く)だと、データ構造やアルゴリズムの基本的な理解ができてないと思われるところが多いです。例えば、O(log n)で、と言われたら分割統治法使うのかな、とか、Brute Forceで3重ループになる問題をO(n2)とかO(n)で解くとしたら動的計画法か貪欲法かな、とか。引き出しは多いほうがいいし、方法に直結するには反復練習が必要。脳の回路を最適化して、問題の理解を手法に早く紐付けられるようにする。ただね、知らない知識はいわば道のない土地のようなもので、整地して道を作るのが学ぶ、知るという行為。道のないところは通りようがない。アルゴリズムの手法とかデータ構造とか知ることで始めて道が通る。そこを頻繁に利用することで道が固まり、交通量が多くなれば道は広くなってより多くのトラフィックが流れ込む。そういうことです。知ることはすごく大事。

独学の弊害

独学の基本は必要とすることのつまみ食いです。コレをやりたい、でググったり本を読んでそれをできるようにする。だから、やろうとしたことしか知り得ません。実際のところ、大抵のことは実装するだけなら慣れれば誰でもできます。動くけど業界の人間は誰もやらないような書き方なんてそこら中にあるわけで、実際現場でソース見てもひどいコードは散見されます。残念ながら今はビッグデータの時代、スマホ1人1台の時代です。動くだけのシステムはデータやユーザーが大規模になると簡単に火を吹いて落ちます。最低限の知識は身につけるべきだし、ある程度の企業はそれが求められないエンジニアは雇わないと思います。だから、Googleとか外資はプログラミングのテストしますしね。CS卒が当たり前なので、アルゴリズムとか数学的な思考ができるか確認するわけです。独学で自分が必要なことを学べるのは素晴らしいです。ただし、それで過信してはいけない。独学はあくまでつまみ食い。プロの一線で業界を見てない、そこまでたどり着いてない人間が言う即戦力は前線からすると初心者、独学しかしてない人間は悪癖持ちの可能性すらあります。教室で習って学べることは基本的に講師のレベルが上限になります。稀に講師を越えてしまう生徒もいるけど。なので、講師の知識や経験が限定的であれば、汎用的な能力は身につきません。Cを理解したプログラマRubyとかPythonとか簡単に使えるけど(内部でCラップしてる→CはOSのシステムコールをラップしてたりする、なので)、Rubyしかわからない人がC書こうとしたら文字列関連もまともに処理できないんじゃないかな…。未だにC++使う現場は結構あるし。まぁ、独学の人から教わるとしたら趣味目的なら良いんだろうけどね。プラモしか作ったことない人に車の作り方教わるとかありえないのと同じ。そういうプログラミング教室出身者が実務も経ずに教える側に回るとか言語道断です。

モニター第2期生の募集

それで、今月末で2人は終了するので、2期生を募集します。
条件としては、週1か2で継続的に授業を受けられること。期間は1ヶ月と3ヶ月どちらか。費用は真剣にやって欲しいこともあり、今回から1万円/月いただこうと思います。ある程度資料も揃ってきたので。

内容としては

辺りは基礎として1ヶ月で教えたいです。アルゴリズムとかデータ構造は網羅できないので重要な項目だけ。それ以降は興味に応じて

辺りかなぁ。まぁ、走りすぎてもついてけないと思うので少しずつ。課題多めで手を動かしながら知識を実践に落とし込んで学んでもらう形で。言語はpython, C, C++, Java辺りを中心に目指す業界に応じて選択します。できれば2言語位使える様にしたい。

というわけで、また近日中に募集かけます。今回は2名同じ時間でペアプログラミングとかの導入試してみたい。