| @労働

今年は転職して働く環境が変わり、自分のエンジニアとしての能力が足りないと痛感させられることが何度もあった。しかしそれは技術力が足りないというよりも、もっとほかのもののように思えた。良いエンジニアとは何なのかについて、今年一年で考えたことを書いてみたい。

良いエンジニアとは何だろうか。技術力が高ければ当然に良いエンジニアと言えるのだろうか。そもそもエンジニアに必要なスキルとは何だろうか。技術力がまず挙げられるだろう。良いエンジニアは当然に高い技術力を持っていて生産性が高いはずだ。

技術力に加えて、プロジェクトマネジメントのスキル(以下プロマネ力と省略)も必要なのではないだろうか。これまでの自分の経験を振り返るに、技術的に秀でたエンジニアはプロマネ力も兼ね備えていることが多いと感じる。技術力が高いエンジニアはプログラミングの能力が高いので、組織や開発体制を「プログラム」する能力が培われるのかもしれないが、技術的に秀でた人が必ずプロマネ力が高いわけではない。技術力さえ磨けば良いエンジニアになれると誤解してしまいがちだが、技術力だけ磨いてもみんなから求められる良いエンジニアにはなれないだろう。

ではなぜ技術力に加えてプロマネ力が必要なのだろうか。

一般に、コードを書かずに問題を解決できるならその方がよい。相手に言われるままにコードを書くよりも、コードを書かずに問題を解決できた方が時間も金もかからずみんなハッピーだろう。もしコードを書くとしても最小限の変更に抑えられるのが良いエンジニアなはずだ。技術力が高いだけではこういう発想は出てこないだろうし、真の問題が何なのかを見極め、解決策を考える能力が求められる。

良いエンジニアには先を見通す力も必要だろう。依頼された機能を開発するためにはどんな作業が必要か、どのくらい時間がかかりそうか、誰と調整しないといけないか。

関係者に働きかけ、周りを動かす力も必要だろう。理不尽な依頼が振ってきたときに、その依頼に対して反論し、相手を説得して実現可能なやり方を受け入れてもらわないといけない。

誰かに指示されるのを待たず、自ら動くことが出来る力も必要だろう。仮にプロパーのプロジェクトマネージャーがいたとして、プロマネの指示ばかり待ってコーディングしかしないようでは良いエンジニアとは言えないだろう。

このような、プロジェクトをコントロールし推進する力が良いエンジニアには必要なのではないかと思う。

そんなに何でも出来る人はいないのだから、スクラムをやれば良いのでは、という意見もあるだろう。確かに並エンジニアの集団ではスクラムが有効そうに思える。卓越したエンジニア一人で開発するよりも、数人の並エンジニアによるチームで難しい問題に立ち向かうストーリーの方がおもしろいだろうし個人的には好きだ。

しかしそうやって並エンジニアを寄せ集めても、そこから良いエンジニアは育たないのではないかと感じる。

スクラムチームでエンジニアは、スクラムマスターとスプリント計画、プロダクトオーナーとの「合意」により保護される。自分一人で問題に向き合い、問題を解決する能力がつきにくい。

一方でスクラムを採用していない荒野のような環境では、エンジニアはチームに頼れず、自力で要件を定め、関係者の合意を取り、自らプロジェクトを推進していく必要がある。そのような厳しい環境に身を置くことで、上に挙げたようなプロマネ力が身についていくのではないかと感じる。

これまでの自分のキャリアを振り返るに、以前勤めていた職場はまさに「荒野」といえるような環境だった。誰も何を作るかはっきり分かっていないんじゃないか、いきなり一人で工数見積もりやれといわれても出来るわけないだろう、こんなウォーターフォール開発はやめてアジャイル開発がしたい、こんなクソ会社辞めたい、といつも思っていた。

