How IT Works

プログラマーやっています。技術よりも人間学的なところが好きです。

作業と順番

背景

 業務であっても、趣味であってもプログラミングをしていると、当然コーディングをして終わりということはありません。

 大抵、コードをリファクタリングする作業が必要ですし、場合によってはパフォーマンス改善(メモリの使用量削減、レスポンス改善等)に取り組むことがあります。

 今回考えたいのは、どの作業にどのタイミングでとり組むべきなのかというところです。

 自分はとりあえず動くコードを作る>リファクタリングですべての機能を作りこむことが多いのですが、最近はそうしないほうがいいのかなと思い始めてきました。

機能を作りこむ>リファクタリング>パフォーマンス改善

 自分はまず動くコードを作ることが多いです。

 多分、テスト駆動開発(TDD:Test Driven Development)に影響を受けていて、まずは動くコードを作って徐々に作りこんでいくのが好きです。

 こうすると純粋にロジックに集中できるので効率的に開発できる気がします。そこからリファクタリングをしてとりあえず作業は終了して、全部の機能を作りこみます。
 そして、ボトルネックになっている箇所があれば、パフォーマンス改善にとり組むという具合です。

 機能が一番重要で、パフォーマンスは後回しという考え方が背景にあります。

パフォーマンス改善>機能を作りこむ>リファクタリング

 逆にチームのメンバーは最初からパフォーマンス改善を考慮して設計します。

 そのうえで、機能を作りこんでいって、最後にリファクタリングをします。

 この順番で行くと納期が押していくと最終的にリファクタリングを切り捨てることになります。

 逆にメリットとしてはアーキテクチャの変更が最小限で済むということがあります。

 パフォーマンスを改善するときは大きなアーキテクチャの変更が必要なことが多いので、先に配慮しておくと修正が最小限で済みます。

個人的な結論

 これまで先にパフォーマンス改善をするやり方は「過剰な最適化」「早まった最適化」の類だと思って避けていました。

 ただ、現在の業務ではほぼすべてのケースでパフォーマンス改善の要求があって、逆にリファクタリングの効果が下がっていきます。

 それに会社全体としてリファクタリング自体が評価されない傾向にあるので(そもそもコードレビューもない)、他のメンバーに合わせるのがいいのかなと思うようになりました。

 もちろん、データ構造を大きく変えるとか、データ型を変えるとかそういった最適化は最終手段にしたいですが、アーキテクチャレベルの設計判断は早めのほうが自分の状況ではいいのかなという感じです。

趣味

 では、趣味はどうすべきなのかなと考えると、やはり同じなのかなと思います。

 趣味で何かを作っているとどうしても動くコードを作ることに腐心しがちなので、開発環境、パフォーマンス改善、リファクタリングその他もろもろが後回しになります。

 だから、コードを書くということの優先順位を少し下げて、学びに集中するくらいが自分にとってちょうどいいのかなと思います。

はじめまして

あいさつ

 初めまして。dexia2と申します。地方でプログラマーをやっています。
 今日からブログを始めようと思います。よろしくお願いします。

自己紹介

技術スタック

 IT業界に入ってからは3年目くらいです。

  • .NETを使ったデスクトップアプリケーション開発
  • .NETを使ったWeb開発(ASP.NET+Single Page Application)

 あたりが専門です。
 今入社した会社はプログラム言語(VB.NETC#)、OS、サーバー、グループウェアの全部がWindowsなので技術スタックは基本的にそっち方向に偏っています。

 その反動でLAMPとか、Macとか、RubyPythonとかに憧れています。
 浮世離れしてないといいなぁ。

趣味

  • ヨーガ
  • バドミントン
  • クラフト集め(全部人にあげてしまいますが……)

 多分システム化できないことが好きなんだと思います。直観的にいい悪いとか感じられるところとかすごくいいです。  

 でも、ここらへんの分野とITをつないでいけたらいいなと思っています。

 ちなみに、ヨーガに関してはこんなものもあるみたいですが。

 あと、バドミントンもブログを持っています。しばらく更新しないですが、バドミントン好きな方はどうぞ。

ブログについて

始めようと思った理由

 普段冷静に自分を見つめる機会というのがなくて、それで学習機会を逸しているような気がしています。
 それでブログを書くことで自分のことを考える機会を増やせたらいいかなと思っています。

書きたいこと

 技術的にはあまり新しいことをしていないので、あまり書けないんじゃないかなと思います。

 どちらかというと人間的なところ、集中力の出し方とか思考の使い方とかハック的なところについて興味があるので、そこらへんについて書きたいです。

 まぁ、どうなるかはわかりません。趣味については仕事に関係ありそうなら書きます。

更新頻度

 自省の意味もあってできる限り書いていきたいですが、プログラミングや趣味との兼ね合いもあるので、不定期ということにします。

 目標としては週に1回くらい簡単にかけたらいいなというところを目指します。

まとめ

とりあえず、技術者として発信をしたことがないので、何か一つでも有益な情報を書けたらいいなと思います。