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

wolfmasa's blog

フロンターレとプログラミング関係の話題を、気が向いたときにつぶやくブログです。

Developers Summit 2017

イベント

全体を通して

毎年行っているデブサミに今年もなんとか(業務に無理を言って)行ってきました。

全体的にエモい話が増えた印象ではあるけど、それでも気持ちを新たにすることのできる貴重な刺激の場であることには変わりがない。

今年の特色の1つに、技術系同人誌を販売するというのがあって、従来はコミュニティのブースであまり盛り上がっていないところも多かったけど、普段は見れないものが見れてよかったと思う。

登壇者の目玉を選ぶのは難しいのだけど、つい先日炎上(本人とは関係ないところだけど)していたちょまどこと千代田まどかさんだろうか。

初日は、A会場がYAHOO!のTech Conference扱いになっていて、企業色のないデブサミに似つかわしくないと思っていたけど、セッションを聞いてみるとかなり骨太な感じで、先入観を反省しました。

あとは、自分が効いたセッションをざっと紹介。

講演資料が追加でアップされたのに気づいたら、なるべく更新します。

Day 1

Web フロントエンドの変遷とこれから(仮)

speakerdeck.com

speakerdeck.com

最近気になっているフロントエンド話。歴史から振り返っていてわかりやすかった。

変遷が早いけど、コンテキストを考えると仕方ないので、変化に適用して頑張ろう、ということ。

Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること

Yahoo!ブラウザという微妙な(失礼)立ち位置のブラウザアプリの戦略を、プロダクトマネージャの視点で語る。

とても理論的で、明確で、すごく勉強になった。会社で、同じようなミッションを与えられている人に聞かせて、心改めて欲しい。

パネルディスカッション「エンジニアが創るプロダクトの未来 ~エンジニアからプロダクトマネージャーへ~」

www.slideshare.net

プロダクトマネージャとは今年のバズワードなのだろうか。

パネルディスカッション形式で、プロダクトマネージャとは何か、どうしてなったのか、何が重要なのか、について語っていた。

海外ではもともとあるポジションが、ようやく日本に入ってきたということだろうけど、同じような仕事をしていた(すべきだった)人はいるはずで、名前をつけ直したということになるかな。

市場で勝ち続けるための品質とテストの技術

テスト自動化を推進するために、何が必要か、という話。色々な誤解や不安を、落とし穴を交えながら丁寧に説明してた。

最終的には、自動化のコーチングがなくても自走できるチームになっていくべきで、それを後押ししていくという、素晴らしい流れ。夢のよう。

新しいビルドターゲットとしての Webブラウザ。もしくは C/C++ で書く Web フロントエンドプログラム

今回一番技術っぽい話。主にWebAssembly:WASMの紹介。

C/C++で実装したプログラムをWASMに変換して実行するやり方を紹介。難読化はされないなど、夢のような技術でないことを説明しつつ、これによってまたWebの世界観が広がる可能性がある気がした。

位置づけ的には、RubyPythonにおけるC拡張のような、ピンポイントでのC/C++実装というのが現実的なのではないか。

事業成長にコミットするエンジニア組織への道のり

リクルートの組織が、数名のエンジニアだった時から、急激に拡大していく中で、エンジニアの文化を試行錯誤した話。

基本的には、俺たちやってやった!成功した!どやっ!って感じの内容ではある。

しかし、その取り組み1つ1つが具体的で、参考になるので、全体通して面白く聞けた。

Day 2

自動化はどこに向かうのか~まだ開発・運用の自動化で消耗しているの?

www.slideshare.net

自動化はなぜ消耗するのか?というテーマでの割と抽象的な話。

私のように導入に苦労している人が聞いていると、すごく勇気をもらうというか、考えるヒントや道しるべになるような話が多かった。

反面、どうしても抽象的であったり、言葉としては当たり前(手段が目的化するな、とか)に聞こえるので、実感を持っていない人が聞くと、ちょっと物足りなかったのではないか。

サーバーレスアーキテクチャにしてみた - エンタープライズチャットアプリでの挑戦

チワワというチャットアプリを作る過程で、Firebaseを活用した事例を紹介。

mBaaSは試したことがなかったけど、データの同期や認証など、とても便利そう。

ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪

文字通り、エンジニアとしての欲求と、子供の教育という観点から、ラズパイを子供と一緒に遊んでみた経験談

