山本ゆうごブログ

山本ゆうごの仕事メモ

オススメのプログラミング学習方法

こちらの記事に感化されて書いてみる。

www.vivi-life.com

「個人差」がかならずあるだろうとは思っているし、「成長過程」に関しては「自分」をサンプルとしている以上は、どうしてもサンプルが少なすぎる。私個人の話と、実際にたくさんのプログラマー向けの研修をしていたときの肌感覚を元に書きたい。

一つ一つ解きほぐしたい。

「一番最初の苦痛から逃げ出さなければよかった」 → 苦痛な時点でしんどくないか

私が一番最初に作ったプログラムは「アクティブなウィンドウに下矢印キーを一秒おきにSendKeyするツール」だった。理由は自分が欲しかったから。ご飯食べながら長い文章を読みたい。コードそのものは10行程度でいいが、勉強にはそこそこの時間がかかった。でも達成感ありまくりだった。自分でも長いこと使っていた。

プログラミングとは料理のようなものなので、自分が食べて美味しいかどうかで上達したかどうかが分かる。試食なしにただひたすらレシピを丸暗記するだけなら、料理はとても苦痛だろう。

その点では、会員制Webサイトというのは、たくさんの人に使ってもらうもの。料理で言えば「レストランを経営してみましょう」に近い。まずは自分一人が使って、楽しい/便利 なものを作るのが入り口としては正しい。

「周りがコードをかけて当たり前の環境に行けばよかった」 → でもその人達も一人でやってること多い

先輩も結構独学でやりきっている。聞けば分かるかもしれないが、先輩方は聞かずに答えにたどり着いていることが多い。もちろん聞けば早いが、聞ける環境にないからといって、あまりハンデだと思わないでいい。うちの研修でも、基本は自分でググる力をつけることを主眼に置いている。「調べ方が分からない」のであれば、調べた方を聞いた方がいいとは思う。

「周りに質問に答えてくれる人をそばにおく」 → なくても構わない

逆に聞かないと進めないとなると、なぜ一人で進めれないかを考えたほうが良い。イマドキは掲示板で聞けるし、ちょっと検索してみると似た質問を投げている人もいる。質問を文章にする能力があれば、検索はできるはず。検索ができないとなると適切な質問もできないと思う。

「プログラミングの勉強の要は、読書によることも多い」 → 月間20万円も買わなくても良い

月間20万というと、2000円の本が100冊なので、読めないのではないか。勉強の順番をつけて順に買っていけばいいと思う。私が初心者の頃に買ったのは、CとPerlの言語の教科書あとSQLの教科書。それ以降に覚えた言語はWebのリファレンスのみで分かるようになった。

「アウトプットをどんどんすればよかった」 → これは絶対にそう

アウトプットはひたすら繰り返す方がいい。だからアウトプットの単位が「会員サービス」だと大ぶりがすぎる。「ちょっと便利なコマンドラインツール」くらいを連発するのがいい。

「コードリーディングをもっとすればよかった 」 → 目的がないと読めない

漠然と読んでも仕方ない。コードリーディングのキモは、「自分がやりたいことのパクリ元を探す」ということだと思う。やりたいことが強くないと読む気も起きないのではないか。

「最初から大きな理想を描き続けない」 → 絶対にそう

今日一日で完成するものを作るというのが理想。下ごしらえはしていいけど、今夜食べるまかない飯も必要。

「最初のプログラミング言語でRubyを選択してよかった」 → Rubyなの?Railsなの?

プログラミング初心者がパニクってるのが、自分がやってるのがRubyなのかRailsなのかが混乱しているというところ。セットでやろうとするからしんどい。

学生さんでサクッとWebサービスを公開しているのをみると、PHPで無料のレンタルサーバーで公開している。覚えることが圧倒的に少ないので公開は楽。ゴリゴリに自分でHTMLを書かなくちゃいけないけど、HTTPとHTMLの理解という点では理解しやすい。そして何よりも安いサーバで公開できる。ことWebプログラミングという観点では、PHPから入る方が理解が早いと思う。

逆にRailsのみで入った人で、scaffoldだけでtodoリストを作って「何が起きているかが分からない」という初心者もいる。FizzBuzzが書けないレベルでWebサイトが作れてしまっているので、「逆にどこから勉強していいのか」という話になる。PHPでフレームワーク無しで書いてみることで、フレームワークの中でやってくれていることが肌でわかると思う。

本当のプログラミング初心者には、以下の順に覚えてもらっている。

  • rubyのコマンドラインのプログラムを大量につくる
  • SQLを単体で覚える
  • フォームからDBにエントリーする仕組みをSinatraで作る(自力で全部書く)

業務で会員向けのサイトを実装するときにはRailsを使うけど、裏で何をしているかは自分で理解しないといけないのでトレーニングの段階では浅めのフレームワークで勉強する方がいい。

オススメの書籍

一つか2つプログラミング言語の本を前から順に習えば、あとはネットの情報でなんとかなるのではないかと思っている。

ネットの情報の中でも単なるトラブルシューティングではなく、ネット上の公式ドキュメントにあたるということ。rubyならrubyリファレンスマニュアル。phpならphp.net。公式ドキュメントって、イラストがないのでそっけないのだけれど、書いてることは正しい。公式ドキュメントが読みづらいなら、公式ドキュメントを読む力を身に着けた方がいい。

検索にもこつがある。

  • サジェストされる第二キーワードもよく見ながら検索しようね
  • 英語でググることで、より多くの検索結果にヒットする
  • site: 演算子で公式ドキュメントの中だけを検索できる

など。特に英語での検索は大事。たまーに「パイソン ループ」というカタカナで検索している初心者がいるが、英語の方がいい。

Linuxコマンドなどは、書籍がどうというよりも、man とか --help で、ドキュメントをみた方が手っ取り早い。ググる必要さえない。英語だけどそのままカタカナとして読めばいい。本を買う事自体はダメではないが、manから逃げる姿勢はほんと良くない。

「コンピューターはグローバルで便利なもの」なんだから、プログラマーが勉強する際にもコンピューターをフルに使いこなせた方がいい。

あとエラーメッセージも初心者が軽視しているポイント。画面に出た文字をちゃんと読むということは超大事。

プログラミングの勉強はどの道を進んでも結局重要 → その通り

ここに、結構大事なことを書いている。

大学の実験結果を解析する時、Excelでちょこっとマクロを組んだり、データをRubyに流し込んで解析をするみたいなこともできるようになります。

逆に、ここからスタートするのが健全なのではないかと思う。Excelをたくさん使ってる人のためにExcelVBAを書いてあげる。そして業務効率があがることでプログラムが発揮した価値を確認する。まさに職業プログラミング。個人向けWebサービスを作るだけが仕事じゃない。

最後に「Webサイト以外のプログラムの用途」が出てきたが、プログラムってのは人間の見えないところで働くケースも多い。Webサイトの形で動いているプログラムはほんの一部。プログラムを学ぶこととWebサイトを作ることはイコールではないし、それ以前にプログラムが社会に与える影響はWebサイトでのみ発揮されるものでもない。ラズベリーパイで自分の家の家電を自動化するというのでも十分プログラミングだし、価値も発揮されやすい。