seri::diary

日常

自分の強みらしい強みが30代半ばにしてようやく見えてきた

tl; dr

自分の年代,つまり30代半ばでプライベートで新しいことを継続して勉強できているのは「自分の強み」と捉えていいようだ,という話.

本編

自己啓発本とかを読むと「自分の弱みと強みを知りましょう」といったアドバイスがよく書いてある.

弱みを列挙するのは自分にとって簡単だ. 怠けやすい.飽きやすい.ダメそうになるとすぐ諦める.現状維持を極端に嫌がる.頼んでもないのに上から目線でアドバイスしてくる人をすぐ嫌いになる*1.よくこんなんで会社員をやっているなと思うぐらい弱みは沢山ある.

一方で強みを列挙するのが昔から苦手だった. 20歳を過ぎてから,ストレングスファインダーとかで自己分析をする機会は何度かあったが*2,そこでハイライトされた項目が自分の強みかというとなんとなく納得できないものが多かった.
自分で過去の経験を振り返ってみても言語化できなかった.これは自分の経験の範疇でだが,仕事において誰かから褒められたことがない.社会人を通算9年+やってる*3にも関わらず,自分の上司的な人から何か自分の特徴について褒められたことがない.上司から好かれないタイプの人間だからかも知れない.逆に上述したような弱み+αはさんざん言われてきた.しかし,褒められたり長所を指摘された記憶は全くない.過去に勤務していた企業の社長に「お前はいつかどこかのベンチャーのCTOになりそうだ」と言われたことはあるが,それは長所でもなんでもなくただの「特性」に過ぎない*4

そもそも強みとは何か?weblio辞書で検索してみても,いまいち良くわからない.しかし,「同じような属性の人間があまり持っていない武器」と考えれば多少は心当たりがあった.それはほぼ趣味でやっている勉強である.2020年3月で大学院を卒業して日常から研究活動がすっぽりなくなってしまったため,CourseraのMLコースを受講したり,せっかくなのでE資格も取りたいと思ってディープラーニングのオンラインコースの受講をしていた.最近では画像処理エンジニア検定エキスパートの勉強をしている.新しいなにかを勉強するのは自分にとっては自然な行動で,大学院入学前にも数ⅡBレベルの高校数学を勉強し直して数学検定2級を取ったりしている.その前は,具体的な資格ではなく新しいプログラミング言語フレームワークの使い方を勉強している時間が長かったような気がする*5

こういう勉強を苦だと思ったことはなかった.もちろん好きでやっていたので苦ではないのは当然なのだが,こういう行動を取れる人は,自分の同業者かつ30代半ばという狭いクラスタにおいては,どうも珍しいタイプであるらしいということが分かってきた.

同年代の同業者と話をすると,プライベートの時間で何か自分が知らないことを継続して勉強しているのは自分以外にほとんどいなかった.例えばE資格を取るためにディープラーニングの講習を受けたとか,TOEIC/TOEFLで具体的なスコアを達成するために英語を勉強しているとか,オンラインのコースで高校数学を勉強しなおしているとか.そういう人は自分が20代の頃は身近に結構いたものだが*6.しかし,どうも30代半ばになるととてもレアになるようだ.もちろん,自分と同年代で自分よりも沢山資格を取りまくっていたり,競プロでめちゃくちゃ結果を出してたり,自分よりも何倍も技術書を読んで知識が豊富だったり,国際会議にガンガンに論文通している化け物みたいな人や,起業してCxOをしている人,などなど,何人も知っているので,自分が同年代の中ですごいとは全く思っていない.とは言え,平均値よりはマシな方なんじゃないかな,程度の感触を得つつある.

何が言いたいか分からなくなってきた.とにかく,もし今自分がどっかの会社の面接を受けるとして,そこで自分の強みについて聞かれたら,

  • プライベートの時間を使って業務とは関係ないけど何かを継続して勉強していて
  • それぐらい新しいものを覚えることに関してはモチベーションはあるし
  • 取得した資格や業務経験によってその成果も客観的に示せるよ

ぐらいのことは言ってもバチは当たらないんじゃないかな.
30代半ばにして初めてそういう発見をしたよ.散々色んな人にボロクソに言われて否定されてきた自分の人格と人生だけど,少しは自分で自分を肯定できそうな要素を見つけたよ,という話.

*1:上から目線でアドバイスできる人は,自分よりも会社における立場が上であることが多いので本来であれば仲良くしておいた方が得することが多いと考えている.

*2:不思議なことに20歳の頃にやっていたPCを教えるバイトでもやったことがある

*3:2009年4月に学部卒で就職から無職になることなく働き続け,2018年4月-2020年3月は大学院にいたので11-2=9年

*4:なお,経営にも関わるタイプのCTOポジションには全く興味がない

*5:例えばRubyRailsを独学で覚えて自作webサービスPHPからRubyにmigrationしたりしていた.

*6:一番すごいと思った人だと,フルタイムで働きながら公務員試験を受けようとしているやつがいた.

プロダクトは運用フェーズの方が圧倒的に長いという事実とどう向き合うか

現職を含め,これまで3社の自社サービス企業*1で働いてきた*2

1社目ではメインのプロダクトがすでにサービスインしていた.主要な機能は大体完成しており,徐々に新規ビジネス案件のプロジェクトが減って運用フェーズに移行し始めるタイミングだった.最初の仕事は社内向け管理画面のちょっとした修正とかだったと思う.当時,20代半ばの若手で経験も少なかった自分は,そういう最後まで残っていた重要度の低いタスクを担当していた.入社して半年ぐらいでデカい新規開発プロジェクトを担当した後は,本格的にチームの人数が減り始めて運用フェーズに移行していった.

