CORETECHプログラマーは部屋の掃除をすると多分ストレス発散になると思うこんにちは。私はかれこれ、10年弱プログラマー、SEという仕事をしています。最近、自分の仕事と、掃除の因果関係を考えることが多いです。部屋の掃除をしている時に、炎上案件にアサインされた時と似た感覚を覚えます。私は正直、家事が好きじゃないです。嫌いと言ってもいいかもしれないです。どれくらい好きじゃないかというと、一緒に住んでる人がいなければ、多分、ほぼやらないと思われます。子供がいなかったら、きっと洗濯は週1回以上していません。洗濯することにすごいストレスを感じながらしているためです。私は掃除が大好きです。「掃除が好き」とかいうと、よくInstagramに上がっている様な、キラキラした部屋を想像するかもしれませんが、我が家はあんなにキラキラはしてはいません(笑)。床にゴミや物が落ちていなくて、収納棚が整頓されていて、そこに何が入っているかを把握していて、机に物が置いてない状態の部屋が保たれています。プログラムに関連する仕事をしている人は、自分の仕事が好きな人が多いと思いますが、私はとりわけ炎上案件にアサインされた時、アドレナリンが大量に出る感じがしてテンションが上がります。案件中は辛くて仕方ないのに、その案件が納品された時に、もう一度最初に戻りたい様な不思議な感覚に陥ります。現在子育て中ということもあり、あまり炎上している案件にアサインされることはないため、穏やかな案件についているのですが、もう10年以上、炎上案件ばかりにアサインされていたせいか、子供が生まれてから、仕事でテンションが上がることが、なくなっていました。それどころか、何かずっと物足りない様な、心に穴があいてしまった様な感覚が続いていました。そんな毎日を過ごしていたある日、ふと部屋の掃除をもっとしようと思い立ちました。そこまですごい見える範囲が汚れていたわけではないのですが、キッチンの棚から、賞味期限の切れたスープのストックが出てきたことで、物量を把握していないな、と考えたのです。リビングにある作り付けの棚から始めました。全て出して、1段ずつ物を分類していきました。一段ずつ、出す、整理する。いらないものを捨てる。繰り返していくと、なんと、棚が2段も空いてしまいました。不用品が詰め込まれていた状態で、取り出そうとすると、物の上に積んだものが落ちてくるため、取り出し作業が億劫になっていましたが、上につまず、資料を分類分けし、戻すと、全ての棚に何が入っているかを、把握できる様になりました。この時、あの炎上案件にアサインされて情報整理した感覚を取り戻したのです。すごい頭がぐるぐる回転している様な、ちょっとした興奮状態です(変態か)。一つの棚を片付け終わると、リビングに設置されているテレビ台の下や、リビングに置いている小さなタンスまで片付け始め、気付くと、12時間以上経過していました。土曜日、日曜日のそれぞれ6時間ほど、出す、捨てる、しまうで終えたのにもかかわらず、すごいストレスの発散になり、綺麗になった棚を開けるたびに、自分が何かいいものに変わった様な感覚になります。出す、捨てる、しまうで終えたのにもかかわらず、すごいストレスの発散になり、この間捨てたゴミ袋は45Lで5袋以上になりました。この間捨てたゴミ袋は45Lで5袋以上になりました。この感覚は、そうです。炎上案件を納品した時の感覚に似ています。あまりに炎上しすぎて、何も終わってない。何も終わってない故に、環境も、設計資料も、チームワークも何もかもが散らかっている状態・・・。いえば、炎上案件にアサインされた時って、棚からものを出す・・・(スケジュールや、資料や、プログラムの状態、チームメンバーの状態を確認し)ゴミを捨てる・・・(散らかった機能や、資料や、汚くなっているプログラムを整理、スケジュール的に終わらない機能を判断)棚に戻していく・・・(スケジュール引き直して、関数化したりまとめたり、チームにルールを作ったり)部屋の掃除と同じようなことをするな〜と思います。土日の間にリビングを終えたので、来週はキッチン、冷蔵庫かな・・・と。いやいやクローゼットか。考えるだけでテンションが上がってしまいます。今の会社の作業がとてつもなく安定していて、特に転職する理由もなくて、でもなにか心に物足りなさを感じていて、なんとなく寂しい気持ちになったり情緒不安定になることがあるプログラマー(限定的だな)の人は、家の片付けをしてみてください。すごい勢いで、心に安定感が訪れることでしょう。=後(プログラム改修編)=こんにちわ。前編はこちら→https://core-tech.jp/blog/article469/﻿今回は新人プログラマーが「WEBサイトの改修」を命じられた場合の、具体的な作業工程を書きます。あなたが1〜2年目の新人、新卒で、作業をまとめて大量にふられたときに、何からしたら良いのか、わからなくなってしまったら、「情報を整理すること」から始めてください。1.調査をするメモ書きなのか、きちんとした仕様書で来るのかは不明ですが、仕様の確認フェーズでは、・修正をする範囲を洗い出す作業・QAを洗い出す作業の2点を行います。このページにバナーを追加してください、といった作業の場合・・・・PC/SPなど両UAに入れるのか?・類似画面がないかを確認します。画面名指定のない場合は同じような画面がないか、などQAとしてリーダーやお客様に確認します。このページのこの情報を削除してください、といった作業の場合・・・・その情報はTBLから出力されているのか、ベタで書いてあるのか・TBLから情報を出している場合は、使用しているカラムや文言で、プロジェクトファイル全体をGrepし、影響範囲をメモなどにまとめておきましょう。その内容に誤りがないか、QAとしてリーダーやお客様に確認します。紐づく情報でGrepしたり・・・、類似Contollerを探したり・・・それらをまとめてQAで出し、自分が実際作業に入る前に聞きたいことをまとめておきます。ここまでが調査のフェーズです。2.詳細設計をする通常、詳細設計の前に基本設計や方式設計などをすると思いますが、今回はPG向けに記載しているため、事前にそれらが完了していることを前提に書いています。設計工数を取ってくれるチームの場合は、設計書のテンプレートがあると思いますので、それに従って行いましょう。設計工数をくれないような小さな作業の場合は、修正対応するContollerやClassに、コメントで作業をかいていきます。//XXXModelを呼び出す//Dataを加工する//Viewに渡すなどのコメントを記載したら、もっと細分化します。//Notfoundの場合はどうするか//Dataを加工する//1の場合はXXという文字列にする//2の場合はXXという文字列にする・・・//Viewに渡す//渡す変数が未使用か調べる//どのような形で渡すか・・文字列なのか、配列なのか、オブジェクトなのか・・・まとめて考えて混乱する場合は、とにかく細分化していきます。良く見るのが、AJAXの機能を書こうとして混乱している人です。AJAXの場合、JS、PHP(などのサーバーサイド言語)、HTMLと分かれているので混乱するかと思いますが・・・こんな風に分割します。HTML・どんなタグがトリガーになるか、Classなのか、Idで呼ぶのか、どんなイベントか・どこに値を戻すのか、Divなのか、Spanなのか、それとも何かの子NodeなのかJS・イベントをかく、ボタンクリックなのか、値変更なのか・イベント詳細を書く、Inは何かOutはどうしたいか、GetなのかPostなのか、どのURLに渡すのか・想定する文字列が戻ってきたら、どこのタグに出力するのかPHP(サーバーサイド言語)・PostまたはGetでなにを受け取るのか、それとも受け取らないのか・受け取った値をどうするのか(例えばModelなどを呼び出し値を取得するとか)・Outするときに加工するか(RestContollerなどの場合はResponse戻しやEchoしないと出ない場合などに気をつける)上記を順番に書いていき、自分が理解のできる「最小の処理」まで分解します。基本的に「代入とIF文と繰り返し」が書ければほとんどの処理がかけます。どんなに大きな案件も、代入とIFと繰り返しで成っています。(これはあくまで自論です。)なので、新しく触った言語で一番最初に覚えることは、代入方法、分岐の書き方、ループの書き方です。3.細分化された単位にPGをあてていく細分化すると、何度も書いているような処理は、関数にしたほうがいいな、とか細かいところが見えてきます。あとは、書いたコメントと同じ処理をPGで1行1行書いていくと、作業が完了します。このときに絶対に焦ってはいけません。焦って色々な方向に気を散らすと完成しないので、自分が最小化させた単位でかける部分だけをどんどん書いていきます。うまく書けない部分は飛ばしても良いのです。4.細分化した単位でテスト仕様書を作成する単体テストっていうのは、PG単位でのテストです。手動でやってませ〜んとか言わない。いうことじゃない!!プラスで、修正していない範囲のテストができていれば完璧です。テスト仕様書を書きながら、うまくできなかった部分や、考慮が足りない部分を修正して、CD完了です。最後に詳細設計の工数をくれない案件も少なくはないですが、いきなりプログラムを書き始めるよりも、コメントでも良いので、詳細設計をしたほうが、結果的に戻りが少なく、矛盾が少なく、工数的には短く済むので、案件をもらうととりあえずパニックになる人は、調査と詳細設計をぜひやってみていただきたいと思います。次回は新規作成編を書きます。