.memo (kikugawa816 blog)

自分用の(WEB につなげれば見れる)と便利なメモして使う

読書メモ「超一流になるのは才能か努力か?」

こちらの本を読んだ。めちゃくちゃ面白かった。

自身がこれまで読んだ本のなかで「あなたのバイブルは?」と問われた時に出てくる書籍は

があるのだが、その中に加わる程度に面白かった書籍だ。 長年、将棋を続けてきたり、ITの世界において実力的にネガティブを感じることが多いが「こんなもんじゃない!」と思う自身の性格からか、 すごく共感でき、納得したところはあるかも。


バイオリニストや、チェスプレイヤーにおいて、トップに到達する人には才能もなくはないのだが、 それ以上に

  • 「圧倒的に努力をしている」
  • 「努力自体は楽しんでいない」
  • 「努力のパフォーマンスを発揮できる場 (コンサートや、試合)は楽しい」
  • 心的イメージというものが優れている」

というのが本書を読んでいて、共感というか、納得したところである。


スポーツ等どうしてもハードの制約的に厳しい道については、幼児期などからのトレーニングや、 遺伝的要素も絡むこともあるが、ことソフト面 (例えば数学であったり、プログラミングの実力) においては IQなどによってビギナーの段階では飲み込みの早い、遅いはあるものの、 努力の積み重ねによってその差はどんどん無視できる程度に収まるとのことである。


なので「努力はめっちゃ大事!」ということだが、単に「10,000時間の法則」に則って闇雲に努力していても実力は伸ばせない。

努力というものは「目的を持った練習」「限界的練習」を通して「心的イメージ を磨き上げる練習」というものでないと、 最終的には成果として結びつくのが厳しいとのことであり、むしろ単に経験が長くなる、闇雲に努力を続けていると実力は衰えていく可能性もあるとのこと。


将棋を例に例えると、「目的を持った練習」とは「(終盤力を伸ばしたいので) 詰将棋を解く」 「(序盤の知識が浅いので) 定跡書を読む」など。

さらに「限界的練習」というものは、「コンフォートゾーン(心地よい領域、慣れた領域など) の外に出る練習」というもので、 例えば自分自身(将棋ウォーズ四段の、底辺) の場合なら

  • 「(今までは7手詰めハンドブックレベルでとどめていたが) 2桁以上の詰将棋に取り組む」
  • 「単純でない、手数が二桁を超える詰将棋だと読みがぐるぐるしがちなので、それを抑える意識をする」
  • 「(振り飛車など、どちらかと言えば序盤の1ミスが命取りにならない将棋に慣れていたので) 角換わりや、横歩取りなどしっかり定跡を抑えていないといけない世界に踏み込む」
  • 「そもそもどんな定跡でもしっかり抑えていないので、定跡書や棋譜の同手順までのリストアップを行う」
  • 棋譜並べをやる」
  • 「ソフトと対局する」

など。

どの練習についても、今のレベルに到達するまでにはやってなかったし、それ故に停滞している感もある。 やらない理由としては「キツそう」「難しそう」「時間が確保できなさそう」というのが毎回出てくる言い訳。 更にこういったものは「好きこそ物の上手なれ」という言葉があるように 「優秀な人達や、天才というのはこういった努力を楽しみながらやっているんだろうな」 という考えがいつもチラつき、余計にネガティブを覚えてしまう。

この書籍を読んだところ、天才と言われたり、トップと呼ばれる人達は、確かにこういった努力は行っているのだが、 「別に楽しいと感じているわけではない」「実際にキツいと感じている」ということを読んでて理解できたし、腑に落ちた。

  • 「限界的練習=コンフォートゾーンの外に出る」
  • 「キツさ=コンフォートゾーンの外なので」

と考えると、これを継続するにはやはり試合等の場で結果を出せること、出したこともあったり、 自分自身の持つ「心的イメージ」が成長を感じた時に、


心的イメージ というものだが、将棋で例えると最初は「大局観のようなもの?」と思っていたが、どうやらそれだけじゃないっぽい。

