何ができたら中級エンジニア?〜エンジニアリング編〜
「ノリさん中級エンジニアって何ができる人なんですか?まだ知らないの?やば怖いなぁ中級エンジニアですねちょっと自動車工場で例えてみましょうか自動車工場の工場の部分を丸ごとできる人のことを言いますなるほどもうちょいあるかも」
「中級エンジニアに成長させるというか中級エンジニアになってもらうラジオなんですがゴール地点曖昧だという今までずっとその疑問はあったクレームが今日いないんですけどじゅんぺい君から入ったのでついに入っちゃったかじゅんぺい君は今日いないんですけどカイチとノリでその辺決めていこうかなというのが今回ですわかりました定義していきましょう」
「さっき言ってたのは工場になれる人ちょっとそこはあんまり引きずらない方がいいかな分かりました」
「なんとなくでも僕もなんとなくイメージは合ってて一人称で仕事を完結できるレベルだと思ってるんですよそうねでも俺ちょっと車の知識なさすぎて細かい設計工場でやってないよなって後から思ってしまった確かにそうだやってねえだからちょっと工場よりはでかい工場はだってこうやってくださいっていうのが全部できた後でそのままやってる感じだよねそれだとまだちょっとね」
「まだちょっと駆け出し後って感じだよね駆け出しがその辺ですよねなんなら一人称で仕事ができるところだとは思うんですがそれってめっちゃ範囲が広くて広いねだってねコードかければいいわけじゃなくてそうですねコード以外にもテストでちゃんと発見できるとかそういうところもあるし」
「普通にビジネススキル的なところもあってほしいよね必要ですね人をまとめられるとかね人がまとめられてちゃんとしてる人に対しては適当に適当にというかほどほどにマネジメントをしこいつ大丈夫かってやつをちゃんと見極めてフォローしてあげるそう考えると後輩できても恥ずかしくない人とかなのかもしれないそうですねそれはそうですね」
「いろいろあって大変なのでここの回では一旦エンジニアリングっていうところだけエンジニアリングっていうとプロダクトの生産活動的な生産活動いろいろエンジニアもいると思うんですけどその中でも僕とのりさんとじゅんぺいは開発なので運用とかあとは企画寄りでもないので」
「開発っていうところのロールに絞って中級エンジニアのエンジニアリングはどこまでいけばいいだろうちょっと話しましょうか賢い賢い賢いでエンジニアリングで言うと作業工程的にはどっからどの辺なんですかねまあよく言われるのは詳細設計コーディングテストその辺じゃないですかその辺ですねやることというかこういうのを作りたいから」

「大体こんな感じにしてねみたいなこういう画面にしようとかこういう機能を持ったAPIにしようみたいなのが決まっておいてその後の実際にコードを書く直前の設計からできたよって言ってリリースするまでそうねあとちなみにテストもさ」
「何個かあるじゃん種類ありますねV字モデルみたいなソフトウェア開発のV字モデルみたいなのがあって何ですかそれはV字の中にVがありますね今今頭の中にVを思い浮かべていただいてVの左上から左上のV要件定義基本設計詳細設計細細設計細かくなってきたコーディング細かくなってきたこの」
「これが作成ゾーン左側の部位が作成ゾーン右側の部位がテストゾーンでそれぞれ対応する形で今度はちょっと下からいくんですけどコードレビュー単体テスト結合テストシステムテストあとまあ」
「納品するんだったら受け入れテストとかその辺やったりするんですけど大体こんな感じで対応するテストがありますよねこのテストもどこまでっていうのないですか?個人的には」
「僕は全部やることが多いんですけど下半分でいいかなと思ってますやっぱり?一旦なので小文字のV大文字のVの上のチョンをスパーンって切って小文字のV部分でいいと思います小文字のVが要は開発者キーワードだ確かに納得です詳細設計より下ってことでね詳細設計より下はい」
「というところに絞っていきましょうちょっと本当に人によると思うんですけどあと職場にもよると思いますじゃあ頭からいきます?頭からいきましょうか一番むずそうだけど詳細設計苦戦しそうだな詳細設計が一番むずそうだけどね本当に物によるからなあと何ができたら詳細設計できるって言えるのかっていう難しさねどうなんでしょうねキーワードとしては一人でできるもんだと思うのでうんうん」
「一人でできれば一旦OKですよね詳細設計の質としてはステークホルダーっていうんですかその周りのより上位の人に対してこれでいいですかってOKって言われたらOKじゃないですかあとそれ見て下の人がこれで作れればいいんですねOKってなってほしい」
「詳細設計を他の人に渡すことがあるんですねまあ自分で作ることのが多いけどね詳細レベルまでいくとまあでも後で見た時に他の人が見て分かるドキュメントじゃないと意味ねえですもんねないね確かにでもこればっかりは勉強でやったことないですなんなら」

