読者です 読者をやめる 読者になる 読者になる

Screaming Loud

研究・プログラミングなど気づいたことをメモをしています

技術力を高めるだけがエンジニアの生存戦略なのか?

以前からエンジニアの生存戦略というのはホウボウで語られている。*1

それぞれ色んなエンジニアとして生き方があるが、共通して皆が言っているのはどのポイントで尖るかということだ。

しかし、自分は「信頼」だと思っている。

エンジニアとして生き残る
→職を失わない
→仕事を依頼される
→信頼される

これはエンジニアどうこう以前の問題として、社会人としての生き方、更には価値とも言える。

直近bitcoinが激しく暴落していたりするので、貨幣を話題に出す。 価値というとふわっとしているが、例えば貨幣で言うと、皆がその貨幣を信頼をしているから高騰していくし、この貨幣はここまで高騰するほど価値はないのではと思えば下落していく。 それが日本のバブルであり、サブプライムでのショックでもある。 日本円であっても、皆が1000円札に対して信頼を持っているからあのただの紙切れが価値を持っている。

この貨幣と同じ理論が人間に対しても当てはまると思っている。 「7つの習慣」でも言われている信頼残高という言葉が使われるが、仕事の依頼は信頼を通じて行われる。自分が仕事を依頼する立場になったときに、重要な仕事は信頼している人に依頼するのが常であろう。

エンジニアとして生き残るためには、信頼を得ることが必要であるということはわかった。 ではどう信頼を積み重ねていくか。

以下自分の考えているものを挙げる。

技術力を高めて、困難な課題を解決する。

これは大半のエンジニアが考えているキャリアパスであると思っている。 技術力に対して信頼があるため、その分野の仕事の依頼を行う。 これはふわっとしていて、実際どう技術力を高めるのか曖昧だ。 結局平均的な技術力を目標にしてしまっている可能性もある。

何かの分野で尖る

これは「技術力を高める」を一歩進ませたものだ。 何かの分野で尖るということは、その尖った分野では他の人がいないということである。 ということは、その人の素性に関わらず、その分野では頼る人がその人しかいないということに他ならない。

例えば技術としてだけではなく、 チームのまとめ方に定評があれば、スクラムマスターとしての信頼が得られる。 登壇発表が上手ければ、エバンジェリストとして信頼が得られる。 一つの分野でなくても、複数の分野の掛け合わせでももちろん良い。 というか、よっぽどのブルーオーシャンでないと今の時代一つで尖るのはほぼ不可能な気がする。

依頼された仕事を120%でこなしていく

基本的に依頼する側はここまでやってくれるだろうという期待を持って、仕事を依頼する。 その仕事に対して期待を上回る結果を出せば、周りからの期待も上がっていく。 常に期待を上回るというのは難しいが、期待値コントロールという言葉もあるくらい、戦略としては重要。

自分をブランディングする。

信頼というのは、結局ブランド戦略だ。 OSS活動を小規模でもいいからすすめるというのは重要だと思っている。 とにかくアウトプットをすること。 個人のエンジニアとして価値を向上させていくには、アウトプットは非常に重要だ。 ひたすらインプットをしているというのを時折見るが、ダメだ。 アウトプットのないインプットはオナニーだ。

どうブランディングしていくか?

ブランディング戦略に決まったものはない。 決まっていなければ、まずは小さい組織の中でのブランディングを始めていくのがいい。 いきなり世界に対してのブランディングは精神的ハードルが高い。

その組織の中での自分のブランドを確立し、そこで自信を持つことでより大きな組織でのブランディングができていく。

何をブランディングしていくかがわからない?

世の中には常に自分より優れた人がたくさんいる。 しかし、小さなコミュニティであれば、自分が強みとして持っている部分があるはずである。 まずは世の中全体の中での強みではなくても良くて、そのコミュニティ内で強みと思っているものを伸ばしていくのも一つの戦略である。 小さく初めて大きく伸ばす。これはプロダクトだけではなく、自分のキャリアにも当てはまる。

まとめ

