uzullaがブログ

uzullaがブログです。

コミュニティに参加してつまづき最小限、学び最大限に - Webアプリエンジニア養成読本 AdventCalendar2014 14日目

昨日オールナイトの忘年会で完全に眠いuzullaです。

本エントリはWebアプリエンジニア養成読本アドベントカレンダーですが、


Webアプリエンジニア養成読本 Advent Calendar 2014 - Qiita

その書籍の作者4人が仲良くなったのも、この忘年会でした。
https://atnd.org/events/58716
https://atnd.org/events/58716

これもコミュニティの一つであり、人と人とのつながりというものは楽しく、有意義ですね。

もう8年目なのですが、これがおわると年末だ!という気分になります。
来年も是非参加したいですね。

まずはDISCLAIMER

あくまで、これは個人的な視点で、個人的な趣向です。これが性に合わない人も絶対にたくさんいるでしょう。
「これにならって、よくわからん奴がふえるのは迷惑だ」と感じる人もいるでしょう。

先に言っておきます、すみません。*1

後、自分はあらゆるコミュニティを知っているわけではないし(むしろ、狭い)、特定の何かを代弁したいわけではないです。しかしまあ、言語がたくさんあるように、人がプログラミング言語に向かい合う姿勢もいろいろあるので、こういうのもあるんだな、と思っていただければ幸いです。

あと、「こういうのは馴れ合いだ」とか、あるいはもっと厳しい意見も全く納得できます。
ただ、私にとっては、それが客観的に馴れ合いに見えるとしても、本人にとっては前に進む動力になっているのも確かです。

あと、これは必須なことではありません。会社に所属していれば、会社自体がコミュニティの場合も多くありますし、そもそも独習ができないということはないのです。
ただ、楽しいですし、はかどるのでどうでしょうか?という所です。

さて

先日のアドベントカレンダーの記事において、「人に聞け」という話をたくさんしました。

超初心者プログラミング入門は「何」をやるべきか、主にPHPの場合。 - Webアプリエンジニア養成読本 AdventCalendar2014 五日目 - uzullaがブログ


じゃあ何処で聞くのか?という話をします。

オチとしては、大抵の言語にはコミュニティというものがあり、そこに参加して、知り合いを作るとプログラミングの学習がはかどる、という話です。

コミュニティとは?

その言語をつかっている人達の横のつながりです。

特にウェブ系では、ライバル会社であったとしても、それをまたいで様々な「同じ技術を使っている人」が知り合い、情報をシェアしあっていたりします。

そして、コミュニティの人達がそれぞれで勉強会(どこかの会場であつまって、発表や情報交換を行う)や、カンファレンスを開催する事もよくあります。ボランティアベースが多いですが、場合によっては(特に商用製品の場合)企業が主催や協賛をしていることもあります。

そのような場で人と人とのつながりが新しくつくられたり、新しく人がはいってきたりして、コミュニティはつづいていきます。

つまり、コミュニティに自分も参加すれば、その技術をつかっている人とつながることができ、様々な情報交換をする事ができるようになるでしょう。

あらためて、聞ける人の大切さ

まず、勘違いをしてほしくないのですが、ここでいう「聞ける人」はあなたの教師ではありません。0から全部を教えて貰う為に知り合う、というのはかなりお門違いです。

まあ、Perl入学式みたいな「0から教える」系のコミュニティはあるのですが、一般的ではありません。


Perl入学式 プログラミング初心者のためのPerl入門講座



プログラミングは人によっては独習が難しいものです。このあたりは前の記事に記載しているので端折りますが、学習者は様々なちょっとした悩みをもちます。わかってしまえば忘れるような簡単な段差を超えられない事があります。本などではちょっと図がたりてなかったりとか、たとえがわかりづらかったりとか、ウッカリ間違った理解ですすんできて、それと食い違ってしまったりとか、そういうのですね。

実際に聞かれた事ですが、たとえばfor文は以下のようなものですが、$i、というのがよくわからないといわれました。

for($i=0;$i>10;$i++){
    echo $i;
}

どこの本にも$iとかいてあるので、これは$iでないといけないと勘違いする人とかいます。それだと当然forの入れ子*2がバグります。

