皆様はじめまして!今回【一$入魂】というタイトルでPHP初心者中級者向けコラムを担当させていただきます、寺井と申します!
至らない点もあるかと思いますが、1PHPerの視点として見ていただけると嬉しいです!
初心者中級者ってどれくらいの人のことを指すの?
今回、コラムを書かせてもらうにあたって読んでもらう方はどのような方か、という選択は非常に悩みました。
というのも、初心者中級者という括りはとても幅が広く、個人個人が考える初心者中級者の振り分けというのは多種多様なのです。
「とりあえず掲示板を作れたら初心者脱却」と考える人もいれば、「フレームワークのソースコードを読むようになったらようやく初心者脱却」と考える人もいます。
実際関西PHPUsersGroupにて初心者勉強会を行ったことがありますが、その時々の内容によって参加者も変われば懇親会で「簡単すぎた」「進むのが早すぎた」とマチマチな反応を頂きました。
ですのであえて今回は対象を**PHP言語からプログラムを始めた1-2年の方**と決め打ちしてコラムを書かせていただこうと思います。
かなりニッチかも知れませんが該当する方に読んでもらえることを祈って。
今回は導入部ということであんまりコードも出てきませんがあしからず!
何も知らないは不利でもあるがアドバンテージでもある
さて、対象を勝手に決めたところで本題に入って行きたいと思います。
僕自身、大学時代にPerlを遊びで触っていた程度の実力で最初の会社に*コネ*で拾ってもらった身なので、
最初の頃は会社としては全くもって役に立たない存在でしたが今はなんとかかんとか生きていけるようになりました。
勤め先が規模の大きい会社ならば研修や社内勉強会など実務に必要な知識を得る時間があったりしますので半ば強制的に知識の蓄積が行われます。
外部の勉強会への参加を推奨しているところもありますし、そういったところなら良いですね、効率よく初心者から脱却する為のルートが提示されているわけです。
しかし、このような理想的な環境を誰しもが享受出来るわけではありません。
レガシーなコードに縛られ続ける所や毎回スクラッチ開発なところ、バージョン管理をしていない所もまだ多いのが実情ですし、
PHPを扱う会社には小さな会社も多く即実務に当たらなければならないところも多いと思います。
プログラムのプを学び始めた段階で社内のみで必要とされる即戦力技術だけしか学べず、新しい技術を学ぶ機会がないという方も多いんじゃないでしょうか。
しかし、これを読んでいるであろう皆さんには大きな武器があります。「何も知らないけど学ぶ意欲はある」という気持ちです。
知らない・わからないという言葉は3-4年経ってくると徐々に使いづらくなっていきます。
つまり【何も知らない】がアドバンテージになるのは今が鮮度満点、使いドコロは **今!** というわけなんです。
今なら「○○がわからなくて~☓☓したいんですけど」といったことを会社の方でもいいですし、勉強会でも聴きやすいはず。
聞くは一時の恥、聞かぬは一生の恥ってやつですね。僕はこのタイミング逃して今苦しんでいます・・・
車輪の再開発でもいいじゃないか
昨今ではComposerも登場しVagrantで各開発環境を個別に保持することがとても簡単になりました。
PHPに限らずフレームワークという存在も大きいですね。すでにパッケージ化されたコードが多種多様存在しています。
しかし便利・簡単というのは裏を返すと、根本の原理を理解しないまま利用できることになります。
例えばCakePHPでユニークIDを生成してみましょう
“`php
# CakePHP
App::uses(‘CakeText’, ‘Utility’);
CakeText::uuid();
“`
これだけでRFC4122で規定されているユニークIDができてしまいます。ですがこれだけを見て何をやっているか、はじめから分かる人は居ないと思います。
これを完全にスクラッチで書くと
“`php
# Sample.
public static function v4()
{
$uuid = sprintf(
‘%04x%04x-%04x-%04x-%04x-%04x%04x%04x’,
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,mt_rand(0, 0x3fff) | 0x8000,mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0xffff)
);
return $uuid;
}
“`
書いていてよくわからなくなってきました。あっているか精査するのも一苦労です。
俗に言う車輪の再開発というものですし、テストが出来てない状態なのでこのコードが想定通りの動作をするかどうかということも保証してあげなくてはなりません。
すでに世の中に存在するものに対してまた一から作るというのは業務上では完全な無駄になります。
ですが、原理を理解しないまま使用し続けると、いざ何か応用をするという時や今回の例で言うとCakePHP以外を使うよ!っとなった時に一苦労します。
差し迫った状況でなければフレームワーク内のソースコードを読むだけでも良いですし、自分で作ってみて答え合わせをソースコードでしてみるのもいいと思います。
参考書を読んでスキルアップをするというのもとても良いと思うのですが無料でインターネット上に散らばる優秀なコードを利用して勉強するのも悪くありません。
車輪の再開発をすることによって先人の方が歩んだ道を辿るというのは業務効率を除くととても理にかなっていると思っています。
アウトプットは臆さずに
このサブタイトルはある意味自分への戒めでもあります。
デキる人はGitHubでプルリクガンガン送っていたり、思ったことをアウトプットしていき勝手に成長していきます。
しかしこういう人はいないでしょうか?
*「自分が考えた解決法や、コードは既に世に出回っているものだしわざわざブログなんかに書いても間違い指摘されたらどうしよう」*
そういった考えを僕自身は持っていました。ですので今現在この記事を書いている間もビクビクしております。
打たれ弱いんですね・・・
けれどこれからPHP頑張るぞ!という人には僕のようになってもらいたくないと言う思いで強くアウトプットを勧めます。
アウトプットをするブログを自分で作るというだけでも軽い勉強になりますしね。
実際に「RFC4122」という言葉が上に出てきましたがこれを検索した人はいるでしょうか?皆さん当たり前に使ってるものなんですが
意外に日本語の情報が少ないんですよね。こういった状況というのは今後多く目にすると思います。
簡単な問題なはずなのに調べてもリファレンスくらいしか出てこない状況が・・・
出来る人には当たり前のことなので検索する必要はないのですが、これから始める人には大事なことはアウトプットしておく。
これで一歩初心者から足を踏み出すきっかけになるのだと個人的には思っています。
さらには後続の役にも立ててWinWin!
まとめ
* 聞ける存在がいるうちが華、質問しにくくなる前に進むべし
* すでに存在するコードを自分のコードで再現するのは車輪の再開発ではなく復習ドリルと思え
* 自分より先人がいるのは当たり前なのでそこを気にしていては追いぬくことはできない
いかがでしたでしょうか?あくまで1PHPerの考えと思って読んでいただければ嬉しいです。
今回はコード自体がとても少なかったので次回からはもう少しPHP成分を含ませようと思います!
そして「自分はこう思う!」など「いや、そこは違うでしょ」と思ったことはレスポンスいただければ非常に喜びます。
僕自身、まだ中級者だと思っているので皆さんと一緒に成長できるようなコラムを今後も書いていきたいところです。
執筆者名:寺井 諒
プロフィール: 1984年生まれ兵庫県出身 大学在学中に受託開発の会社に入社。 PHP初心者ながら関西PHPユーザーズグループに参加し CakePHP初心者勉強会を主催しいたりPHPカンファレンス関西実行委員長にねじ込んでもらう。 今年に入ってから初めて転職を経験。その際に知識不足を実感し、心機一転を図る。 twitter:@bimihoujyunで活動。 ゲームが好きだが下手の横好き。最近はVRにハマりUnity勉強中