いや、書籍を読む限りは心的イメージを活用することで

  • 複数の局面や棋譜を暗記できる
  • パッと見て急所に目がいく
  • 自由度が広い局面においても、何らかの方針や候補手を導き出せる

といった大局観の役割のことが述べられていたが、それだけでなく

  • 「(強くなるために) 将棋とどうやって向き合っていこうか」
  • 「(こういう大局観を持ちたいために) どんな練習を行ったら良いか」

といった、棋理を追求する姿勢的なものも含めて心的イメージ だと個人的には感じたところである。


とまあ、ここまで色々書き殴っていて毎度のことながら文章に自信が無い (^^; とにかく面白かったし、共感できたし、何かをつかめるきっかけにはなった。

書籍では指導者の重要性を説いていたが、幸い自分がやりたいことはITエンジニアとして実力を伸ばしたいことである。 「技術的なアドバイスが出来る、優れたCTOやリードエンジニアが社内に居たらなー」とか思うことはあるが、 Web を通していくらでも情報は広がっているし、そこについてはほぼ間違いなくたどり着けるだけのセンスは持ち合わせている。 (「いかがでしたか?」系のブログに引っかからず、そもそも公式ドキュメントのページにアクセスするというもの)

問題はその後で、自分自信の場合は「投げ出す」か「やるか」で後者を選び、実行することだ。

自分自身、公式ドキュメントが英語で、翻訳するたびに「英語が読めない...」という罪悪感も毎回起こるし、 すぐに読んでも理解できなかったりするし、コードを書くにおいても「やれDDDだ」「変数名だ」とか色々迷ってちっとも完成しない。 TCP/IP などのプロトコルについても、一度勉強はしたがしっかり理解できている気もしないし、RFC などもやはり英語なので読めていない。 アルゴリズムとデータ構造なども、日々の業務で書くコード上では意識しないこともザラだ。 OSSなど、他人が書くコードを理解しようと読むこともできていない (git clone はするけど、それで数箇所みて終わり、的な)。

  • 「えっ、全然 怠惰 じゃダメじゃん」
  • 「勤勉であり、ひたすら勉強するしかないじゃん」
  • 「自分、ITの世界は好きだけど、習得するプロセス、全く楽しくないんだけど」
  • 「優秀なエンジニアはそれらを楽しんでいる話、もうネットでさんざん見たんですけどー」

とか思うけど、それは既に優秀なエンジニアでも同様に思っているかもしれない。 なので自分の納得いくイメージまで、とにかく手を動かす。これをやっていけたらなと、この本を読んでいて思ったところだ。


最後に、自分自身は色々考えすぎたり、トレードオフがどうも苦手である。 色々考えて「あれも必要だし、これも捨てきれない」となりがちで、 結局やれば良いのだが、迷っている中でどうしても中途半端となるのが大体である。

なので、シンプルに以下を意識し、行動していこうと思った。 「集中力」と「大変、難しいと感じる物事は、たとえ天才でも大変だし、難しい」「(なので) やめずに努力を続けること」 この3つ。意識していきたい。

mypy 関連のメモ

  1. mypy.ini をプロジェクトディレクトリ直下に配置する
  2. follow_importsnormal が推奨かつデフォルトらしい。
  3. ignore_missing_imports は有効の方が良さげ。
  4. show_column_numbersTrue で良さそう。
  5. pretty はデフォルト通り無効化で良い。
  6. VSCode ワークスペース設定では以下の設定を行う
{
        ...

        // 自動保存
        "files.autoSave": "afterDelay",
        "files.autoSaveDelay": 1000,

        // mypy 設定
        "python.linting.mypyEnabled": true,
        "python.linting.mypyPath": "${workspaceFolder}/.venv/bin/mypy",
        "python.linting.mypyArgs": [
            "--config-file=${workspaceFolder}/mypy.ini",
        ],

        ...
}

久々に読書している (ビジネス書など)

最近、久々に本を読みたい衝動が強くなり、読書が増えた。といっても読み返しであり、ジャンルとしては、まあ、ビジネス書が中心ですね。

(ビジネス書は心が病みがちな時に、どうしても読むんだよなー)

 

読んだ本で具体的なタイトルを挙げるとしたら、会社に入社直後に買った本で、何度か読み返し→最終的に個人的にバイブルとしている「ゼロ・トゥ・ワン (日本語訳版)」や、その書籍の序文の著者である瀧本哲史さんの「2020年6月30日にまたここで会おう (Audible版)」、「武器としての決断思考」など。

他にも、手持ちの書籍をテキトーに探しては開き、数ページ読んで…みたいなことをしている感じ。

 

マンガも読み返しおり、「バクマン。 (全巻)」「インベスターZ (話としては、就活と株のくだりのとこ)」「3月のライオン (15巻)」など。

 

ビジネス書ってジャンルを個人の感覚で言えば、

  1. 「人生上手く行ってないなー」とか思っている、弱さ故に「答えを求めている」的なタイミングで
  2. どうしても似たりよったりな読み味を覚えるが
  3. 一応、大事なことが書かれている

みたいな要素や、位置づけ、特性を覚えている。

3. について更に言うと

  • (一般的には)これが "成功" だよね!
  • ↑の共通点は○○だよねー

的なものを語るのがビジネス書の中でも「自己啓発本」というジャンルで、更に

  • 二分探索でやれば?
  • 探索をどこの箇所からやるのか考えれば?
  • そもそも探索なんて必要あるん?

みたいな普遍的な方法論まで書かれていると「実用書」といったところと分別している。

どちらにせよ、再度脳内にインデックスを貼るには、かなり面白い機能を有する物とかなんとか思ったり。

 

とはいえそれで結果を出すのには大抵不十分なので、今いるポジションで、まずまずな結果を出すことをゴールに「読書で学ぶ」のなら、そのポジションの分野の実用書、つまり「専門書」を。もう少し上を目指すなら、別分野の専門書を。更なる結果を出すには「ルールブック」や「歴史書」を読み、学ぶのが必要とは思う。

 

ただ専門書やルールブック、あるいは歴史書を「学ぶ」というストイックな行動に移すには、学ぶこと自体への「慣れ」や「習慣」といった身に付きが必要だし、そもそも身に付きがなければそれを会得するための行動を起こすために、「時間」、「体力」を「投資する」必要があると思っている。結局結果を出す人はルーティンというか、ハードウェアというかそういう領域で処理していると思うので。

 

で、自分自身は現在「20代後半」「独身男性」というカテゴリで、時間、体力といった資本は持っているものの、それの投資自体は出来ているかと言えば出来ていない。理由としては「メンタル」からなると推測している。

 

んで、ここを何とかしないとだけどとは思っているけど、「金」が全く無いので、「休む」「甘んじる」的な選択肢が取れない。そもそも情報が少ないこともあるため職場で情報収集にあたり「交渉」することもアリだとは思うけど、それをするだけのメンタルがに自信を持てなかったり、そもそも「まずは行動。行動によってやる気が出るので、小さく始める、というアプローチが効果的」のも知識として知っているけど…

という感じで、やはりメンタル病み気味かも(^^;

 

ただし原因が不明な、いわゆる「うつ病」では無くて、原因が明確で、それから離れれば大丈夫な「適応障害」に近いとは感覚的というか、本能的にはそう感じているので、まあ少しずつ取り戻して行けたら良いかなとか思ったり。

(とはいえ)昼夜逆転とかしていたり、今はそれ程厳しいスケジュールな仕事が振られていないとはいえど、全く仕事に手が付かないみたいな支障が出ていたり。

 

早く積読している専門書などを片付けたりして、目に見える成果を出せたらなーとかも思ったり。

 

最後に、最近聞いている曲のプレイリストの一曲が

「ポケッターリ モンスターリ」

であったり。

 

※うん!やはりメンタル疲れている(^^;)

前回ブログを書いた後、体調も徐々に回復し、仕事もそれなりに「忙しい」としていて、結構時間が経ってしまった。

特に後悔があるわけでもなく、だけどやりたいことややるべき、と思っていることにも取り組めてるわけでもなく、まあ、そんなもんだなとか思っている感じの月でした。

今は少し疲れてるので、休みながら、仕事もそれなりにこなしながら、時がくるまではキープで良いかな…といったところ。


今このブログを書いてる際に思っている、最近の自分の中での話題は、エンタープライズ系のシステム設計や、業務系アプリのニーズと、今忙しい原因である、パブリッククラウド上での作業やら、昔関わっていたシステム関連の話題やら、アジャイルやら、DevOpsやら、SREやら、レジリエンスやら、マイクロサービスアーキテクチャやら、予算の意識やら、リクルート関連の話題やら、色々頭の中でぐるぐる回っている状態、であること。そして書いてる今は前日は徹夜して、今日は早めに帰り、夕食を食べたあとダラダラと横になってこれをスマホから書いているということ。

また時間は確実に進んでおり、何かを得れた気もするし、何も得れてない気もするし、そんなこんなで今日はしっかり休み、明日からまた頑張ろうかな。

この二週間近く、体調不良な日々を過ごしていた。
症状としては

  • 発熱(37.0 - 38.5℃ 程度)
  • 頭痛
  • 首の痛み(寝違えかと思ったが病院で診てもらったところリンパの腫れみたい)

など。新型コロナウイルスへの感染ではなかったものの、
このブログで宣言した勉強だけでなく、仕事(3日間。最近タスクが増えてきた中)や、
ダイエットのために始めた筋トレなども一時中断してしまったのは若干気落ちする部分がある。

一応、病院で薬を処方してもらってからは、それを服用することで頭痛と首の痛みは気にならないレベルで、 仕事などもできるものの、薬が切れると頭痛が現れるため、まだ本調子では無いといったところ。 薬を飲みきった上で、調子が戻っていれば再開できればと思う。特にダイエット。

ABC 253 D 勉強メモ

  • 包除原理 を活用
    • 包除原理の一般化の部分で、- と + の記号を反転させる + (-1)**n-1 の部分なるほど
    • 今回の問題だけで言えば、集合が A, B のみなので上記はあまり関係無いが...
  • std::lcm`` (Python 場合math.lcm```) で最小公倍数が算出できる
    • Python のバージョンによっては math.lcm が存在しない。代わりに a * b // math.gcb(a, b)
    • std::gcb (math.gcb) は最大公約数を求める

コード

#include <bits/stdc++.h>
using namespace std;

/*

[集合]
n(A) = |A| =集合Aの要素数

[包除原理]

|A1 ∨ A2 ∨ ... An|
=   Σ  |Ai|
    i
 -  Σ  |Ai ∧ Aj|
   i<j
 +  Σ  |Ai ∧ Aj ∧ Ak |
  i<j<k

 - ... + (-1)**n-1 | A1 ∧ ... ∧ An |


全ての要素数を足し、余計に足してしまったものを取り除く、イメージ

|A ∨ B| = |A| + |B| - |A ∧ B|
n(A) + n(B) して、n(A ∧ B) を引くことで重複を除外し要素数を計算

|A ∨ B ∨ C| = |A| + |B| + |C| - |A ∧ B| - |B ∧ C| - |C ∧ A| + |A ∧ B ∧ C|

n(A) + n(B) + n(C) して、n(A ∧ B), n(B ∧ C), n(C ∧ A) を引き、余計に引き過ぎた n(A ∧ B ∧ C)
を足して要素数を計算

-/+ を繰り返すので、一般化する際の最後の方で + (-1)**n-1 している。
n が偶数なら (-1)**1 -> -1
n が奇数なら (-1)**0 ->  1

*/
long long calc(long long N, long long x) {
    return x * (1 + floor(N / x)) * floor(N / x) / 2;
}


int main() {
    long long N, A, B;
    cin >> N >> A >> B;

    long long ans = (1 + N) * N / 2;
    cout << ans << endl;

    ans = ans - calc(N, A);
    ans = ans - calc(N, B);
    ans = ans + calc(N, lcm(A, B));
    cout << ans << endl;
}