読者です 読者をやめる 読者になる 読者になる

ksメモ

私がプログラミング関連で学んだことを記載したメモです

エンジニアが燃え尽き症候群から立ち直るために試したこと

久々の投稿。しかもエモい話。 一時期、燃え尽き症候群というものになってしまって、仕事のやる気が極端になくなってしまいました。今になって思えば非常に貴重な経験をしたと思っています。もし同じ悩みを持つエンジニアの目に触れることがあったら、「僕はこうやって元気を取り戻したよ」という参考に見てほしかったりする。

とにかく大切なのは自分のメンタルコントロールだなぁと。仕事がたいへんなときに「あ、オレ今なんだかメンタルやばいかも」って気づけることが大事。

経緯

そのときのプロジェクトはちょっと燃え気味な感じ、トラブルがそこそこ起こっていました。プロジェクトにはトップのPMがいて、その下にシステムの技術的な面に責任を持つ技術リーダー(アーキテクトみたいな)人がいました。その人がプロジェクトの技術部隊を率いていて、自分はその部隊メンバーでした。その技術リーダーが事態を収束できず、結果として技術部隊の次点の自分がそのトラブルの収束を任されることになりました。

そういった消火作業は前プロジェクトで慣れていたこともあって、「まぁなんとかなるか」と思っていました。正直、自分で言うのも恥ずかしいのですが、僕はハードワークは割と大丈夫な方で、朝から夜遅くまで働くことに関しては特に問題ないタイプでした。仕事は好きだしプログラミングも好きだし。特に前プロジェクトは大炎上したプロジェクトだったので、僕には変な自信がついていました。

ただ残念なことに、僕は今回のプロジェクトのPMと相性がかなり合わなかったのです。今になって思いますが、当時のPMのマネジメントがひどかったです。具体的には以下のような内容です。

  • 徹底的にたたかれる
    • プログラム書いても「クソだ」とか「もっと早くつくれよ」と言われたしメールもきました
    • 僕の、あるいは僕のチームの成果物に難癖をつけられました
    • 問題なのは、本人にはその自覚がありませんでした
  • 「○○はお前に任せる」と言った割に、「すべてのissueは俺のレビューを通せ」と言われる
    • 命令が矛盾している(任せると言っておいて、全部レビューされるの?)
  • こちらの話に論理的に取り合ってもらえなかった
    • 「(別チームの)△△さんのところに追加で人当てないと、△△さん機嫌悪くなるからなー。お前は少ない人数で我慢して」
      • いや、それだと間に合わないんですけど…
    • 完全にPMの中で僕のチームの優先度が下がっていて、こういった扱いになっていました

というような状態が続いてました。僕はたぶん真面目な方で、PMの言う通りにそれらを進めようと当時は思っていました。そうすると、いつの間にか会社に行っても仕事にやる気が出ない状態になっていました。

こんな状態が続いたらアウトかも?

最初は、自分が精神面でやられていることに全く気づいていなかったです。もし以下のような状態が続いたらアウト判定かもしれないので、要注意。

  • 今までこなしていた仕事が急にできなくなる
    • やる気がでないというより、何だか手が動かない
    • 最初は「腹減ってるのかな?」とか思って早弁したりしたが効果なし
  • 会社に行くのが嫌になる
    • 気持ちの問題より体調に現れてくる
    • 出勤する途中でぼーっと立ち尽くしていたりした
      • 自分が歩いていないことに気づいたときはビックリした

まずは会社を休みましょう

PMより権限の強い上司に相談をしました。僕が幸運だったのは、その上司がすごく話をよく聞いてくれて、休暇を取れるようすぐに計らってくれたことです。この上司には本当に迷惑をかけてしまいました。ただ、プロジェクトのメンバーに迷惑をかけるわけにはいかないと思っていたので、僕の場合は1週間しか休まなかったです。これもまた幸運だったのが、僕は2週間ほどでプロジェクトから抜けることが決まっていたので、あとはそこそこ並みに働いて、別のプロジェクトへ異動しました。

元気になるには時間がかかる

別のプロジェクトに行っても、なかなか元気になれませんでした。個人差もあるけど、僕は立ち直るために5ヶ月くらい必要でした。なぜかというと、以下のような思考回路に陥って、なかなか前向きな気分になれなかったからです。

