私の所属するチームに新卒君が入ってきました。カリフォルニア州の技術系大学を卒業してきたそうです。(大学の近くにいまどき人気の有名企業が沢山あるのにねw ようこそ!)
他のチームはどうか分からないけど、うちのチームは入るとすぐに「VoIPアプリケーション」を作りなさい、という宿題が出ます。
要求は「あるデバイスのマイクで拾った音が別のデバイスのスピーカーから出る。反対からも同じことが出来る」です。VoIPアプリケーションの最低限の要求ですね。
プラットフォームは自由。プログラミング言語も自由。音質はどうでもいいし、デバイスがお互いにどのように相手のことを知るとかどうでもいいし(つまりIPとポート番号をコードに埋め込んでもいい)。お互いのコーデックも最初から同じものという前提でOK。ただ、サードパーティーのライブラリーを使って、そのAPIだけでプログラムを組む方法は却下されます。
だれそれ君は1週間で作った、彼は2週間。この人は3日で作ったね~、といった感じで軽くプレッシャーを与えられます。
私も6か月前やりました。VoIPはド素人でしたが、気合いでたしか3日ぐらいで作りました。幸いにもググれば結構な量のサンプルコードがあるんでなんとかなりますし。
そもそもこの宿題の狙いはVoIPアプリのさまざまな現実におこる問題や要求を身近に感じ、より直接的に意識してこの分野に臨めるようにする、ということらしいです、ボス曰く。
この宿題をやるかやらないかで、VoIP関連のプロトコルの理解度がかなり変わってくると思う。
例えばデバイスが通信を始めるにあったって相手デバイスとハンドシェイクをしていろいろな取決めを決定しなくちゃいけない。そのためによく使われるのがSDP Offer/Anser プロトコルであり、その内容を運ぶのがSIPプロトコルである。実際の音声データなどはRTPプロトコルで運ばれていくが、その調整のためにRTCPプロトコルが使われる。音声データは細切れにしてパケットにして送る。パケット落ちや遅延などの問題も起こる。そういう問題を解決するためにいろんなアルゴリズムが発明されている。こういう概念が多少なりとも理解しやすくなります。
とてもよい方法だと感心しました。
ということで新卒君の姿が見えませんが、みんな彼がどういう状況で頭をひねっているか想像できるわけです。頑張ってね~。