2社目では入社時点ではサービスインはしていたものの,割とやった方がいい残タスクが結構残っている状態で,バグも結構残っていた.自分の入社直後の仕事は,開発体制の見直し,バグの可視化,バグつぶしがメインだった.別にそれをやってくれと言われた訳ではないが,まずは体勢を整えないと安心して仕事ができなさそうだったのでそれまでの知見を活用してどんどん改革していった.それまで雑多にWeb APIをリリースしていたのが,決まった曜日,決まった時間帯の週1回になったのは自分がそう決めたからである.ただ,それらを片付けて綺麗にした途端,ビジネス要件的にはもう十分といった感じになってしまい,割とヒマになってしまった.幸いにもその後いくつか難しめのプロジェクトも経験できたが,やがてビジネス起因のタスクは発生しなくなり,Web API本体のリファクタリングバグフィックスやライブラリのバージョンアップ,それもやり切ってしまうと社内データ分析基盤の整備や他プロジェクトの手伝いに精を出していた.それが最後の1年間ぐらい続いた.

3社目は現在の会社だが,サービスインしてからの時間はこれまで経験した会社の中では最も長い.現在所属しているチームでは運用をいかに安定させ,内部コンポーネントリファクタリングにより開発コストを低下させる作業に注力している.自分の場合,現在は自社サービスのコンポーネント間だけで使われるプロダクトを改善している時間が大半を占めている.

これまで経験して思うのは,ゼロベースで新規にプロダクトやcustomer facingな機能をゴリゴリ開発しているのはほんの一瞬で,その後は長く運用フェーズが続くというライフサイクルである.運用フェーズが長く続いているというのは,言い換えればビジネス的に成功している,もしくはクローズするほどひどくない,等のポジティブな事実を示している.そのため,経営視点で見れば良い状態だと言える.実際,自分の収入も運用フェーズが長いプロダクトの企業ほど改善されてきている気がする.

ただ一方で,運用フェーズが長いと技術的に新しいことを試す機会が減る,やることが同じことの繰り返しになって単調になる,という事実と向き合わなければならなくなる.

技術的に新しいことを試す機会が減ること自体は,収入を得続ける点においては問題ではないと考えている.例えば,同じ会社の同じプロジェクトに居続けるなら,同じ技術を使って仕事を続けていてもすぐに問題になることは少ないだろう*3.実際,自分も前職では2年3カ月の間ずっとRailsのWeb APIのメンテナンスを続けていたが,それで仕事を失いそうになることはなかった.その前はJava + Springだったが同様である*4

一方,「やることが同じことの繰り返しになって単調になる」問題は,未だに自分にとって深刻な問題として残っている.多分,一般的なソフトウェアエンジニアと比べても自分は相当な飽き性なんだろうと思う.もしくは,プライベートで楽しみを見つけることが下手で,仕事に楽しみを求めすぎてしまっていたことも原因の一つであると考えている*5.先に書いたように,プロダクトはいずれ運用フェーズに移行する.Webサービスは永遠のベータ版*6なんて言われていた時代があったが,本当にそうだろうか.足りないものを片っ端から作らなければならない,毎日のようにコードを書かなければならない,そんな夢の日々は一瞬で終了する.ベンチャーで働くソフトウェアエンジニアというのはそういう生活をしていると想像する人もいるのかも知れないが,そんなフェーズはどんなプロダクトでも一瞬だと思う. *7

この傾向はAWSやその他便利なサービスを活用することで近年さらに顕著になっていると考えている.インフラエンジニアがいなければherokuに重課金すれば十分で,サーバを持つにしても当然のようにIaaS*8で,メールを送信するのに自前でメールサーバ立てるなんてのは大抵の場合は不要で外部サービスに丸投げすれば十分で,GitHub ActionやCircle CIでリッチなCI/CD環境を最初から低コストで整えて開発をスタートできる*9.バックエンドエンジニアがいなければFirebaseで代替してフロントエンドだけを開発すれば場合によってはサービスインも可能な時代で,もはや自分のようなほぼWeb API開発だけを専門としてきた人材は,自社サービスを運営するベンチャーにとって必ずしも必須ではないと考えている*10

このような状況下で,自分は今後どうすればいいのかと頭を抱えることが増えた.今後も同じ問題に遭遇したら,これまでのように「開発フェーズ」にあるプロダクトを作っているベンチャーを探して転々とするのか,勝負する領域を変えて長く戦える場所を探すか,できることを増やして*11運用フェーズに入っても開発を続ける機会を生み出す別の能力を身に着けていくか.何が正解なのか分からないが,このままだと過去と同じことを繰り返すだけになってしまう.転職自体はそこまで苦ではないが,いい加減それ以外の手段も持ち合わせていきたい.

*1:この言い方もう死語かも知れないけど,いわゆる受託開発専門じゃない会社を指している.

*2:なおSIer + 受託開発も3社経験している.

*3:2年7カ月以上同じ会社にいたことがないダメ人間なので実態は良く分からない.けど別に4年いようが5年いようが,会社がメインで使っている技術スタックが変わらなければ本人の技術スタックが変わらなくてもすぐにその人の評価が下がる,プロジェクトにありつけなくなる,といった事態は起きないのではないだろうかと考えている.

