仲良し4人で湯河原に開発合宿に行って最高だった

事前準備

開発合宿のしおりを用意した。 これがかなり良くて、しおりさえ見たら何するか大体わかったとのこと。

f:id:suthio:20181029154512p:plain

実際のしおりはこれ hiragram.kibe.la

あとは各自事前にやること決めてた

当日

10時半前ぐらいに品川駅集合して湯河原に出発。 1時間ぐらい電車に乗っただけで湯河原着くのすごい。

湯河原に到着したの12時前かつお腹空いたので予定通りマグロ丼食べに鮪屋

マグロ丼
マグロ丼

その後タクシーで宿に行き、合宿開始。 会議室は4人なのにめっちゃ広かった。

ホワイトボードがあったり、腰のためのクッションが豊富で腰痛持ちには本当にありがたかった f:id:suthio:20181027001710j:plainf:id:suthio:20181027001715j:plain

余談だけど宿から徒歩30秒のところにコンビニがあるの最高

f:id:suthio:20181027002439j:plain

作業開始しようと思ったけど事前にマリオパーティーがプレイできるか確認したりしてた。 1ゲーム終わったらだらだら話しながら作業してたのに結果的にはめっちゃ捗ってた。

f:id:suthio:20181027001748j:plain

宿はこんな感じ。結構綺麗

f:id:suthio:20181027001802j:plainf:id:suthio:20181027001815j:plain

18時にはご飯食べた f:id:suthio:20181029165630j:plain f:id:suthio:20181027002059j:plain f:id:suthio:20181027002157j:plain f:id:suthio:20181029165606j:plainf:id:suthio:20181029165619j:plain

ご飯食べたらマリオパーティーしたり、

f:id:suthio:20181027002248j:plain

温泉入ったり、お酒を飲みながら作業したり、足湯浸かりながらアイス食べたり各々の時間を過ごして就寝。

2日目は朝起きてチェックアウトしてから個人の発表会した

f:id:suthio:20181027002429j:plain

宿から出てすごい楽しみだったラーメン屋さんに行ったら もう整理券配布終わってて、最短で15時からしか食べれないらしくて諦めた。 本当に悔しい。

代わりに行きたかったパン屋さんに行った。 30分ぐらい並んだけどすごく美味しいパン買えて満足。

次回行くときは整理券獲得してラーメンも食べるし、パンも買って帰ることにする。

らぁ麺屋 飯田商店

ブレッド&サーカス

なぜだかわかんないけど開発合宿中、作業がめちゃめちゃ捗ったのでこの捗りは行く価値あるわって思った。

守破離を意識すると今よりずっと成長しやすくなる

今までの振り返りをしていた際にふと思ったことについて、言語化していく過程で どうすれば学習が捗るかというのが自分の中で明確になったので書きます。

守破離

修業における段階を示したもの。

  • 「守」は、師や流派の教え、型、技を忠実に守り、確実に身につける段階。
  • 「破」は、他の師や流派の教えについても考え、良いものを取り入れ、心技を発展させる段階。
  • 「離」は、一つの流派から離れ、独自の新しいものを生み出し確立させる段階。

守破離の例

  • 守:支援のもとに作業を遂行できる(半人前) ~自律的に作業を遂行できる(1人前)
  • 破:作業を分析し改善・改良できる(1.5人前)
  • 離:新たな知識(技術)を開発できる(創造者)

守について

  • 新しく何かを始める場合は必ず守から始まる
  • ほぼなにもできない/なにも知らない状態
  • 基礎/基本的な知識が足りない
守の状態での課題
  • 学び方を知らないので学ぶことができない
    • なにから学んでいいかわからない
  • ついつい簡単そうなものに手を出してしまいがち
    • (1週間で話せるようになる英語)
守の課題に対しての解決方法
  • いい師匠を見つけて、師匠から学び方を学ぶ
    • 一番力を入れないといけないところは いい師匠を見つけること
    • 師匠が見つからない場合は知見がある人に オススメの書籍を聞くぐらいはやる
守の時に意識しておくと良いこと
  • まずは全体像を掴めるようになることを意識
  • 基礎力をつけることを意識
  • 素直になる
    • 師匠からのフィードバックは素直に受け入れて実行
  • 自分の持ってる知識から かなり離れてしまうアレンジはしないようにする
