舎路(シアトル)日記

シアトルで働く日本人プログラマの日記です。

すこし前に、Manning Publications から「こういう企画の持ち込みがあったんだけど、どう思う?」というメールをもらって、アンケートに答えるという機会があった。

Manning はアメリカの技術系出版社で、日本で翻訳書が出るときには、オライリージャパンをはじめ色々な出版社からでること、その際に表紙も変えられてしまうことも相まっていまひとつ存在感がないかもしれないけれど、jQuery の John Resig 自らが著者に名を連ねる Secrets of the JavaScript Ninja や、Keras の François Chollet が書いた Deep Learning with Python、ちょっと毛色が変わったところでは、higepon さんオススメの Soft Skills まで、手広くやっている。

技術系書籍の編集者の k16 さんは、英語圏のIT系技術書ブランドについての雑感

しかし現在は、この記事でも一押しの No Starch Press はじめ、やはり中堅どころの Manning Publications など、現時点で創業20年前後を迎えている中小の出版社のほうがむしろ精力的に面白い書籍を生み出している印象があります。

Manning を「中堅どころ」と形容している。

Write for Us

Manning のサイトには Write for Us というページがあり、Manning から本を出すまでのプロセスが詳細に説明されている。特に面白いのが最初に著者が提出しなくてはいけない企画の提案書で、そこには

  1. Tell us about yourself.
  2. Tell us about the book’s topic.
  3. Tell us about the book you plan to write.
  4. Q&A
  5. Tell us about your readers.
  6. Tell us about the competition.
  7. Book size and illustrations
  8. Contact information
  9. Schedule
  10. Table of Contents

という10個の項目について細かく質問がある。例えば Tell us about the book’s topic なら

  • What is the technology or idea that you’re writing about?
  • Why is it important now?
  • In a couple sentences, tell us roughly how it works or what makes it different from its alternatives?

Tell us about your readers なら

Your book will teach your readers how to accomplish the objectives you’ve established for the book. It’s critical to be clear about the minimum qualifications you’re assuming of your reader and what you’ll need to teach them.

こういった感じ。マッハ新書のような自費出版が話題をあつめる2018年には、すこし慎重すぎるような感じも否めないけれど、これで選別した企画にさらに編集者がついて質を担保するのが、インターネットで無料の情報が得られる時代に、出版社が担うべき役割だとも思う。

この提案書を送ると、Manning と外部の人々からのフィードバックが著者に送られる。

After we have had a chance to review your submission, we will send you feedback, both from us and from outside experts. As a rule, you can expect to revise your proposal several times during the discussions.

冒頭でふれた私が答えたアンケートは、おそらく、この “outside experts” からのフィードバックとして扱われるのだと思う。

まとめ

Manning というアメリカの技術系出版社についてと、その出版社が公開している企画提案書について紹介しました。

ちなみに、提案書を送ったあとの流れについてもシステマチックに流れが決まっていて、読んでみるとなかなか感心します。日本の出版社でも同じようなプロセスは決められているんだろうけど、私はそういうものを目にする立場にないので新鮮でした。

こういう質問を自問自答してみるのは、例えば自分でブログや YouTube チャンネルをはじめて、そのリーチを伸ばしたいときにも役に立つんじゃないかと思う。そこまでかっちりしたくないですかそうですか。

Q2 をふりかえる

Jul 7, 2018

自分のソフトウェアを作る

4月のあたまに Swift でポモドーロタイマーを書きはじめた。最近はあまり進展がなく、毎日使えるレベルにも達していないけれど、これは Q3 も継続して完成させたい。仕事で Swift プログラマになりたいわけではないけれど、Mac はまだ数年は使うと思うので、自分のための小さなソフトウェアくらいは自分で書けるようになっておきたい。

仕事にできるといいなと思えるものだと、最近は Rust を勉強している。The Rust Programming Language は読みやすいけど、実際に書いてみるとよくコンパイラに怒られる。

rust-native-tls にプルリクエストも出してみた。

Rust に期待していることについては、またあとで書く。