*4:ソフトウェアエンジニアとしての評価と使える技術の幅はそこまで比例しないものである.

*5:反省してプライベートでいくつか何の役にも立たない個人プロジェクトを積極的にやるようになったのはつい3年前からの話だ.

*6:https://gigazine.net/news/20060823_beta/

*7:なお自分はWindows NTの開発記である「闘うプログラマー」やFaccebookの立ち上げ時期の様子について書かれた「フェイスブック 若き天才の野望」に出てくるデスマ話が大好きで,なんで自分はこれらのプロジェクトに参加できなかったんだと読む度に悔しい気持ちになる.

*8:これも死語かも知れない.AWSとかGCPとかAzureの仮想サーバ等の計算リソースを指す.

*9:昔はJenkinsってやつを社内で飼ってた企業が多かった.

*10:これが自分が仕事辞めて大学院に進学した理由でもある.https://serihiro.hatenablog.com/entry/2018/04/23/213418

*11:例えば今年に入ってからDLを中心に機械学習を勉強している.最近は畳み込みフィルタを適用する本来の意味について知りたくなってComputer Visionの勉強も始めた.

ダメージの実力差に応じたタンクの戦い方

シーズン24においてシルバー・ゴールド帯では以下のタンク編成をよく見る.

  • ハルト・ザリア
  • ロードホッグ・ザリア
  • D.Va・ザリア
  • ウィンストン・ザリア

当たり前だが,これらさえピックしていれば勝てるという保証は全くない.2盾時代はオリシグ以外にほとんど選択肢がなかったようであるが,今や2盾コンビを見る試合は稀になった.

自分がタンクを選ぶ基準は主に味方の他ロールの実力や余裕の有無である.

特にダメージの実力差が重要だと考えている.味方ダメージが強ければタンクは火力を出す必要はない.フォーカスを集めるタンクの基本動作を忠実にこなせばよい.しかし,味方ダメージが圧倒的に弱い場合は,タンクだけで火力を出さないと味方ダメージが何もできない状況に陥りがちである.
タンクが火力を出さないといけないケースがあることを知らないタンクの場合,永遠にハルザリで盾を貼ってガッツリ守っていてボロ負けする試合をクイックではよく見る.*1

味方ダメージの方が強い場合

味方ダメージが相手を圧倒している場合は無理して火力を出さなくて良い. この場合はダメージの編成によるが,大体ハルザリで味方サポートをしっかり守りながら戦うことが多い.裏方の仕事さえキッチリやっていれば勝てる.

ただ,あまりに圧勝していると,たまに相方タンクが敵陣に特攻し始めて無駄死にして逆転負けするケースもある.例えば敵陣に不要なロングチャージを繰り出し始めるラインハルトをよく見る.経験上,こういうタンクには何を言ってもしょうがないので黙っているのだが,「勝てる試合でふざける」のは絶対に止めるべきである.勝てる試合はさっさと勝ってレートを上げて次に行けばよい.

味方ダメージの方が弱い場合

この場合の試合で勝てるかどうかで勝率が50%を超えるかどうかが決まってくる.以前の自分の1シーズン間における勝率は50%を割っていたが,その頃はこのケースの試合で全く勝てていなかった.

このケースにおいては,相手ダメージにプレッシャーを与えて味方ダメージに活躍してもらえれば打開できる可能性が生じる.*2

例えば,相手ダメージがフランカーで味方ダメージよりも強い場合,味方ダメージを瞬殺もしくはスルーして裏取りして味方サポートを狙いに来るケースがある.
味方ダメージが強ければそのまま追い返してくれるのだが,味方ダメージが弱い場合はタンクがその役割を担う必要がある. 具体的には,タンクは相手フランカーに何waveか積極的に絡み,相手がサポートを狙いに来なくなるまで相手をしなければならない.こちらのタンクが十分に機能していることが分かれば,まともなフランカーなら狙いを変えるはずである. この場合,ピックするのに良いのは近距離でも中距離でも火力が出せるロードホッグやシグマなんかが良い.ハルザリだと中距離での撃ちあいに勝つのが難しい場合がある.伝統的な2盾もダイブ編成に強とされているが,経験上低ランク帯で2盾をやると連携がうまくいかないことが多いので相方タンクには期待せず自力で何とかした方が良い.

相手フランカーを無事追い返せたとしよう.もう相手フランカーや味方サポートを狙って裏どりしてこなくなった.何ならピックをヒットスキャン系に変更してきた.そうなれば次に攻撃に転じる必要がある.
ここで問題なのは味方ダメージが相手ダメージと直接当たると高確率で負けてしまう点である*3.だからまずは味方タンクが相手ダメージに当たる必要がある.そしてなるべく早くキルを取らなければならない.
この役割として適任なのは,瞬間火力が高いロードホッグやシグマである.もしくはウィンストン・ハモンドといったダイブ系.それ以外は瞬間火力に乏しいので出さない方がいい.何とかしてタンクで1 pick取れれば戦局は一気に有利になる.こうなれば味方ダメージも活躍できる.味方タンクが前線で頑張っている間に味方ダメージにウルトを貯めてもらい一発逆転してもらう流れも期待できる.

とにかく味方ダメージに活躍してもらうことだけを第一に考えて戦う.この間にサポートが犠牲になってしまうケースもあるかもしれないが,それよりも前線を押し上げられないと試合には絶対勝つことができない.時には相手のキルに徹する必要がある.

味方サポートがタンクに回復を回せない場合