「業務以外で詳細設計したことない詳細設計の勉強はしたことあるんですけどあーわかるでもあれってなんか業務でやんないと正直わからないってわからないじゃあなんか業務で実際に詳細設計3詳細設計したら1勝みたいな感じなんですかね3詳細設計したら1勝1勝って何OK回数」
「詳細設計の難易度って何ですかね作るシステムによるじゃないですかこういうもののこういうものの詳細設計ができるならいいんじゃないっていう定義になるってことなんですかねまず基本設計終わってるからどんな機能を作るかっていうのはもう決まってるんですよねあとはその機能どうやって作るかを設計しなきゃいけないとプロトタイピングするのはこのフェーズですかそれより一個前」
「いやーここのイメージだなじゃあ触ったことない技術もしくは職場とかで前例がない技術のプロトタイピングをしながら詳細設計ができることとかうんうんは結構中級見やりあるんじゃないですか確かにさっきドキュメント残す云々の話したけどこのずっと俺もうその」
「設計できるようになりたいなって思いつつどうやったら設計できるって言っていいんだろうって悩んでた時にすごく心を軽くしてくれた言葉があるんですけど設計とはドキュメントを書くことではないですよと」
「作りたい機能があってそれを頭の中でどうやって作ればいいか思いつくのも設計だみたいなのがあってなるほど機能を実現するための道筋見えるようになることが詳細設計なのかって思ったことがあってですね僕は結構それで救われましたね」
「ドキュメント書かなきゃってずっと思ってたんですよそうですよねそういうことですよね必ずしもそこが必須なわけじゃなくてそのドキュメントに落とせるぐらいちゃんと作る道筋が見えるようになることが詳細設計できるようになることなのかなみたいなっていうのが僕はね一番ここ最近で救われましたね本当の意味はそこですもんねあれなんですかねえっと」
「他の人が同じの作れるように詳細設計を作れることとかはやりすぎですか要は他の人が読んでも分かる詳細設計になるってことですよねそうですやりすぎ?ケースバイケースだと思う自分が作るかつ自分が作るなら最低限OKじゃないかなとは思うそこまでいかなくても例えば」
「詳細設計をしている自分のコードと他の誰かが作ってるやつが連携することってあるじゃないですかありますなのでその連携先の人はその詳細設計見なきゃいけないんですよねって考えると他の人見るんじゃねえと思って見るなだからそこら辺はやっぱ規模によると思うな規模かそうですねだから多分その中級エンジニアのレベルっていうのも会社によって違うと思うんですよそれはもちろんそうです多分中級って」

「どっちかというと相対的に見て中級だと思うのでそうですね相対的だと思いますなのでまあ多分ちっちゃいとこだと最低限自分自身で道筋見えるようにしなきゃいけないけどチームが大きくて連携しなきゃいけないようなところだと他の人も分かるような伝わるドキュメント書かないといけないのかなっていうそこは幅がありそうな気がするなこのポッドキャストでいうとどこに置きましょうね」
「なんとなく小規模開発の方が世の中多い気はするんですよねまあ数は絶対多いでしょうね数触ってる人数はちょっとどっちか分かんないですけどねまあ人数まあ言うてじゃないでも言うて大規模って言ってもチーム小さく分割ああまあでも水本銀行とかのやつがとんでもないチーム数になってたと思ってそうなんだそうですねどっちでもいいと思いますよいや」
「なんとなくだけどまあ小規模の人の方がこういうポッドキャスト聞くんじゃないかなっていうなんとなくの気持ちがありますわかりますなんて言うんだろう完全に偏見ですけどすごい大きいところで働いてるエンジニアの人はニュース聞いてそういやまあありますよ英会話聞きます英会話聞いてるそれを踏まえて道筋を立てられること」
「が大事なのは分かりますでも道筋を立てられるっていう目標を立てられても困りますですよねなんかいいのないですかねちょうどいいのないですかね何ができたらいいんだろうな道筋を立てられる実業務で立てられればいいんですかねまあちょっと矛盾するんですけどシーケンス図書けたら道筋立てれるよねって気はするそれは確かにそう」
「今僕最低限で詳細設計しましょうっていうチームの方針なんですけどそのチームで求められているのはシーケンス図ですシーケンス図を書けるようになりましょうシーケンス図が必ず必要なわけじゃないけどあれが書ければ設計できる大体できるはずですね多分じゃあそういう基本設計をシーケンス図に落とし込む」
「力があればOKそういうことただシーケンス図の詳細に関してはまた後日ということで詳細設計こんなもんで次コーディングですかコーディングきました一番分厚くしたいしたいなコーディングでいうとどういう風な感じなんでしょうねコーディングも広いですねコーディング広いでも」
「ちょっとこれもふわっとしたこと言っていいですか?いいですよふわっとしたところから入るのがいいと思います多分最初の頃ってまず言語とか使ってる技術にこだわりがあると思うんですようんうんうんやっていくうちにそのこだわりがどんどん薄れていって何使ってもいいから綺麗なコード書きたいみたいな美しいアーキテクチャを使いたいとかそっちに行くと思うんですようんうん」
「ただそれって万人受けしないからある程度の妥協地点を見つけるようになると思うんですよそこにたどり着いた瞬間中級なんじゃないかなと思ってます大人になったなそれは理想を追い求めた結果ちょっと夢破れた瞬間というか妥協点見つけて大人になった瞬間みたいな」