自分も子育て世代に、なかなか勉強する時間が取れなかったりするのは共感できるし、子供にエンジニアリングをやらせたいというのもよくわかる。

ただ、仕方ない部分も多いとは思うけど、後半尻すぼみというか、消化不良感があった。

リーンスタートアップとスマートなエンジニアリングの葛藤

www.slideshare.net

リーンスタートアップという手法と、アジャイル(主にスクラム)開発という手法の両立を考えたセッション。

どちらも導入するに至っていない職場の人間としては、2つともやっているだけで眩しいくらいだけど、図を見るとちょっと複雑(オーバースペック)のように感じてしまった。

本質的には、ビジネス的観点でのみ考えられたリーンという手法と、開発の観点でのみ考えられたアジャイルでは、ビジネス・開発両面から見た場合には、どちらも片手落ちになってしまうのではないかと感じた。

もしそれが正しいのであれば、どうしてもリーンとアジャイルを融合したようなプロセスというのは、ちょっと無理があるように思えてしまった。

C#で簡単にモバイルアプリを作ろう!

ちょまど人気(とXamarin人気)で会場に多数の立ち見が出るほどだった。

さすがのMSエバンジェリスト、なんだかんだ言いながら会場をちょまどワールドで包みこみ、時に爆笑、時にハラハラさせながら全力で駆け抜けた感じ。

C#やXamarinの紹介ということもあり、スライドだけ見るとほとんど内容がない(失礼!)のだけど、それでもあれだけ観衆を惹きつけるのだから、これはもうエンターテイメントと言っても良いだろう。

Xamarinはもともと興味があって一度は試してみたいと思っていたし、.NETcoreには期待しているし、C#も言語としてすごいのは理解しているし、Visual Studio 2017には是非期待したい。

コミニュティとエンジニアの生き方

www.slideshare.net

コミュニティを運営している2名の方が体験談を交えながら、コミュニティを運営するということの大切さとメリットを熱く語った。

運営に関わると、エンジニアとしていいことがたくさんあるよ!というのは知っているつもりでも、それを再確認した感じ。

それ以上に、好きな技術を使うだけで、使い尽くしたら捨てるだけで、それでいいのか?という問いには本当にドキッとさせられた。

コミュニティの運営だけじゃない思うけど、好きな技術にはきちんと貢献しなければと、襟を正さなければと改めて思った。

『もしもスクラムマスターがテストエンジニアだったら』(もしテス)

会社の説明、新しく開発したツールと、その開発や意図の説明に多く時間を使って、あまり面白い(一般的に参考になる)話がなかったように感じた。

品質保証を専門に扱う会社というのは、重要だし、注目されるべき企業だと思うけど、セッションとしては残念だった。

おじちゃん

与太話

f:id:wolfmasa:20081016112550j:plain

本日、おじちゃんこと、私の大叔父さんが亡くなりました。

長い間療養中で、大きな手術もし、遅かれ早かれこの日が来るとは思っていました。

中学生、高校生の時に、休日時間があれば遊びに行き、トランプや花札で遊びながら、多くのことを学びました。

旅行にも、本当に数え切れないほどたくさん連れて行ってもらい、色々なものを経験させてもらいました。

人生の師匠であり、

友人であり、

祖父であり、

兄弟であるような、

そんな不思議な関係だったと思います。

英語の教師だったこともあり、カナダへの短期留学を一番後押ししてくれたのもおじちゃんでした。

だからといって、勉強しろとか、うるさく言われたことは記憶にありません。

祖母と3人で山陰横断、九州縦断などもしましたし、2人でハワイにも行きました。

はた目には、祖父と孫の旅行でしたが、私からすると、ちょっと英語の得意な友達と旅行しているような、そんな気分でした。

ここ数年はずっと病気や手術のせいで、体調が思わしくないというか、何度も生死の境をさまよっている状態でした。

それでも、意識がはっきりしているときは、政治の話や野球の話など、他愛もない話する、いつものおじちゃんがいました。

亡くなる前日まで、好きなコーラを飲み、よく喋り、自分の人生を、自分の意思で最後まで生き抜いたと聞きました。

何よりそれがおじちゃんらしくて、どこか誇らしく思えてきます。

おじちゃんから学んだものを次の世代に伝えるべく、今はただ冥福を祈りたいと思います。

チャントをちゃんと覚えよう 2017年開幕版

フロンターレ

今年ももう少しで始まります。