結局エンジニアとしての生き方というより普遍的な話によってしまったが、 言いたかったことは「どう信頼を勝ち取っていくか」だ。 技術力を高める、何かの分野で尖るという話も結局は信頼を高めるための一つの手段だ。 ただその信頼を一つのコミュニティ内で勝ち取っただけで満足していると、ロックインが始まってしまうので、常に更なる大きな枠での信頼を得ることを考えていくべきである。

SprayからAkkaHTTPへ ~ライブラリのマイグレーション~

みなさんいかがお過ごしでしょうか? 最近NierAutomataクリアしました。

今回はSprayからAkkaHTTPへの移行に関して紹介します。

f:id:yuutookun:20170331154200j:plain

SprayとAkkaHTTPとは?

  • SprayとはシンプルなScalaのHTTPフレームワーク(というよりモジュール)。すでに開発がストップしており、新しく使うのは非推奨。
  • AkkaHttpとはSprayをベースにしたHTTPライブラリでAkkaライブラリのうちの一つ。

AkkaHTTP1.0がSprayのパフォーマンスを上回ったというブログも出ています。 http://akka.io/news/2015/07/15/akka-streams-1.0-released.html

移行開始

マイグレーションガイドというのが、以下にあります。 http://doc.akka.io/docs/akka-http/10.0.5/scala/http/migration-guide/migration-from-spray.html

ここに従って進めればできるのですが、移行における指針と詰まったところを紹介できればと思います。

続きを読む

Scala用のコレクション操作の拡張ライブラリsansyo(山椒)を作りました

タイトルの通り、Scala用のコレクション操作の拡張ライブラリを作りました。

名前はsansyoです。

意味としては、 「山椒は小粒でもぴりりと辛い」 から来ていて、コレクションの拡張ライブラリのため、小さいですが便利になるものとして作りました。

ライブラリのサイズとしても小さいので、気軽に入れてもらえるかと思います。

github.com

作成方針

方針としては、標準のScalaだけを使ってる人が簡単に導入できるように作りました。

また、implicit conversionで作っています。 objectの名前は ~Utilsなので一般的ですが、 implicit conversionで作っているため名前衝突はしないかなーと思っています。

機能

今すでに作っているものとしては3つです。 使い方の細かいところはQuickStartを見ていただければと思います。

emptyOrElse

OptionはgetOrElseがあるのですが、Seqはそれに当たるものがないため作りました。

partitionMap

partitionMapはpartitionをした後、分けたものに対して同じ処理を行うものです。

grouping

tupleのSeqをMapにするものです。 単純にgroupByをすると、Mapのvalue部分が元の配列のtupleになってしまうのですが、 結構元の配列を使うことが少なくて、tuple._2のほうが欲しいことが多くて、このメソッドを作りました。

まとめ

もし使ったり、プルリクなど送っていただけたら幸いです。

最新技術とビジネスとしての成功

自分のツイートをまとめてみた。




混同しがちな話

さらに混同しがちなのが、

  1. 新しい技術
  2. 雑でいいからスピード勝負

とは違う。
どちらもプロダクトを早く世の中に出すという思想。

違い

【新しい技術】
デメリット:技術検証というリードタイムが発生し、リリースが遅れてしまう。
作り直すタイミング:新しい技術に乗り換える。既存技術では耐えられないサービスヒット。

【雑でいいからスピード勝負】
デメリット:拡張性を考えられていないなどサービスが当たった後、根本からスケールできないような設計になってしまっている。
作り直すタイミング:サービスがスケールしたとき


合わせて読みたい
Open database life: ムック「データベース徹底攻略」 - MySQL/Redis/MongoDB/Redshift

「考える」とはなんだろうか

考えるとはなんだろうか?

時々「自分は考えずに行動してしまうなー」と思っていますが、
そのときの考えるとはなんなのでしょうか?

数学の問題

例えば、数学の問題を考えることについて
これは、ある解けない問題に対して、自分の知っているパターンを次々適用し、どのパターンがその問題に対して最適かどうかを見つけること。

この「考える」の中では、
思い出す、予測する、適用する
が含まれています。

チームの課題

例えば、チームの課題を考える
チームの課題を考えるという際は、

  1. まずチームで実施した事象を思い出す
  2. その中で失敗だったものを抽出する