しかしつらかったのは自分にプロマネ力がなかっただけなのでは、と最近思うようになった。その後入った職場では、つらいこともありはしたものの、スクラム開発のおかげで個人が一人で抱え込んで苦んだりすることなく、チームで協力して開発することが出来た。その中で自分は自分自身の能力を過信したのかもしれない。実際には大してエンジニアとしての力は身についておらず、チーム開発やスクラムをやらない組織で働くことになったときに、自分の能力のなさを思い知らされたのだった。

本題に戻る。自分が良いエンジニアになるためには、技術力も当然足りていないと思うのだけど、プロマネ力を上げていかなければならないと思っている。来年の目標はそのあたりに置きたい。

Shut the fuck up and write some code.

はい。

| @雑談

IMG_1893

この記事は地方在住ITエンジニア(元・地方在住も可) Advent Calendar 2015 - Adventar 6 日目の記事です。地方在住ウェブエンジニアの著者が思ったことを書きます。


自己紹介

熊本出身で大学生の頃は東京に住んでいました。いまは福岡市に住んでいて、東京のインターネット企業に雇ってもらってます。リモートで仕事してます。

福岡のことを書かない理由

最初は福岡での暮らしについて書こうかと思ったのですけど、福岡在住の著名 IT エンジニアはきしだなおきさんや新井俊一さんなど以前からたくさんいらっしゃって情報発信しておられますし、最近では前職でご一緒させていただいた、昼に寿司を食べた舌が乾かないうちに夜焼肉を食べたりしている金満エンジニアで、天気の話からでも HashiCorp プロダクトの話に結びつけるづらさんや、女性ファン急増中のプラチナ貴公子スーパー Go lang プログラマーモノクロメガネさんなど雨後の竹の子のようにいて情報発信しておられますし、また福岡について書いたら最終的に「福岡便利ですよ、移住してみませんか」みたいな結論になりがちですし、加えてほかの皆さんの記事を読む限り福岡は地方には含まれなさそうなので、福岡にやってくる前に住んでいた熊本県阿蘇地方での生活を綴りたいと思います。

キャリアの始まり

僕が最初ウェブ開発を生業にしたのは熊本県の過疎地域、阿蘇地方でした。元々学生時代にコンピューターサイエンスを学んでいたわけではありませんでしたし、プログラミングというより HTML マークアップと雑用担当としてウェブ開発業界に潜り込みました。

地方のつらみ

ギャラが少ないことと勉強会に参加できないことがつらかったです。

ギャラが安い

実家暮らしだったので何とか生活できていましたが、年収200万に満たなかったです。地方にもインターネット関係の仕事がないわけではないのですけど、まともな賃金が支払われる仕事がないと感じます。地方でのシステム開発は、自治体が都会の SI 会社に発注する数千万円から数億円規模の仕事か、商店のホームページのアクセスカンター設置みたいなやつしかなくて、後者に対する報酬はとても少ない。一年と少ししか働いていませんでしたが、このまま歳をとるとやばいな、という危機感はありました。

勉強会に参加できない

田舎にいると勉強会的なものに一切参加できないのもつらかったです。勉強会がしばしば開催されている福岡に引っ越してきて何度か勉強会に参加してみたけれど、勉強会は参加するだけでは無意味で発表する側にならないと得られるものが少ない、ということがわかって勉強会渇望症みたいのはなくなりました。いまにして思えば隣の芝生は青い状態なだけだったという感じがあると思います。勉強会とかなくても学ぼうと思えば学べるはずです。ただし勉強会で発表しまくって目立ちたいとかそういう人は都会に住んでないとダメでしょうね。

相談できる相手がいない

職場に質問・相談できる相手がいないのが心細かったです。常に一人で考えて試行錯誤を重ねる必要がありました。それはそれで良い経験にはなっていたと思うけど、知っている人がいてヒントを出してもらいながらステップアップしていく方が断然効率的だったと思います。もし『情熱プログラマー』でいわれるところの師匠なような存在がいたら、今頃もっとよいエンジニアなれていたのではないかと自らの怠慢を棚に上げ思います。