こんなのは、プログラミングやっている人には当然ですが、$iは変数なので$xでも$indexでも$countでもよい。一言で終了です。

ただし、これは割とググラビリティが悪い問題だったりします。*3
場合によっては、それをしばらく信じ込んでしまい、「もの凄くひねった解決策を書いてしまう」ことがあったりします。

こういう本当にしょうもない(まあ本人にとってはヒッジョウに重要なことですが)事は人に聞くと一発で解決します。
人間は、ありとあらゆる検索エンジンよりも推論ができる分こういう事は得意だったりするのです。

情報の答え合わせ

さて、そこからある程度学習できて、forやifや配列で困る事がなくなるかもしれません。では、もう人に聞く様な事はないのでしょうか?そんなことはなかったりします。

たとえば、何かしらコードを書けるようになったある日、「メールを送信するにはどうすればよいか?」とふと思います。ある程度本がよめて、ググったりできれば、解決策をみつけるかもしれません。
しかし、ここに罠の可能性があります。

「メールを送信する」方法は非常にたくさんあります。仮にPHPならsendmailをopen、mail関数、mb_mail関数、PEAR::Mail、SwiftMailer、qdmail。私が比較的多く触った物だけでもこれくらいあります、もっともっともっとあります。

さあ、あなたはどれを使うべきなのか、どれが正しい(ベター)なのか?

「古いのはダメ、必ず新しければ良い」なんてことはありません、新しい方法は下位互換性がなかったり、不安定だったりします。単に昔からある手法だからとあまり話題にならないこともあります。そもそも、日付が先週のブログ記事だったりも、10年前の情報の再掲載の場合すらあります。

そういう時に、人にどうしたらいいのか?と聞けば、例えば

私は今はSwiftmailerを使う事が多いですね。
ちょっと前までは、古いメーラーの相手を考えると(特にガラケー)qdmailが鉄板でした。ただまあqmail対応の条件分岐コードがちょっと邪魔なのと(ログが…)、composerに対応してない(有志の人がもってきたものはありますが)のも不満なので。

…みたいな回答が得られ(るかもしれ)?ま(す|せん)。すごい、解決だ!(雑)。

勿論、その人が最高の回答をくれているとはかぎりません。その人が悪いとかではなく、趣味の問題もあるので。

しかし、悪手な回答(mail関数+自力エンコードの秘伝のタレ*4とか)はあまりでてこない(と思いたい)ので、ググって古代の情報をしらべるよりも良いだろう、というのが私の考えです。

あとまあ、セコい考え方ですが、その人はその解決策をやったことがあるわけで、またその先で詰まったら聞きやすいと言うこともあります。

モチベーション維持

基本的に学習のモチベーションを維持することは結構大変です。プログラミング自体は(好きな人には)楽しい物ですが、まあそうはいっても2〜3日でおぼえられるようなものではないので、多くの人はやる気の枯渇に早晩直面します。

そこで、モチベーション維持の方法は色々ありますが、一つ非常にモチベーションを維持しやすい方法として人に見せる、という物があります。「こんなのつくったよ!」と出し合うのは良いですね。

あるいは、前述の「こういうので悩んでいるんだ!」で回答をもらえれば、教えて貰ったからにはやらねばならぬ、という圧力にもなったりする。


また、すこし難易度は上がりますが、勉強会などで「発表」するのは非常に強いモチベーション維持につながったりします。やったことがない人にはピンとこないかもしれないが、発表をすることで

・発表に耐える「成果」をつくらないといけないという圧力
・懇親会などで発表内容*5に詳しい人とつながれたりする
・うまくいけば、承認が得られる

からです。

まあ、このあたりつっつくと変な揶揄に聞こえるのでなにがどうだと書くつもりはありませんが、様々な勉強会において、自分の身の丈にあった(あるいは多少背伸びをした)発表をするというのは、モチベーション維持に効果があるのでお勧めできます。


ただ、「ハヤリ」を追いかけると発表がしやすくなりますが、ハヤリのものは実際に使い物になるか?という所もあるし、「発表は楽しいので」、発表だけを目的としてあれこれを頑張りすぎてしまうのは(プログラミング学習のコンテキストにおいては)良くないと私は思います。

