我々は意志薄弱でやろうと思っても出来ないんですよ
久々にQiitaにログインして色々と記事を流し読みしており、この記事に出くわしたわけですが、
人類は気づいていた。この勉強の仕方が1番早いということを。
自分ももうすぐ3年ほど独学してきており、独学についての記事ということで読んでみたわけなのですが。なんか色々と書いてあって、
この学習法ではいきなりアプリケーションを作るところから学習を始めていきます
例えば新しい言語であれば、そもそも環境構築がわからない問題にぶつかるはずです。
問題にぶつかったときに初めてインプットをして学び、試すこのサイクルを繰り返してアプリケーションを作り上げていくという学習方法です。
いや、初学者はこのやり方死ぬんじゃね と思いました。
例えば、フォトアルバムアプリを作りたいやねん と思います。
で、この TDDなる方法論でやると、いきなりフォトアルバムアプリを作るという所から始めよ というわけですが、現実的に作ろうとすると、まずフロントエンドで写真の一覧や個別の写真を表示するページ、ファイルをアップするページ、バックエンドではファイルを処理してデータベースに保存したり、データベースに問い合わせをして必要なデータをフェッチするAPIの制作や、誰でもどんなデータでもアップされたらたまらんわけで、ログイン/サインナップなどの認証の仕組み、あとハッシュや暗号化などの最低限のセキュリティの仕組みなんかも構築しないといけないわけで、初学者が何の道標もなくやろうとすると、普通の国民は一瞬で迷子になる。
そもそもいきなり自分でガンガンと問題解決をしていき、インプットを繰り返した上に、最終的にアプリまで仕上げてしまうという本物の漢の中の漢なら、別に人に習わんでもええやん。自分でやるやん。
平均的な人間は意志薄弱であり、その様な強い意志は持ち合わせていないし、積極性も無い。そういう普通の人にどれだけ独学という孤独なルーティンを習慣づけ、脱落させずに目標を達成させるかが本質なんじゃない。
他の記事にも書いたけど、プログラミングってやることが多すぎるのである。 で、どれだけの勇者どもが道半ばで脱落してきたことか。
独学を継続するのに重要なのは、筋トレみたいに、如何に自分の成長を感じられるか、少しづつでも目標に近づいてるかの実感である。
いきなりアプリを作るとか言われても、こんなにやらんとあかん事があるんか、めんどくさ、よく考えたらフォトアプリなんか腐るほどあるやん。っていうか、インスタで良いんじゃね。なんで俺が作らんとあかんねん。アホらし。 とモチベーションがダダ下がりになり、結局途中で挫折するのである。
独学で一番危険なのは、モチベーションの喪失である。いきなり高い山を指し示されても、普通の人は登れません。
初学者はこういう感じで始めよう
個人的に、独学でプログラミングを学んでいこうと思っている初学者は
- 何でも良いから、まず1言語を3ヶ月は集中して勉強する(HTMLとかCSSはプログラミング言語ではないんで、JSでもPythonでも、ロジックのある言語)。どの言語も似てるので、プログラムのコンセプトとか、考え方を理解する。
- その次に、小さなプロジェクトをいくつか自作して動かしてみる。1個か2個くらいの機能のもので全然OK。
- 自作した小さな機能を組み合わせて、少し複雑な動きができるミニアプリを作ってみる。
少し大きめのアプリを作ろうと思ったら、いきなり作ろうとせずに、YouTubeとかUdemyとかで似た感じのものを作っている動画をざっとみる。最初は見ながらコードを書くよりも、ざっと見流したほうが良い。
そうすると、それに必要な技術、大まかな構造っていうのが見えてくるから、要点をある程度書き出しておいて、自分の知らない技術やフレームワーク、コンセプトなんかを部分的に勉強し、ある程度理解できたら、チュートリアルに沿ってコードを真似ていけば、かなり理解が深まる。
で、その後に自分の考えているアプリを作れば、かなりスムースに作れるんじゃないかと思う。
今リアルタイムのヴィデオチャットアプリを作ってるんだけど、socketサーバーやsignaling、WebRTC API、ICE、RTCPeerConnectionなど、今まで使ったことのない技術が色々出てくるんだけど、Udemyのヴィデオをざっと見てある程度構造が分かったので、後は個別の技術やフレームワークに関して2−3日づつかけて勉強すれば、2−3ヶ月で出来そうな感じである。このアプリが完成すれば、リアルタイムのデータの送受信など、かなり色々な所で使えそうな技術が獲得できるわけだ。
基本的に、世界の選ばれしプログラマーにしか使えないような技術は意味がなく、一握りの人にしか使えない技術なんて消えていくだけで、何であっても幅広く普及してこそなのであり、勉強さえすればある程度の技術は理解できるようになってるし、自分のような末端プログラマーにも使えるように、殆どのコアな技術ってAPIやライブラリ、フレームワークの形で提供されている。
まさに、車の作り方を知らなくても、運転方法がわかっていれば車は走るのと同じである。 車を運転するのに選ばれた才能がいるわけではなく、それはある程度練習すれば大抵出来るのである。
というわけで、人の記事を見て、おい、そんなにうまいこと行くわけないやろ と思って、自分の意思の弱さを勝手に一般化しつつ駄文を書いてしまったわけですが、やはり物事の習得には時間がかかり、栄光に近道無しという結論になってしまいました。
特に独学は孤独であり、成長実感がないと続かないと思います。なので、自分なりにモチベーションが保てるペースで、小さな目標をクリアしつつ、楽しんでコードを書いてください。
とりあえず、自分は面倒ならコードを書かなくても良いから、一日1回はVS CODEを開いてみるというかなり低い目標を課して、3年ほど続いてますよ。