Joeの精進記録

旧:競プロ練習記録

仕事におけるメンタル管理

入社して半年弱になって、なんとなく感じたことをまとめる

ざっくり、これがあれば仕事ができる、という十分条件的な要素をあげると - 頭 - コミュニケーション - メンタル管理 という気がする。頭はどうしようもないので、まあ頑張るとして、コミュニケーションとメンタル管理は意識的に改善できる問題な気がする。

とくにメンタル管理について、これは地味に最重要な気がする。というのも、調子のいい日と悪い日で生産性が10倍ぐらい違う(自分だけ?)

すごい調子がよくて、「今日めちゃくちゃ仕事できたな」と感じる日が誰しもあると思うが、これを自分から作り上げていきたいなとしばしば思う。 その日は特段頭がいいかと言われるとそうでもない気がする。自分の場合そういう日の特徴として、一日にPRを3つも4つも出すとか、チームの人とのディスカッションで喋ったことに対してよいリアクションをたくさんもらうとか、そういうことが多い。このPRひとつを取り上げてみればそんなに大した内容でなかったりするし、2行の変更とかもしばしばあるが、あまり気にならない。錯覚なのかもしれないが、大きなPRを1つ出したときより小さいPRを5個出した日のほうが仕事をしている感がある。 そういう精神衛生がよい日は、さらに手がめちゃくちゃ動くし、集中力が続いて正のスパイラルが起きている気がする。

反対に、全然物的な進捗がない日はけっこう辛い。何もしていないわけではないのだが、形として残っていなければやはり焦りを感じる。チームの人たちはやさしいのでそんなことでとやかく言ったりはしないけど自分の問題として気になって気分が上がらない。精神的に疲れるのでこまめに休憩を挟んだり、勤務時間を短めにしてリフレッシュしたりするのだが、調子のいい日より勤務時間も短いし、その上で休息を取るので、さらに差がついている。 調子のいい日にこのタスクをやっていれば、半分の時間もかからなかったのではないか、という気持ちになる(というか、実際かからないと思う)。

こういう状況を打破するのは、「調子のいい日を取り戻して、圧倒的生産性をあげる」以外にないと思うので、どうにかしてこの正のスパイラルに持っていく必要がある。 とりあえず、いまの仕事を一旦置いておいて、かんたんなタスクをガンガン潰していくのがよさそう。 それか、いまの変更を細分化して、部分的にPRをたくさん投げてみたりとか。

あと、寝るのは本当に大事で、基本的にこういうとき睡眠不足が多いというのを経験的に感じている。メンタルはほんとにもっとも低コストで仕事の効率を上げる方法だと思っているのではやく完全に習得したい

昔書いたことの反省

xuzijian629.hatenablog.com

これ。思い返してみると当時はGoogleで働きたい理由がいろいろあって、かなり1本に絞ってやっていたので落ちたことに関してはかなり悔しかった。 ただ、いま自分が社会人になって感じるのは、企業側も採用に関してはまったく手を抜いていないということで、当時リクルータのことをボロカスに言っていたのは反省。

学生の頃は全然知る由もなかったが、社会人になって、採用はすごく手間をかけているプロセスで、面接官側も入念に準備をしていることを知った。

実際マッチングはかなり運ゲーで、「マッチングに落ちる=能力が足りない」では決してないと思うんだけど、それは採用の仕組み上仕方のないことで、いくら優秀で面接の質問に全部完璧に答えたとしても、プロジェクトにマッチングしない、というのは全然ありえる話だと思う。

自分がいまの職についているのもある程度運で、当時のインターンに落ちたのもある程度運だと思う。

WFH環境ライフハック

仕事部屋がある人はそれで問題ないと思うが、うちは居室11畳の1Kなので食事をする部屋と同じになる。前まで忙しいときに作業机で食事をすることが多かったが、やめた。これには机を部屋の奥に置き、手前に食事用の小さめの机を買って、食事をするときにわざわざ奥に行かないような環境を作った。こうすると、紙や袋なども作業机にはなかなか置かなくなるのできれいな状態が保たれる

椅子を窓にアクセスできるように配置すると換気がこまめにできてよい。beetくんに二酸化炭素濃度が本質であることを学んだのでわりと眠くなってきたりしたらすぐ換気するようにしている

あとはメリハリをつけるのが大事だと思っていて、「進捗が出ていないので今日はなかなか退勤できない〜」みたいなムーブを絶対に起こさないようにしている

息抜きは普段やらないことをやるのがいいらしい。ゲームしたりひたすら寝たりするのは避けてドライブや料理、通話などをしている

A Faster Parameterized Algorithm for Treedepth

木分解上のDPによってtreedepthを求める。

アルゴリズム自体が結構むずかしく、正当性は非自明

木分解上の各bagは、「そのbag以下の部分木のbagのUnionに含まれるノードについてのtreedepth decompositionのpartial decomposition」をもつ。partial decompositionのdepthとそのtreepdepth decompositionのdepthは同じ。

これを、nice tree decompositionのintroduce/forget/joinについて遷移規則を定めている。 forgetはかなり愚直だが、introduce, joinについては、自分より大きいdecompositionを考えるので、partial decompositionを得るために一度、特定のサイズ以下の頂点数の木をすべて生成したりして、かなり計算量がやばそう(だけどFPTなので定義上セーフ)

ここに超忖度を要するスライドがある

Computing Tree-Depth Faster Than $2^n$

タイトルの通り

アルゴリズムの概略は以下の通り

f:id:xuzijian629:20200229132652p:plain

ほぼ愚直な O*(2^n)アルゴリズム \mathbb{A}_0があり、アルゴリズムの探索空間を狭めた、 \mathbb{A}_\varepsilonを構築して、大部分の問題を解く。

うまく行かない場合のグラフは、任意のminimalな分解がproblematic node  vを含む形になっている。

f:id:xuzijian629:20200229132849p:plain

グラフは上図のような分解になっていて、 Y = Q \cup R_1を全探索して、さらに R_1も全探索して、コーナーケースに相当する場合を解く。コーナーケースに含まれる小さな部分木 Q_i R_jのtreedepthは前計算されているか、たかだか1回 \mathbb{A}_0を適用して求めることができる。

部分木のtreedepthが分かっている状態で、 Q_i,  R_1の順番を入れ替えて最適なもの(これはtreedepthに一致することが示される)を探したいが、これは多項式時間でも止まる。

最後の最後にすごい定義が効いていてすごい