道産子エンジニア

悲観主義は気分に属し、楽観主義は意志に属する

Androidエンジニアとしてこれからやること

技術的な話はブログに書きたくなかったのだけど、以下の3点の理由からたまには書くことにした。

  • エンジニアはエンジニアのブログを意外とみてる
  • 仕事だけと割り切らず好きなこととして考えたい
  • 物理的にコミュニティに参加せずともコミュニティと繋がるには、発信が必要だから
このエンジニアという言葉にはコードを書いている人という意味は無くて、何かを作ってそれを発信している人程度の意味。
 
Androidエンジニアコミュニティの活動は非常に活発で、毎週何かしらのイベントが都内だけでない多くの街で行われている。都内に限って言えばJava、kotlin、RxJava、OSS関連などめちゃくちゃたくさんのイベントが行われてて、会社の壁を超えてたくさんのコラボレーションが生まれている。すごくいい事だけど、自分がコミュニティに対して何か貢献したり、人と上手く話して情報交換せねばという気負いが生まれてしまうのが嫌だ。完全に自分の問題なのだが。
 
それは自分の自信なさとも言いかえられるかもしれない。から回ってしまう。でもきちんと集中してやれば自分だって出来るとは思っている。だから「イベントとかでよく見るけどよくわからない人」になるくらいだったら、気負わず、自分のペースで考えて表現できるブログに書くほうがいいなぁと思った。根暗な自分にはこれがいい。
 
このブログの読者は少ないのだけど、更新すると読者の数よりもページビューがある。最近、そのサイレントアカウントの一つが同期だと知ったのがなんだか嬉しかった。「人は自分が期待するほど、自分を見ていてはくれないが、がっかりするほど見ていなくはない」つまりそういうこと。
 
自分が作っているものに関して言えば、アプリの品質だけでユーザーに答えるつもりだけど、エンジニアとしての自分を見てくれる人は必ずしも自分のアプリを使ってくれるとは限らないので、ここに書くほうが良さそうだ。
 
さて、本題に入る。(Tips記事はQiitaとかに書きます)

世界中のAndroidエンジニアの1人としてやること

この前、後輩と飲んでいた時に言われた一言が気になっている。文脈的には、なぜ技術職をしているのか?という話で自分が「その他の職種に比べて、会社やサービスを超えて手に職がつくから」と答えたとき、「でもそれって、Googleが方針変えたら仕事なくなりますよね」って。んー間違いではない気もするし、正解でもない気がする。そう考えると、会社にいるどんな職種の人もどこにいっても仕事はあるとなと思った。仕事は無限にあるし、働き方もその分だけある。ではなぜ自分は技術職を選んだのか?そう思うと単純に「モノを自分の手で作り上げるのが好き」だからかもしれない。人に指示を出して作る人もいれば、仕様を決めて誰かに作ってもらう人もいるけど、自分は自分の手で作りたい。ただ、それだけなのかもしれない。

 

それはそうと、Androidエンジニアと言っている限りはその役割を全うしたい。世界にはたくさんの同志がいるので、その人たちにとって幸せになる開発をできたら幸せだ。モノを作っているのは使う人のためだが、作る工程の工夫で「作る人」も幸せにしたいというのは別に欲張りな話ではないと思う。ということで、今年は以下のことを念頭に置いて開発をしていく。

  • Androidアプリを作っている人を助ける、開発における問題を解決するライブラリを作る
  • Androidを知らない人が導入しやすくなる情報を発信し、Androidを知っている人の知らないことを伝えられる情報も発信する。
  • Androidだけではないが、Androidが強いエンジニアだと言えるための力をつける

開発における問題というのを具体的に言えば、動画関連のサービスがどんどん増えていて、各社が独自の実装でどんなユーザー体験を与えられるか?という競争が激化していると感じて、そこで少しでも多く良いサービスが生まれるように力になりたいと思っている。今出ているほとんどのサービスでは、実装がブラックボックス化されていて、簡単に真似できないようになっている。企業競争という視点で見れば、各社が持つ技術力なので特許など取って公開すればビジネスチャンスとなるかもしれない。一方で、世の中全体のサービス品質はバラバラになり水準は上がりにくい。世界にはたくさんのエンジニアがいるので、人には見せられない秘伝のコードを書くよりも、広く公開してよりよいソフトウェアを作っていきたいというのが自分の考え方だ。なので、動画に関する問題解決をしてくれるライブラリを作る。

どんな問題があるかというのは去年書いた以下の記事に書いている。

qiita.com

755のリニューアルに向けて忙しくなる直前の記事だったので、そのあとのケアができていないのが自分の未熟な部分だった。実際、DroidKiagi2016のCFPで応募して見事不採用だったが、リニューアルの時期とモロかぶりだったので今では少し安心している。これからちゃんと実装して公開していく。今回のリニューアルに向けて必要だった実装を切り出して作ったライブラリもあるが、StackOverFlowの実装を参考にして作ったためだいぶ社内でdisられた。笑

 

github.com

 

確かにメインとなるロジックはそのままなのだが、俺はそれを馬鹿にされる意味がわからなかった。自分が必要なものをライブラリとしただけで、これまで作られていたAPIの実装をコピッて(やってること同じだけど)造られた複雑なライブラリとは違い、ロジックが単純明快なので、それに関わる問題も切り出しやすくて自分は割と満足している。実際、中国のエンジニアを中心に受けたようでスターもそれなりに集まっている。少しでも誰かの問題を解決できたのだ。冷静に社内でdisられた理由を分析してみれば、Android界隈はスター数が集まりやすいので、ちょっと目立てば社内インセンティブを受けやすいというのが問題のようにも思う。そのおかげか、制度の見直しもされたので良かったし、過去のことは反省して、嫌なことは忘れて、これから良いものを作ることに集中する。いろいろあったのでメンテする気は失せているんだけど、気が向いたらやるつもり。未熟な自分の葛藤を捨てるためここで書き捨てておく。

 