街の灯火が遠い

ほかの人の記事を読むと通勤時間が長いと書いてる人が多いですけど、当時の職場は家から車で 10 分のところにあったので通勤時間に関しては不満はなかったです。この辺はたまたまが職場が家から近くてラッキーだっただけだと思います。ただ仕事のあとに映画を見たいとか本を買いたいと思っても、田舎過ぎて仕事帰りに何かするというのが無理だった(そもそも仕事が終わるのも遅かった)のはつらかったです。

田舎にいて良かったこと

自然

当時の職場が森の中にあって、職場から阿蘇山の景色を望むことができました。また昼休みに職場の周りを散策すると、小川があったり農家に引かれて道を歩いてる牛とすれ違ったりして毎日がちょっとしたハイキングみたいでした。疲れたときに窓から阿蘇の山々を眺めると癒やされましたし、毎日昼に散歩すると頭がすっきりする感覚があってよかったです。キャリアのスタート段階だった、独身で時間を自由に使うことができた等様々要因はありますが、当時はよく学ぶことができていたなという感じがして、これら自然環境が少なからずよい影響を与えていると思います。

無双

ギャラが少ない一方で上司が非技術者なのでやりたい放題できるというメリットがありました。課題に対して自分の好きなとおりに解決策を考えて解答を出すことができました。以前、社内 SE は無双できると書かれている記事を読みましたが、まさにそんな感じです。信頼さえ得てしまえば無双できると思います。

結論

  • 莫大な遺産があって働かないでも食っていける
  • スタートアップで働いていたが上場してストックオプションで億単位の金融資産を得た
  • 独身、あるいは妻子に逃げられて養うべき家族がいない(慰謝料とか養育費も払わなくてよい)

等々で収入が多くなくてもかまわないなら、田舎で仕事するのも良いのではないか、と思います。特にキャリアのスタート期を終えて一定程度のスキルを身につけている状態で、働き口さえあれば、地方に引っ込んでもそれなりに楽しくやっていけるのではないでしょうか。ただし地方に引っ込んでも最新技術へのキャッチアップを怠らないことなど、意識を高く持つことは大事だと思います。

勤務先を地方に求めず、リモートで東京の仕事を請け負う、というやり方もありますが、東京の会社に雇用されて福岡でリモートワークしている僕個人の考えでは、リモートワークというのはやはりなかなか難しくて(リモートワークアドベントカレンダーで書こうと思います)、特に業務委託などでフリーランスの人が仕事を受けながら働くのは、受け手が相当の熟達者か、発注者と受け手が元同僚であるとかでないとディスコミュニケーションが発生してお互いつらい気がします。正規従業員として雇用されている僕も月一回程度東京に行って、膝をつきあわせて仕事しています。

役所が都市部のハイエナ SIer に発注するような仕事以外にも、地方在住のエンジニアがローカルビジネスのオーナーから請け負って価値を提供できるような場所はあるのではないかと思っています。以前田舎で働いていたときに、もう少し自分にスキルがあってお客さんにも意欲があれば、もっとウェブ技術を使って便利にできるのになぁと思うことがしばしばありました。ウェブサービス作ってユーザーめっちゃ増やしてドカーンだけがエンジニアリングの使いどころではないと思いますし、地方出身者が都市部に吸い寄せられていくだけでは先祖代々の墓は誰が守れば良いのか分かりません。何年先になるか分かりませんが、隙あらば地元に帰って何かしてみたいです。

跋文

最後に福岡で働くことについて一言書いておきますが、福岡はブラック企業が多い街という印象を受けます。街がコンパクトで皆歩いて帰れる範囲に住んでいるせいか、終電の概念が崩壊しており、平気で午前 2 時、 3 時まで働いている会社があります。なので福岡最高、福岡便利、福岡手榴弾!!、!などといった甘言に惑わされず、移住を検討する際にはまともな勤め先を確保した上で断行してください。僕は福岡で最初に働いた会社が本当にひどかったです。以上です。


