そーだいなるらくがき帳

そーだいが自由気侭に更新します。

初心者をプログラマーにできるかどうか

blog.3qe.us

これを読んだ感想文を書く。

結論、大量生産は無理やろとは思う。 少なくとも、「プロ」としてお金をもらって高品質なソフトウェアを0から書けるようになるにはセンスが必要だ。 そもそもそのレベルには私もなっていない。 ただ今あるモノになんとなく機能を追加するレベルに引き上げる術はもっとあると思う。 経験則でなんとなくその例をあげる。

ペアプロ

OJTに近いとも言えるし、一番わかりやすい。 ここでペアプロはハローワールドまでの環境構築や実装までを各要素を説明しながらやることを指す。 まずはメンター側が目の前で順番にやってみる。 で次にメンティに同じことをさせる。 そうすると絶対詰まる。

Error: variable 'a' is undefined, line 24

こういうエラーが出るとまず英語を目の前で読む。 で理由を順番に説明して24行目を一緒に読む。 根気よく教える、繰り返す。 そうすると少なくとも何も理解して無くてもハローワールドは出力できるようになる。 次に変数、配列、制御構文、ループ、関数とレベルを上げていく。 ちゃんとペアプロしてめちゃめちゃ頑張れば多くの人は関数宣言くらいはできるようになる。 が多分、これ以上のこと、例えばクラスだったり再帰だったりはメンティの能力に依存するという経験則がある。 で関数宣言までにめちゃめちゃ頑張って教える必要があった場合、多くのケースで再帰やクラスが理解できない。 逆に関数まで詰まらず、かつメンティから来る質問の筋が良い、質問力の高い場合は理解して次のステップにいけるようになる。

調べ方を教える

ペアプロしてるとシンタックスエラーとか出る。 そうすることでエラーの読み方やなんとなくのデバックの方法もわかるようになる。 いきなりデバッカとか使わなくてもprintfデバック程度でも充分だ。 あとはググり方も教える。 まずはエラーメッセージをコピペしてググれと。 それでわからない単語があったらまたググれと。 繰り返すことで力がつくよと。

ここらへんで「プログラミングって大変だし面白くないな」ってやつと「知的好奇心が刺激されて気持ちいい」ってタイプが分かれてくる。 前者はソフトウェアエンジニアに向いてない。

何かを一緒に作る

これ意外とみんな経験ない。 例えば電卓でも良い。 電卓が作れる程度になれば初心者を脱して初学者にはなっているはず。 初学者になれば中級者、上級者と行くための権利は得ていると思う。 そこで大事なのは作るということを学ぶことだ。 一緒に作る理由は「設計をする」ということを学ぶためだ。 設計無くしてプログラミングは出来ない。 プログラミングの手法は教えてもらえても設計を学ぶことは初学者は少ないのではないか。 一緒に作ることでビジネスロジックの分解、変数名、関数への責務の切り分けなど色んな設計を学べる。 ただここの悩ましいことが初めて学んだ設計を人は親だと思う。 ここで良い設計じゃない設計を学んだ場合、長い間遠回りする可能性がある。 が良い設計とはなにか?と言われると答えはないのでそれは運だと思って諦めることにする。

独り立ちと手を動かす

一通り作る方法を学んだらあとは独りで育っていくことを祈るしか無い。 時には初学者から中級者になる途中で壁にぶつかることも有るだろう。 そこで適切なアドバイスが貰えるかで成長スピードが変わる。 初学者がアドバイスを貰える環境ではない場合、最も効率が良いのは手を動かすことだと思う。 本、OSS、Web記事、登壇資料、色々あると思うが読んで、試して、繰り返す。 そもそもコレができる時点で一定数のレベルに居ると思うのであとは暖かく送り出そう。

まとめ

大体ペアプロの時点で続く人と駄目な人は判別がつく。 結局のところ冒頭にも上げたが その上でも引き上げていくか?っていうのはどれだけ投資するかって話なので難しい。 新人教育だとしてもどこまで投資するかは悩ましいところだろう。 これが友人の場合、まぁメンターが「向いてないから諦めろ」というのも有る種の優しさかもしれない。

逆に他にいい方法があれば教えてほしい。

追記(2019/01/05)

人が巡るのもまた恩送りだし、僕は親やコミュニティやインターネットに育ててもらったので恩返ししていくことがこういうことだなって思ってる。