それ以外にも動画へエフェクトをかけたいなと思って弊社のライブラリもメンテしようと勉強しているが、まだ成果を出せていないのできちんとやる。動画関連の話と非常に相性が良いと思うので早く結果にコミットしないといけない…

 

github.com

 

また、最近チームではAndroid以外の開発に関することを積極的にやり始めている。iOSやWebアプリを触ってバグ報告する、開発時の冗長な作業は積極的に自動化する、Slackなどのツール有効活用して情報共有の問題を解決する、Android以外の実装を見て少しでもいいから把握する、などなどやっています。気をつけていることが二つあって、一つは知ったかぶりはしないこと。なぜそうなっているか?を実装を見て判断し、自分の考えを述べて意見する。そもそもわからないことはきちんと質問する。間違えたら素直に認めて正解を考える。エンジニアリングで通じる部分は絶対にあるので、お互いの領域を少しでも理解していくことが、チームでの開発を円滑に進める一歩だと信じている。もう一つは、それでもAndroidの専門家であることをしっかり意識する。自分が担当しているのはAndroidなので、まずはその土台をしっかりとできていないのはお話にならない。Androidに関してはチームで一番詳しくて、もっとも信頼出来る返答や実装をできるようになるべきだしそうする。先輩後輩は関係なく、エンジニアとしての意地をかけて戦っていく。腕っぷしで勝つ男になりたい。

会社のAndroidエンジニアとしてやること

上でいくらかっこいいことを言っていても、俺は会社員だしサラリーマンだ。なので会社にとって意味のある存在でないなら、いくらすごいエンジニアになっても会社は嬉しくない。そのやり方で貫くには自分で会社を作るほうがいい。会社員としてAndroidアプリを作っているからには会社に貢献したい。どちらか一つでもダメだと思うので両方バランス良いエンジニアになる。会社で給料を上げたいなら、会社にとって良いエンジニアになるべきだ。しかし、エンジニアとしての信念は捨てない。そんな感じ。以下の三つを実践する開発をしていく。

  • 作っているものでユーザーを幸せにする
  • 作り方を工夫して会社に貢献する
  • この会社だからこそできることに挑戦する

俺自身はお客神様説を信仰していないので、ユーザーの意見が全てだ!と過激な判断はしない。最近よく見かけるシーンで「ユーザーテストで全然理解してもらえなかったのでこれはダメだ」というのがある。もちろん実際のユーザーの声を聞くことは大切だけど、ユーザーテストは以下の点に置いて納得いっていない。

 

  • ユーザーはあくまで一個人なので自分たちの判断したメインターゲットの一部を切り出しても有効なテストとは限らない(有意差を取れればいいかもしれない)
  • アプリケーションの開発スピードとユーザーテストのスピードがずれている
  • テストという環境は本来の使われ方ではない

仮にも自分たちはプロとして仕事をしている。Androidをよく使っているから、人間が起こしてしまうであろうエラーはあらかじめある程度把握できるはずだ。言い換えれば自分もユーザーなんだ。自分には理解できるが、ユーザーには理解されなかったというのは、「素人目線が足りなかった」という勘違いを起こしがちだがそうじゃないと思う。人間の認知に基づいた設計ができていなかったというほうが近い気がする。どんなに最高だぜ!って思うものを作っても、文句をつける人は必ずいる。テストという環境は人間をネガティブにチェックさせる効果があるし、運悪く相性が悪いユーザーに当たったらそれが全てになってしまう。幸い、Androidはリリースサイクルがとても短くできる。それを生かした開発で小さく回していく方がよっぽどいいように思うのだけど、まだ答えはわからない。日々精進だな。

 

DroidKaigi2016アプリに自分もほんの少し手伝ったのだけど、社内でこうできたら幸せだなぁと感じた。社外の繋がりでここまでできるなら、社内ならもっとできる気がする。

github.com

 

だから会社内でも作り方の工夫をすればもっと全体のサービス品質を底上げできると思う。「他の人はうちの仕様を知らないから指摘されても意味がない」という発想はまちがっていると思うし、誰が見てもわかりやすい実装になっていることがソフトウェアとして理想じゃないだろうか。

 

ログを残していくサービスとして舵を切ったチームで、これからは職種に関係なく仕様から実装まで一緒にしっかり考えて意見していく。弊社は特にプロデューサー職とかデザイナー職が目立ちがちなので、絶対に負けたくない。その上で必要なスキルを磨いていきつつ、会社のプロダクトを自慢できるようなエンジニアとして活動したい。どんどんアウトプットしていかねば。エンターテイメントというか芸能界とのコラボレーションの強さも一つなので、方向転換はしつつも、持ち味を生かせるサービスづくりを考えていく。

今年の目標を掲げていたが、エンジニアとしての目標を改めて整理しておくと

  • 情報系に関する資格とる
  • 500スター超える新しいライブラリ作る
  • 引っ越してサーバー設置する
  • 日本酒に関する趣味アプリ公開する
  • リニューアルアプリしっかりリリースする
  • 5回以上登壇する
  • Androidな記事を10本以上書く
  • チームのリードAndroidエンジニアになる

なので、今の所まだリリースの一つしか実現していない。頑張る。