駆け出しエンジニアとモブプログラミングして気づいたこと

色々あって会社内でWebフロントエンド技術を学ぶ勉強会をやることになった。Webフロントエンド開発の経験がほとんどなく、これからやっていくぞ!というメンバーと少数(2・3人くらい)で週一回集まって、お題に沿ってモブプログラミングするみたいな内容である。1 roadmap.shの黄色部分がある程度できる人が増えるといいな〜と思っており、これが自分の中での密かな目標である。

お題はどうしようかなと考えていたが、やっぱりWeb開発をするならテストコードが書けた方が良いだろうと思った。ちゃんとしたところ(?)は当たり前に要求されると思うが、今までの経験上Webフロントエンド領域でテストコードの記述を求められることが少ない = 書ける人も少ない?と考えたからである。

このような経緯があり、駆け出しの人がテストコードを実装しているところを見る機会ができた。色々気づいた点があるので忘れないうちにまとめておく。難しいロジックの実装は考えることが多すぎてパンクしてしまうと見込んでFizzBuzzをお題にした。テストコードはテスト駆動開発(TDD)で実装を進めることにした。 2

テストが失敗しても良いという価値観を覚えてもらうのが重要

TDDでは最初にテストコードを記載し、まずは動かす。失敗したテストを段々と成功させ、さらにリファクタリングを繰り返す方法で実装を進める。この経験がない・少ない人はテストの失敗を恐れてしまう傾向がある。失敗すると「えっ!どうしよう!」となって手が止まってしまう。

「まだ何も書いてないから失敗するよね、これは予想通りだよね」ということと、「最終的に成功すればOKだよね」という内容を繰り返し伝えるのが重要。実装途中であれば失敗するテストと成功するテストが出てくるが、このときも「全部成功させなくちゃ!」となってしまうので注意がいる。この場合は「今成功させたいテストは通ったからいいよね」と声をかけると安心してもらえる。

失敗することを恐れるマインドを、少しずつ成功を積み上げるんだぞ、というマインドに変える必要がある。価値観を変えるなら人の手助けがあった方が早い。

新しいことを覚えるときは内容を一つに絞る

JavaScript?今はTypeScriptだ!とか色々と覚えるべきことはある。しかし、重要なのは個々の要素を"使える"ようになることで、なんとなく人のコードをコピーしてそれっぽくすることではない。そういうときは対象の理解度を深めるのが重要となるが、色々同時に覚えようとすると負荷が高すぎてパンクしてしまう。

TypeScript経験が少ないメンバーだったので、テストコードに集中するためにJavaScriptを使った。これは正解だった。TypeScriptにしていたらそちらに気がとられてテストコードの良さが伝わらなかったかなと思う。教える側のマインドセットが重要で、焦らずに少しずつできることを増やすように心がける。

良さを感じてもらうには経験が必要

テストコードを書くとデグレがなくなる!とかTDDはいい!と言われるが、やはり「便利だな」と体感してもらわないと広まらないんだろうなと思った。 エンジニアなら初めてのものでも勉強して覚えるでしょ、は一部の人にしか通じないと繋がるが、新しいことを覚えるめんどくささが勝ってしまい、まあいいか〜となってしまう。

テストの実装未経験者に刺さっていたなと思うのはこの辺り。

  • 先にテストを書いているから安心して変更できるね
  • テストケースでIN/OUTを整理しておくと実装時に迷わないね
  • まずはTODOを書いて育てると進んでいる感があって安心できるね

コーディングの速さはタイピングの習熟度に比例する

経験が少ない人は元から打ち込む動作が遅い。手元を見てタイピングするのでさらに遅くなる。プログラム系の仕事をするのであれば、タイピングは練習した方が良い。 最低限キー配置を覚える、コピー・ペースト・カット・元に戻す程度は手元を見ずにできた方が良いなと思った。慣れもあるかもしれないが…。大半の会社では新卒研修の中に組み込んだ方がいいんじゃないだろうか。

エンジニアなら初めてのものでも勉強して覚えるでしょ、は一部の人にしか通じない

普通であれば、全く経験がない状態で「JavaScriptのテストコード書くよ!Jestだよ!」となったとき、Google検索でJest テストコード 書き方などと入力して基本の形はなんだろう?真似して書いてみるか、とするものだと思い込んでいた。しかし、そうではない人もいることに気づいた。

経験が少ないとブラウザを使って調べよう、という動きがそもそもない。「どうすれば良いかわからない」状態だと完全に手が止まってしまうのである。「いや、ブラウザで調べればいいじゃん」と思ってしまうが、その発想がないのかもしれない。ある程度目の前で自分が書いてみせ、真似できるコードが出てくると手が動き始める。補助輪をつけて押し出せば応用して進んでいける、という感じがある。

調べられないんじゃ適性がないよ、適性がないならやめた方がいいよ、というのは簡単である。しかし、業界全体で一定ラインの水準の人は人手不足なのも事実である。やる気はあるけど行動に結び付けられていない人を引き上げるきっかけは必要で、それは他人が作ってあげないといけないのかなと思った。

また気づいたことがあれば適宜書き留めることにする。あと、自分がしっかりしないと!というのは学習のモチベーションに繋がるなと思った。


  1. 会社は元々Webフロントエンドエンジニアがほとんどいない。

  2. 自分はTODOを作って潰すタイプなので、このやり方しかできない…。