はじめまして。某大学で研究をしている学生です。インタラクティブ系の学科(便宜上こう記す)に所属している一方でプログラミングの楽しさに目覚め、エンジニアを目指しだしました。このときに感じたインタラクティブ界隈(便宜上こう記す)の人(特に学生)が再度プログラミングをどう捉えるべきかを記事にします。
かなり独断と偏見が含まれることに注意してください。また私がほとんどコードを描けない人間だということも併せて記しておきます。
#インタラクティブ界隈のためのプログラミング入門
##インタラクティブ界隈とは
今回出てくるインタラクティブ界隈とは主に
なんかをメインでやっている人たちの界隈ってことにしています。Arduinoはちょっと賛否がわかれそうですが…。こういう言語でインタラクティブアートっぽいこと、例えば、プロジェクションマッピング+kinectやってみたり、Leap Motionで絵を動かしてみたり、マウス使って絵を動かしたり、音に反応させてみたり、温度と湿度で動きが変わるタイマー作ったり、バイオメタル動かしたり、osc通信してiphoneで取得したコンパスデータをパソコンに送ったり、シリアル通信でArduinoからデータ送って分析してみたり、そういうことをしているんです(私はそう解釈しています)
##どういう企業がいるか
どういう企業さんがいるかと言うと
なんかがあげられると思います。もしかすると、名前知らない方もいるかもしれません?が、例えばRhizomatiksはPerfumeの演出などで紅白歌合戦でも活躍されています。
##インタラクティブ系言語の特徴
そもそも上記の言語の特徴を把握していく必要があります。
###Processing
かつてはMITメディアラボで開発されていた。電子アートとビジュアルデザインのためのプログラミング言語であり、統合開発環境である。
というものです。簡単にインタラクティブなものを作ることができます。構造的には
void setup(){
//最初に一回呼ばれる処理
}
void draw(){
//繰り返し呼ばれる処理
}
こんな感じ。他にマウスイベントやキーボードイベントを使うことができる。javaベースなのでclassも使える。
###openframeworks
openFrameworksは創造的なコーディングのためのC++のオープンソースツールキットです
音,光,映像,センシングデータによる制御など、多様な表現手法を統合する基盤として活用されている。
visual studioやxCodeで動作させることがほとんど。xCodeで使えるので、iOSアプリにもできる。Androidアプリとして動作させる他、raspberry piでも動作させられるらしい。
アドオンが充実しているほか、アドオンの導入が非常に楽で、初心者でも様々なアドオンを使ってかなり複雑なことができる。
これも同様に
void ofApp::setup () {
//最初に一回呼ばれる処理
}
void ofApp::update () {
//drawの前に繰り返し呼ばれる処理
}
void ofApp::draw () {
//繰り返し呼ばれる処理
}
何が違うかって言うと、update内で計算処理を行って、draw内で描画できる。draw内で全部書いてもいいんだけど分けると見やすい。加えて基本的にヘッダファイルを記載しないといけない(.h)
c++なので、c++でできることは全部できると言ってもいい。
###Arduino
AVRマイコン、入出力ポートを備えた基板、C++風のArduino言語とそれの統合開発環境から構成されるシステム。
要はマイコンと言語と開発環境の集合体。電子工作がむっちゃ簡単にできる。
これも同様に
void setup(){
//最初に一回呼ばれる処理
}
void loop(){
//繰り返し呼ばれる処理
}
こんな感じ。processingとほぼ同じなので、Processingを学んだ人はArduinoにとっつきやすいし、逆もしかり。
##何が問題か
インタラクティブ界隈にいるとこれでいいじゃないかと思いがち。それを否定するつもりはまったくありません。でも、あまりに簡単にプロトタイプが作れてしまう。 ~~しかも下手にハッカソンとか出るとその制作のはやさとビジュアルからいいところ行ったりします。~~これでプログラミングができると錯覚してしまったり、大規模開発始めたり、他のエンジニアと共同開発したりすると詰まる可能性があります。あまりに簡単にできるせいで、それ以上学ばなくてもいいという感覚になるからです。Processingとかろくにclass知らなくてもかなりかっこいいもの作れます。
要は成長しないまま、過信が膨らみます。
私の友人で急成長するエンジニアの方がこのようにコメントしてくれています
Processingはソフトウェア開発環境が使いづらく大規模なのが開発しにくいし、
そもそもクラスとかポリモーフィズムとかそういうオブジェクト指向の基本が分からないプログラマー量産言語な気もするんだよな。。
当たり前ですがそうじゃない人もいます。ただ、他の言語を学ぶことに比べてそういう傾向のある言語であることには注意してください。
次はどんな言語を触れてみるといいか、目的別に解説します。