作りたいものがありすぎる

40歳を過ぎてプログラミングを始めた人の顛末とこれからなど

雑食的プログラミング学習方法10箇条

  1. 猿からはじめろ
  2. 金を惜しむな
  3. 最後まで読むな
  4. メモを残せ
  5. errorの出力内容を翻訳して理解しろ、そしてググれ
  6. 駄目なら次、メディアを変えろ
  7. 俺の頭が悪いんじゃない、まだ追い付いてないだけ
  8. 重複部分もひとまず目を通せ
  9. 上手くいかない苦労が後から効いてくる
  10. 出来たら思いあがれ、そして思いあがるな

実は7月からまとまった時間が出来て、この1週間程、新たな技術の勉強を始めて、今やっと最初の目標の環境構築ができる様になりました。(docker-composeで nginx, MySQL,Laravelの開発環境が作れました) その際、理解するまでかなり紆余曲折があって、よくわからない新しい技術の勉強の仕方みたいなものに気付いたので、まとめておきます。

Dockerでの環境構築方法ってプログラミングというよりインフラですが、まあ、学び方は同じだと思うので、多めに見てください。

猿からはじめろ

新しい事を覚えようと思ったら、一番に言いたいのは、とにかく一番簡単で内容の薄いメディアから始めるのをおすすめします。 今回私が失敗したのは、ちょっと上級者向けの本を買って学習を初めてしまった事です。そういうメディアは、多くの暗黙の知識を前提に物事を書いているので、往々に省略された事柄や校正ミス等で、その通りにやっても上手く行かない事が多々あります。そいういうのに一度ハマるとリカバリーがとても難しくなります。解決できないで一時間も悩むと精神的にも参ってきてやる気を無くす可能性があるので、なるべく懇切丁寧で、判りやすいものから始めるのが良いでしょう。

金を惜しむな

ネットには無料のコンテンツが山の様にあります。とても参考になるものもありますが、本当の初心者向けコンテンツというのは、実はとても手間暇がかかりコストがかかるのです。 これは、まったくのパソコン初心者に、講師としてExcel,html,css等を教えていた経験上、確信を持って言えます。 最近プログラミングスクールでの学習がなにかと話題になりますが、授業料がそれなりにかかるのは、教材の作成や、直接教えるコストが馬鹿にならないから、という面も多分にあると思います。

自分自身の力で調べて学ぶスキルに自身がないのであれば、金を惜しまず、スクールなり、高価な本なり、有料コンテンツ等で学ぶべきでしょう。そして、知識だけではなく、『学び方』を学ぶ事を意識するとよいでしょう はい、先生今大事なことを言いましたよー。

最後まで読むな

本や動画の話ですが、ごく基本的な事柄以外は、無理に全部を読んだり見たりする必要は無いと考えています。特に、自分が目的意識を持って学習している時はなおさらです。 今の目標と異なる内容であれば、見出しに目を通して記憶にとどめておくだけで大丈夫だと思います。しかし、基本的な事柄ばかりのものであれば、理解は出来なかったとしても、軽ーく目を通す位はしておいた方が良いでしょう。こんなものがあるんだ、という情報の見出しを保持しておくことが後々役に立つことがあるでしょう。

メモを残せ

プログラミングを覚えるのであれば、メモは絶対必要です。というか、この自分だけの蓄積が自分自身の重要な財産になる筈です。 私は Evernoteや Boostnoteを使って、新しい知識に関しては、とにかくテキストベースメモを残す様にしてます。

f:id:sakamata:20200708164854p:plain f:id:sakamata:20200708232518p:plain

そして、ググってみるのと並行して、このメモでも検索をします。よく使うコマンドとか、出力されたエラーとかurlのクリップとか、Qiita記事のコピーとか、とにかく蓄積させておきます。ツールによってはカテゴリーやタグを付けられるので、私は結構丁寧に分類をしています。 特にサーバーの環境構築に関しては、Qiitaの記事をベースに、自分のメモを追加して、このメモを見れば全部同じに作れる。って位丁寧にコマンドやら注意点を書いて、独自のノートにしてます(なので公開は出来ない)

errorの出力内容を翻訳して理解しろ、そしてググれ

これはそのままです。エラーメッセージの英語がわかんない場合はGoogle翻訳にかけて何て怒られてるのか理解しましょう。さらにその英語文をそのまま検索して、海外のstackoverflowの記事しかヒットしなくても、ちゃんと見に行きましょう。英語のサイトでもブラウザの翻訳機能で日本語化して読めば、結構理解できるし解決できる。さらにそのエラー解決方法が、日本語記事になってなければ、自分が記事を書いてWebに残しておけば後に来た人が助かる事になる。

駄目なら次、メディアを変えろ