元気が出ない→所属しているチームが良くない→チームを変える
→元気が出ない→所属しているチームが良くない→チームを変える
→もはや会社が悪い

こういった考え方になっていました。もうこんな会社は嫌だと思って、会社を辞めようとしていました。結局辞めてないけど、当時は本気で転職活動もしました。良いオファーもあったのですが。会社を辞めなかった理由は、その新しいプロジェクトの仕事をどうしてもやり遂げたかったからです。

あらためて、ネガティブに会社を辞めなくてよかったなーと思います。

立ち直るために試したこと

僕は以下のようなことをして立ち直りました。ここがブログの本題で、もし今あなたもメンタルに不調を感じていたら参考にしてほしいです。

カウンセリングを受ける

これがすごく良かったです。すごく話を聞いてくれました。話を聞いてもらうと、こんなにスッキリするとは思っていませんでした。「元気になるためにどうすればいいですか?」という質問にたくさんアドバイスをくれた。こんなに良いものなら、普段からいろいろと話を聞いてもらってもいいのかもしれないです。特にマネジメントが主業務な人はいいかも。

ちなみにカウンセラーからのアドバイスは、仕事のことを忘れられるくらい夢中で遊んだりすることらしい。例えば、料理をしているとき、趣味のプログラミングをしているとき、スポーツをしているとき、などとにかく好きなことで忘れるのが良いとの話でした。

ゲームで遊ぶ

カウンセラーの通り、夢中になれるものを探してみました。僕の場合は、趣味プログラミングをやっていても、ちょっと仕事を思い出してしまうことがあったので、久々にゲームをやってみました。

もう新しいプラットフォームを買ってしまおうと思って、PS4を買いました。PS4、良いですね。 最初に買ったゲームはテイルズオブベルセリアでした。「テイルズなんでシンフォニア以来だなぁ」と思いながらプレイしていました。面白かったです。シンプルな操作で敵をばんばん倒せて爽快感があり、ストーリーも惹き込まれました。僕みたいなライトゲーマーにはイイ作品です。

あとはFF15ペルソナ5で遊びました。ペルソナ5は特に面白く、ゲームで遊ぶのも悪くないなぁと思いました。

ペルソナ5 - PS4

ペルソナ5 - PS4

働き方を見つめなおす

少し元気になってくると、ストレスを貯めこみやすかった自分の働き方にも問題があったのかもと、冷静に分析しようとした。

個人の働き方
  • 今の会社でハードワークを続けて本当に大丈夫か?
  • 自分にはもっと別のキャリアがあるんじゃないか?
  • 何が自分にとって重要なのか?

エモい話だが、ようは自分の人生についてよく考えてみました。色々調べるうちに出会ったのがマリッサメイヤーの記事でした。書いてあった内容を要約すると、「ハードワークは別にいいじゃん。ただし、自分の大切にしたいものが脅かされない範囲でね」と書いてありました。メンタルのセルフコントロールは大切にしなきゃなと思いました。

www.bloomberg.com

マネジメントの本質
  • PMのマネジメントは嫌だったが、あれは間違っているのか?
  • 自分のマネジメントは本当に正しいのか?

「本当はPMは正しくて、僕の考え方が間違っているんじゃないか?」と思ってこちらもいろいろ調べたり書籍を読むようにしました。今は僕もしっかりとしたマネジメント論を話せるようになりました。こちらは機会があれば別でブログに投稿したいと思います。

人との付き合い方を見つめなおす

今後、嫌な人と一緒に仕事をしなきゃいけない場面は絶対あります。そのときに、その人とどう接すればいいのかを勉強しておかないといけないと思い読みました。燃え尽き症候群についても触れていて、すごくためになりました。

言いにくいことをハッキリ言っても好かれる人の習慣

言いにくいことをハッキリ言っても好かれる人の習慣

最後に

いろいろと試してみたことを書いてみたが、本当に助けられたのは周りの人のサポートだった。信頼できる上司、同僚、そして友達のおかげでした。その方々に深くお礼を申し上げます。また、会社の同期の皆には心配をかけました。一緒にたくさん飲んでくれたし、悩みも真摯に聞いてくれました。本当に素晴らしい友達だと思いました。

