「ググれ」って言われてググるな！【初学者べからず集 その１】

某 QA サイトで初学者の質問をかなりの数見ているのですが、初学者がやってはまずいことがなんとなく分かってきたのでまとめてみます。
**私の活動範囲が php に寄っているので他言語では若干の違いがある可能性があります。当てはまらん箇所はごめん＾＾；**

プログラミング初心者に見てもらいたいですが、コーチする方にも参考になると思いますので、サクッと読んでくださいw

# 1.「ググれ」って言われてググるな！

まずはタイトルのやつから。
「最近の若いモノ」なら一度は「ググってから質問しに来い！」って先輩に言われたことがあると思います。が、プログラミング初学者の場合ググった後に再度質問に行っても同じことを言われます。理不尽だわｗ

## ググっても正解は出てこない

本質的には「検索語句の選定」と「結果ページの評価」に問題があるので根深いですが、お手軽(?)な解決手段だけ提示します。

### プログラミングで困ったらまず公式サイトを探せ

言語学習において最も基本となるのは「用語の定義」の体系的な知識です。これがないと、有識者と会話できません。当然ですが、適切な用語で検索できなければ、正しい答えにたどり着くこともできないです。
まずは公式サイトで疑問が解消できないか確認しましょう。

###学習方法としてオススメなのは、以下のステップで進めることです。
・基礎学習用の本で、各種用語の定義を体系的に学ぶ(公式サイトが読めるようになるまでの繋ぎ)
**教本は、自身の開発環境になるべく近く、デバッグまで言及があるものがいい。**
・公式サイトが読めるレベルになったら、公式サイトを常に頼る
・公式サイトで理解できない箇所をググる/または先輩に聞く
教本をサクッと読んで、後は公式を頼るってのが最も一般的な学習方法だと思います。

**なお、ここでいう公式とは「言語」「フレームワーク」「ライブラリ」あたりの公式サイトを指します。最近は、チュートリアルも用意されていたりするので至れり尽くせりです。**

##補足：エラーメッセージは最初はググるな！
エラーメッセージは、多くの場合、タダの英文です。ググるのではなくて、まずは翻訳しましょう。
翻訳しても意味がわからない(うまく翻訳できない)文章の場合、昔からプログラミングで慣習的に使われている言い回しの可能性があります。そこではじめてググると良いです。

# 2.「なんか作ってみるとイイよ」を真に受けるな！
少し成長し先輩に「次何すると良いですかね？」って聞くと「なんか作ってみるとイイよ」ってススメられます。
**真に受けるな!**

何かを作るには、要件定義/設計作業ができないとまともに進められません。
何らかのシステムを作るのは、いわゆる「上流工程」があることを知った上で、多少かじってから始めると良いです。
要件定義するために調査が必要とか、知らないと気が付けないでしょ。
多少かじった後なら、「なんか作ってみる」のは学習効果は絶大です。

# 3.初学者向け教本を信じ切るな！
php 系の書籍は実務で使うと問題が発生するサンプルとか平気であります。あとどうしても内容が古くなります。
「基礎を体系的に学ぶ」「言語で使用する共通用語を正しく使えるようになる」「環境構築に時間をかけない」を目標として割り切り、それが終われば本は卒業して公式サイトを頼るのが良いです。

## 正しい書き方は初学者向けの教本では学べません。
デザインパターンやセキュリティに言及した体系的な学習ソースを別途用意してください。この辺の学習になると、言語の特性やコーディング以外の工程(上流工程やテスト、デプロイや運用等々)の知識/経験が求められるようになるので、初学者からは卒業しているかもしれませんね＾＾

# 4.面白そう！で学習教材(サンプルシステム)を選ぶな！
学習用の教材、ちゃんと選択しておかないとエライ目にあう可能性があります。

## スクレイピング
コードの中身を理解せずコピペで動かせば、最悪訴訟リスクを抱えます。
また、初学者のスクレイピングはサイト運営者に簡単にバレますｗ
入門書でスクレイピングをすすめているようなものは捨てたほうがいい！

個人的には、自身で適当な期間サイトを運営したあとで、学習すると良いと思います。
サイトが嫌がるアクセスを理解し、自身のコードに責任を持てるようになってから手を出してください。

## お問合せフォーム
ちょっと間違えるとスパムの発射台になります。
＊まぁそれ以前に正しくメールを送信することすらしんどいですが。

必要な知識が多岐にわたるので、インフラやミドルウェア、インターネットの仕組み等、「なんとなく必要な知識にたどりつけるようになった」後で、手を出してください。

(ローカルの実験程度であれば、初学者なうちに手を出しても良いですよ。)

## アップローダ
画像アップローダのサンプルを時々見かけます。
**すんげぇ危険だからな**
こいつはやらかすとどこまでも危険なやつです。
サーバ乗っ取られます。

十分なセキュリティ知識と、攻撃事例を解析した上でチャレンジしてください。

## EC サイト
まぁ無い。
初学者向けの教本では、読者が使用したことがある身近な Web システムとしてサンプル採用されているのだろうけど、初学者が学習で学ぶ範囲では実用性は皆無だし、設計も一般的にひどい。

似たようなものに会員管理システムがあります。
世にある会員管理システムってそんなに簡単じゃないからな！

**絶対に外部に公開してはいけません。**

実際のサービスが全く別物だと理解できた後なら、ローカルで学習教材にしても良いです。

## 無難に掲示板から始めるのが良いと思うよ
POST/GET の基本、DB 操作、html 出力と php を使用する上でごく普通に必要な技術の基礎が学べるので初学者には最適だと思います。
出力(と投稿内容)だけ気をつければ、公開してもそれほど危険はないはず。

あー session かぁ。。。やつは別途学習してくださいｗ

## 無難じゃないなら cli アプリもありかも
実は、php って初学者には難しい言語だと思っています。
ブラウザを使った表示が前提になるので、html/css/JavaScript あと web サーバを同時並行で覚えなければなりません。
純 php な学習であれば、cli(Command line interface)用のシステムで学習するのも良いかも。
ただ、学習用の資料が少ないんですよねぇ。。。

# 余談 1.「うまくいきません」はイラつかせるんだぜぃ

エンジニアは情報量のない言葉をキライます。
「うまくいきません。どうすればよいですか？」ってのは何の情報もないので「ググれ！」って言われておしまいです。

**結論として「うまくいきません」って言葉を使うケースは情報量はあるけど、そもそも「うまくいきません」アレルギーの人もいるからな！気をつけよう。**

先輩に相談するときは「うまくいきません」の代わりに、うまくいかないと思った具体的根拠を伝えましょう。
・XXX を想定したテストが通らない
・出力結果が想定していた内容ではない
・エラー XXX が発生して実行できない
等々。

余談の余談だけど、こういった相談の場合、次のアクションが自身で決められないのが本来の主旨だから「XXXが発生していますが、次に取るべきアクションが決められません。切り分けるためのヒントを教えてもらえますか？」とか言うと、手伝ってもらえるかも。

# 第一弾は以上！気が向いたら第二弾書きます。