$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

読書のやり方を変えてみたら知識の吸収速度・引き出し速度が上がった話

最近以下のような記事や本を読み読書法を変えてみたところ、知識の吸収速度・引き出し速度が上がったと感じるので紹介。

kentarokuribayashi.com

やり方

以下のような流れで読書している。

  • 学びたいと思った知識が書いてありそうな本を2~5冊選ぶ
  • 1冊ずつざっくり読みながら、面白かった部分・気になった部分はKindleで黄色にハイライトしておく
  • 全冊読み終わったら、ハイライトした部分だけ眺めて、やっぱり面白いと思ったところは赤のハイライトを付け直す
  • 赤のハイライトを眺めて、読書ノートに転記する
  • 特に面白い部分については、自分の知見まとめノートにカテゴリごとに整理する

学びたいと思った知識が書いてありそうな本を2~5冊選ぶ

自分の中で学びたいテーマがあって本を読むはずなので、そのテーマについて書いてありそうな本を数冊選ぶ。例えば最近自分が「プロジェクトマネジメントのCCPM」について学びたいと思った時は

あたりを選んだ。

1冊ずつざっくり読みながら、面白かった部分・気になった部分はKindleで黄色にハイライトしておく

次に読む。この時あんまり熟読しようとすると疲れるので、ざっくり読むくらいの気持ちでいる。少しでも心に残ったことがあればKindleで黄色でハイライトしておく。

全冊読み終わったら、ハイライトした部分だけ眺めて、やっぱり面白いと思ったところは赤のハイライトを付け直す

ざっくり全冊読み終わったら黄色のハイライトがたくさん付いていると思う。そこで次にもう一度ハイライトした部分を眺め、もう一回読んでみても面白いと思ったところはKindleで赤のハイライトにしていく。

この段階では数冊分の背景知識が頭になんとなく入っているので、最重要部分がどこか判断しやすくなったり、逆にもう一回見てみたらそんなに面白くなかったというのが分かったりと、より本質を見つけやすくなっていると思う。

赤のハイライトを眺めて、読書ノートに転記する

ここまで来てようやく赤色のハイライトの部分だけ自分の読書ノートにメモしていく。最初に黄色でハイライトした量と比べて赤色のハイライトはかなり少なくなっているはずなので、転記のコストはそこまで多くない。

例えば「リモートワークの達人」を読んだ時は、https://blog.shibayu36.org/entry/2020/12/01/183000でも公開したように、こんな感じで読書ノートができている。

* 毎日4時間はみんな同じ時間に働いたほうが良い。コミュニケーションもうまくいくし、チームの一体感が出る 688
    * 気づき: フレックスのコアタイムも4時間は被せる
* 進み具合を共有するために、週に一度「最近やっていること」というテーマで話し合いの場を設ける。この1週間でやったことと翌週にやることを手短に書き込んでいく 788
    * 気づき: 書き込みでやっていくの、スプリント会に導入しても良いかも
* リモートとは単に遠隔地という意味ではなく、時間と場所に縛られない働き方 814
* リモートで世界的な視野を手に入れれば、顧客によりよいサービスを提供することに繋がる 1087
    * 気づき: 多様性を上げやすくなるということかな
* リモートだとむしろチームの雰囲気を盛り上げてくれるような人柄が重要になる 1133
    * 文字だけでやり取りする時、人は悪い方に流されやすくなる
* リモートワークをマネジメントするときは、棘のあるコメントや逆ギレの反応などの小さな行動をひとつひとつ注意していく。割れ窓にならないように 1142
    * 最終的に社員全員がおたがいに指摘できるようになると効果的
    * 「いやな言葉」「感情的な対立」「悪いムード」を徹底的に排除する 1151
* 地域で賃金差別をしない 1211
    * 気づき: 家賃手当とかでも同じようなことになるので注意する
* 候補者の仕事ぶりを知るためのベストな方法は、本格的に採用する前に1~2週間お試し採用をして、給料を払い、小さなプロジェクトをやりとげてもらうこと 1284
    * 現在働いているなら副業的にやってもらうでも良い
* リモートでは働きすぎをふせぐため、あえて休暇を増やすなどをする必要がある 1536

特に面白い部分については、自分の知見まとめノートにカテゴリごとに整理する