ここにおける「考える」は、
思い出す、適用する
が含まれていると思います。

企画

例えば、企画を考えることについて
企画を考えることとは、その企画を体験する人たちに「よかった」と思われる段取りを決めることと同義だと思います。
では、何かを企画しよう!というときに、どういう思考過程を経ているのでしょうか?

  1. まず課題が何かを特定
  2. 今まで自分が体験した面白いことを思い起こす。
  3. 流行っているものを収集する
  4. 今までになかった組み合わせを思考実験する
  5. 段取りを決める

ざっくりこんなイメージ(自分は企画専門ではないので、フローが間違いはご了承ください。。)

この「考える」には
思い出す、探す、予測する、適用する
かと思います。

「人の気持ちを考えろ!」

例えば、人の気持を考えるについて
人の気持を考えるとは、相手がどうしたら喜んでどうしたら悲しむか、相手の感情がどうしたら動くかをパターンマッチさせることかと思います。

この「考える」には、
思い出す、適用する
かと思います。

結局どういうこと

結局考えるとは、
・自分の知っている知識から「思い出す」
・その中から、最適なパターンを「見つけ出す」
という過程をあわせたものかなと思います。
ただ、その知識というのは具体的な知識(例えば微分の解き方みたいなもの)だけでなく、人間との会話の経験や遊んだ体験なども含まれています。

しっかり考えられる人とは?

しっかり考えられる人とは、上の「思い出す」と「見つけ出す」の両方がうまくできる人かと思います。

上記の「知識」を増やすということは、勉強をしてたくさんの知識をつけることにもあると思いますが、それとは別にたくさんの体験をしているかということも知識を増やすことにつながります。
なぜなら、人の感情がどうやったらどう変わるかなどは、勉強してもわからないことです。(心理学などはありますがw)
でも人間にとって何かを経験できる回数はたかが知れているため、書物という人類の遺産で補うのです。

「見つけ出す」というのは、生まれもっているものに近いので、考える力を養う上では、たくさんのパターンを知ることが近道かと感じています。

まとめ

最初の「考えずに行動してしまう」とは、3パターンあると思っていて、
1. 過去の失敗を思い出していない
2. そもそもそのパターンを体験していない
3. 似たようなパターンは体験したが、今回のパターンにマッチさせられなかった
というものです。

人間は年をとると失敗しづらくなるといいます。
しかし、失敗をしなければ思い出す対象にもなりません。
人間として豊かな思考を持つには、大量の経験を行い、その経験をクラスタリングすることかと思います。
新しい体験とは人間にとって大きな心理的抵抗がありますが、それを乗り越えることで「考える」ための材料が増えると考えるとちょっと試してみたくなりませんか?
(辛い道を行くというのも、こう考えると理にかなっているかも)

2016年に読んだ本のまとめ

昨年末に読んだ本をまとめましたが、今年もやってみたいと思います。
昨年のリンクはこちら→ 2015年に読んだ本を振り返る - Screaming Loud

今年読んだ冊数は42冊でした。
昨年が30冊なので増えたのですが、前半にすごい高いペースで読んでいたのが、多くなった理由です。

あと、今年から引っ越して電車通勤になったおかげで読む時間ができたというのも、一つの理由ですね。

また、後半は組織論的な話を考える部分が多く、読んだ本もその付近が多かったですね。
ビジョナリーカンパニーなども名著ですが、今更ながら読みました。

良かった本

elk.bookmeter.com

この本はメッセージ集なので一瞬で読めるのですが、その一語一語に重みがあるので突き刺さってくる。
ぜひ、一度手にとって見て欲しいです。

elk.bookmeter.com
自分たちが普通に行っていることが実は女性だからと思って実施してしまっていることが多数あることに気づきます。
女性の社会進出が求められている中で、男性にも女性にもぜひ一度読んで自分の考え方を見直してみては。


他にも読んだ本は色々感想も書いているので、以下リンクから見てみてください。
moc_yutoさんの読んだ本 - 読書メーター

Slackから始めるChatOps

先日発表したChatOps事例のスライドを共有します。


www.slideshare.net

連携のハマりどころ

この発表でちゃんと伝えてないので補足です。

続きを読む