これも味方サポートの実力差問題みたいなものだが,味方ダメージの回復に手いっぱいで味方タンクを回復できないサポートがたまにいる*4.上述した通り,味方ダメージに余裕がなければタンクで火力を出して戦うのが良いと自分は考えているため,タンクにも常にある程度回復を回して欲しいところではある.しかしそれができないケースもある.

この場合,自分はタンクはロードホッグかハモンドをピックする.ロードホッグは自己ヒールができるし,ハモンドは回復パックを取りに行くまでの移動時間が短く,こまめに前線を離れて回復パックを取りに行っても素早く戻って来られる.このようなヒーローを使って回復不足を補うと良い.

逆にこの状況下で出してはいけないヒーローとしてはラインハルトだと考えている.ラインハルトはヒールもザリアからのバリアもなければ,前線でシールドを張っておくぐらいしかできなくなる.ゴールド帯に来てこの傾向が顕著になったせいか,ハルザリ以外でのラインハルトのピック率は低くなったように思える.シルバー帯だと頑なにラインハルトしか出さないタンクが結構いて,自分が味方フランカーに合わせるためにウィンストンをピックしてもずっとラインハルトのままだったりしていた.ピックプールが狭いとこういう時に明らかに勝率を落とす要因になると自分は考えている.

*1:もちろんランクマでも見られるが,自分がタンクをやっていればこういう事態は避けられる.

*2:一方で何をやってもダメなぐらい実力差がある試合もあるのでその場合は潔く諦めよう.スマーフが蔓延るOWのマッチングは諦めが肝心である.

*3:リスポーン直後に繰り返し死んでいるダメージを見たら「ダメージ負けしている」と判断すべきだ.

*4:キルを取ることに執念を燃やすアナ,相手に突撃するイキリモイラ/ルシオ,パーティー組んでる相方のダメージブーストしかしないマーシーなども含む

Overwatchで味方同士のケンカが多い理由について

Overwatch(OW)というゲームは6人対6人で戦うチームFPSであるが,個人のレートはチームの勝敗によってのみ決定される.そのためメンバー一人の責任は重い.6人でチームの勝利を担うため,サッカーや野球といった人数が多めのチームスポーツと比べると一人がミスした時の影響がかなり大きいのは何となく想像がつくのではないだろうか.

実際その通りで,例えば長らく拮抗していた試合において,どちらかのチームが相手を一人killしたタイミングで流れが変わってwaveの勝敗が決するのは珍しくない.一人killされて5対6になると相手6人の攻撃を一人あたり1.2人ずつ負担しなければ耐えられないため必然的に負荷が上がる.前にも書いた通り,OWは他のFPSと比べて死ぬまでの時間が長く,結果的に戦闘時間が長い.そのため人数不利による影響は時間が経てば経つほどきつくなってくる.これが誰もがHS一発でkillできるのであれば,一人ぐらいの人数差はAimスキル次第でひっくり返すことができる.しかしOWの場合,Ultが溜まってない限りは人数差をひっくり返すのは容易ではないので,人数不利になっている時間に比例してチームの状況はより深刻になっていく.

そんなゲーム設計になっているせいか,OWでは不利になるとケンカが起こりやすい.ケンカというか,ただの罵り合いである.「idiot fk healers」「useless dps」「no shield tanks」「noob teammates」みたいな,頭の悪そうな罵詈雑言が飛び交うのがOWの日常である*1.もちろんこんなもんを見てると気が滅入るので,自分はチャットを非表示にしている.

チャットログは試合後からでも参照できるため,暇つぶしに試合の合間にたまに見ているのだが,大抵は負けている試合でケンカが始まる.勝っている試合でもケンカしているのを見たことはあるが,状況が悪くなってきたタイミングで戦犯探しを始めるかのように罵詈雑言が飛び交い始めてケンカに至るケースが圧倒的に多い.つまり,「この試合はひどい有様だが,俺には全く責任がなくお前ら(もしくは特定のだれか)が悪い」と決めつけて誰かを攻撃し始め,攻撃された誰かがまた攻撃し返す,といった応酬によりケンカになっていくのだと考えられる.人間社会の縮図のようである.

ところで,なぜOWではプレイ中に味方とケンカしがちなのか?
以前の自分は,ランクマッチをプレイしている以上は味方の動きを修正してチームを勝たせたいから攻撃的な言葉を使っているのだ,と考えていた.
しかし最近,ランクマッチでシルバー帯のケンカを観察していると,「単に他人を攻撃して負けている自分を正当化,もしくは納得させたい」だけが理由なのではないかと思うようになった.そう考える理由は,彼らは相手に対して具体的な行動を求めずに,ただ「noob」や「useless」といった攻撃的な形容詞を相手にぶつけ続ける為である.その言葉の裏には「勝ちたい」という気持ちはあまり感じられない.
本当に勝ちたいのなら「マクリーはさっきから特攻して死にまくってるがもう少し引いて撃つべきだ」「ラインハルトにもヒールをくれないと前に出られないのでヒールしてくれ」「ゲンジ,相手のバスティオンを狙ってくれ」「ゼニルシオ*2だと回復が足りないからモイラに変えてくれないか」といった,建設的な意見を言うのが効果的であると考えられる.実際そのような意見を言っているのを見ることはある*3