新加入選手のチャントが決まってようなので、気持ちを新たにして覚えましょう!

GK1 / チョン ソンリョン

川崎フロンターレ応援歌2016 GK1 チョン ソンリョン - YouTube

DF2 / 登里享平

川崎フロンターレ応援歌 23 登里享平 - YouTube

DF3 / 奈良竜樹

川崎フロンターレ応援歌2016 DF3 奈良竜樹 - YouTube

DF4 / 井川祐輔

川崎フロンターレ応援歌2011 井川祐輔 - YouTube

MF5 / 谷口彰悟

川崎フロンターレ 谷口彰悟選手 応援歌 - YouTube

MF6 / 田坂祐介

川崎フロンターレ応援歌 06 田坂祐介 - YouTube

DF7 / 車屋 紳太郎

川崎フロンターレ応援歌2015 DF 20 車屋紳太郎 - YouTube

MF8 / 阿部 浩之

川崎フロンターレ応援歌2017 MF08 / 阿部浩之 - YouTube

FW9 / 森本貴幸

川崎フロンターレ応援歌2016 FW9 森本貴幸 - YouTube

MF10 / 大島僚太

川崎フロンターレ 16 大島僚太チャント - YouTube

FW11 / 小林悠

【川崎フロンターレ】小林悠のチャント - YouTube

MF13 / 三好 康児

川崎フロンターレ応援歌2017 MF13 / 三好康児 - YouTube

MF14 / 中村憲剛

川崎フロンターレ応援歌 14 中村憲剛 - YouTube

MF16 / 長谷川 竜也

川崎フロンターレ応援歌2017 MF16 / 長谷川竜也 - YouTube

DF17 / 武岡優斗

川崎フロンターレ応援歌2014 DF17 武岡 優斗 - YouTube

DF18 / エウシーニョ

川崎フロンターレ応援歌2015 DF 18 エウシーニョ - YouTube

MF19 / 森谷賢太郎

川崎フロンターレ応援歌2013 森谷賢太郎 - YouTube

FW20 / 知念 慶

なし

MF21 / エドゥアルド ネット

川崎フロンターレ応援歌2016 MF21 エドゥアルド ネット - YouTube

FW22 / ハイネル

川崎フロンターレ応援歌2017 FW22 /ハイネル - YouTube

DF23 / エドゥアルド

川崎フロンターレ応援歌2017 DF23 / エドゥアルド - YouTube

GK24 / 安藤駿介

[川崎フロンターレ]VSアビスパ福岡戦 安藤専用チャント - YouTube

DF25 / MF25 / 狩野健太

川崎フロンターレ応援歌2016 MF25 狩野健太 - YouTube

DF26 / タビナス ジェファーソン

なし

FW27 / 大塚翔平

川崎フロンターレ応援歌2016 FW27 大塚翔平 - YouTube

DF28 / 板倉滉

川崎フロンターレ応援歌2017 DF28 / 板倉滉 - YouTube

DF29 / 舞行龍 ジェームズ

川崎フロンターレ応援歌2017 DF29 / 舞行龍ジェームズ - YouTube

GK30 / 新井章太

30 新井章太チャント(歌詞+メロディ) - YouTube

GK31 / ポープ ウィリアム

なし

MF32 / 田中 碧

川崎フロンターレ応援歌2017 MF32 / 田中碧 - YouTube

MF41 / 家長昭博

川崎フロンターレ応援歌2017 MF41/ 家長昭博 - YouTube

DeNA TechCon 2017

イベント

techcon.dena.com

楽しみにしていたDeNAのイベントに行ってきた。

サーバサイド、モバイルなどはもちろん、テストエンジニアの話なども聞ける貴重な機会ではあったのだが、子供のお迎えが発生し、途中で泣く泣く帰宅。。。

昨年同様、ほとんどのセッションは後で動画で見れるようなので、見逃したやつは後で絶対に見るぞ!

Opening

執行役員の木村さんの挨拶。

Perlハッカーで有名な人だが、挨拶だけなので、全体の概要的な話に終始。