読んだもの

論文ひとつ、育児書ひとつ、自己啓発書を2冊読んだ。片付けとかミニマリストの本も読んだけど、ここにはまだ書けていない。

寝かしつけについては、しばらく起きる時間を固定して、寝る時間とそれにいたる様子 (どのくらい寝たかとか) を日記につけていて、これは現状を客観視するのに役立った。最近さぼっているので、また再開したい。

仕事

仕事は難しい。将来を見据えつつも作り込み過ぎない、というのが上手くできずにいる。

社内にある 3D プリンタの使い方講座から、もうちょっと日々の仕事に関係のあるセキュリティがらみのものまで、いくつかトレーニングをうけたのはよかった。社内イベントの多さは大企業で働らくことの利点だと思うので、もっと積極的に参加するようにしたい。

久しぶりにインタビューもした。東京にいたころにも少しはしたけれど、シアトルにきてからさぼっていた。

そのほか

ここらへんは blog.8-p.info をちょっとリニューアルしたときの副産物、だったと思う。

書けていないこと

Q3 にむけて

Q3 の終わりには達成度が計測できるように、簡単なものでいいので具体的な行動も考えてみた。

  • ポモドーロタイマーを完成させる: 毎週に一時間程度は時間をかけるようにする。
  • Rust の勉強を継続: これも、毎週に一時間程度は時間をかけるようにする。しばらくは “The Rust Programming Language” を読むだけでいい。
  • 育児: 子供の起床/就寝時刻を記録する。
  • 仕事: 毎月に最低一時間は、社内リソースを使ってなにかを学ぶようにする。

ブログも本当はもうちょっと書きたいけれど、しばらくはここらへんを優先したい。

『大事なことに集中する』(原題 “Deek Work”) の著者である Cal Newport は、いままでに何作か自己啓発本を書いている。

  1. “How to Win at College”
  2. “How to Become a Straight-A Student”
  3. “How to Be a High-School Suparstar”
  4. “So Good They Can’t Ignore You”
  5. “Deep Work: Rules for Focused Success in a Distracted World”

このうちで、4作めにあたる “So Good They Can’t Ignore You” だけは『今いる場所で突き抜けろ!』として邦訳が出ていたので、読んでみた。

『好きなことを仕事にしよう』は間違ったアドバイスである

本書では「『好きなことを仕事にしよう』は間違ったアドバイスである」というのを出発点に、じゃあどうやって仕事を探すべきか、ということが自身の経験とともに書かれている。

著者は、魅力的な仕事は

  • 創造性
  • 影響力
  • 自由度

の三つが揃っているものだと定義し、これらが得られる職は市場では稀少なものなので、それを要求するなら、等価に稀少な何かを差し出さなくてはならない、と主張する。というわけで、あなたには秀でたスキルがまず必要であって、これがタイトルの『今いる場所で突き抜けろ!』につながってくる。

著者が好ましいと思っている、アウトプット中心のアプローチを「職人マインド」と呼んでみたり、自分が費やした時間を記録することを勧めてみたり、そういう点は『大事なことに集中する』と重複している。

意識高い批判

『大事なことに集中する』にあったソーシャルメディア批判は本書にはなく、その一方で、意識高い系というか「ブログで稼ぐ」みたいな人々が「等価で差し出すものもないうちに、稀少なものを求めてしまっている」と強く批判されている。

ただ、熱心に “Study Hacks” なんてブログを書き、”How to Win at College” という本まで出し

この資産を活用して、学生へのアドバイス本を書いた。このような経験をしたことで、私は充実した学生生活を送ることができた。私は、ダートマス大学初の、出版社から定期的に電話を受ける学生だった。

と誇ってみせる著者は、私から見ても、アメリカ平均から比べても、だいぶ意識が高い。

意識高い系への批判には「好きなことを仕事にしよう」批判だけではなく、そういう場所の近くにいた著者ならではの、なんというか克明さがあった。あんまり趣味はよくないと思うけど。

ミッション