個人的には,自分を棚に上げて見ず知らずの第三者を罵倒し続ける人間がいるという事実すら信じられなかったが,どうもインターネット上ならば何を言ってもいいと思っているタイプの人がFPSの世界にも存在しているらしい.自分が過去にやってきたネトゲでは,ここまで露骨に悪意丸出しでケンカしているのを見たことがなかったので知らなかったのだが,そういう人たちは確実に実在する.
そして彼らは勝ちたくはないのだろう.ケンカが始まると集中力を欠いてボロ負けに負ける.もともとボロ負けしていたのだから結果は変わらないかもしれないのだが,わずかな逆転の可能性すらケンカを始めることによって葬り去ってしまう.これは大変もったいないと思うのだが,あまりに流暢に罵倒する言葉が出てくるあたり,普段からチャットで誰かを罵しるスキルを磨いているのだろう.最低のスキルである.

ところで,自分は全くこのような行為をする気になれない.いやほとんどの人がそうなのだろうが,本当にこういう行為は無駄だとしか思わない.
自分は今タンクでレートが1900前後まで来ている.目標はマスターだからレートがあと1500強必要である.そのためとにかくレートを上げたい.だから味方とケンカしている場合ではない.極端に実力差のある味方や相性の悪い味方を引くことはマッチングの仕組み上避けられない.だからそうなったらもうそういものだと思って諦めて次の試合に意識を向ける.たぶん,マスターやグラマスにいるプレイヤーも同じようなメンタリティをしているのではないだろうか.あの辺のレート帯のプレイヤーの配信を観ていると滅多にチャットでケンカしているのを見ない.たまにモメているが,noobだのuselessだの醜く騒ぎ立てているのは観たことがない*4.だからあれは弱い人プレイヤーのすることだ,とも考えている.

話を戻す.つまり,ランクマでチームメイトに醜い罵声を浴びせてケンカをふっかける人は,勝ち続けてレートを上げたいとは全く思っておらず,今いるレート帯でほどほどに勝ったり負けたりして同じぐらいのレート帯に収まっていればそれで満足なのだろうと考えている.
「彼らにとっての気持ちの良いプレイ」をすることが彼らにとっての最重要課題であり,それを妨げるやつが現れたら,チームが勝ってようが負けてようが,徹底的に攻撃して自分が気持ちよくなろうと試みる.そう考えてみればある程度は理屈が通る話である.というか,もうそう考えるようにしている.ケンカして味方の士気を下げまくっていたらレートが上がる訳がない.寧ろ逆だ.
チームを鼓舞して勝たなければレートは絶対に上がらない.自分のプレイで味方を鼓舞してチームを勝たせ,勝率を上げてレートを上げて,有名ストリーマーやOWリーガーみたいな強い人達と試合がしたい.自分は今そう望んでプレイしている.

併せて読みたい

dpqp.jp

*1:ところで文法がめちゃくちゃな英語でケンカしている時もあるのだが,あれはおそらく英語が第二言語の日本人,台湾人,韓国人などのプレイヤーが片言の英語で会話しているからだろう.シンガポール鯖で流暢に英語を使っているのはマレーシア人,香港人,フィリピン人,シンガポール人等だと思われる.

*2:これで勝てるのOWリーガーだけだと思うのだが,ブロンズシルバー魔境では当たり前のように採用される.

*3:しかしこの手の意見具申も大抵は無視されている.また,反発した相手とケンカになることもある.味方同士でコミュニケーション取らない方がいいんじゃないかとすら思っているので,自分はこの手の意見具申は一切しない.自分ができることを全力でやるに尽きる.

*4:せいぜい試合後に「dps gap」と「感想」を述べるぐらいだ

今更Overwatchを真面目にやっている

2020年に入ってから,2016年発売のOverwatchの「ライバルプレイ」*1でレートを上げることを目標としてプレイしている.その詳細について記載したい.

今更ながらOverwatchをやっている

Overwatchはもともと2016年の発売と同時に購入したのだが,プレイヤーの治安の悪化*2でやる気がなくなって2年間半ぐらい放置していた.

それが2019年9月ぐらいに久々にやってみたら,ロールキューの導入と度重なるアップデートにより完全に別ゲーとなっており,面白くなっていたので再開した. 最初はネカフェに通って週1でプレイしていたのだが,2020年に入ってからPCを組み直していつでもプレイできる最強の環境を手に入れて本格的に取り組んでいる.またアカウントもブロンズ魔境を脱するためにサブアカウントを作ってそっちでプレイしている.*3*4

ランクマでプレイしているロールはタンクがメインで,たまにサポート.ダメージはクイックでたまにやる程度. 2020年9月6日時点のシーズン23における最新レートはタンクが1,473,サポートが1,655.ダメージはやっていない.Overwatchやらない人向けに説明すると,これはド底辺のレート帯である.スプラトゥーンで言えばC帯ぐらいである.

最近ではランクマのプレイ動画も上げるようになった.自分しか観てないけど.

www.youtube.com

なぜOverwatch

Overwatchはもっとも苦手なFPSだから.これに尽きる.

FPS自体は17〜18年前の高校生の頃からやっているからプレイ歴は結構長い*5.途中全くプレイしていない時期もあったけど,大学学部生だった22歳ぐらいまではCouter-Strike1.6やCall Of Duty4を狂ったようにプレイしていた.その頃の自分のスキルで言えば,日本国内でみれば少なくとも平均より上という印象があった.それらのゲームはレーティングが存在しなかったので明確な順位は分からないけど,決してFPSは苦手なジャンルのゲームだとは思っていなかった.

それが,Overwatchだけは全く勝てない.勝てないというか,レートが上がらない.