ただまぁ、単なる趣味ならそれでいいじゃんとも思います。たとえば私の昨日のエントリ(PHPでアプリたい)はまったく実用性が今ないですが、ああいったものは「遊びである」と理解した上で、ハヤリとか、ちょっと話題になったものとか、オモシロネタとかをやるのは良いでしょう(ちなみに、Hachioji.pmのLTの焼き直しである)。
おもしろネタは知り合いを増やすのにすごく役立ったりするので「理解し、空気を読みながらやる」分にはお勧めできます。

イムリー情報の入手

プログラミングの手法や定石は、どんどん変わっていきます。たとえばライブラリのバージョンがあがるだけでなく、もっと良い何かが突然登場することもしばしばあります。あとは、良いツール(エディタとか)や、良い書籍を紹介してもらえる事も勿論あるでしょう。
こういった情報は本になるまでに時間がかかることも多く、ネットや雑誌などで追いかけるしかありませんが、やっぱり一人では限界があります。

そういう時に、やはりコミュニティなどに所属しておくと、とても詳しかったり、アンテナの高い人が頻繁にシェアしてくれたりすることが多くあります。

勿論既存の手法が全部悪い、という事は全く無いのですが、やはり新しい手法の存在位は軽く把握しておきたいですし、もし会話や発表で概要などが話されれば、ちょっと手間が省けるかも!という、手抜きも狙う事ができますね。

本などの情報の入手

変な話ですが、独習するのに一番良い本を選ぶのも、結局人に聞くのが一番だったりします。
完全な初心者向けの入門書はあまり詳しい人は居ないと私はおもっていますが、ちょっとした中級者からの本であれば、ネットや本屋で立ち読みするよりも、詳しい人に良い本はないか?と聞いた方が間違いがありません。

ネットなどで「この本お勧め!」みたいなブログが結構あるのですが、「なんでお勧めなんですか?」と聞けないとやっぱり自分には合わない事があったりするからです。(まあ、このエントリも本の宣伝なわけですが(以下略))


さて…

ということで、コミュニティなどに顔をだし、他のエンジニアとつながりがあれば、どのようなメリットがあるかを簡単にお話しました。

基本的に、エンジニアの知り合いとの会話はたのしいので、あまり細かい事を考えずに友人や知人をつくりにいく、くらいのノリで始めるといいのではないでしょうか。

…で、一体どうすればコミュニティに参加できるのでしょうか?


そういったコミュニティは前述もしましたが、勉強会を定期的に開いていることが多いです。

どのような勉強会があるかは有名な情報源としては、IT勉強会カレンダーでしょうか。

IT 勉強会カレンダー


毎日都市部ではなにかしらの勉強会がひらかれている事がわかるかなと思います。
このカレンダーは勿論全部を網羅できているわけではないので、自分でググってみるのもよいでしょう。

他にも

TECH PLAY[テックプレイ] - IT勉強会・セミナーなどのイベント情報検索サービス

などといったイベント情報検索サービスもあります。


ただ…、しらべるとわかりますが、コミュニティに参加するのは圧倒的に東京近郊に有利さがあります。
もし都心でないなら、気長に探すか、待ちましょう。あとは、遠征という手もありますね。

今回はあまり紹介しませんが、ネット上にもコミュニティはないわけではありません。*6
ブログなどで自分から発信したりすれば、あるいは回答がもらえる事もあります。

ただ、相当に非効率的なので(ネットで知り合いや友達を作るのが得意な人ならよいですが)、さっさと対面のオフラインでつながりをつくったほうが良いでしょう。

どの勉強会に行くか

当然自分が勉強している言語の勉強会に行くべきですが、みつからないなら

・ある程度近い言語ならとりあえず行ってみる
ミドルウェアの勉強会にいってみる(DBや、Httpdなど)
・勉強する言語を変える(!)

がお勧めできます。