守の時の禁止事項
  • 複数箇所から情報を得る
    • 色々な人の意見を鵜呑みにして 色々なことに手を出す
    • 複数のブログや複数の書籍を読み漁る
  • 理解できない範囲でのアレンジ
    • 基本がわかってないのにアレンジしたら もっとわけわからなくなる
    • わかる範囲でのアレンジは良い

破について

  • ある程度自分で仕事ができるようになってるはず
  • この部分で非常に成長が止まりやすいところ
破の状態での課題
  • 今まで通りやってるだけじゃ成長しなくなってくる
    • 業務も今持ってる知識だけでも こなせてしまう状態
  • 課題に対してのアプローチ方法が単調になりがち
  • ある程度できるようになったので努力することを辞めてしまう
破の課題に対しての解決方法
  • 大量のインプットと少量のアウトプットを意識
    • アウトプットを意識して、大量にインプット
    • インプットした情報から得たエッセンスを 元に色々試してみる(少しだけアレンジ)
破の時に意識しておくと良いこと
  • 自己客観視する(周りからの自分の把握)
    • 社内/社外問わず、色々な人を見てみるのもあり
    • 周りに優秀な人がいないなら転職するのも一つの選択肢
  • 徹底的に質を意識
    • うまくいってる/いってないに関わらず 振り返りを行い改善
破の時の禁止事項
  • 周りを見ずに自分ができると思い込む
  • インプットせずにアウトプットすること
    • 結果ほぼ何も身につかない
  • アウトプットせずにインプットすること
    • 学習した結果を自分のものにすることができない

離について

  • 自分の中で「なんとなく良い感覚」というものが 備わってくる
  • 周りからも頼りにされやすい
離の状態での課題
  • 再現性の担保ができない
    • 再現性や論理性が求められることが多い
  • やり方をうまく人に伝えることができない
    • うまくいく理由を説明できない
離の課題に対しての解決方法
  • 抽象化、言語化を意識する:
  • 人に教える
    • 教えるときに抽象化されたり、言語化されることが多い

suthio.hatenablog.com

離の時の禁止事項
  • なんとなくでいいやと抽象化、言語化を諦めてしまう
    • 現実的には言語化できないものもあるが、言語化できるものもかなり多い

補足

よくやる間違い
  • エンジニアからエンジニアリングリーダー/マネージャーになった際に破や離から始めてしまう
    • 職種や役割が変わった時は必ず守から始めると良い
  • うまくいってるからって努力をやめてしまう
  • 本質理解せずに著名の人のやり方をなんとなく真似る
    • ちゃんと理解せずに小手先のテクニックだけを続ける
    • それでもある程度の成果は出てしまうから仕方ない部分もある
言いたいこと
  • 学習する際は守破離のどこにいるかを意識
    • 順番を間違えてしまうと学習効率が落ちる
  • 守は素直になることを意識
  • 破は自己客観視することを意識
  • 離は言語化することを意識

suthio.hatenablog.com

熟練者はパターンランゲージというものを知っておくと学びが加速する

汎用性が高くて知ってるとすごく便利

パターンランゲージとは

  • 元々は1970年代に「建築家クリストファー・アレグザンダー」が住民参加のまちづくりのために提唱した知識記述の方法
  • 過去の成功に潜む共通パターンの言語化
    • なんとなく良い、勘、センスの言語化
  • パターン:
    • どのような状態の時に
    • どのような問題が生じやすく
    • それをどのように解決すればいいのか

なぜパターンランゲージが必要か

小さく、依存度の低いモジュールにする

なにかがうまくいった経験(状態)というのは様々な背景/事情などの依存が存在している。 - 様々な背景/事情などの依存から切り離し、抽象に落として汎用的に活用できる知識にすることで 課題に対してどんなパターンが有効かという選択肢が瞬時に見えてくる。

小さく依存度の低いモジュールにしたら使いやすいし試しやすい。

パターンを色々な人が試してアップデート

  • 他の人たちが解決したものから得られる知見も異なる視点で見やすくなるので他の人の経験を自分の経験に落としやすい
    • 他の人の経験を取り込みやすい