Overwatchのランクマッチのシステムは他のチーム戦FPSと同様にチームが勝った場合のみレートが上がる.つまり,自分がどれだけkillを取ろうがポイントを取ろうが,チームが負ければ容赦なくレートは低下する.しかもレートは下がる方が多い.つまりある程度勝ち越さなければ絶対にレートは上がらない.勝率50%だとレートは確実に下る.そういう無慈悲なシステムだ.*6

そういうシステムだったため,もともと個人でkillを取ることに命をかけていた自分は全くと言っていいほど活躍できていなかった.Overwatchは他のFPSと比べて基本的にHPが多く,HPが高く硬い「タンク」と味方HPを回復できる「サポート」のロールが存在するため,全体的にkill timeが長い.また死んでもリスポーンできる*7.だから,killを取るのが他のFPSにくらべて難しいし,killを取るだけで局面が有利になる訳ではない.

Overwatchにおいて,局面を有利にするには「いつ」「どこで」「誰の」killを取るかが重要である.例えば「HPが少なく回復できるサポートをkillして相手の回復力を削いで相手を死にやすくする」,とか「相手タンクを倒して防御力を減らして一気に殲滅を狙う」,といった戦略が必要になる.だから,CSやCOD4のように1 killを取ればそれだけでチームが有利になる訳ではない.

この新常識に慣れるまでに相当時間がかかった.同様のレーティングシステムを採用しているスプラトゥーンではS+,スプラトゥーン2ではS+4まで到達したことがある自分でも,容易にレートが上がらないのはここに理由があるように思った.だからこそ面白いと感じる.

目標

Overwatchのランクマッチには上から順に以下のランクが存在する.

今自分がいるのが下から2番目のシルバーである.目標として最終的にマスターに到達したいと考えている.

グランドマスターYoutubeで同ランクのプレイヤーを観ていると毎日プレイしているStreamerやプロがメイン層であり,ただの社畜である自分には維持するのが難しそうだからである.マスターなら社畜の自分でもギリギリ到達できるのではないか,と考えた次第である.

実は2020年の目標としてマスター到達を掲げたのだが全く歯が立っていない.2020年に入ってから資格試験の勉強をしていたとか英語の勉強をしていたとかで時間がなかったのは確かにそうなのだが,それを差し引いても無謀すぎる目標だった.今年はタンク・サポートでゴールド到達を目標としたい.

どうやってプレイを改善しているのか

2020年7月からランクマの試合は全部録画してあとで見返して反省するようにしている.これをやるようになってから勝率も多少安定するようになった気がする.最初は自分の声も一緒に録音してボイスログを残しながらやってたけど,自分の声がキモ過ぎてつらくなったので止めた*8

また,8月からランクマの動画をYoutubeに晒し始めた.これは単に動画の外部ストレージとして使っているという側面もあるが,もし運良く他のプレイヤーの目に止まればアドバイスもらえるかもなーという淡い期待もある.*9

www.youtube.com

字幕機能で自分の反省コメントを残したりもしている.が,Youtubeの字幕機能は使い勝手が悪いのでやっぱり自分で編集で入れないとダメかなと思い始めている.

余談だが以下のOverwatch tipsを紹介する動画の日本語字幕は自分が入れたのだが,UIが重すぎて長時間の作業が相当つらかった思い出がある.

www.youtube.com

タンクはどうすればランクマでチームを勝たせられるか

タンクだけが出来る行動で貢献するのが最も重要だと考えている.これはどのロールにも言えることかも知れないが,特にタンクはその特徴を活かさないと勝つのが難しいと感じる.タンクの瞬間火力はダメージには及ばないし,サポートのように味方を回復して生存率を上げることも出来ない.適当にプレイしているとただの図体がでかくてノロい「いい的」である.そのため,タンクとしての特性を活かした能動的な行動が重要であると考えている(というより最近ようやく気づいてきた).

具体的には以下の役割を引き受けるよう心がけている.

1. 相手からのフォーカスを真っ先に引き受ける

タンクはHPが高いので,軽くフォーカスを受けたぐらいでは即死しない.一方でダメージやサポートはHPが150-250程度なのでタンクに比べるといとも簡単に死ぬ.そのためフォーカスを受けるリスクは高い.

そのため,相手からのフォーカスを真っ先にタンクで受けて,その間に味方ダメージに相手を攻撃させるという戦術が考えられる.タンクとしては,相手からのフォーカスで多少死にそうになっても簡単に引かずにポジションを守り続ける,もしくは前線を押し続けるといった行動が必要になる.場合によっては死んでも構わないと考えている.例えばアヌビスAの防衛は遮蔽物が少ないので相手からの被弾が多い.被弾が多いからといってすぐにポイントまで下がると,大抵はもっと状況が厳しくなる.最初の門付近のチョークで,いかに相手からのフォーカスを受けながら踏ん張るかが重要であると考えている.

以前の自分はこれが出来ていなかった.例えば防衛側でのタンクはすぐに死んではいけないと思い込んでいて,シールドがなくなるとすぐに前線から後退してしまっていた.それでは他のロールと同じ行動であり,タンクとしての優位性を活かせていない.味方サポートから回復をもらえれば即死することは少ないはずである.味方サポートの負担になりすぎない範疇で,被弾を引き受けて味方への被弾を減らす行動が,防衛側では特に重要であると考えている.

2. 身体を張って味方の盾になる