この記事は地方在住ITエンジニア(元・地方在住も可) Advent Calendar 2015 - Adventar の 6 日目の記事でした(一日遅れて書いてます)。今日の担当は飲み会後、歩いて帰れる距離でも必ずタクシー帰宅をキメる @h_demon さんです。お楽しみに。

| @音楽

OmmWriter

OmmWriter というソフトを知っていますか。 6 年くらい前はフリーウェアだったけどいまはシェアウェアになってるかもしれない(確認してみたらシェアウェアになってた、いまは Windows 版と iPad 版もあるみたい)。

このソフト、気が散らないように全画面表示になってひたすら文章を書くのに集中できるという触れ込みでした。そんで自分がタイプする音(ソフトウェア的にならされるタイプ音)と、ソフトにバンドルしてある音楽が心地よく流れるというやつ。このソフトのアイディア良くて好きなんですけど、 Vim で書くことに慣れると Vim のキーバインド以外で文章書くのつらいのでこのソフトは割とすぐ使わなくなった。

でも付属のアンビエント音楽がよくて、プログラミングとか考え事をするときに思考の邪魔にならずに集中できる。ほどよく自然とか街の音が混ぜてあって、家で作業やるより少しざわざわしてるドトールの方が仕事はかどるって人いると思うんですけど、あの雑踏の中に紛れて作業する感じを疑似体験できる。スペイン在住の David Ummmo という人が作曲しているようです。 iTunes Store で買えます。

なお残念ながら現在ダウンロードできる OmmWriter Dāna II には David Ummmo 氏の音楽はバンドルされていないようです。 iTunes で試聴して気に入ったら買うか Apple Music で聞いてみてください。

David Ummmo Typewritten, Vol. 1.
David Ummmo Typewritten, Vol. 1.

David Ummmo Typewritten, Vol. 2. - EP
David Ummmo Typewritten, Vol. 2. - EP


この記事は作業用BGM Advent Calendar 2015 - Adventar 5 日目の記事でした。明日は @cumacuma さんです。

| @Mac/iPhone

MindNode

↑に書いてあるような開発の進め方を前職でもやっていて、チームで集まって見積もりをするとき、最初はホワイトボードにタスクを書き出してプランニングポーカーしてたんだけど、だんだんマンネリ化してきたし老化によりホワイトボードに書くのがつらくなってきていたので、ディスプレイのある会議室で Mac をディスプレイにつなぎマインドマップアプリケーションを使ってタスクを洗い出す、というような見積もりの仕方をしてた。そこで大活躍したのが MindNode Pro という Mac のソフトだった。

C というタスクは最初 A という大タスクのサブタスクかと思われたが、話し合いを進めていくうちに実は B というタスクのサブタスクだった、というようなことが起こりうる。そういうときにぐいっとノードを A から B に移すということができる。 C にサブタスクがあったとしてもそれごと移動できて便利。

1026-mindnode-pro-1.gif (789×551)

マインドマップを書くのに熱中していると、マインドマップのレイアウトがぐちゃぐちゃになることがよくある。これではせっかく出したアイディアを整理することができない。この 1 時間は何だったのか、ということになる。しかし MindNode Pro ならこういうときに ⌘ + ⌥ + R を押すとツリーが整理整頓されて見やすくなる。便利。

1026-mindnode-pro-2.gif (789×551)

マインドマップは視覚的にタスクのつながりを把握できるので、非開発メンバーからの受けも良く、見積もりをするときは MindNode がないと困るという感じだった。スプリントを終えて振り返るときにも MindNode を使って KPT を出していた。みんなが同じ画面を見て思っていることをアウトプットできるのがよい。

