新しいプログラム言語の基礎知識を爆速で身につける方法
はじめに
この記事は、Goを全く触ったことのない完全初心者の僕が、プロジェクトで成果を出すために最低限の知識を爆速でつけるために取り組んだ活動の記録です。
なので「これからGoをやってみたいよ」とか「Goに興味あるけどなかなか手が出せなくて・・・」といった方には参考になる記事かと思いますので、ぜひ最後まで読んでいただけるとうれしいです。
またこれから新しい言語に挑戦しようとされている方にとっても、学習方法の考え方は参考になる部分があるかと思うので、そういった方も読んでくれたらうれしいです。
なぜGoをやろうと思ったか
全てのきっかけは友人から「今、新規でプロジェクト立ち上げてるんだけど一緒にやらない?使用言語はGoとTypeScriptだけど」とお誘いを受けたことでした。
ちなみに僕自身、この声をかけられた時点ではGoもTypeScriptも全く触ったことはありませんでした。
この状態でプロジェクトに参画するのは側から見ると正直無謀以外の何者でもないと思います。
多くの人はきっと「どっちもやったことないから難しいかなー」とか言ってお断りする案件だと思います。
しかし僕は「これは自己成長のチャンスだ!」と考え、即答でYESと返事をしました。
「じゃあGoとTypeScriptどっちやる?」と聞かれたので、もともと少し興味があったGoを選択し、Goの開発者として正式にプロジェクトに参画する運びとなりました。
さて、プロジェクトに参加するからには、この全く知識のない状態ではもちろんまずいです。
いくら友人に誘われたプロジェクトだからといって、僕が足を引っ張るわけにはいきません。
なので少なくともGoの最低限の知識を爆速でつける必要があります。
このような「基礎的な知識やスキルを爆速で身につけたい」という目標を達成するにはどうすれば良いでしょうか?
僕の今までの経験上、これを達成するには「実際に自分でコードを書いて、エラーと格闘して、答え合わせして」というフェーズを経るのが一番手っ取り早いです。
もちろん書籍などからインプットをして、というやり方を好む人(向いている人)もいるかと思いますが、僕の場合はやっぱり手を動かしていろんなコードを書く方が、過去の経験でも知識・スキルの定着率が良かったので、今回もこれを採用することとしました。
実際に何に取り組んだか
A Tour of Go
Goには公式サイトにて「A Tour of Go」という学習コンテンツがあります。
友人からも「まずはここをみておくと良いよ」とアドバイスを受けたので、まずはここから取り組みを始めました。
休日1日かけてTourをこなし、Goの基本的な書き方や型(特に馴染みのないポインタ)を広く浅く学びました。
が、Tourを終えて断片的な知識はついたものの、このコンテンツはさほど手を動かす場面も少ない(僕が自信を持ってコードが書けるようになるには全然量が足りなすぎた)ので、正直スキルが身についている感覚が全くありませんでした。
基礎問題を自作
そこで「こういう時にはChatGPTに頼ろう!」と考え、ChatGPTに「初心者がGoでWEBアプリを作れるようになるまでにコーディング力を向上させるための問題を50問作って下さい」とお願いし、自習用の問題を自作して取り組みました。
その際作ってもらった具体的な問題は以下の通りです。
正直、この問題を作成した時点の僕では「どうやってやれば良いかほとんどわからん」状態の問題ばかりでした。
だからこそ、これを一通りしっかり取り組めば最低限の知識はつくなと感じたので、週末の残りの時間をかけてひたすらこの問題に挑戦をしていきました。
※時間的に余裕がなかったので実際は40問目まで実施。
41問目〜50問目の内容はプロジェクトで経験しながら覚えていけば良いかなと思い、一旦保留しました(とはいえ、近々でちゃんと時間とって取り組む予定です)
各問題への具体的な取り組み方としては「問題の内容を把握し要件を言語化して、その内容を実現するためにどんなコード書けばいいか?をネットで調べていく方針」を取りました。
「え?ChatGPTあるのになんでわざわざネットで手作業で調べるのさ?時間無駄じゃない?」というツッコミがめっちゃきそうですが(しかも僕はChatGPTにちゃんと課金もしている)、わざわざ自力で調べているのには理由があります。
なぜ最初からChatGPTに聞かないかというと、いきなりChatGPTに聞いちゃうと親切に答えまで完璧に教えてくれてしまい、僕が悩んで手を動かしてエラーに直面する、という機会が奪われてしまうからです。
「自分で考え、コードを作って、エラーに直面して試行錯誤する経験」っていうのは、やっぱり確固たるスキルを身につけるには必要なステップだと考えています。
だからたとえ時間がかかったとしても、この部分の時間を僕は非常に大切にしています。
ここを大切にすれば、最初のスタートは遅くてもその分基礎がしっかり身につくので、結果的に難し目のコードを見てもあまり面食らわなくなるし、応用も効くようになっていきます。
「損して得とれ」や「急がば回れ」ではないですが、やはり何事も最初の基礎固めが大事だという考えを持って行動しています。
上記の考えを踏まえ、僕は新しいプログラム言語を学ぶときは基本的には以下の手順で進めています。
「ネットで断片的な情報を集める」
↓
「それを組み合わせて実際にコードを作って試行錯誤してみる」
↓
「ChatGPTで答え合わせ」
↓
「わからないところやあやふやなところを、理解できるまでChatGPTにとことん説明してもらう」
今回のGoについてもこのステップで学習を行ったおかげで、本当に最低レベルの基礎知識が身につき、無事プロジェクトに参画することができました。
もちろん、まだまだわからないことはたくさんあるので、プロジェクトのタスクをこなしつつ、わからないところは徹底的に調べて自分の知識・スキルに定着させていきます。
このプロジェクトを走り切った後には「僕の最も得意な言語はGoです」と胸を張って言える状態を目指し、引き続き挑戦していきます。
※なお機械学習のスキル習得も同時並行でやっているので、欲張りですが、そっちも自信持って語れるレベルのスキルを身につけていきます!
まとめ
以上、僕が全く知識のない状態から、Goの最低限の基礎知識を爆速で身につけてプロジェクトに参画した流れです。
あくまで僕はこのやり方が一番自分の性格に合っていると考えてやっていますが、みなさんは新しい言語に挑戦する際にどのような手順で取り組んでいますか?
すごく興味があるので、ぜひコメントで教えて下さい!
Discussion