パターンをみんなで育てることができる。

パターンランゲージの特徴
  • 情報のストックが頭の中にできる (頭の中での再現性の向上)
  • 教える、伝えることで人に渡すことができる
    • 初学者でも同じやり方をすれば同様の成果を出すことができる
  • 複雑なものも簡単に扱うことができる
    • 言語化することで複雑な事象を一言で説明できる
詳しくは読んでみよう

パターン・ランゲージ: 創造的な未来をつくるための言語 (リアリティ・プラス)

パターン・ランゲージ: 創造的な未来をつくるための言語 (リアリティ・プラス)

こちらもご覧ください

suthio.hatenablog.com

「エンジニアリング組織論への招待」を読んだ

この本について

「不確実性に向き合う」というテーマを中心に 様々な知識のもとに、組織におけるエンジニアリングについて いい意味で深ぼることなく、広く書かれている本です。 モダンなエンジニアリングマネジメントの集大成と言ってもいいと思う。

こういった本だと通常は本質を突かずに、方法論などが書かれている だけの書籍が多い中、ここまで本質を突きながらも、 全体の流れとしてここまで筋が通っていて、納得感のある本はなかったんじゃないかと思います。 控えめに言っても名著。

どういう風に読むのがいいのか

この本は全ての章を飛ばさずに最初からちゃんと読んだほうがいいです。

色々なバックグラウンドの方が読んでも近い認識を持ちやすい本なので、この本を何人かで読んでからディスカッションするのもいいんじゃないかと思いました。

どういう人が読むといいか

  • スタートアップの経営者、新規事業責任者
  • マネージャー(エンジニアリング関わらず)
  • エンジニアリングリーダー的な役割をやる人/やったことがある人

この本を読んで得られると思われるもの

  • エンジニアがエンジニアリングを行う際に何を考えているかの一部が理解できる
  • 様々な知識を得るためのフック
  • それぞれのアプローチに至るまでの歴史、背景

注意点

トピック量が多いのと、あまり多く使われない言葉も多く書かれているので、そういった言葉に慣れてない人は 読むのが大変かもしれないです。

個人的に好きなところ

学んできた知識がどんどん繋がっていく感じと言語化されている感じがすごくするので読んでて気持ちいい本
比喩表現も絶妙で納得しやすい話が多かったと思います。 特に最初の方にコミュニケーションの不確実性がもたらす例として書かれている「カレー作りの寓話」が好きでした。

正しく、論理的かつわかりやすい言葉で全体の流れがぶれることなく書かれていて素晴らしい本でした。 とても密度が高い本です。

この本を読んだら次に深掘りするべき言葉がわかるので、 次に何を調べればいいかわかるようになると思われる。

また、読んだらすぐに実践できるものもたくさんあるし、 今後に繋がる部分も多いのでまずは読んでみるのがいいんじゃないですかね。

最高でした。

Android開発をやるときに決めること

Android初心者なので、間違ってることとかあったら教えてください

言語を決める

AndroidJavaもしくはKotlinを使って開発する必要がある。 今だったら基本、Kotlinを選ぶ。だけどJavaで書きたいとか Kotlinを全然覚えられる気がしないとか、初心者ですとかだったら Javaを選んでもいいのかなーって思ってる。

※正しくはAndroidは他の言語でも書くことは可能だけど、公式でサポートしているという意味ではJavaとKotlinのみ

Rxを使うかどうか決める

RxAndroidを使うかどうか。 結局、スマホアプリは状態を非常に多く持ちやすいので、Observerパターンのようなものの 実装に落ち着きやすいと思っている。 その上で、Rxを使うことでそういった処理が書きやすくなるのかなって思ってる。

GitHub - ReactiveX/RxAndroid: RxJava bindings for Android

DIに何を使うか決める

Dagger2というものが一番多く使われているらしい。 他のもあるみたいだけど、ちょっと調べきれてない。

Android Architecture Componentsを使うかどうか決める

堅牢でテスト性とメンテナンス性に優れたアプリを設計するためのライブラリのコレクションだそうだが、 見た感じ、良さそうな感じする。Androidライフサイクルの管理が楽になりそう。 学習コストは高いみたいだけど、自分がやるんだったら選択すると思う。 学習コスト払いたくないなら使わず書くのもいいと思う。