MNISTチュートリアルを実行するときにdateutilのバグを踏んだ

TensorflowのMNISTチュートリアルを実行しようとしたときにエラーで落ちた。 たぶん同じバグを踏む人は多いと思うので、メモがてら共有。

発生条件

どうやらチュートリアル用のMNISTサンプルをimportするときに発生しているみたい。

from tensorflow.examples.tutorials.mnist import input_data

自分のPython環境はAnacondaです。

$ python -V
Python 3.5.2 :: Anaconda custom (64-bit)

エラー内容

ちょっと長いので省略して書くが、以下のような内容で落ちる。

$ python main.py
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
Traceback (most recent call last):
  File "main.py", line 2, in <module>
    from tensorflow.examples.tutorials.mnist import input_data
  File "/home/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/tensorflow/examples/tutorials/mnist/__init__.py", line 21, in <module>
    from tensorflow.examples.tutorials.mnist import input_data
  File "/home/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/tensorflow/examples/tutorials/mnist/input_data.py", line 29, in <module>

#省略

  File "/home/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/pandas/__init__.py", line 22, in <module>
    from pandas.compat.numpy import *
  File "/home/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/pandas/compat/__init__.py", line 350, in <module>
    from dateutil import parser as _date_parser
  File "/home/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/dateutil/parser.py", line 158
    l.append("%s=%s" % (attr, `value`))

ググったらdateutilのバグみたい

ここに、「それはdateutilのバグだね」って書いてあった

Error when importing pandas in Python 3 · Issue #551 · hashdist/hashstack · GitHub

dateutilをアップグレードしたら直った

直し方は単純で、アップグレードしてやればよい。これで終了。

$ conda install -c conda-forge python-dateutil=2.6.0

Python Dateutil :: Anaconda Cloud

CUDAのサンプルで"cannot find -lGL"でハマった件

ちょっとハマった、というか「しょーもな」って感じのポイントなんだけど。いちおうメモしておく。

CUDAをインストールしたら、まずはsampleを動かしてみたくなるんだけど、nbodyをビルドしようとしたら以下のエラーが発生した。OSはUbuntu 14.04.5、CUDAは7.5。

$ cd /usr/local/cuda/samples/5_Simulations/nbody
$ make
>>> WARNING - libGLU.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - libX11.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - gl.h not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - glu.h not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - Xlib.h not found, refer to CUDA Getting Started Guide for how to find and install them. <<<

はーん。OpenGL関連がないのかー。
なのでapt-getで必要そうなライブラリをインストールする。

$ sudo apt-get install freeglut3-dev libglu1-mesa-dev

これでmakeし直したらいいと思ったら、「libGLなんて見つからないよ」とエラーが出てきた。

$ sudo make
"/usr/local/cuda-7.5"/bin/nvcc -ccbin g++ -I../../common/inc  -m64    -ftz=true -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_52,code=compute_52 -o bodysystemcuda.o -c bodysystemcuda.cu
"/usr/local/cuda-7.5"/bin/nvcc -ccbin g++ -I../../common/inc  -m64    -ftz=true -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_52,code=compute_52 -o nbody.o -c nbody.cpp
"/usr/local/cuda-7.5"/bin/nvcc -ccbin g++ -I../../common/inc  -m64    -ftz=true -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_52,code=compute_52 -o render_particles.o -c render_particles.cpp
"/usr/local/cuda-7.5"/bin/nvcc -ccbin g++   -m64      -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_52,code=compute_52 -o nbody bodysystemcuda.o nbody.o render_particles.o  -L../../common/lib/linux/x86_64 -L/usr/lib/"nvidia-352" -lGL -lGLU -lX11 -lglut -lGLEW
/usr/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status
make: *** [nbody] Error 1

いや、そんなはずはない。さっきインストールしたでしょ?
と思ってlocaleとか使って調べたら、なんか変なシンボリックリンクが貼ってあってあるだけだった。
ブログだと色がついてないからわかりにくいと思うけど、libGL.soの参照先が存在しないファイルを指定してる。
#同ディレクトリに「libGL.so.1.2.0」はない
#素のUbuntuターミナルだと赤色になっていると思う。