シールド持ちのヒーローの場合は当然だが,例えばロードホッグやザリアでも同様の行動は可能である.ロードホッグなら回復飲みながら,ザリアなら自分にシールドを貼りながら味方の前に出るだけで味方の被弾を肩代わりできる.地味だけど相手に強いヒットスキャンがいて味方が前に出られない時なんかは結構有効である.

また,これをやっているタンクはシルバー帯だと少ない.HPが少なくなると真っ先に前線から逃げ出すラインハルト,味方を一切守らないで裏とりだけを狙うシグマなんてのはしょっちゅう見る.そうなると大体そのタンクがいるチームが負けている.逆に,タンクがギリギリまでチョークで踏ん張る,もしくは,結果的にフォーカスを受けて死んでも味方のチャンスを生み出すタンクが相手にいると苦戦することが多い.

3. 高いHPを活かして瀕死の相手をダメージの代わりに追い打ちしてkillを取る

ザリアをやっている時によくやる.味方ダメージが瀕死だが相手ダメージも瀕死,というときに味方ダメージの代わりに単独で追い撃ちをしてkillを取りに行くようにしている.いわゆる「ハイエナ」というやつ.自分の観測範囲ではシルバー帯ではこれをやるタンクは少ない.ザリアでHPが半分以下のゲンジに返り討ちに遭うようなことは滅多にないのだから,積極的に1 on 1でkillを狙いに行くべきだと考えている.waveに勝って相手が撤退中であっても,killを取って相手のリグループを遅らせる効果があるので,wave後の瀕死の相手の追いkillは積極的に狙うようにしている.

余談:最近自分がよく観ているOverwatch動画について

2020年9月現在,日本でOverwatchでStream以外で活動しているプロチームは存在しないようだが,高頻度で動画をアップし続けているめちゃくちゃ上手い日本人Streamerが複数存在するので紹介したい.

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

特にろろみやさんの解説動画がすごくためになるので,すべてのOverwatch民は観てほしい.自分のレートは間違いなくこの人の動画に支えられている.特に強ポジ解説動画は全人類が観てほしい.シルバー帯で有利ポジションを知っているプレイヤーは(自分含めて)ほとんどいないので,動画で解説されているポジションを取るだけで無双できる時がある.

www.youtube.com

www.youtube.com

その他,英語だがヒーロー別のtips動画を上げ続けている超有名なStreamerがいる.これもかなり参考にさせてもらっている.

www.youtube.com

初心者はこれ観るだけでレート上がるんじゃなかろうか. www.youtube.com

*1:いわゆる「ランクマッチ」

*2:味方煽り,ロール取り合い,戦犯探し,プレイ放棄,チーターが多発

*3:サブアカウントの所有はBlizzardの利用規約上は問題がない.例えばStreamerは複数のアカウントを持っているのが普通だし,プロも配信では試合用のアカウントではなくサブアカウントを使っているのをよく見る.

*4:余談だが最近旧アカウントでも自力でブロンズを脱出できてしまった

*5:初めて本格的にプレイしたのはMedal Of Honor: Allied Assaultであり,そのあと初代Call Of Dutyに移行した.今度出るCoD:BOCWは光の速さで予約した.

*6:そのせいか他人に対する当たりが強いプレイヤーが多く,勝ってても負けててもすぐ意見の相違でケンカになる.自分はチャットを非表示にして一切コミュニケーションを取らないようにしている.

*7:例えばCS,シージでは1ラウンド中に死んだらリスポーンできない

*8:地声で実況しているStreamerのメンタルにいつも関心する.自分がやるとしたらボイスロイドを使うだろう.

*9:アドバイスください><

英語が公用語の会社で働くことと英語学習について

英語が公用語の会社で働くようになって半年が経った.

一般的なイメージとしては「仕事で英語を使っている以上,中の人はきっと英語がペラペラに違いない」と思うかも知れない.入社前の自分もそうだった.しかし入社半年経った今の自分は全くペラペラではない.週3-4でオンライン英会話を受講してちゃんと予習復習をしていても,いざ英語ミーティングとなれば,全力で集中してようやく同僚の英語が一発で聞き取れるという程度.基本的に何か聞かれたら最低1回は聞き返す.そういう感じだ*1.大抵の英語ネイティブの同僚は優しいので聞き返すとちょっとゆっくり喋ってくれる.いつも申し訳ない気持ちになるが仕方がない.

幸いにしてSlackやConfluence上でのテキストコミュニケーションにはあまり困っていない*2.読み書きだけは大学院で論文の読み書き,およびレポートで必要だったので訓練されていた*3.また,非同期コミュニケーションなので辞書を引く時間が取れるため,分からない単語があっても対応できる.

今時点の英語力は業務に十分かというとあまり十分ではないだろう.自分1人だけが日本人で他全員英語ネイティブもしくはネイティブ並,というミーティングだと完全に孤立する.発言したい時はまずその旨を言って発言トークンを取得してから,脳内で英文を組み立ててゆっくり喋る.「well, what to say...」とか「I think you know this」みたいなフレーズで脳内で英語を生成する時間を稼ぎながらギリギリコミュニケーションが取れる*4

一方で,日常生活では英語を一切使わないので,英語の向上速度には限界があることも同時に感じている.例えば,休日を挟むだけで英語が全く聞き取れなくなる.信じられないかも知れないが,月曜/火曜の英語ミーティングは本当にボロボロである.ついさっき(火曜日の朝)USの同僚とミーティングしていたが全くダメだった.