「おもろその定義おもろいいですねそんぐらいまでステップたどったらなるんじゃないかないいですねいろいろな要素がそこに含まれているちゃんとそうなってくると自分の中で選択肢もいくつか持ってて今回のチームのレベル感ならこれ選択した方がいいよねとかそういう取捨選択できるようになるみたいな」
「いいな難しいのがめっちゃいいと思いますそれでいいそれがいいと思います一方で初級で走り出し直後に何のこだわりもなく薄く広くやると痛み合いそうなのでそこに気をつけつつ最初は追いかけるんですよね理想をそこはでも必要なステップだとも思うしそれでみんな」
「みんなで仕事するからみんな同じモチベーションじゃないんだとかそうそうそうそうそうそれで気づいていいところに着地できるようになったら中級生さんだとそうですねもうちょい具体的なところで言うと最近流行ってるところだとクレーンアーキテクチャーとかDDDとかそういうのを追い求めるんですけどそれがむずすぎて新しく入ってきた人とかに全く伝わらないみたいな時に」
「妥協点を見つけるのかなっていううんうん本当にそうですねデザインパターンもそれに入るかななんかそうですね一人で完結する部分だったらいいんですけどねそうはいきませんからねそうなんですよじゃあまあ」
「もうちょっと具体的に言うと少なくともデザインパターンとかの知識は必要そうですねデザインパターン覚えてなくてもいいけどあれを使うとどんなメリットあるのかとかあれ知るとなんで保守しやすくなるのかみたいな理由は知っておいてほしいかなっていう感じですかねコードのところはないですか?コーディングデザインパターンもそうですけどコーディングで言うとね」
「これは結構具体的なところいけるかもしれないけど適切な変数命名とかロジックの置き場所とかその辺はちょっと分かってほしいかもしれないなんかあれなんですかねコードレビューでまともなことを言えることみたいな」
「それはあると思うちょっとそのまともなことっていうのがちょっと具体化するのはむずいんですけどマジックナンバーつかないよとかだから保守しやすいっていう観点で行動レビューができることなんですかね保守しやすいとか作ったものの性能性能なのかな性能はまた保守しやすいですね別のテストになっちゃうしななんかいけてないいや」
「ミジューループやんみたいなその作りあかんやろって言えないとだめじゃないですかこれ単純な文字列一致なのになんで正規表現使ってんのみたいなそれもやっぱ保守っていう観点なのかな見やすいコードって保守観点じゃないですかそうね間違いなくそうですね保守観点でコードレビューができることかつ自分が作れること保守でいうと今後作ったものが」