実際に先日の minne の技術戦略カンファレンスで、元同僚のイケメンスーパー貴公子プラチナハッカー @monochromegane さんが、 minne のプラットフォームチームではマインドマップでタスクの見積もりをしてるとスライドに書いてた。タスクの見積もりやるときに MindNode を使うようにし始めたの自分で、 @monochromegane さんがドヤ顔で話してるのは多少いけすかない感じはしたけども、自分なんかよりもスーパー Go lang 貴公子プラチナハッカーの @monochromegane さんに宣伝してもらった方が MindNode の開発元としてもうれしいだろうからよかったと思う。

仕事以外でも、金がなくて金策をしないといけないときなどにマインドマップを作成してライフハッカーを気取ったりしてた。最近バージョンが 2 になって、書いたマップの内容を Markdown として出力できるようになった。こんな感じ。

CQQKNWwVAAA9zgO.png:large (1024×640)

MindNode で書いてる各ノードが見出しになって、各ノードのメモが本文として書き出される。ノードのネストが深くなるほど見出しのレベルが下がっていく。バージョン 1 の頃からブログのアウトラインのようなものを MindNode で書いて、それをテキストファイルとして書き出してから Markdown として体裁を整える、という使い方をしていたので、この機能は便利だった。

しかも Markdown として書き出せるだけでなく Markdown 文書ビューワーの Marked 2 と連携していて、書いている途中のマインドマップの内容をリアルタイムに Marked 2 で Markdown 文書としてプレビューする機能が付いている。「ファイル」 -> 「詳細」 -> 「マークの付いた項目で開く」(おそらく "Open with Marked" の誤訳)で Marked 2 でプレビューできる。

MindNode -> Marked 2

マインドマップを書いているだけでブログエントリが完成して時間が有効活用できてよい。マインドマップで草稿を書いた上に清書するなどしていたらいつまでたってもブログ記事を公開できない。アウトプット業でプライベートが犠牲になる時間も短くなり、家庭円満である。お試しください。


この記事はできる Mac OS X Advent Calendar 2015 一日目の記事でした。明日は @turusuke さんです。

毎年参加するだけだったアドベントカレンダーだけど、今年は作ってみた。できる Mac OS X Advent Calendar 2015 という。なぜこのようなアドベントカレンダーをやろうと思ったのかというと、iPhone や MacBook Air 出てからだいぶ Mac ユーザーが増えたなと感じるけど、一昔前に比べて、あまり Mac の凝った使い方をしている情報が入ってこなくなった気がする。 iPhone も iPad もなかった頃の方が Mac の便利 Tip を載っけてるブログとかいっぱいあって、毎日いろんなブログを読んで回るのが楽しかった。使いこなすのに知恵がいるけど慣れたら便利な QuickSilver とか、 $50 くらいして少し値は張るのだけど思いついたことを何でもメモしておける Yojimbo とか( Evernote なんてまだなかった)。ブログで紹介されているソフトのライセンスキーを kagi みたいな怪しいサイトで購入してわくわくする、そんな経験をするのがとても楽しかった。いまはブログ書く人減ってるし、主戦場がモバイルに移ってしまって Mac の情報を見かけることがなくなった気がする。 10 年前のあの頃のように、 Mac の話題で盛り上がれたら良いなと思って作ってみた。まだ結構空いてるので、書いてみたい人いたらよろしくお願いします。

| @ブログ

一時期に比べたら Lokka 使ってる人減ってて、 Jekyll/Octopress ブームのあとは Go lang 製のスタティックサイトジェネレーターかはてなブログに移っていってしまった。自分は自分で使うツールを自分でいじるのが好きなので Lokka 使い続けていきたい。ということでいろいろやった。

最近やったこと

テスト通るようにした

Lokka の master ブランチ、しばらくコミットされてなくて Travis CI のビルド 1 年半くらい走ってなかった。久々に Pull Request 出したらビルド成功しなかったので通るようにした。 Travis がコンテナベースの環境から Docker ベースに移行したぽくて、その影響で PostgreSQL がらみで bundle install がこけるようになってた。なのでテキトーに addon を追加しといた。