読書ノートの段階ではまだ自分の中で整理できてないので、必要な時に知識を引き出すスピードが遅いという問題がある。そこで特に面白かった部分は自分の知見まとめメモにカテゴリごとにまとめ直している。例えばプロジェクトマネジメントの本を読んだ後は、自分のプロジェクトマネジメント知見メモに自分で知識を整理してまとめ直す。

プロジェクトマネジメントメモの一部を抜粋するとこんな感じ。 f:id:shiba_yu36:20210105100624p:plain:h600 f:id:shiba_yu36:20210105100651p:plain:h600

ちなみにこの知見メモは読書から学んだことだけでなく、Webの記事から学んだことや自分の経験談から学んだことなど全てをまとめている。

このやり方の良さ

昔はちゃんと一冊ずつ読んで読書メモを書いて満足していたのだけど、このやり方に変えてから知識の吸収速度や知識の引き出し速度が上がったと感じる。

  • 頑張って熟読するという気持ちが抜け、1冊1冊を読むペースが早い
  • 数冊読んだ上で面白いと思うポイントを判断するため、ある一冊に書いている話じゃなくより本質は何かを把握しやすくなった
  • 二回面白いと思わないと転記しないので、転記するコストも低い
  • カテゴリごとに知見をまとめておくことで、後からその知見を引き出しやすい

まとめ

今回は最近の読書法についてまとめてみた。このやり方で最近はアジャイルやプロジェクトマネジメントを再学習している。知識を効率的に吸収し、さらに知識を引き出しやすくなったと感じているので、この調子で続けていきたいと思う。

リモートワークでは自己主張スキルが大事な気がしてきた

リモートワークをしていると特定のスキルを保有しているか否かで自分の成果や成長が大きく変わってくると感じてきている。その中の一つとして最近感じているのが自己主張スキル。


なぜそう感じるか。それは最近ローカルでの開発からリモートの開発になったことで、自分がメンタリング・ファシリテーションスクラム開発などをしている時に、非言語情報である表情や相槌、目線などの情報を使って良い感じに対処することが非常に難しくなったからだ。リモート会議だとミュートを多用したり人によってはビデオを切っていたりするので*1、言語情報以外の情報が全く入ってこなくなり、「良い感じ対処」のための情報量が圧倒的に不足するようになってしまった。例えば

  • メンターとして困りごと相談を受けている時間に沈黙が生まれると、理解していて沈黙しているのか、今考え中で沈黙しているのか、全く理解不能で沈黙しているか分からず、どう対処したら良いか分からなくなる
  • ファシリテーションをしている時に、意見を持っているけど言いたそうな人を見つけることが困難で、「〇〇さんどうですか」と発話を促すことが困難になった
  • スクラムマスターとしてタスクをアサインする時に、表情などから実はやりたい・実はやりたくないというのを見出すことが困難になり、本人のモチベーションに最適なタスクを割り当てづらくなった

もちろん今後リモート時代での良い方法は編み出されていくとは思うが、現時点ではマネジャー・ファシリテーター側で良い感じに回しづらくなってきている。


この現状を考えると、それぞれの人で自分の気持ちをリモートでも伝わるように全て言語情報にする、つまり自己主張をするスキルが大事になってきていると感じる。上記の例で挙げたようなことであれば

  • 相談をする時に、「なるほど、わかりました」「ちょっと考えてみます」「全く分からないです」をはっきり言う
  • ミーティング中にちょっとでも気になることがあれば、完全にまとまり切ってなくとも「ちょっと良いですか」と声を上げる
  • 次のタスクをもらう時に、「こういうことをやりたい」「このタスクは今後の成長を考えるとできればやりたくない」「今回はこのタスクをやってみるが、次回はこういうタスクもやりたい」などをはっきり伝える

こういうことが出来ると、マネジャーなどは本人の意思をキャッチしながら良い方法を考えることができ、結果的に本人が成果を出しやすく本人の成長にも繋がると感じる。


というわけで今回はリモートワークでは自己主張スキルが大事な気がしてきているということを書いてみた。他にも「ローカルでも大事だったけど、リモートだとさらに影響がクリティカルなスキル」というのは色々ある気がするので、見つけたら言語化していきたい。

参考: 最近リモートワークで参考にしている本

*1:それ自体はプライバシーの観点で仕方ないと思う

puppeteerを使って最近の自分のブログのサマリーを出す