後、PHPそのものではないけどPHPでできたWordpress等のPHPに縁がある勉強会も開催されていると思います。
そこでPHPの質問をいきなりするのは空気を読んでいませんが、そこに居る人は結局PHPをやられている人が多いので、「自分が興味のあるソフトの勉強会」であれば、「ついで」という形で行ってみるとよいのではないでしょうか。


また、勉強会などに初めて行くのは怖い…という方もいるかもしれませんが、大体の勉強会は初心者を拒んだりはしません。強いて言って、人数が多い勉強会の方がまぎれるので、あなたの気分は楽かもしれません。

ただ、実際に人とつながるのに一番重要なのは懇親会です。多くの勉強会では懇親会とよばれる(無い勉強会も勿論あります)、発表者、聴講者がまざって様々なコミュニケーションを取る場があります。

ここで実際に話し掛けてつながりをつくっていくしかないのですが、まあ、やっぱり難しいかもしれません。このあたりも良い感じのやり方を言えればよいのですが、なかなか難しいですね…。

一つ、コツというか変な話ですが、いわゆる「発表している人」ほど、つながりをつくりやすかったりします。
Twitterで事前にフォローしてリプライをおくってみたり…ブログで引用してみたり…どうだろう、なんかここ難しいですね…。色々な手法はありますが、まずは相手を先に知っておき、その人がおこなった発表について質問とかしてみれば会話の糸口になりやすいのではないでしょうか(なんだこのアドバイスはw)。

数人くらい親しい知り合いができると、あとは比較的簡単に、慣れるというのもありますが、紹介が紹介を生む状態になって加速度的に解決します。


後、実は人数が多い勉強会ほど「ぼっち」になりやすく、知り合いをつくることは困難だったりします。
ある程度人数がすくない勉強会に行ってみるのもよいのではないでしょうか。たとえばHachioji.pmなんかはPerlの看板がかかってはいますが、10〜20人程度の少人数で、PHPやJS、Javaなどの話題もでてきます。そもそも主催がPHPerです(私だ)。

勉強会以外にも、たとえばもくもく会*7ハッカソン*8などが開催されていることもあります。こちらも是非しらべてみましょう。

忘れないで欲しい事

多くの勉強会にいけばいくほど、学びがあるわけではありません。実際のところ、自習と両輪になります。
特に最初のうちは勉強会にいくと達成感みたいなものがあるかもしれませんが、それは完全に錯覚です。

自分一人でウンウンうなることも非常に重要ですし、そこのブレイクスルーとしてコミュニティのみなさんの力を借りるのが良いでしょう。そもそも自分で悩まなければ、何を聞いて良いのかすらわからないと思います。


また、自分が成長したら、コミュニティに恩返ししてみましょう。コミュニティを盛り上げるというと大げさですが、なにか成果物を作成して還元したり、ブログなどで知見を共有したり、昔の自分のような人がいたら手をさしのべたりなど、様々な方法があります。
決して、無理にやることではないですが、コミュニティはギブアンドギブの精神が重要かな、と私は思います。


あと…コミュニティの一部の人や内容と「ソリが合わない」こともあるでしょう。いきなり苦言を呈したりせず、変なアクションをしない方が得策です。多少勉強会をずらすこともできるとおもいます*9

一度いってみて、うまくコミュニケーションがとれないこともあるでしょう。でも一度でめげないようにしましょう。他の所にいったり、日を改めて行ったら印象が変わる事もあります。

コミュニティには様々な人がいますし、関わり方も色々ありますので、一度の印象で「コミュニティなんて二度と参加しない!」とか思わない方が良いと私は思います。


他に、これも極端な話なのですが、凄く高度な場所においては、あまり初心者にかまってられない、という所もあります。
特に、流行の先端は、エッジな人(つまり、スゴイ人)が多かったりするので、そういう人は勿論スゴイ人と研鑽することに注力している事が多くあります。

あくまでもコミュニティはボランティアでシェアがおこなわれており、何度もいいますが、あなたの先生がいるわけではありません。
そう言う場合も別の勉強会に行ったりとか、あるいは自分の方を(たとえば、学ぶ言語を)かえてみましょう。


