天然パーマです。

Webアプリエンジニアとしてのデザインとブリッジ

自分はまさに「アプリケーション」をつくることに特化したエンジニアもしくはクリエータだと思っているんだけど、 その件で考えていることを散文的に書いてみる。

最近では複数のメンバーやパートナーの方と仕事をすることが多いんだけど、その時に自分にとって有効として働くのはデザイン力である。デザインというのは広義の意味で使っていて、決して「Webページの見栄えをつくる」ようなデザインとはちと違う。Wikipediaの解説が的を射ているので紹介しよう。

デザインの語源はデッサン(dessin)と同じく、"計画を記号に表す"という意味のラテン語designareである。 つまりデザインとは、ある問題を解決するために思考・概念の組み立てを行い、それを様々な媒体に応じて表現することと解される。

デザイン - Wikipedia より一部引用。

例えば、みんなで話していて「これがやりたい!」とアイデアが生まれた時に、それを実際のWebアプリの仕様に落とし込む作業や思考をめぐらせる行為を僕はデザインと呼んでいる。仕様ってのは堅苦しい書類じゃなくてもよく、データやクラスの構造とかUIの方針だったりする。まぁ、コーディングへ向かう手間に必要な想像力である。先日のAmazon Web Service(AWS)関係のイベントで考えたんだけど、インフラの構成をどう組むか?もデザインの対象になる。AWSを使う場合だったら「KVSが必要だ!SimpleDBじゃなくて速度が求められるのでDynamoDBを使おう」と言った具合。様々なAWSのサービスをどのように構成するかのパターン集が「CDP=クラウドデザインパターン」と名付けられていて、まさに今取り上げているデザイン行為を助けるための「デザインパターン」なわけである。

このデザインをするという行為は経験を積まないと難しく、経験が浅いと遅いものになる。自分の場合は大学生の頃からモノづくりの研究室にいたり、小さいWebアプリをたくさんつくってきたので、そこそこ速くデザインにおける思案が出来るようになってきた気がする。もちろんまだまだ精進が足りない点が多々あるし、深堀してない領域があるんだけど、ようはアイデアからデザインを行う「瞬発力」みたいなものが大事かと感じている。

さてデザインがなんで大事かってことだけど、そもそもそれが無いとアプリがつくれないし、工数的な意味で見積もりが現実的なものになるかを決定付けるものだし、デザイン力があるとモノが速くつくれる。この辺りは自明なんだけど、人とコミュニケーションする時に役に立つかも、と最近では思いだしている。例えば企画側から指示が出た場合に即座にアプリケーションのデザインが出来れば会話がスムーズに動くかもしれない。インフラまで想像力が働けばDevOpsのような考え方にも通じるだろう。

今一緒にプロジェクトを動かしている非エンジニアなメンバーはそれぞれ専門分野の能力だけではなく、理解力がある人ばかりなので、エンジニアとしてはデザイン力を働かせて彼らに負けないようにやり取りのスピードを上げることで貢献をしたい。

デザインと共に取り上げたいのは「ブリッジ能力」と個人的に呼んでるもので上記したコミュニケーションも含まれるんだけど、これもまた開発者として付加価値を付けるのに重要でもある。とあるスマホアプリの中国人のブリッジ・エンジニアの方は現地の人に的確な指示を出し、企画の要望やバックエンドの仕様を把握している。すると、彼を評価する軸はコードが書けるか?という部分は内包しつつも、そのブリッジ能力となるのである。

勝手な私感でもあるがオフショアが盛んになるとエンジニアにとってのプログラミングスキル以外の価値が問われることになる。また、オフショアどうこう関係なく、一人の個性としても、今回取り上げたデザイン力とブリッジ能力は身につけたいことである。

体現しつつトレーニングをしている事柄、デザインとブリッジについて書いてみたがまだフワフワと説明するしか出来ないのでこの辺りを体系だって解釈したいと考えている今日この頃。繰り返しになりますが、こうした能力をつけつつ、コーディングレベルも上げたいと思います。