『大事なことに集中する』は、研究者としてインパクトのある論文を書くことにとにかく集中する、という著者の明確な優先順位が印象的で、自分にはそこまで集中できるものがあるだろうか、と疑問に思った。

本書では、キャリア資本市場 (平たくいうと採用市場) には

  • KPI が一つはっきりした、勝者ひとり勝ち市場
  • 複数の資本を組み合わせられる、オークション市場

の二つがある、とされている。この例えにのると、ソフトウェアエンジニアは後者の仕事で、iOS と Android に詳しく、スクラムマスターもやりますよ、という人を求める会社もあれば、C++ でリバースプロキシが書ける人を求める会社もある。これらを一次元に並べて「優劣なソフトウェアエンジニア」を定義するのは難しいし、あまり意味がない。

キャリアの軸となるミッションを持つことにも触れらている。ここでの著者はちょっと歯切れが悪く、

なぜ自分のキャリアには独自のミッションがないのだろう?

からはじまり、後半になっても「過渡期リサーチ・ミッション」と前置きして

現在の私のミッションは、「分散アルゴリズム理論を、新しい面白い分野に適用して、新しい面白い結果を出す」ことだ。

と、いまひとつ煮え切らない。

この辺りは、MIT でのポスドク期間を終えて、ジョージタウン大学で准教授の職を得て働き出すまでに書かれたという、著者自身の、まだ何者にもなりきれていない感じの逡巡が出ている。これは『大事なことに集中する』は、良くも悪くも欠けていた部分で、鬱陶しいと思う人もいるかもしれないけれど、個人的には親近感がもてて良かった。

Cal Newport “Deek Work” の邦訳である『大事なことに集中する』を読んだ。ソーシャルメディアとかやっていないで、ちゃんと集中して「深い」仕事をしないといけませんよ、という本だというのは、まわりの人々の感想から知っていたけれど 1、読んでみたら想像以上にオフラインになることを推奨していいてびっくりした。

たとえば、5章で著者はこんな提案をする。

ネットを使うときを前もって予定に入れ、それ以外では使わない。コンピュータのそばにメモ用紙を置いておくといい。それに “次に” ネットを使う時間を書いておき、それまでには絶対に使わない。

こういったオフライン生活には、自分もちょっと馴染みがあって、2009年ごろにちょっと試したり、2010年には自宅のインターネットを解約したりしていた。こういった行動は、友達のプチ断線 (2008) に影響されていて、そこで紹介されている「遅延 HTTP」は

それでもわからないことはある. 仕方ない. 検索キーワードをテキストファイルにメモしておこう. 検索キーワードだけでなく, ダウンロードする必要のあるもの, 送るべきメールの草稿なども同じメモにまとめる. こうして “オンラインでやることリスト” ができあがる. オンラインになったら, そのメモをもとに検索をする.

著者の提案とだいぶ似ている。まさか2018年になって海の向こうで同士を見つけるとは思わなかった。

ソーシャルメディア

ソーシャルメディアにも手厳しく、ツール全般に対して「メリットがあるから使う」ではなく、マイナスの影響があることを前提に、それを上回るプラスの影響が自分にあるものだけを使うべきだと指摘する。

Twitter を使わない有名作家を3人とりあげて

この三人がツイッターをしないことが正しいかいなかを議論する必要はない。彼らの業績からして自明だからだ。

なんて書いてみるのはちょっと都合のいい事例だけを引きすぎというか、第1章で成功者として取り上げた Rails の David Heinemeier Hansson が、わりと熱心に Twitter している事実とかをすっと隠すのはどうなんだろう、とは思う。著者は、本書の出版後に TEDx で Quit social media という講演もしているくらいで、ソーシャルメディアの害については熱が入っていて、それが雑さに繋がっているのかもしれない。

一方で

こうしたサービスは病みつきになるようにできている – あなたの職業上および私的な目標を後押しする取り組みから、直接、時間と注意力を奪う。

というのは、職業柄、事実であることはわかる (単位時間、たとえば一週間あたりのアクティブ率みたいなものはみんな気にしている) し、