あ、後最後にもう一つ、コミュニティに参加していないスゴイエンジニアはたくさんいます。
コミュニティでスゴイからといってスゴイ、というわけではないのです。
勿論、コミュニティに参加しないからダメだ!ということもないのです。
*10

コミュニティ賛美や至上主義(?)みたいなものがマレにありますが(このエントリも、わりと賛美よりに見えますが)、こういうのは、好きなが「楽しいぜ!」といってやるものであって、比較したり優劣をつけるものではありませんし、楽しめない人はおかしい、というのはおかしい話なのです。

昨今はコミュニティが非常に活発な領域もあるのですが、このあたりのことはゆめゆめ忘れないようにしましょう。

さて、結局三日三晩でできるものではない

本をつかうにせよ、コミュニティに参加するにせよ、三日三晩でなにかが大きく変わることはありません。
千里の道も一歩から、自分のペースで進めましょう。

ただ、一歩はいずれにせよ一歩ですので、色々な方法で歩みを進めて、停滞することなく継続して学習していっていただければいいなあ、と私は思っております。

よろしければ、みなさんのコミュニティへの参加や貢献をお待ちしております。


こちらからは以上…ではありません。

最後に、しなければならない宣伝

さて、宣伝タイムです。帰らないで下さい。

まず再度の書籍の宣伝です、本アドベントカレンダータイトルの書籍です。

このエントリが役立つ方には、まだちんぷんかんぷんかもしれません。即座に買えとはいいませんが、いつかは買って欲しいです。まあ、本屋にいって他の書籍のついでに立ち読みしてみるのも良いでしょう、買って欲しいですが。

もし、この書籍の内容が理解できれば、おそらく仕事でもなんとかやっていけるレベルにいるのではないでしょうか。そのようなベンチマークとしても役立つと考えております。つまりは買っていただきたい!ということです。

しなければならない宣伝2

来年の夏に開催されるYAPC::Asia Tokyo 2015についてです。


YAPC::Asia Tokyo 2015

YAPC::Asia Tokyoは世界最大級のエンジニアの手による草の根技術カンファレンスです。これまで9回開催され、様々な技術に関する発表そして技術者同士の出会いを生んできました。

「なんかエンジニアコミュニティってきいたことがあるけど…」「カンファレンスってどんなの?いったことない」という人でもきっと新しい発見があるイベントとなりますので是非ともチェックしてください。

f:id:uzulla:20141201013416p:plain

YAPCPerlのカンファレンスと思われがちですが(実際そうなのですが)、どんな言語の人でも、きっとPHPの人でも楽しめるイベントになっております。なにせ去年のベストトーク賞はPHPトークでした*11


来年は10年目かつ、今の運営における最後の開催となり、規模も、話題のバリエーションも間違いなくパワーアップしますので、是非来年のスケジュールにいれておいてはいかがでしょうか?

f:id:uzulla:20141201013436p:plain


…といっても、来年の話では忘れてしまうでしょう。近日中にお知らせをとどけるメールマガジン的なものができるはずです(鋭意作成中)

本日の所は、まずは公式Twitterアカウントのフォローなどをされてはいかがでしょうか?


といった宣伝をおこなった所で、こちらからは以上です。また次回お会いしましょう!

*1:まあ、このブログ程度の影響力でどうこうないでしょうが

*2:forの中にforを作る事

*3:ちょっと前までは、Googleは記号の検索が非常にヘタだったし

*4:誰かが考えて、長く使われている、動くには動くんだけど、どうなってるのかよくわからないか、今どきこれはどうか?と言われやすい作りになっているライブラリや、お作法

*5:つまりは、自分が興味があることだ

*6:昔は某大手掲示板とかも活発でしたが、特にPHPなどのウェブ系においては、あまり掲示板等は活発ではないですね

*7:あつまって、もくもくと自分の作業をやる

*8:短時間で、なにか成果物を完成させる。ハッキング+マラソン

*9:深い意味や、特定のだれかをさしているわけではないですが、たとえば懇親会メインの所はちょっと…という人もいるでしょう、たとえばそういうことです

*10:あと、コミュニティには属していて、発表は特にしないけどスゴイ人もいます、まあ色々スゴイ人はいるのです!!

*11:というか私です