「どんどん他の人がいじっていっても綺麗になるように基礎を作れるそれでそのために何をしたらいいかは今後のエピソードでどんどん話していくとそういうことですねとりあえず詳細は後に回すパターン本当に大変な量のノウハウがありますしね正解も一つじゃないし結構ここを順平が気にしてて中級エンジニアってどういう行動がかければいいんだろうっていうのを言ってたんですけどなるほどね」
「保守しやすいコード保守しやすいコードっていうと適切な命名と適切なロジックの置き場所みたいなところが一番ある気がするそうですねフレームワークの選定とかは詳細設計とか基本設計のところな気もしますしコードでいうとそこですかねそこだと思いますねマット」
「たくさんせい全く賛成ありがとうございます全くは普段否定語に使う言葉ですが全く賛成です逆に強調されました次いきますかテストの中でもコードレビューってさっき言っちゃいましたけどコードレビュー単体テストぐらいですかそうですね単体テスト」
「この単体テストも結構コードに関わってて単体テストかけないコードってあるんですよねあるね単体テストかけるようにコードかけることは大事です確かにね単体テストってぶっちゃけ新人の人がテスターやらされるパターンあるじゃないですか多分多いのかな僕はあんまないんですけどそんぐらいテストって元のコードありゃなんかできるんじゃないかなって」
「難しいこともあるのか?難しいと思うけどなどこに伸びしろというか勘どころがあるんですかね天井低い気がしててマジで?俺ちょっと逆にテストあんまり経験ないんで僕は天井がそこ知れないものが見えてるんですけどどうなんだろう僕の中のちょっと込み入った話なんかもしれないですけど単体テストこんぐらいできれば中級でしょっていうのはまずシナリオを」
「抑えてほしいところはちゃんと抑えること教科1とかその辺ちゃんと抑えられることテストシナリオちゃんと抑えて書けることあと何でしょうね正常系純正常系異常系それも入ってるかその辺ちゃんと抑えてねあと本当に保守性の観点で変なテストの関数名つけないよぐらいじゃないですかなるほどねちなみに」
「僕がテストで悩んでるポイントいいですか?はいはいはいテストって一般的にやればやるほどもちろん精度が上がるじゃないですか精度とか品質だけど」
「テストって無限にできちゃうからある程度何をテストすべきかみたいなのを取捨選択するじゃないですかその取捨選択が難しいなって思うよく本で言われてるのはぶっ壊れやすい箇所にテストを重点的に置くぞみたいなどこそれってなるどこそれってなりますね」

「ぶっ壊れやすい箇所っていうのはどういうことなんだ多分だけどいろんなところから呼び出されてる箇所が壊れやすいのかなとは思うんですけどいろんなところを呼び出してる場所とかの方が壊れやすそうじゃないですかそれも壊れやすそうでもいろんなところから呼び出されてるとその呼び出し側の都合によって変更されることってあんま良くないですけど往々にしてあるじゃないですかあんのかなぁない?」
「そういう風なことがあるっていうミノクドウさんのツイートは見たことあるんですけど僕は遭遇したことはないですどっちかっていうとそうですねないどっちかっていうとモジュールとかライブラリのアップデートで壊れることの方が経験上多いうんうんうん」
「いろんなライブラリ使ってるところが壊れそうなイメージあるなるほどねライブラリ自体のインターフェースぶっ壊れちゃってる壊れるというか変わってとかそれもライブラリ壊れてもありますけどなるほどねでもそれってねわかんないですから単体テストって言うても全モラ無理なんで諦めていいと思ってるんですよちょっとはあくまで」
「このメソッド単体で悪いことしてないなっていうのを確認するだけなるほどねそこね妥協点テストでまだ妥協するのね精神的にすごい来るんだよね俺別に普段貴重面じゃないのにテストの時にうわー出る俺の貴重面がみたいな謎の感じが出る掃除普段しないけどし始めるとめっちゃ綺麗にやるみたいなあの感じ分かりました分かりましたでも」
「全通りやってますよ僕も全通りやってオッケーって思ってます本当に一個の関数見たらそのパラメーターって例えば2つ3つあったとしてそれぞれが悪いことしてる時とかそれぞれの最小値最大値とかなるほどねでもその辺を抑えたらいいんじゃないかなと思っててそれよりも基調面にやるとどうですかこのファイルもテストするみたいな」
「例えば画像ファイル入れてくださいだったらテキストファイル入れるかとかそういうのもあるしあと何ならこの機能テストしてるこのファイルテストしてるけどこれフレームワークの機能ただラッピングしてるだけじゃないみたいなファイルこの機能を要はリポジトリパターン分かる分かりませんえっと」
「インターフェース使ってデータベースへのアクセス層をカプセル化するみたいなパターンあるんですけどその時に実装部分ORMの機能を使っててほぼORMを呼び出してるだけなんだけどその呼び出してるメソッドのテストする時とかあれーみたいなこれはなんだーみたいなこれもフレームワークの作った人がテストしてるでしょみたいなそういうことですねそういうことですね」
「本当に一行だけだったらやらないですだよねでも前後に何かあればやりますそうだよね今見えました海岸海岸ノリ海岸本当に自分が何か手を加えてたら絶対やらなきゃダメですけどフレームワークは一応苔けさせますよもちろんなるほどね苔けるときは苔けるねっていうのだけ確認して苔けたら保管でもそれはいやすいません苔けさせもしないかもしれないそれは単体テストじゃないかもうんうん」

