いやいや何言ってるの、ネットならタダ、本はお金がかかるよ?
わざわざ買って、クソの役にも立たなかったらどうするの?
ごもっともですね!
ただ、これが言える人は、もう「初心者」ではなく「経験者」だと思います。
通り過ぎてしまうと忘れるものですが、初心者だった時、驚くべき勘違いでハマったことはないでしょうか?
もちろん経験者でもハマる事はありますが、違うのは「その後の対応能力」です。
初心者は経験者より地雷を踏む可能性が高いのに、地雷の解除方法を知りません。
そんな初心者がグーグル検索だけだと困りそうな理由を挙げてみます。
(具体例は unity、C# になります)
検索の難しさ
そもそも検索ワードがわからない
数値を文字列として表示するとき、フォーマットを指定したい(少数 3 桁までとか)。
こんな時、慣れている人の検索キーワード。
数値 文字列 フォーマット
こんな感じ? 本当に知っていたら String.Format とかもキーワードに含めるでしょうか。
より深い情報を知りたい場合、キーワードは英語だけの方が情報にたどり着きやすいことも。
一方、初心者のキーワード。
画面に出したい 数字
言ってることはたいして違いないものの、この検索ワードでは望む回答は得られません。
どういう用語がヒットしやすいか、勘が働かないのです。
ネット記事は、(初心者に)わかりやすく書いているわけではない
検索してトップに出てくる記事は、記事を書いた人の覚書として書かれているかもしれません。
ソースの一部だけ抜粋していても、初心者は「これをどこにいれるの?」と狼狽えるのです。
objs = GameObject.FindGameObjectsWithTag(TagName.PlayerWall); if (objs == null || objs.Length != 1) { return; }
例えばこんな感じの unity (C#) のコードがどっかのサイトに書いてあったとして。
コピペしただけじゃエラーになるコードです。
人間は未知なるものに強いストレスを抱く生き物。初心者である貴方はエラーに強い吐き気を感じ「もうわからん。無理。このサイトはクソ」となること請け合いです。
その昔、研修中にエラーでパニックを起こした人がいました。
曰く、「今まで生きてきて否定されたことがなかった」からだそうです。
エラーとか不具合の指摘、最近だとプルリクのコメントなんかを、「人格否定」と感じる人、たまにいます。
例えばこんな基本事項、
- 変数の宣言をどこにいれればいいのか(そもそも変数はなんなのか)
- public、protected、private の差はなんなのか
- using 記述の意味とか
経験者であれば「言われなくてもなんとなくわかっている事」で容易くつまづいてしまいます。
「Hello world! がわかっても、上記の問いを理解することはありません。
Hello world でなるほどわかった、となるのはむしろ経験者
間違えた情報にたどり着く
Aを解決する方法を検索し、違う情報に惑わされる…ということがあります。
- C# ではなく Java の情報に行きついた
- unity ではなく Windows.Forms の情報だった(OnApplicationFocus で引っかかった人、いるはず)
- ダウンロードした環境は unity5.x のものであり、unity2021 ではなくなっていた
これらも全て、過去からその知識に向き合ってきた人なら、
- そもそも言語が違うとすぐにわかる。むしろ Java の情報を読み砕いて C# の情報にする
- Windows.Forms は Windows でしか使えないとすぐ気づく
- Obsolate や Deprecated といった状態で、似ているけど別の答えがあるだろうと探す
こんな風に惑わされることもなく次へ進めますが、初心者にとっては袋小路。
そろそろ Stack Overflow のような質問箱に助けをもとめたくなっているでしょう。
リファレンス・マニュアルを見ろ
一番正確、かつ早く情報が得られるのは特定の言語や、開発環境に用意されたリファレンス・マニュアルです。
そこには、多くのググれ勢が追記で「ただしリファレンスマニュアルな!」というのも頷ける情報の源泉です。
た、だ、し。
このリファレンスマニュアル(辞書)、やりたいことを上手く言葉にできず、グーグルの検索ワードすら思いつかない者にとって、上手く使いこなすことは非常に困難です。
また、十分な日本語マニュアルがないこともあります。
サンプルコード見ればそこに答えがある、というのも経験者ならではの言葉で、初心者にとっては応用力などゼロ、たまたまコピペして上手く動くという強運でもない限り、そこにあるパズルのピースから、答えを導き出すことは出来ないでしょう。
本の利点
検索する必要がない
本の場合、その本で完結するよう情報が誘導されているので、未知の情報を繋ぎ合わせる必要がありません。
間違えた情報に行きつくこともなく、本によっては実行可能なプロジェクトまでついていたりするので、初心者にとっては遥かにストレスが少なく済むでしょう。
本に書いてある語句を、(わからなければ)自ら検索し、深く知るのは大事。
ただし、本は万能ではない
「今、自分がやりたいこと」を実現するための答えが本にあるとは限りません。
例えば unity のログをビルドした環境でも表示したいから、その答えが書いてある本を探す…といった探し方はほぼ無意味です。
本は、とりあえず書かれている通りに進め、動くことを喜ぶ。
それが終わったら、少しずつ改変、改造していく。
そうして言語や開発環境に慣れてくると、検索の下地が出来てくる。
そこから、本に頼らず検索の世界に足を踏み入れましょう。
自分の知らない(でも知りたい)分野を、体系的に掴む足がかりとして、本はとても有用だと思います。
初心者にとっての本は「よちよち歩きまでの補助」。でも、そこから先は自分で歩いていく必要があります。
本の選び方
本は無数にあり、情報サイトほどではないにしても、バグのあるソースコード掲載してたり、間違えた知識が書いてある本もあるかもしれません。
そういったものを避けるために、私はこんな風に探しています。
- 「C# 本 おすすめ」などで検索し、個人ブログで複数人が勧めているものをピックアップ
- その本に対して、amazon のレビューを確認。自分のレベルに合わせたコメントしている人を参考にする(例えば、初心者なのに上級者っぽい人が「これはいい!」とオススメしている本は役に立ちません)
- 内容が自分の知りたいものか更に判断するには、本屋で実際に手に取ってみる
- (可能であれば)本は2~3冊買って、読み比べる
最初に手に取る本は「いいもの」を選んだ方が、その後の自分のためにもなるので慎重に選びます。
(自分にとって「いいもの」であることが、とりあえず一番大事)
2~3冊の部分は「うわ、面倒そう…」と思うかもしれませんが、読み比べる事で各本の情報の偏りが補完できるので、オススメです。
さいごに
ここまで読んできて、プログラムが組めるようになるまでは、ちょっと道のり長いな…辛いな…と思うのであれば、プログラマーの未来は明るいです!
なぜなら、それだけライバルがいない「ブルーオーシャン」になる可能性が高いからです。
仕事にしようと思っている人は、そんな視座もあると心に留めておいてください。
逆を言えば、皆が「いい!」というものは程なくしてレッドオーシャンになる可能性があります。
そこそこ名前は出てくるが、Best3 に入らないような言語をきわめておくのも、高収入を得られる一つの道です。
Python とか…不当に技術者が買いたたかれる未来なきよう、祈っています…。