評価時期で自分のアウトプットの様子を出す必要があり、この機会にTypeScript + puppeteerでシュッとスクレイピングするの試してみるかと思い、やってみた。

完成したもの

https://github.com/shibayu36/tools/blob/a7156bc03620700105cc52e54d69cac38b13f40e/script/blog-ranking.ts

スクリプト内でurls, start, endを定義しておくと、特定期間の総記事数や総ブックマーク数、記事の情報を出してくれるようになった。

使い方は

git clone https://github.com/shibayu36/tools.git
cd tools
npm install
npx ts-node script/blog-ranking.ts

コード

/* eslint-disable @typescript-eslint/no-non-null-assertion */
import axios from "axios";
import { parse, parseISO, isBefore } from "date-fns";
import { sumBy, sortBy } from "lodash";
import puppeteer from "puppeteer";

const start = parseISO("2020-07-01T00:00:00+09:00");
const end = parseISO("2021-01-01T00:00:00+09:00");
const urls = [
  "https://blog.shibayu36.org/archive/category/tech",
  "https://blog.shibayu36.org/archive/category/tech?page=2",
];

async function main(): Promise<void> {
  const browser = await puppeteer.launch();
  const articlesList = await Promise.all(urls.map((u) => fetchArticles(browser, u)));
  const articles = articlesList.flat().filter((a) => isBefore(start, a.date) && isBefore(a.date, end));

  console.log("総記事数:", articles.length);
  console.log("総ブックマーク数:" + sumBy(articles, "bookmark"));
  for (const a of sortBy(articles, [(a) => -a.bookmark])) {
    console.log(`[${a.title} ${a.url}]`, a.bookmark);
  }

  await browser.close();
}

type ArticleWithBookmark = {
  title: string;
  url: string;
  date: Date;
  bookmark: number;
};
async function fetchArticles(browser: puppeteer.Browser, url: string): Promise<readonly ArticleWithBookmark[]> {
  const page = await browser.newPage();
  await page.goto(url);
  const articles = await page.evaluate(() => {
    const articleElements = Array.from(document.querySelectorAll(".archive-entry"));
    return articleElements.map((elem) => {
      const link = elem.querySelector(".entry-title-link")!;
      const title = link.textContent!;
      const url = link.getAttribute("href")!;
      const date = elem.querySelector(".archive-date time")!.getAttribute("datetime")!;
      return {
        title,
        url,
        date,
      };
    });
  });
  page.close();

  const queries = new URLSearchParams();
  for (const article of articles) {
    queries.append("url", article.url);
  }
  const res = await axios.get<{ [url: string]: number }>(
    `https://bookmark.hatenaapis.com/count/entries?${queries.toString()}`
  );

  return articles.map((a) => ({
    title: a.title,
    url: a.url,
    date: parse(a.date, "yyyy-MM-dd", new Date()),
    bookmark: res.data[a.url] ?? 0,
  }));
}

main().catch((error) => console.error(error));

最近のブログの様子を出した

2020/07~2020/12の様子を出した。総記事数35、総ブクマ数4184と結構頑張れたと思う。「締め切りが厳しいプロジェクトで、プロジェクト初期にまずやっておきたいこと」という記事はこれまでやってきたプロジェクトマネジメントの経験を言語化できて良かった。

blog.shibayu36.org

