チュートリアル煉獄

何か新しいことをやってみたいと思ったとしましょう。
チュートリアルをやって満足して終了した、あるいはチュートリアルの次に何をするのかわからなくなって終了した、という経験のない人はほとんどいないでしょう。
海の向こうでも事情は同じようです。

以下は[How to escape tutorial purgatory as a new developer — or at any time in your career](https://medium.freecodecamp.org/how-to-escape-tutorial-purgatory-as-a-new-developer-or-at-any-time-in-your-career-e3a4b2384a40)の日本語訳です。


# How to escape tutorial purgatory as a new developer — or at any time in your career.

長い長い間、私は自身のサイドプロジェクトを始めることができませんでした。
何故ならば、どうすればいいかわからなかったからです。

私が構想していた幾つかのプロジェクトにおいて、どうやって作ればいいのか皆目見当の付かない機能がいくつも存在しました。
それを作るために必要な知識の半分すらもわからないのに、どうしてプロジェクトを作り始めることができるだろう、私はいつもそう自問していました。
プロジェクトに手を出す前にもっと学習する必要がある、私はそう確信していました。


## Welcome to Tutorial Purgatory

そうして、私は自分のプロジェクトに手を付けるかわりに、チュートリアル煉獄(Tutorial Purgatory)に飲み込まれていきました。
役に立ちそうだと感じたチュートリアルを読んで、自分のプロジェクトに適用できそうな要素をいくつも見つけたので、私は適切な学習段階を踏んでいると感じていました。
私はYoutube、Udemy、あるいは偶然見つけたサイトで、無限に存在するチュートリアル動画を夜な夜な見続けました。
私はそれらからたくさんのことを学び、そして全てを忘れました。

しかし勘違いしないでください。
私はチュートリアルが大好きです。
チュートリアルを通じて基本を学ぶことは、それを始めるのに最適な方法だと思っています。
ただし気をつけておかなければ、他にやらねばならないことよりもチュートリアルに時間を無駄に注ぎ込んでしまう、ということです。

例として、私はUmedyで`The Web Developer Bootcamp`というコースを購入しました。
これはHTML、CSS、Bootstrap、JavaScript、そしてjQueryを学ぶ43時間のコースです。
内容は素晴らしいものでしたが、しかしコースの視聴を完了したとき、私は自分のプロジェクトを始める準備はまだできていないと感じていました。

プロジェクトを始めるかわりに、私は`The Complete Web Developer Course 2.0`を購入し、全てを視聴しました。
これは`The Web Developer Bootcamp`と概ね同じ範囲をカバーする30時間のコースです。

私はどこで間違ったのでしょうか？
チュートリアルから出ないかぎり間違えないと感じていたからです。
チュートリアルには、何をすべきかを正確に教えてくれる教師が居ます。
そしてあなたは多くのことを学んだかのように感じ、自分がとても生産的になったかのように感じます。

しかし実のところ、取り組んでいるプロジェクトに足りないところを取り入れるためにチュートリアルを学習するのではなく、チュートリアルを学習するためにチュートリアルを学習しているかぎり、あなたはあなたが考えているよりずっと少ないことしか学べていません。


## No Instructions, No Problem

最終的に私は、いずれはチュートリアルの視聴をやめ、快適な空間から脱出し、自分の手でプロジェクトを構築し、手探りでプロジェクトを進めなければならないのだ、ということに気がつきました。

私は、ユーザがアカウントを登録し、質問を投稿し、質問に回答し、コメントを付け、ビデオを埋め込めたりする、Stack Overflowのようなサイトを作りたかったのです。
それは自分の手には余るプロジェクトに思えましたが、そこは気にしないようにしました。
自分に挑戦することにしたのです。
私は最近Ruby on Railsを学びはじめ、そしてそれを楽しいと思っていたので、プロジェクトはRailsで作成することにしました。

初めてのプロジェクトを作り始めたとき、そこにはどうすればいいのかわからないことがたくさんありました。
今でもプロジェクトを作り始めるときはわからないことがたくさんあります。

承認システムの構築方法がわからず、ページネーションの方法がわからず、Rails上でAJAXを使用する方法がわかりませんでした。
コメントシステムを実装するために再帰を使う方法を知りませんでした。

実のところ、そもそも再帰が何なのかすらもわかっていませんでしたが。


## Start With What You Know

しかし、気に病むことはありません。
私は、どうすればいいのかわからないところは考えないことにしました。
かわりに、自分の知っているところから始め、残りの部分は少しずつ理解を深めていくことにしました。

Googleが私の親友になってくれました。
彼がDeviseとoAuthというgemを教えてくれたので、私はそれらを組み合わせて認可システムを作ることができました。
Deviseはユーザがアカウントを作ってログインできるようにする機能で、oAuthは既存のGoogleやFacebookアカウントを使ってログインできるようにする機能を提供します。
私はまず各gemのドキュメントに目を通し、次にそれらをどのように使えばいいかを調べようとしました。
私の親友は、gemの使い方を順々に解決してくれる[素晴らしい記事](https://www.adrianprieto.com/how-to-setup-devise-and-omniauth-for-your-rails-application/)を教えてくれたので、認証システムを数時間のうちに構築することができました。
手詰まりになってしまったときは、Stack Overflowの質問と回答を調べ、記事やチュートリアルを検索して解決することができるようになりました。

私は今でもチュートリアルに多くの時間を使っていますが、今は学んだことをプロジェクトに適用するためにチュートリアルを使っています。


## It’s Okay to Ask For Help

いくら調べても必要としている答えが見つからないこともときにはあり、そのときにはStack Overflowで質問しました。
たとえばネストされたコメントの数をカウントすることができず、[助けを求め](https://stackoverflow.com/questions/48799432/how-to-properly-render-nested-comments-in-rails/48799864?noredirect=1#comment84639127_48799864)ました。

回答のいずれも直接的な答えにこそなりませんでしたが、それらのヒントを糧に、最後には解決策を見つけることができました。
Stack Overflowは決して恐ろしいところではないことがわかりました。

最初のプロジェクトで作成したコードは美しくなく、DRYでなく、リファクタリングが必要で、より効率的な書き方があることは間違いありません。
動作が理解できていないところも多々存在します。
しかし、そんなことは問題ではありません。
私は教師に手取り足取り教えてもらうことなしに、動作するプロジェクトを手に入れたのですから。

チュートリアルに費やした1年よりも、最初のプロジェクトを完成させたときの方が、より多くのことを学ぶことができました。
最も重要だったのは、開発者として成功するために本当に必要なスキルです。
どうやって問題を解決するか、コードを修正するか、独学しました。
そして自分で構築したものを出荷する、という初めての経験は素晴らしい満足を私にもたらしてくれました。

使用者がいない、デザインが残念、といった点は問題ではありませんでした。
自身の力で何かを作るという行為が、私の転換点となったのです。

してみなければ何ができるかわからない。
インターネットで全てを調べることができる。
誰かが何かをやろうとしているところを止めてはならない。



# コメント欄

「StackOverflowはお勧めできないな。回答の3/4は『この質問は既出だ』『質問の意味がわからない』『用語Xの使い方が間違ってる。Yと言うべき』等と全く役に立たないものばかりだ。」
「いや、私もたくさん質問したことがあるけど、大抵は迅速に回答が返ってきたよ。もちろん回答に必要な情報はちゃんと提供しないといけないけど、よい質問にはよい回答がつく。」
「仕事で使うんだ。チームで経験を共有して、素早く学ぶことができる。一人だと詰まってしまう。」
「チュートリアルで何かを学べるとしたら、チュートリアルの直後に何か新しいものを作り出したときだ。」
「React/Reduxで全く同じ煉獄に嵌まってる！Udemyでたくさんのコースを買って、Mediumでたくさんの記事を読んで、そして新しいプロジェクトを作れない。」
「Web開発者になろうと志し、三ヶ月で300時間のコースを完了した。スキルは足りなかった。」
「完全に私だ。ここ数ヶ月チュートリアルを消化してきた。今こそコーディングするときだった。」
「あれ？この記事俺が書いたんだっけ？一言一句同感だ。」


# 感想

最後の段落は何かのことわざっぽいのだがよくわからなかった。


特にJavaScriptにおいて、チュートリアルと実用の断絶はよく感じるところです。
ReactでもVueでもその他の何でもいいけど、チュートリアルではいとも簡単そうにちょっとしたTODOアプリなんかを作成しています。
それを真似してみると、いとも簡単にTODOアプリなんかが手元でできあがります。

そして、その後そこから先に進まない。

何らかを作る目的があってそのために調べている、というのであればチュートリアルも血肉になりますが、目的もなしにReduxとかVuexとか突っ込んでも、よくわからんけどなんか動いためでたしめでたし、で終わっちゃいますからね。
私のことですが。


ちなみにこの記事の著者Tony Mastrorioは、初心者どころか[DevFlight](https://about.devflight.com/)やら[Whiteboardfree.com](https://whiteboardfree.com/)やらのファウンダーだったり。
しかしWhiteboardfree.comは証明書が期限切れなのだが大丈夫か。