これがもし英語圏の国に居たら,四六時中英語を使う場面があると思われるためこういう事態は起こりにくいと思われる.これは実際にオンライン英会話の先生に言われたことだが,英語を本当に勉強したかったら英語圏の国に住むのが一番だという.普段日常生活でほとんど英語を使わないで英語をネイティブ並に話せるようになるのは実質的に不可能だそうだ.英語に触れる機会を増やすためには英字新聞を読むとかpodcastを聞くとかそういう方法で補うしかない,と言われた.実際そうなんだろうな.

こういった制約がある中で,どこまで英語力の向上を目指すかという目標を明確に定める必要性を感じるようになった.語学の学習には終わりがない.際限なく覚えることがある.だから完璧を目指すと疲弊してしまう.実際今の自分のように.今自分が抱えているストレスの原因は5割がcovid-19だが残りの1割ぐらいは英語である.幅広いジャンルを含むコンピュータサイエンスの勉強と同じことが言えるのかも知れない.なので今は明確な目標設定をしようとしているが,これがTOEIC/TOEFLのような客観的に数値で能力を計測できる試験で良いのか,あるいは60分の英語ミーティングで一回も聞き返さずに質問を聞き取ることみたいな主観的な目標で良いのかはまだ決めかねている.

*1:なお英語ミーティングを始める前に英語を聞いておくと耳のアイドリングが出来て良いので時間がある時は直前まで英語podcastなどを聞いておくと良い.

*2:たまに英語のネットスラングが理解できないことがあるが

*3:英語で実施されレポートも英語で書く必要がある講義があった

*4:この手の「考えてる時に口にすべきフレーズ」はオンライン英会話で覚えた

業務でコードを書く機会または時間が得られない場合の対処法について

これは何か

  • ソフトウェアエンジニア職(マネージャ職は含まない)として雇用されているにも関わらず,様々な理由で業務としてプログラミングができない状況に陥る期間がまれに*1存在する.
  • 本エントリでは筆者が考えた対処法を記す.

コードが書けない状況

  • 機会がない
    • 関わっているプロジェクトが何らかの要因により停滞しておりコードを書く必要のあるタスクが発生しない.リファクタリングやライブラリのバージョンアップ等をして時間を潰していたが大体やり尽くしてしまった
  • 時間がない
    • 実装しようとしている機能設計に関する議論が紛糾しており,他メンバーからの懸念を払拭するために検証作業を大量にやらなければいけない
    • documentを大量に書かねばならず,コードを書いてる暇がない
    • project management業を任されており,社内外の調整業務に忙殺されている
    • 大量のミーティングへの出席を要求されており,ミーティングそのものと付随する作業で1日が終わる
    • 日々障害対応に追われて1日が終わる
  • コードを書かないで検証する時間が長いプロジェクトに参加している
    • 自分の場合1カ月ぐらいECS上で検証して実現可能性を調査しないといけないプロジェクトに参加したことがあり,この期間はコードは環境構築のための簡単なシェルスクリプトぐらいしか書かなかった.
    • その他にも長期の障害調査,サービスのmigration作業,documentation作業にかかわる場合も該当する.

大雑把な対処法

  • 機会がない
    • 他の同僚のヘルプをしに行く
    • 埋もれているチケットを発掘して勝手にやる
    • CI/CDを改善する*2
    • 重そうなSQLを探して修正するもしくは当該のcolumnにindexを貼る*3
    • typoを探して直す*4
    • コメントの誤字脱字を直す
    • 使われていない定数・関数・クラスを発見して削除する*5
    • 使われていないテーブルを発見して削除する*6
    • 古いsyntaxで書かれている箇所を直す*7
    • コードを読みまくって少しでも気になる所のリファクタリングをする*8
    • プロファイリングしまくってボトルネックを探し出し取り除く*9
    • 「いつか使えると思うっす」とか言ってライブラリを生み出す*10
    • 社内で使っているが自分が気に入らないツールを勝手に置き換える or 書き換える*11
    • Dockerで動いてないものをDocker上で動くようにする
  • 時間がない
    • 誰かとタスクをシェアしてコードを書く余裕を作る
    • 急いで目の前のタスクを終わらせてコードを書く時間を捻出する
    • 自分が不要そうなミーティングは参加を断って出席しない*12
    • 残業してコードを書く時間を捻出する
  • 仕事でコードを書くのを諦める
    • 仕事を急いで終わらせてプライベートでコードを書く時間を最大化する*13
  • その他
    • 直属上司に相談する
    • 直属上司がだめなら上位上司に相談する
    • 他のマネージャに仕事をもらえないか相談する

*1:もしくは頻繁に

*2:経験上特にデプロイ周りは改善の余地が多いことが多い

*3:たくさん見つかると無限にやっていられて楽しいしweb applicationのレイテンシ改善効果が高い

*4:英文法の誤りを直してもよい

*5:たくさん消せると気持ちいい

*6:削除して問題が起きると怖いのでリネームして様子を見るだけでもよい

*7:かつてrspec2系で書かれたspecを全部rspec3系のsynctaxに直したことがある

*8:リスクが低いコードから少しずつやる

*9:以外と変なところで重くなっているぞ

*10:前職で暇だった時に2週間かけてJSONを生成する謎のDSLを書いたが誰にも使われなかった

*11:まずは長年メンテされてない社内ツールのような,皆の関心が低いものを狙う

*12:「あいつはそういう奴だ」で許される空気を作ろう

*13:悲しいけどこれが一番楽な気もする