そこにある暗黙の同意は、友人や仲間の注目を得る代わりに、あなたは彼らに気前よく注目して好意を返す、というものだ。「あなたは私の現状に “いいね!” ボタンを押し、私はあなたのそれに “いいね!” を押す」というわけだ。この同意は、多くの努力を要することなく、すべての人に自分は重要であるという幻想を与える。

これも、まあ、そういう側面はあるとは思う。こう書かれると大分グロテスクではあるけれど。

ディープワーク

じゃあどうすればディープワークできるのか、というところは、他の自己啓発本と重複することも多い。

  • 連続している、割り込みされない時間を作る
  • ディープワークをする時間を決める (時間割)
  • 毎日仕事をきちんと終了させる

あたりは、現状はあまりよく出来ていない。ヘッドフォンをつけず、ポモドーロが中断されても気にしない、は「相談されるのは良いことである」という理由で続けているんだけど、自分が深く考えた仕事を出来ているのかというと、ちょっと疑問に思うところはある。

管理業務に対する冷ややかな態度については、たくさん論文を書いて、査読されて、引用されるのが良いことである、という研究者としての著者の生活が色濃く反映されているなとも思う。

私の職業生活はもう少しゴールが曖昧で、たとえばインタビューやミーティングをやたらに断っていると昇進はできなさそうに思う。そもそも昇進はゴールなのかというと多分ちがう。会社内の評価と距離をおいた、本当の職業生活でのゴール、というものを考えたほうがいいのかもしれない。


  1. たとえば、morrita さんの 今年読んだ/聞いた本 (2016)。Rebuild でも 175: Executive Order (2017) で取り上げられている。 [return]

以前に Saqoosha さんが、WordPress を JSON を出力できる管理画面として使って、dot by dot inc. のコーポレートサイトを作っていて

Inside “dotby.jp 2015”

日々増えるニュースを簡単に更新できるようなブログ形式、前バージョンの背景エフェクトもってくる(かつページ遷移においてリロードしない=エフェクトを途切れさせない)という前提で検討した結果、WordPress を CMS に使いつつ WP REST API で JSON ひっぱってきて React でごにょごにょやるんがいーかなーと。

そういうことを Hugo でやるためにはどうすればいいのか、という話。

Custom Output Formats

Hugo には Output Formats という仕組みがあって、この種類のページには、こういうフォーマットでも出力してください、ということを指定できる。テンプレートファイルをどこに配置するかは、Templates for Your Output Formats という章で例示をまじえて説明されている。

私の場合は、全記事のタイトル、日付、そしてリンクをふくんだ JSON ファイルを生成したかったので、config.toml に

[outputs]
home = ["html", "rss", "json"]

というのを書き足して、自作テーマの一部として themes/x17/layouts/index.json というファイルを作成した。

テンプレートのなかみ

Hugo のテンプレートは Go の html/template をベースにしつつも、多様な要望に応えるためのミニプログラミング言語化しつつあり、正直ちょっと厳しい。

{{ $.Scratch.Add "items" slice }}

{{- range where .Data.Pages "Section" "post" -}}
  {{- $.Scratch.Add "items" (dict "title" .Title "published" .PublishDate "url" .Permalink) -}}
{{- end -}}

{ "items": {{ $.Scratch.Get "items" | jsonify }} }

今回のテンプレートはこんな感じで

  • Scratch はローカル変数を宣言する代わりに使える連想配列
  • slice, dict, range などは、それぞれ Hugo の定義している テンプレート関数 で、リスト、連想配列などを返す。
  • .Data.Pages は Hugo が用意している テンプレート変数 のひとつで、記事のデータにアクセスするために使う。

といったことがわかれば、なんとなく雰囲気で読めると思う。

JSON をテンプレートで出力するのは、最後に余計なカンマをつけてしまったり、エラーのもとになりがちなので、ここでは、普通に変数として JSON の構造を組み立てて、最後にそれを jsonify に渡して変換している。