同じコミットでもうメンテナンスが終了している Ruby 1.9 系の CI をやめるようにした。

Ruby 2.2 に対応させた

json 1.5.5 は Ruby 2.2 系では install に失敗するようなのでいろいろ bundle update した。 ActiveSupport も 3.1 ではエラーが出てしまうので bundle udpate して 3.2 の edge にした。

XSS 直した

コメントで教えてもらったので直した。

ただ実はまだ完全には直せてないので近日中に直したいのだけどテンプレートをレンダリングする仕組みをまるっと変えないと直らなそうなので結構きびしい…。

これからやりたいこと

フロントエンドよくしたい

具体的にはプラグインに同梱された CSS や JavaScript とテーマのやつをくっつけて配信したい。 Asset Pipeline 的な。

高速化

なんか遅い。このブログのトップページのレスポンス返すのに 1 秒くらいかかってるの改善したい。 DB にインデックス張るのとクエリのチューニングかな。

ActiveRecord 化

Fjord の皆さんで開発が続けられていたけど停滞しているっぽい。 DataMapper 、耐えられないほど不便なわけでもないし ActiveRecord にない便利な機能もあるのだけど、 N+1 起こらないという触れ込みなのに N+1 起こったり、ちょっと込み入ったクエリを投げたいと思ったときにやり方がわからないもしくは出来ないということがあるので、 Ruby エンジニアの皆さんが日常的に使ってる ActiveRecord を使うようにするのが良いだろうと思った。そもそもあまりメンテもされてないし、 DataMapper に引きずられて Lokka が停滞するのも残念だし。高速化のためにも ActiveRecord 化有効そう。


最近「仕事外でコードを書かないエンジニアは人間のクズだ」、「いやクズはそっちだ、エンジニアの業務時間外の学習に依存する会社こそ真のクソ」みたいな議論多いけど、自分で使うツールのメンテナンスくらいやらないと本当にプログラマー廃業しないといけない気がするし、自分がプログラミングに触れたの自体 P_BLOG の改造がきっかけだったので、プライベートを犠牲にして歯を食いしばりながら取り組んでいきたい。

| @技術/プログラミング

このブログの Archive ページ自分で作った Lokka Plugin でできているのだけど、ここを React を使って作ってみた。 React チュートリアルの写経の題材を自分のブログにした感じ。 CoffeeScript オワコンと言われて久しいけど Coffee で書いた。 JSX を CoffeeScript で書くときはバッククオートで囲むとよいという知見が得られた。

Entry = React.createClass
  render: ->
    `(
      <li className="entry">
        <a href={this.props.link}>{this.props.title}</a>
        <div className="detail-information">
          <span className="created_at">{this.props.created_at}</span>
          <Category category={this.props.category} />
        </div>
      </li>
    )`

| @散財

61BrRoScxUL._SL1000_.jpg (1000×750)

仕事しててコーヒー飲みたくなったときはコンビニかスターバックスに買いに行っていたのだけど、コンビニコーヒーは量が少なかったりスターバックスは値段が高かったりして、このままコーヒーを買って飲む生活を続けていたら破産しそうだった。

金持ってない割にまずいコーヒーは飲みたくなくて、インスタントコーヒーとか缶コーヒーでは問題解決できないので、一式そろえて自分でドリップすることにした。

Amazon で KINTO というメーカーのコーヒードリッパーとサーバー、マグを買った。ドリッパーは円錐型なのでフィルターはハリオの円錐フィルターを買った。なかなかかわいいが 2cups だと小さかった。マグも 250ml 用は小さい。サーバーは 4cups を、マグは 400ml のやつを買えば良かった。

これで職場でも気軽にコーヒーをいれて飲むことができるようになった。プログラミングしていて煮詰まったときとかコーヒーいれて飲むと気分転換できるのでよい。