$ ll /usr/lib/x86_64-linux-gnu/mesa/
total 76
drwxr-xr-x  2 root root  4096  9月 25 00:16 ./
drwxr-xr-x 95 root root 69632  9月 25 00:16 ../
-rw-r--r--  1 root root    31  7月  1 05:45 ld.so.conf
lrwxrwxrwx  1 root root    14  1月 13  2016 libGL.so -> libGL.so.1.2.0

下記の方法がよいかわかんないけど、libGLがちゃんとある場所にシンボリックリンクを指定してあげることにした。

$ cd /usr/lib
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0 libGL.so

これでビルドしたら上手くいった。
やっぱりGPGPUと言えばこのsampleですよねー。

$ sudo make
"/usr/local/cuda-7.5"/bin/nvcc -ccbin g++   -m64      -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_52,code=compute_52 -o nbody bodysystemcuda.o nbody.o render_particles.o  -L../../common/lib/linux/x86_64 -L/usr/lib/"nvidia-352" -lGL -lGLU -lX11 -lglut -lGLEW
mkdir -p ../../bin/x86_64/linux/release
cp nbody ../../bin/x86_64/linux/release

$ ./nbody 
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
    -fullscreen       (run n-body simulation in fullscreen mode)
    -fp64             (use double precision floating point values for simulation)
    -hostmem          (stores simulation data in host memory)
    -benchmark        (run benchmark to measure performance) 
    -numbodies=<N>    (number of bodies (>= 1) to run in simulation) 
    -device=<d>       (where d=0,1,2.... for the CUDA device to use)
    -numdevices=<i>   (where i=(number of CUDA devices > 0) to use for simulation)
    -compare          (compares simulation results running once on the default GPU and once on the CPU)
    -cpu              (run n-body simulation on the CPU)
    -tipsy=<file.bin> (load a tipsy model file for simulation)

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
> Compute 5.2 CUDA device: [GeForce GTX 980 Ti]

f:id:ksakiyama134:20160925004830p:plain

LLVM3.9をインストールする

冬コミのネタなんかないかなーと思ってて、「そういえばLLVM3.9出たのかー」と思ってとりあえずインストールしてみた。ちなみにOSはUbuntu14.04を使ったよ。


LLVM Download Page
↑ここから「LLVM source code」をダウンロードしてくる。


いつも通りcmake使ってビルドするかー、と思ったら最新のcmakeが必要になってた。


$ mkdir build
$ cd build/
$ cmake -D CMAKE_INSTALL_PREFIX=/usr/local/llvm-3.9 ..
CMake Error at CMakeLists.txt:3 (cmake_minimum_required):
  CMake 3.4.3 or higher is required.  You are running version 2.8.12.2


-- Configuring incomplete, errors occurred!
$ cmake --version
cmake version 2.8.12.2


まぁ仕方ないのでcmakeの最新版を取得して、ビルドとインストールした。
#cmakeも今は最新が3.6.2とかなんだ。へぇ〜。

Download | CMake
↑ここから「cmake-3.6.2.tar.gz」をクリックして落とす。


$ cd cmake-3.6.2
$ ./configure
$ make -j4
$ sudo make install


割とすんなりインストールできた。で、LLVMのビルドに再チャレンジ。


$ cmake -D CMAKE_INSTALL_PREFIX=/usr/local/llvm-3.9 ..
-- No build type selected, default to Debug
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc


上手くいったみたい。あとはmakeするだけ。
#なんか最後の98%くらいで「やけにChrome重いなー」と思ったら、
#メモリ使用率が13GBとかなってビビった。


$ make -j4


make終わったしあとはinstallだけだなと思ったら、HDDの容量が少なくなっててインストールできないことに気づいた!!!
たぶんinstallしたら10GBくらい使うのかな?ビルドしたディレクトリも13GBになってた。1TBのHDDに交換したら再チャレンジするか。。。


$ du -d 1 --block-size=M .
263M    ./cmake-3.6.2
13875M  ./llvm-3.9.0.src


==
はてなダイアリーからはてなブログに移行しました。
#ダイアリーの方→ksメモ