それでもなんだか覚えられない、ピンとこない、やる気が出ない、成果が出ない。といった事であれば、そこで中断して次に行きましょう。今の自分に合った知識と情報が絶対どこかにある筈です私はこの一週間で、300ページ越えの書籍を2冊買って実践してましたが、実際に読んで実践したページは100ページ程でした。 でもこれじゃ駄目だと思って、次に動画を探して2時間ほどの実践動画を見ながら実践してみました、しかしこれも、最後までは完走できず、今度は別の基礎的な説明をしている、ウェブサイトをいくつか読み、実践して、やっと自分の目標だったものを構築できるようになりました。

しかし、ここで見て来た本、サイト、動画での知識は、メモを残しているので、時間が経過して技術的賞味期限が切れない限り、いつでも調べられる情報の見出しになっています。

俺の頭が悪いんじゃない、まだ追い付いてないだけ

今回購入した2冊の本は、今の自分にはハードルが高かったです。特に、設定が上手くいかず散々詰まって、問題を解消しようにも、学びたいDockerとは異なる部分でのトラブルだったので、まったくモチベーションがあがりませんでした。(jenkinsのスレイブのssh接続の設定が上手くいかないとか、今の自分にはあまり必要のない事柄で悩んで諦めた) また、自分の目指す方法とは異なる方法論で記述された本の設定方法が自分に合わず、しかも上手くいかなかったので、これも早々に諦めました。どちらも今の自分のレベルでは理解が追い付かない、重要な事柄だったのかもしれませんが、それが出来ない、理解できない事で気に病む事はないと思ってます。

重複部分もひとまず目を通せ

複数のメディアでつまみ食い学習をしていると「最初の方は、どれも同じこと言ってるなー」と思って、ぱらぱらと飛ばしてしまったりしますが、実はこう思える事ってすごい事です。だってそこまで理解が進んで、説明してもらわないでもわかる様になっている訳ですからしかし、その重複部分も流す程度で良いので、ひとまず目を通すことをおすすめします。自分の理解があいまいだった事柄や基本概念が、違う人の言葉で綴られているのを見る事で、より物事の理解が進むと思います。

上手くいかない苦労が後から効いてくる

で、この辺まで来て色々つまみ食いしてい、今の自分に丁度良い教材に出会えると、以前上手く行かなかった際に、苦労して調べた事とか、試していたことが、効いてくる時が来ます(断言)学習曲線が一気に上方向に伸びる瞬間とでも言いましょうか。「あ、このエラーは前にハマった〇〇をしていないからだな」とか、「〇〇の状態なら、次に□□をさせて、そのコマンドは前にメモしたあそこに…」みたいになって来る瞬間が来たらこっちのものです。

出来たら思いあがれ。そして思いあがるな

そして出来たら思いっきり喜びましょう、部屋で踊ったり、人に自慢しても良いと思います。

自分自身の学習力の成果と、多くの先人が残したメディアの力を借りて出来た成果です。人目も憚らず思いっきり喜んでください。そして、俺ってすげえ!と自分を褒めてやってください。

そして学習の為にメディアとして残してくれた先人に最大限の感謝をしましょう。あなたがそれを理解できたのは、先人がメディアを通して、あなたにそれを教えてくれたからです。思いあがった後は、謙虚になって、いつかそのノウハウを次に来る誰かに、伝えてあげられるようになると良いと思います。

今回の学習でお世話になった書籍、サイト、動画等

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

  • 作者:山田 明憲
  • 発売日: 2018/08/25
  • メディア: 単行本(ソフトカバー)

試して学ぶ Dockerコンテナ開発

試して学ぶ Dockerコンテナ開発

qiita.com

tech-lab.sios.jp

tech-lab.sios.jp

tech-lab.sios.jp

note.com

最終的にこちらのサイトの通りに構築したらできる様になりました。 ありがとうございます。

www.membersedge.co.jp

おまけ

たまたま項目が10にまとまったので、私の大好きなアポロ計画のフライトディレクターの『ジーンクランツの10箇条』を紹介します。

引用元: その13「管制官の訓練に出演」:新米宇宙飛行士最前線! - 宇宙ステーション・きぼう広報・情報センター - JAXA

  1. Be proactive(積極的に行動せよ)
  2. Take responsibility(自ら責任を持て)
  3. Play flat-out(目標に向かって脇目を振らず、速やかに遂行せよ)
  4. Ask questions(分からないことは質問せよ)
  5. Test and validate all assumption(考えられることはすべて試し、確認せよ)
  6. Write it down(メモをとれ)
  7. Don't hide mistakes(ミスを隠すな)
  8. Know your system thoroughly(自分の仕事を熟知せよ)
  9. Think ahead(常に先のことを考えよ)
  10. Respect your teammates(仲間を尊重し、信頼せよ)

f:id:sakamata:20090417180922j:plain

これでアポロ13号クルーを無事帰還させたと思うと胸熱。

関連記事: sakamata.hateblo.jp