「結合テストでこけさせる確かに結合テストでこけさせる結局なんですけどテストカバレッジちゃんとC1くらい?C1ってどのくらいだっけ?分岐網羅って書いてるんで全条件ですねその辺ね本で読んだ記憶はあるんだけど何も頭に入ってないですからC0が全部」
「命令通りましょうがC0で頑張りすぎってこと?C0は一番頑張ってなくてそういうことか全処理動かすことパス通ってないやつもあるよってことねC1は分岐網羅なんで全のロジック通るイフブンが全パターン分岐したテストそうですC2がめちゃめちゃ貴重面でえーとなんて言えばいいんだろうな全」
「全パラメーターやるって言うんですかなるほどなるほど強化位置とかじゃないってことなのかなはいはいはいあーなるほどねそうやばくないそれだからやってるの見たことないですえつまりさこれは部屋掃除で言うとC0がとりあえずその部屋掃除したよ」
「C1がとりあえずその部屋拭き掃除までしたよみたいなC2がその部屋除菌もしたよみたいなはいはいはいそんぐらいの難易度です了解ですかといって業者もやってくれるのか分かんないですけどそこまではいなので」
「この辺のパブリックな知識を入れた上で意識した上で単体テストが書けることじゃないですか単体テストはそんなもんだと思います詳細設計の反対が結合テストですよねあれ違いましたっけ詳細の反対は単体じゃない単体かあとは個人的には」
「TDD推進派なんで僕は出たーTDDまだね幻聴読んでないんですよね僕はそれ楽しいというかそんなにむずくないです僕の読解力がないせいかもしれないですけどあんなに長く書く必要もないんじゃないかと思ってそれ本あるあるだけどね言いたいことは要するに単体テストから書き始めましょうなんですよねなるほどね」
「それの理由付けを結構厚くやってるそうそうそうそう僕も今心臓の左上をさせればしっかり疲れは取れるっていう本を読んでるんですけどなんだそれはこれの言いたいことは本当にタイトルのままでした本あるあるまあなので」
「テスト駆動開発をできるなら単体テストを書けるって言っていいのではと思いますなるほどねテスト駆動開発ができるってことは関数において書かなきゃいけないテストがテストを想像しながら関数を作れるってことなのでうんうん」

「ちゃんとテストができるコードが書けるかつちゃんとテストができるテストが書ける状態がテスト駆動開発できる人なのであれ結構そのフェーズで言うと中級味あるなと思いました確かになあれ設計できないと結構きついよねできないです無理です単体テスト書きながら設計してますあれそうだよね要はあれなんかフィードバックループ早めるためというか詳細設計これでいいのかどうかみたいなのテストで試すみたいなそうですそうですそうですそうですそうです」
「テストかけないコードは保守性低いからって意味だと単体テストかけるだけでも保守性あるのかもしれないですねそれだけだとキメラができる可能性あるんですけどそうねという感じで一旦この」
「ひまじんプログラマーのエンジニアリングレッスンでは中級エンジニアのエンジニアリング詳細設計から単体テストまでのところで言うと詳細設計は何でしたっけシーケンス図が書けるそうですねわかりますコーディングは保守性のあるコードをレビューできるみたいなコードをかけてレビューができる」
「単体テストはTDDできるTDDできる俺もしかしたらまだギリ中級じゃねえかそうなんですかTDDちょっとねやったことないからやったことないだけですよねいけますって苦戦するイメージはあるそんな難しいんですよ僕が100%できてるとは思ってないですけど僕ができてると思ってるんでそんな難しくないしもちろん時間かかりますよ単体テスト書かないよりは」
「まあでもそんなに難しくないというか単体テストかければできるなるほど考え方だけもしかしたらできるかもいけると思いますよやってみてください今度分かりました雰囲気中級としてちょっと精進させていただきますはいまあなので引き続き順平をこのレベルまで引き上げていきましょうかOKですはい今週こんな感じではい終わりますそれではまた次回バイ」
「それではまた次回」