you21979の日記

実験ネタとか。仮想化とかnodejsで嵌った所とかおもしろかったところとかいろいろ

nodejsをプロジェクトで適用してメンバーに使わせてみた話

node.jsを1からプロジェクトメンバーに教えてみて思ったことを書いていきます

 

チームのメンバーはC++使える新卒4人とPHPを扱う中堅3人といった構成です。

それぞれ知識のバックエンドが違うのでそれぞれ教える方法も変えました。

 

PHPプログラマ

 

JavaScriptについて

自分の認識ではPHPを使ってる人たちはJavaScript(jQuery)もある程度使えるという認識だったのですが

その考えは間違っていたようで文法から教えました。(マークアップとサーバで分業していたようです) 

文法だけみるとPHPJavaScriptは一対一で対応する関数が多いので対応表を用意しておいたのでそれほど大変ではなかったです。

クラスについてはクラスラッパを使って擬似的に対応させました。

 

PHPでは当たり前にやっていたノウハウを忘れさせる

apacheを使うところにこだわるので忘れさせる

 

■イベントドリブン 

ブラウザ側のJavaScriptや他のGUIライブラリを触ったことがあればよかったのですが

ないようなので概念から教えました。 

 

■非同期処理

非同期でのDBのトランザクションではパイプライン処理の概念を教えました。

asyncなどのフロー制御で非同期処理ごとに関数を分けることで対処するようにしました

やりかたをレールをしいてしっかり教えないとここで躓きます

 

■データをメモリに保持させる

PHPではデータを保持するときは選択肢がなくてシェアードメモリ、memcached、mysqlなど言語で扱うメモリの外に確保するしかないのですが

nodejsではデータをメモリ中に確保し続けられるのでデータにアクセスするコストが圧倒的に低いことを教えました

 

新卒のゲームプログラマー

 

JavaScriptについて

JavaScriptは触ったことがないようでしたがオブジェクト指向はかなりしっかりしてました

関数型について知識がなかったようなのでそのあたりを教えました

・クロージャ

高階関数

・ラムダ

 gcに慣れてないと普段アンマネージドなコード書いてるからか混乱する場合もありました。

 

■イベントドリブン 

ゲームプログラマはリアルタイム処理をやっているので簡単に覚えられるのではないかと思ってました。

サーバーのプログラムはゲームのプログラムに似ているところを伝えて、相違点を覚えてもらう方式で教えました。

メインループがありタスクシステムがあり、ゲームではすべての処理を16msで処理を終わらせれば良いのを

サーバーでは例えば1000人同時にアクセスさせる(一秒間に一回リクエスト)なら1ms以内に返せないとならない。

 

■非同期処理

 非同期についてはゲームでは普通に行なっているので特に教えることはなかったです(Nowローディング画面などでやってるから)

 

■データをメモリに保持させる

普通にやってるので教える必要がありませんでした

 

■その他 

ネットワークについてはIPとポートの概念をさらっと教えただけで適当に流しました。

データベースに馴染みがないのでSQLのクエリーやトランザクションについて重点的に教えました

 

教えてみた感想

 nodejsはゲームプログラマ向きだと思いました

必要なスキルがかぶってます

PHPプログラマでも時間をかければ覚えてもらえます。

 早い人は一週間くらいで使いこなせるようになるし、一番最初の導入の敷居が低いから

 自宅とかで勉強したりしやすいのだと思います。

 

node.jsとか求人出しても経験者はほとんどいないわけですし、本格的に普及させるには既存の人材に教えていくことも考えないといけない時期なのかなとおもい書いてみました。