ソフトウェア開発と私 / Software Development and I

9b741203feda475cbeae8b384de9f415?s=47 motemen
June 30, 2018

ソフトウェア開発と私 / Software Development and I

ハッカーズチャンプルー2018
リンクありバージョンは: https://docs.google.com/presentation/d/1RfhvrO0lpv8pyPx9NLxqH3yL7C2TZaT6awCT17FSDns/edit

9b741203feda475cbeae8b384de9f415?s=128

motemen

June 30, 2018
Tweet

Transcript

  1. ソフトウェア開発と私 2018-06-30 ハッカーズチャンプルー2018 motemen

  2. こんにちは • id:motemen / @motemen(美顔器) • 株式会社はてな CTO • Perl,

    Go, Git
  3. None
  4. CTO & アプリケーションエンジニア • 2016-現在 • 組織・技術・情報 • 古めのサービス全般

  5. None
  6. None
  7. CTO室 • 事業や開発の新しい基盤をつくる横断チーム • 社内横断で開発効率を上げる取り組み #pepabohatena

  8. サマーインターン

  9. 宣伝終わり

  10. アジェンダ • 自己紹介(40min)

  11. エンジニア遍歴

  12. 199X

  13. BASIC • 本当はゲームを作りたかった(らしい) • 学校の宿題のドリルを解くプログラム ◦ 完成したころには次の単元だった

  14. 200X

  15. Windows • Visual Basic 5 • ランチャー、ジョークソフト

  16. ホームページ • BBS(掲示板)置いてたけど、友達だけだった • 本屋で立ち読みした情報をコピペした技術サイト

  17. Perl との出会い(と別れ) • Perl Poetry(Perl 詩)

  18. 2005

  19. ブログブーム • 考えたこと、やったことがアイデンティティになる時代 • Movable Type • blosxom: 1 ファイルの

    CGI ◦ 1ファイル = 1エントリ ◦ プラグイン = .pl ファイル
  20. Web 2.0 • RSS, XML, JavaScript, Ajax • サイトがつながって、面白いものを生み出す •

    ウェブの人はスピード感が違った
  21. jsBlogTimes • Movable Type のプラグイン MTBlogTimes • の一般化実装 RSSBlogTimes の

    JavaScript 実装 • サーバサイドがわからなかった
  22. はじめてのトラックバック • いわゆるメンション • 相当躊躇した上、送信 • その後 mixi でメッセージが来る

  23. はじめての登壇 • Shibuya.js ライトニングトーク ◦ LT って何? 登壇ってなに? って状態 •

    コミュニケーションできる人がたくさんいてビビった
  24. アルバイト • あまりに怠惰すぎて月給1万円なんてこともあった • 夏休み、インターンとして集中開発したところ、楽しい • 大学院を中退して、はてなに就職

  25. 2008

  26. 就職 • 余談: 月給を貰うようになって、モチベーションが低下 ◦ とにかく他人に認められたかった自分に気づく ◦ おれのモチベーションはそんなものか!?

  27. うごメモはてな • 任天堂との協業で開発したウェブサービス • 自分のプロダクト、という思いが強かった • ぼくのかんがえるカッコイイコードをガシガシ書く

  28. 異動後 • 自分のコードで同僚が苦しんでる姿を見て、辛かった • 急速に他人を意識したコードを書くようになった • プログラミングからソフトウェア開発へ

  29. 登壇(失敗) • 先輩から LT を打診され、受ける • よく考えたら人前で話すのは苦手 • 当日の零時くらいまで準備できず、本番はぐだぐだ •

    その後数年間登壇できなかった
  30. YAPC::Asia • Yet Another Perl Conference • 今なら builderscon とか

    YAPC::Okinawa とか • Perl に限らない、ウェブ開発者のお祭り • 同僚がこぞって参加して、楽しそうだった • 自分もやっぱり登壇したい
  31. 2011

  32. YAPC::Asia Tokyo 登壇 • ニコニコ動画のプレイリストを mp3 ストリーミング • ffmpeg +

    AnyEvent によるイベント駆動プログラミング • 懇親会ぼっちも回避できた
  33. 何をサブミットするか • “たぶんこれはトークの応募の際の説明とかがだめだったんだ ろうなと予想!” * ← 図星 • 内心、落ちたらいいな、とか思ってた •

    受け身はやめる、やるならちゃんとやるように *: http://unknownplace.org/memo/2011/10/17/1/
  34. App::htmlcat • ターミナル上のハイライトをブラウザに表示したかった ◦ 長い長い git log -p とか •

    当時流行りの AnyEvent と Server-Sent Events を使って リアルタイム化 • 標準入力をブラウザで tail -f できる htmlcat というのを書い た
  35. webtail • 同コンセプトの Ruby 実装 • こっちのほうが人気があった… なぜ? ◦ カスタマイズ性

    ◦ Ruby 製 • パッケージング重要
  36. 2014

  37. Mackerel • プロジェクトマネージャ的なポジションに • Scala + Go • Go 言語が異様に手に馴染んだ

  38. ghq • リポジトリを URL に基づいた階層でクローン・整理する • Go の練習に • peco

    と組み合わせると便利、と話題に(ラッキー) • ghq: リモートリポジトリのローカルクローンをシンプルに管理 する
  39. ghq: インタフェースの変更 • もともとは zsh スクリプト ◦ cd をいい感じにハンドルしたかった •

    ツリー構造は Go 風に変更
  40. フィードバック • これは便利! と思ってた機能が不評 • 同僚にもこの機能いらんでしょと言われた https://twitter.com/miyagawa/status/480950493837926403

  41. gore • mackerel-agent の公開 API の変更を追いたかった ◦ 学んだこと: Go による

    Go プログラムの操作 • REPL が作れそうだったのでやったらできた ◦ go run ◦ コンパイル時にエラーになるコードを除く • コード補完もできる Go の REPL「gore」を作った
  42. • ようやく自信を持って発表できた感覚 • はじめての登壇から10年近く経っていた……

  43. CTO としての仕事 • メカニズム ◦ ソフトウェア ◦ 人々の how を変える

    • メッセージ ◦ 言葉 ◦ 人々の why を変える
  44. 教訓

  45. 「できること」と「やりたいこと」は両輪 • やりたいことがあれば、できることは付いてくる • できることが増えれば、やりたいことも広がっていく

  46. 書くことと話すこと • 知識や考えや経験を直列化する試み • 自分にとっては一種のセーブポイント • 吐き出したら忘れて、新しいことをする

  47. 自分の小さい世界を変える • エンジニアの大それた夢 = 世界を変える • いきなり挑むには世界は広い • 自分と、自分の周囲を変えることはいつでもできる

  48. 自分のため、からはじめよう