多少緊張していたのか、癖なのか、手がモジモジしていたのが、どうも気になって仕方なかった(何

基調講演―実世界の人工知能

Preferred Networksの岡野原さん

機械学習やDeepLearningのこれまでの流れや、利用方法などの全体的な紹介。

また、Preferred Networksで取り組んでいる課題や解決に向けたアプローチなどの紹介。

Deep Learningの技術紹介自体は、だいたい知っているもので時に目新しいものはなかったが、その応用例の紹介については、いくつか新しい取り組みもあって、興味深かった。

ふーんって聞いていたけど、最後の方で、Preferred Networksの開発者の一人が、DeepLearningで有名なライブラリChainerの作者であることを聞いて、思わず声をあげそうになるくらいびっくりした。そんなにすごい会社だとは知りませんでした。。。

その後のDeNAネイティブアプリ開発

執行役員の池田さんの講演。ずっとゲームを開発してきており、現在もゲーム開発を統括する立場で、根っからのゲームエンジニアという印象。

“その後"とついているように、昨年度の発表の延長を紹介。

正直、昨年の資料の振り返りが多く、私は見たことがなかったのでまだ良かったけど、少し期待外れであったことは否めない。

後半は、DeNAという会社が、Webアプリ・サービス開発から、ネイティブ・バックエンドサーバ開発にシフトするにあたり、組織として色々難しい課題があって、1つ1つクリアしてきたという話。

特に、JSをはじめとしたWebプログラミングと、C/C++から続くクライアントアプリ開発では、確かにリソースや非同期の考え方など、マインドチェンジが必要なのはよくわかる。また、サーバ側だけ見ても、似ているようで求められるスキルセットが違うので、どうしてもオーバーヘッドがかかってしまうという話は印象的だった。

強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~

AIを使って、ゲームを自動プレイし、QAに用いたり、ユーザの対戦相手(NPC)に利用できないかという取り組み。

ターゲットはFinal Fantasy Record Keeperというアプリで、戦闘シーンをAIがプレイするというものだった。

結論から言えば、学習時間が長いのを置いておけば、一般の人と遜色ないレベルまではプレイできるようになるが、ランダム要素や補助魔法などの評価などにまだ課題があるとのこと。

聞いている側からすれば、なぜいかにも難しそうなゲームをいきなり対象にしたのか?という疑問はあった。

古いマリオを機械学習でクリアしたという実験もあったし、もっと入出力、そして評価(報酬)がわかりやすいものから取り組んだ方が良かったのではないか、と思った。

また、ゲームをAIでプレイするためには、時間がかかりすぎるので、シミュレータなどで効率的に試行できる環境を整えた方が良いというアドバイスは印象に残った。

こういう取り組みは面白いので、もっとやってほしい。

サービスの成長を支えるフロントエンド開発

JS界隈の技術動向と、最近流行っている技術の紹介。

前半は、いかにJS界隈が毎年のようにいろんなライブラリやフレームワークが出てきては消えていくのかを紹介し、その中で開発当時のトレンドがその後の運用不可に博打的な影響を与えてしまう可能性があるという点を確認。

たかだか、HTMLとCSSJavascriptを生成するだけなのに、なんでこんなにいろんなツールが必要で、それがまた時代とともに大きく入れ替わっていくのか、という素朴な疑問が印象的だった。

主に、React + Reduxの紹介と、Vue.jsの紹介をしていたが、それを動かすのはRuby on Railsの上で動かしているのはちょっと変な感じ。

Vue.jsは確かに最近聞くようになった気がしていたけど、その人気急上昇っぷりを再確認。

おまけ

会場に早く着いたので、置いてあったノベルティをいくつか貰うことができた。

期待通り楽しかったので、来年はもっとゆっくり参加したいな。

GitLabメモ

プログラミング

GitLabについて、まだまだ情報が少ない気がしたので、ざっとメモを残しておきます。

設定に困ったら、まずはgitlab.rbを見るべし

GitLab、特にomnibusの場合には、いろいろなモジュールが含まれており、それぞれの設定を管理する必要があります。

そのためにまず覚えるべきは、gitlab.rbの存在です。基本的には/etc/gitlab/gitlab.rbとかにあるはずなので、開いて設定しましょう。

gitlab.rbは様々なGitLabに含まれる設定項目を1まとめにしたものですが、変更するだけでは反映されないので、コマンドを実行し、各モジュールに反映させてあげる必要があります。

sudo gitlab-ctl recofigure
sudo gitlab-ctl restart

注意としては、gitlab.rbを使わずに直接モジュールの設定を変更している場合には、その設定が上書きされて消えてしまう可能性があります。以前、コード中に固定値で格納されていたあるMax値を直接変更していた際に、recofigureをした瞬間に上書きされて消えたということがありました。

GitLabはRailsである

忘れがちですが、GitLabはRailsアプリです。そのため、基本的にはRailsの知識がほぼ同じように使えます。

例えば、rake routesは、GitLabコマンドに置き換えられていて

sudo gitlab-rake routes

になるだけです。サーバ全体のコントロールはgitlab-ctlですし、rakeを使う場合にはgitlab-rakeです。

デバッグしたい時

うまく動かなくてデバッグしたい時もあるでしょう。(普通ないかな?)

その際には、rails consoleではなく、

sudo gitlab-rails console

をすればirbが起動して、サーバの中で動いているコードをデバッグすることができます。

ちなみに、起動後の問題であればirbで良いのですが、何かのエラーで起動しない場合には

sudo gitlab-ctl tail

を実行することで、ログを見ることができます。もし対象のモジュールが分かっている場合には、

sudo gitlab-ctl tail unicorn

などとすることで、フィルタリングできるようです。

バックアップ・リストアをマスターすべし

サーバとして運用する上で、バックアップとリストアの機能は必要不可欠です。

定常的にバックアップを保存するのであれば、gitlab.rbのバックアップの項目を設定するべきです。

何かの事情で、手動でバックアップを実行する場合には、

sudo gitlab-rake gitlab:backup:create

とすれば、保存されたフォルダにバックアップ作ることができます。その場合でも、出力フォルダをgitlab.rbを参照して確認するべきでしょう。もちろん、編集したらrecofigureを忘れずに。

SKIPオプションを設定すれば、db以外とか設定も可能ですが、通常の用途ではあまり使わないような気がします。

リストアするときは、バックアップしたtarファイルを保存先フォルダに格納しておきます。

その上で、ファイル名ではなく、ファイル名中のタグを使って、リストア対象を指定します。

sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186_2014_02_27

困ったら、だいたいここに書いてあります。 https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/backup_restore.md

インストール、アップデートは簡単

2、3年前は、非常に手間のかかる作業だったものが、最近は一発でインストール、アップデートできるようになりました。

# install GitLab Community Edition
sudo apt-get install gitlab-ce

# update
sudo apt-get update

これじゃ、何も言うことはありません。素晴らしい。

Apple Watch アプリを作る WKInterfaceTimer編

プログラミング

はじめに

Apple Watch用のアプリを作ってみようと思います。

まずは手始めに簡単なタイマーアプリを作ってみます。

準備

とりあえずiOSアプリと同じような準備が必要です。

MacXcodeが必要なのは周知の事実です。私が使っているのは2013年モデルということもあり、Xcodeが重い重い・・・特にシミュレータの起動が遅いので困っていますが、それでもなんとか開発はできています。(気長にいきましょう)

開発をしていると、当然実機でうごかしたい、動かす必要があるので、Apple Watch本体や、本体にデプロイするためのDeveloperアカウント(有料)が必要です。

確か、最近のiOS開発では、無料のアカウントでもiPhoneで動かすことができると聞いた気がしますが、私の調べた範囲ではWatchは無理らしいです。らしい、と書いたのは、記事の書かれた時期や、そのiPhone開発者に向けた権限の変更をふまえてもWatchは無料ではできない言及している記事が見つからなかったためです。

Story Board

まずStory Boardをいじってみます。

基本的にいつものiOS開発と同じですが、Viewの制約が思っていた以上に大きい。

特に、ボタンやラベル並べようとすると、サイズを小さくしても縦方向にしか追加できず、横に並べるやり方がわからなくて少し困った。

幸い、調べたらGroupというオブジェクト?を使って、サイズを小さくする事で横にはならんだけど、それでも3つ以上のボタンを並べたりはできないらしい。

Timerの表示

タイマーを作成するのにうってつけのViewがあります。

WKInterfaceTimerというもので、配置すれば"59:59"のようないかにも時間が表示されるようなViewがあらわれます。

あとは、このWKInterfaceTimerをコードから制御すればよいだけです。

(もちろん制御するためのボタンも追加しましょう)

Timerの制御

これから私の書いたサンプルをベースに、制御の仕方を簡単に紹介します。

@IBOutlet var timerView: WKInterfaceTimer!

WKInterfaceController(UIKitで言う所のViewController)でこのように定義しておくことにします。

スタート

timerView.start()

これだけ、あら簡単。これでカウントアップが開始されます。

カウントダウン

カウントダウンするためには、カウントする時間をセットする必要があります。

セットするためにはsetDateを使うのですが、引数はDate型なので、それを作ってあげる必要があります。

var countDownSecond: int = 30
timerView.start()
timerView.setDate(Date(timeIntervalSinceNow: TimeInterval(countDownSecond+1)))

ここで注意なのは、スタートしてからセットしないと秒数が飛んだように見えるということです。

あとは、時間をセットするためにDateが必要で、そのDateを作るためにさらにTimeIntervalが必要になるということくらいでしょうか。あとTimeIntervalの引数も0はじまりなのか、1ずれるので加算しています。

ストップ

timerView.stop()

基本的にはこれで止まります。あら、かんたん。

が、

問題はここからです。

表示上は止まっているのですが、実はこれ表示の更新を止めているだけ。

もう一度スタートを実行をすると、止まったところからではなく、ずっと裏で動いていた時間分だけ先に進んだ表示になります。

これは少し考えればわかりますが、Dateを指定しているということは、目標の日時を設定しているため、現在の日時との差分をただ表示するという動作になっているからです。

なので、stopをじっこうしても、目標の日時は変わらないので、再度startをした際に飛んで動き出すような表示になってしまいます。

一時停止

そのままstart/stopを読んでも一時停止にはならないので、一時停止をしたい場合には自分で実装してあげる必要があります。

正しい方針はわかりませんが、とりあえず私はシンプルな方法を試しました。

  • stopされたときに、残りの時間を記憶しておく
  • startされたときに、残りの時間と今の時間との差分(止まっている間に消費した時間)計算し、差分を目標時間に加算する

という感じです。

func stopTimer(){
  suspendedTime = targetDate.timeIntervalSinceNow
  timeView.stop()
}

func startTimer(){
  timeView.start()
  if(suspendedTime != nil){
    targetDate = targetDate.addingTimeInterval(suspendedTime! - targetDate.timeIntervalSinceNow)
    suspndedTime = nil
  }else{
    targetDate = Date(timeIntervalSinceNow: TimeInterval(targetSec))
  }
  timerView.setDate(targetDate)
}

サンプルなので一部省略していますが、基本的にはこの流れで一時停止っぽいことができました。

まずはめでたしめでたし。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

読書メモ

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

全体を通して

ソフトウェアエンジニアの生き方みたいな本はいくつも出ているし、ほとんどが海外の話なのはちょっと残念ではあるけど、例えば情熱プログラマーみたいな本かなと思って読み始めた。

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

読んでみると、確かにそういう部分はあるのだが、それ以外の部分、例えば筋トレとか健康とか、本当に過不足なく体系的によくまとまっているような気がした。

matzが書いているように、お金の話や仕事の話は、ある程度アメリカで書かれた本ということを鑑みて読む必要はあるが、それ以外は十分今後の人生の参考にしたい本の1つだ。

キャリアを築こう

キャリアをどう考えるかという話。

自分のキャリアパスは、まず目標を決めて、それに向かって仕事を選ぶべし、という流れ。

会社での社交術、スタートアップの起業や、フリーランサーになること、仕事を辞めることなど、幅広く取り上げられているのがすごい。

こういう話は、ある程度抽象的にならざるを得ないので、参考として聞いておく他ない。

自分を売り込め!

情熱プログラマーとかでも言われている通り、自分をブランドとして確立させるためにブログやポッドキャスト!?を通して、日頃から活動すべし、などがある。

確かにその通りなんだけど、なかなか実行できないので、それだけで差別化になるという話。

これもそうだけど、ブログはどうしても埋もれやすいので、質と量を追求していかないと難しい気がしているし、ポッドキャストも続けるためにはゲストの問題など、難しい側面がある。

とはいえ、できることを1つ1つやることが、きっと次につながっていくので、やはり今年はアウトプットを意識的にしなきゃなと思う。

学ぶことを学ぼう

新しいことを学ぶことは良いことだ。

ただそれで終わらずに、どうやって新しい技術を学んでいくべきか紹介している。

とても参考になったので、簡単に紹介しよう。

  1. 全体像をつかむ
  2. スコープを決める
  3. 成功の基準を決める
  4. 参考資料を見つける
  5. 学習プランを決める
  6. リソースをフィルターにかける
  7. 使い始められるようにする方法を学ぶ
  8. 遊びまわる
  9. 役立つことができるところまで学ぶ
  10. 教える

1−6までが最初に行う準備のステップで、7−10が繰り返して学んでいくステップだ。

新しいことを学び始める時って、なんとなく本を読んだり、サンプルをダウンロードしたりして始めるけど、その後詰まってしまうことがある。その理由はいろいろあるけど、学びがスピードに乗ってきたときに、再度資料を探したり、どこまでやれば終わりかわからずにマンネリ化してしまったりする。それを避けるために、まずステップを決めて、それに乗って準備をして、その後の学習のプロセスをスムーズに、そして過不足なく進めることができる。

繰り返し学んでいくステップでは、よく言われることではあるけど、まず遊んで使ってみて、最終的には人に教えることでわからないところを埋めていく。自分なりに発見だったのは、9の役立つことができるところまで学ぶという、ゴールを意識して学びを繰り返していくところだ。どうしても言語のを学ぼうとすると、例えばGO言語やJavascriptなど最近の言語であれば、できることは際限なく、やっている中で自分を見失いがちだ。それを、自分が必要としているところから逆算することで、達成基準を明確にし、達成感を得られるという心理的効果も含めて、とても良いことのように思える。

生産性を高めよう

このあたりから徐々にエモい話になってくる。生産性を高めるツールや考え方の話。特にハードワークをしろ!という根性論が印象的だった。

ポモドーロなどは、その筋では有名な集中のためのツールではあるが、それ以外にもルーチンを決めることや、習慣を作るために必要なことなど、ソフトウェアエンジニアに限らない、一般的な生産性を高める話がある。

アジャイルな時間管理術 ポモドーロテクニック入門

アジャイルな時間管理術 ポモドーロテクニック入門

個人的にはこういう自己啓発のような話は参考になるし、結構好きだ。最近、AppleWatchを使ってポモドーロもやっているし、この本を読んでいきちんとルーチンワークを管理し始めたところだ。

自分を動かすということは難しいことだが、生涯使える技術なので、やっておいて損はない。

お金に強くなろう

エンジニアといえどもお金は重要だ。著者が、不動産運営を副業で行なっていたため、30代で現役を引退するほど資産を貯めることができたということに由来し、お金についてきちんと考えることの重要性と、その手法を説明している。

とはいえ、読んでいてとても違和感があるのは、前提としてアメリカ、特に西海岸では、ソフトウェアエンジニアの給料はとても高いということにある。

ソフトウェアエンジニアは給料をたくさんもらっているので、その給料を運用することで、より安定した人生を送ることができる、というロジックは理解できても、前提の給与水準については日本はむしろ逆のことが多いので、あまり参考にならない。

人月産業、よくSIerと呼ばれる産業ではなく、アメリカのようなきちんとエンジニアが評価される社会であれば、どんなに生きやすいことかと考えることは、1度や2度ではないと思う。

やっぱり、体が大事

健康は重要という章だが、ほとんどを筋トレやトレーニングの話が占めている。

ダイエットの話も出ているし、知識としては参考になるが、今の自分からしたらあまりすぐ実践するようなものではない。

ただ、運動することは重要だと思うし、少し意識が弱かった木がするので、時間があれば走ったりしようかなと思っている。

負けない心を鍛えよう

体だけじゃなくて、心も大事だ、ということはよくわかる。

おそらく、ナポレオン・ヒルの思考は現実化するという本に大きく影響を受けたようで、プラス思考でいくことの重要性を説き、そのためにどういうマインドでいるべきかを説明している。

個人的には、この本はあまり刺さらなかったというか、強い思いを持つことで、それが結果的に実現するという内容だが、それをひたすらにたくさんのページで説明しているだけの本のように思えて、いい思い出はない。

ただ、思いの持つ重要性というものは、価値を再認識しても良いとこれを読んで感じたので、そこのところについてはもう少し意識的にプラス思考で行こうと思っている。

最後に

この本はお勧めできる本か?と言われれば、間違いなくYESと答える。

細かい章立てで、幅広い話題に言及しているし、内容に関しても偏りは少ない方(こういう本の大体は自説を主張しすぎる気がする)だと思う。

あとは、ポモドーロのような手法に言及したり、ハードワークが大事だと根性論を持ち出したり、お金の話をして現実に引き戻したり、変化にも飛んでいる。

気になるのは、どうしてもそのページ数が多いので、全てを読もうとすると結構タフだということだ。それさえ気にしなければ、とても良い本だと思う。