総記事数: 35
総ブックマーク数:4184
[締め切りが厳しいプロジェクトで、プロジェクト初期にまずやっておきたいこと https://blog.shibayu36.org/entry/2020/07/27/181500] 1077
[メンターを初めて経験する人に、最初に読むものとしてオススメしている書籍たち https://blog.shibayu36.org/entry/2020/07/10/183000] 872
[部下の困りごとをマネジャーが解決しすぎない方が良い https://blog.shibayu36.org/entry/2020/11/20/180000] 471
[TypeScriptの型を手に馴染ませるためにやっていること https://blog.shibayu36.org/entry/2020/10/15/173000] 390
[現代のソフトウェア開発を学ぶために「正しいものを正しくつくる」を読んだ https://blog.shibayu36.org/entry/2020/08/17/181500] 354
[開発チームの責務を「エンジニアリング観点でのサービス継続リスクをコントロールしながら、開発速度を最大化する」としてみた話 https://blog.shibayu36.org/entry/2020/10/01/180000] 203
[今見ているファイル内をSearchしやすくするVSCode拡張を作りました https://blog.shibayu36.org/entry/2020/07/06/180000] 169
[PullRequestからチーム開発の生産性・健全性を測るCLIツールを書いてみた https://blog.shibayu36.org/entry/2020/08/24/173000] 141
[VSCodeのFindで今マッチしている場所にボーダーを引いて見やすくする https://blog.shibayu36.org/entry/2020/10/12/180000] 120
[開発チーム運営では問題発見・改善だけでなく、良かったことの共有も大事にする https://blog.shibayu36.org/entry/2020/07/28/183000] 65
[TypeScriptでCLIツール作りをするためのプロジェクトサンプルを作ってみた https://blog.shibayu36.org/entry/2020/08/05/183000] 47
[長い期間、継続的にブログを書き続けるための工夫 https://blog.shibayu36.org/entry/2020/07/15/183000] 40
[ALBで特定のpathのときだけCognito認証を通す構成をaws-cdkで作る https://blog.shibayu36.org/entry/2020/09/23/180000] 39
[GitHub Actionsでeslintを動かすだけでFiles changedにlint errorが表示されて便利 https://blog.shibayu36.org/entry/2020/11/09/173000] 36
[特定のファイルだけgit stashする https://blog.shibayu36.org/entry/2020/07/17/105146] 30
[VSCodeのExplorerでフォーカスしているファイルを、ActiveなEditor Groupの隣に開く拡張を作った https://blog.shibayu36.org/entry/2020/10/28/183000] 29
[workflow_dispatchを使うとGithub Actionsのデバッグも楽だった https://blog.shibayu36.org/entry/2020/07/22/114015] 24
[Jamboardを使ってオンラインでプラニングポーカーをする https://blog.shibayu36.org/entry/2020/09/02/170308] 17
[VSCodeの置換でEmacs風の挙動を再現する https://blog.shibayu36.org/entry/2020/10/02/180000] 16
[他人を動かすコミュニケーション手法を学ぶ - 「人を動かす」読んだ https://blog.shibayu36.org/entry/2020/12/08/180000] 13
[「デッドライン」読んだ https://blog.shibayu36.org/entry/2020/11/16/183000] 5
[PullRequestの統計情報をBigQueryに送り、変更のリードタイムを柔軟に可視化する https://blog.shibayu36.org/entry/2020/10/27/183000] 5
[開発効率化のために最近入れたツールたち(indent-rainbow / TabNine / Tree Style Tab / Clipy) https://blog.shibayu36.org/entry/2020/08/31/183000] 5
[「ピープルウェア 第3版」読んだ https://blog.shibayu36.org/entry/2020/11/13/180000] 3
[スプレッドシートで保育園の在庫管理をしようとして失敗したけど、claspによるGASの管理方法を学べた https://blog.shibayu36.org/entry/2020/09/08/183000] 3
[「プロジェクトマネジメントの基本」読んだ https://blog.shibayu36.org/entry/2020/11/17/183000] 2
[GraphQL APIを使って、特定のGitHub Teamが持つレポジトリ一覧を一発で取得する https://blog.shibayu36.org/entry/2020/11/03/173000] 2
[「MBAより簡単で英語より大切な決算を読む習慣」読んだ https://blog.shibayu36.org/entry/2020/07/07/180000] 2
[VSCodeにAwesome Emacs Keymap入れた https://blog.shibayu36.org/entry/2020/11/02/183000] 1
[ReactのuseEffect/useLayoutEffectやレンダリングの実行順について調べた https://blog.shibayu36.org/entry/2020/09/24/180000] 1
[開発チームのパフォーマンスを測る指標を学ぶ - 「LeanとDevOpsの科学」読んだ https://blog.shibayu36.org/entry/2020/09/07/183000] 1
[スクラムガイド(2017)読んだ https://blog.shibayu36.org/entry/2020/07/22/183000] 1
[「リモートワークの達人」読んだ https://blog.shibayu36.org/entry/2020/12/01/183000] 0
[TypeScriptプロジェクトのテストとlintをGitHub Actionsで実行する https://blog.shibayu36.org/entry/2020/08/25/180000] 0
[SCRUM BOOT CAMP THE BOOK【増補改訂版】を読んだ https://blog.shibayu36.org/entry/2020/07/29/183000] 0