developer.android.com

DBライブラリを選ぶ

基本的にはRealmかOrmaを選択すると思う。 Android Architecture Componentsを使ってるんだったらRoomを選択してもいいような気がする。 よほどパフォーマンスを求めたいのなら、Realm一択かと思われ。

Realm: Create reactive mobile apps in a fraction of the time

https://github.com/maskarade/Android-Orma

最初に何を選択するかによってアプリの実装しやすさがかなり変わってくるので、 ちゃんと選んでおくことをオススメします。

チーム開発をやるときに最初にやること

開発チームを作るときに最初にやっておくことを書いてみる やることってフロー情報とストック情報を置いておく箱を用意するっていうことなんだけど、 あんまりできてなかったりするチームもあると思うので、書く。

  1. 雑に話せるSlackチャンネルを作る
  2. ドキュメントを書く場所を作る
  3. ドキュメントの置き場所を作る

雑に話せるSlackチャンネルを作る

Slackじゃなくてもいいんだけど、雑な会話が簡単にできる状態を作っておくと捗る。 仕事の話も適当に今日のランチの話もその作ったチャンネルで話している状態だと良い。 よくSlackチャンネルを種類別に分けようとかの話になったりするんだけど、 どのチャンネルに発言していいかわからなくなるし、迷って「やっぱり言わなくていいやー」とかに なってしまうので、チャンネル数はできるだけ少なくする方がいいと思う。

なお、GitHubと連携してたり、Botが頻繁に投稿するようなチャンネルとは分けたほうがいいと思う。

ドキュメントを書く場所を作る

なにかしらの情報をストックするための場所がないと、情報がストックされないので、 Wiki的なものを使うと良い。

使いやすくて、書きやすくて使っててストレスが少ないツールを選ぶのがいいと思う。 書くのが苦痛なツールを使ってると書く気がなくなって、書かなくなる。 個人的にはKibelaを使うのがいい。esaでもいい気がする。 また、誰も投稿しないとどういう風に使ったらいいかわからない雰囲気になるので、 最初に自分が投稿しまくると他の人も真似して使ってくれたりする。

kibe.la

ドキュメントの置き場所を作る

文章とかはKibelaとかに書けばいいんだけど、PDFとかその他のファイルとかを貯めたいってなったときに 置く場所がないと誰かのPCのローカルにしか存在しないとかあったりするので、Google Driveの共有とかを 使って、ファイル共有をできるようにしておくと良いと思う。

上記を積極的に使いつつ、周りに啓蒙していくと捗ると思います。

Yahoo Gemini APIを使ってみた

https://developer.yahoo.com/gemini/:GeminiAPI叩いて一通り触ったのでメモ

実行方法

  • terminalで以下を実行しておく
pip install yahoo_oauth
{
    "consumer_key": "<CONSUMER_KEY>", 
    "consumer_secret": "<CONSUMER_SECRET>" 
}
  • 実行するコードを用意
import urllib
import json

import time
from yahoo_oauth import OAuth2
oauth = OAuth2(None, None, from_file='credentials.json')

if not oauth.token_is_valid():
    # 以下の処理後、ブラウザが開くので、Yahooにログインして、コードを取得してからターミナルに打ち込む
    oauth.refresh_access_token()

# Advertiserの一覧を取得
response = oauth.session.get("https://api.admanager.yahoo.com/v1/rest/advertiser/")
data = response.content
print data
jdata = json.loads(data.encode('utf-8'))
for j in jdata['response']:
    print "{} {}".format(j['id'], j['advertiserName'])

実行までの流れはDocumentation - Yahoo Developer Network見ると流れがだいたいわかると思います。

Advertiser、Campaignなどの設定値はObjectsのAPI叩くと取得することができます。 https://developer.yahoo.com/gemini/guide/objects.html

実際に配信したデータはhttps://developer.yahoo.com/gemini/guide/reporting/cubes/:Cubesというものを使用するとレポーティングの生成ジョブが動くので、ポーリングして生成ジョブが完了した時点でダウンロードすることが可能となります。