プログラミング未経験者がRuby on Railsから始めることは悪か?
もう2年半ほど前になるが、下記の記事が話題だったことは今でも記憶に新しいです。 blog.sumyapp.com
上記の記事の論点は「Ruby on Railsはプログラミング初心者が最初に手を出すものとしていかがなものか」ということで、結論としては「良くない」という内容です。この記事の主張はとても納得のいく内容で、これからプログラミングを勉強しようとしている人は一読しておく価値があります。
一方で、この記事が執筆されてから2年半ほどが経ちますが、やはりプログラミング未経験者がRuby on Railsを最初のツールとして選択することは非常に多いのが事実です。私の主張としては「Ruby on Railsから始めることは悪くない」のですが、とはいえプログラミング未経験者・初心者が手を出す時には気をつけなければいけない点が多々あるため、それらの注意点について記したいと思います。
あらゆることに疑問を持つこと
Ruby on Railsを使うと、その過保護具合(勝手に色々やってくれる)ゆえに、自分の打ったコマンドによって何が行われているのかを理解せずとも先に進めてしまうケースが多々あります。先に紹介したブログ記事でも、scaffoldやmigrateコマンドによって諸々の処理をRailsが勝手にやってくれることは異常だと論じています。
確かにRailsの便利さと過保護具合は表裏一体です。プログラミングを理解している人がその便利さに則って工数を短縮し、効率的にシステム構築を行う点でのメリットは非常に大きいです。
一方でプログラミング未経験者が初めてRailsを使って何かを作るときには、何もベースがない状態で事がどんどん進んでしまいます。したがって、理解したつもりでも中身は結局何も理解ができていないという状態に陥るのです。
このようなやり方で勉強を続けてしまうと、結局最終的には理解度が浅いまま。なので初心者プログラマーの人たちは、Railsが行ってくれること全てに一度疑問を持つようにしましょう。例えば、migrateを実行したときには内部ではどのようなことが起こっているのか、scaffoldコマンドが実際にやってくれている処理は何なのか等です。
全てを完璧に理解しようとしないこと
とはいえ、全てを完璧に理解しようとすると挫折してしまいます。migrateのことを調べたら色々と記事が出てくるし、その内容は難しいものが多いです。
したがって、「疑問を持つ→調べる→理解できる範囲で覚える」という習慣を身に付けましょう。何でも完璧に理解しようとするとドハマりしてきっとプログラミングが嫌いになってしまいます。そうなってしまうと元も子もないので、「まあなんとなくわかったかな。」程度の理解でとどめておき、一通りRailsを使ったシステム開発に慣れた段階で復讐すればいいです。
Rubyをサボらずに勉強すること
プログラミング未経験者がRailsを使って何かを作っている時に多いのが、「Rubyのことをほとんど理解していない」ことです。変数やメソッドくらいなら理解しているのですが、クラスの話はわからない。そんな人達が大勢います。
Rubyをしっかり理解することができれば、iOSアプリを作りたいときのSwiftやAndroidアプリを作りたいときのJavaなどの理解が早くなり、あなたの得たプログラミングスキルは陳腐化しません。対して、Rubyをほとんど理解せずにRuby on Railsだけを勉強している人はそれだけのスキルになってしまいます。正確に言えばRuby on Railsを使ったWebアプリ開発も基礎だけで留まり、実践レベルには至らないです。
したがって、必ずRubyはRailsと平行して覚えていくようにしましょう。プログラミング初心者向けに易しい解説でRubyが勉強できる『たのしいRuby』がオススメ。きっとRubyを勉強していれば、Railsを勉強するよりも楽しくなってくると思います。Rubyはプログラミング言語としての出来が素晴らしく、プログラミングの楽しさをあなたに教えてくれるでしょう。
おわりに
Ruby on Railsはプログラミング学習の間口を広げ、今までだったらプログラミングに興味を示さなかった人や挫折してしまうような人たちを大いに手助けするフレームワークだと思います。しかし、上述した注意点に気をつけながら初心者の人は勉強をしてほしい限りです。
確かに「プログラミングできるようになったぜ」と呟いている人たちを見た時に、Rubyを全然理解できていないような人の場合は「あぁ、もったいないな...」と思うのは事実です。せっかくプログラミングの楽しさの第一段階に触れたのであれば、上手にプログラミングを学び、実際に使えるスキルとして習得できるようになればいいなと思います。