若者が逃げ出すシステム開発業界

プログラムが書けない人に「仕様変更」について説明するには

言いたい事は同じなのですが、私は「家を建てる」例えが、変更に掛かる負担も大きく、問題の重要度が伝わりやすいかなと思っています。
物づくりには必ず順番があり、それを飛ばしたり手抜きした時の弊害も大切かなと。あと並列では進まない事。

例えば平屋の一軒家を注文した後、途中で2階建てに変更できるでしょうか。
素人でも、それでは基礎や骨組みの強度が変わってくるだろうとわかります。(建設のプロではないので間違ってたらごめんなさい)
突然1DKの間取りを2DKにできるでしょうか。建てる前なら設計からやり直し、予算の組み直しが可能かもしれません。
ですが、事は平屋の1DKで既に進んでいます。

実際の家で、強度不足で倒壊するかもしれないけど無理やり2階建てにしました。
6畳間を2つに区切ることで3畳間の部屋を2つにし、2DKにしました。なんて話が通るでしょうか。
バカみたいな話ですが、これが通ってしまうのがシステム開発です。
そして後日倒壊したり、部屋が狭くて使いものにならないと大騒ぎしてみたりするんです。

「逃げる」のススメ

私も身体を壊して会社を退職した事がありますので、この考え方には賛成です。
働く為に生きているのではなく、生きる為に働いているのですから、当たり前の事です。

ただ、仕様変更の問題にも絡んで来ますが、大抵は会社組織が機能してない、マネージメントができていないのが問題です。
責任範囲をウヤムヤにし、屍を積み上げて出来たシステムがゴミだなんて目も当てられません。
#単にプログラマーのスキルが低いとかは別問題

大抵炎上するプロジェクトでは、会社間での責任範囲が定まっておらず、プロジェクト内での責任範囲と責任者も事実上存在しません。
プログラマーや下流工程と呼ばれるところで作業している人も、会社としての成果物(納品物)、上司の成果物、自分の成果物を確認する。
重要な事です。自分の成果物、これは他メンバーとの比較や、生産性、開発工程について考える材料になります。(給料相応かどうかも)
上司の成果物、日報だせとは言えないでしょうが、議事録、社内ミーティング、色々あるでしょう。

仕様変更が入った場合、まず、なぜ必要なのか理由を聞く。思いつきなのか、オーバースペックなのか、他の解決方法があるのか考えられるハズです。
仕様漏れなら追加予算と納期延長、もしくは別途フェーズが必要な旨をなぜ説明して来なかったのか確認する。
またはクライアントに直ぐさま説明するべきです。

力関係で無理、説明能力が無い、スルーされる、これらの対応なら長居は無用です。

また、一度無茶を飲むと本来対等だった関係に、上下が生まれます。会社間、個人間も同様です。
システム開発のプロと、それを求め発注してきたクライアントではなく、単にお金を払っている人、貰っている人です。

PM、SE、PL、PG、肩書きは何でも私達はそれぞれのプロフェッショナルであり、責任の範囲は違えど、対等な関係です。
命令されたから動いたでは機械と同じです。
それぞれの立場や経験から優れたアイデアや解決策を提案するために集まっているのに、無視されるのでは何の為のチームでしょう。
協調性とは波風立たせず、責任が降りかからないように黙っている事でしょうか。求人情報でよくみるコミュニケーション能力とは何なのでしょう。

長い割にまとまりが無い内容になってしまいましたが、要は逃げる前に戦えという事です。
#戦うとか言うと敵みたいなので、皆が幸せになるにはどうするか考える

成長をやたら謳う会社には気をつけましょう

逃げた先に楽園があるかは誰にもわかりません。諸先輩方の知恵をお借りしましょう。

「仕事の法則」

上記の記事からリンクされていますが、まだ実績もスキルも少ない若い方には重要な話ですね。
倒れるまで働く必要はありませんが、小さい事ができない人に大きい事はできません。

変数に型がないということの利点について考える

開発言語は道具のひとつに過ぎないので、○○だから優れているとか、そういう話じゃないと思うんですがね。
私はPHPの雑な言語仕様に慣れているけど、これが10人以上の開発者が関わるならJavaとか型があった方が良いなと考えます。
開発言語の理解度やスキルに差がある場合、言語仕様レベルで品質を担保できる仕組みがあった方が楽だから。それだけです。
フレームワークを使うのも半分はこれが理由で、コーディング規約やデザインパターンで統一性が確保できるハズだからです。
極論ですが、別に自分のソースだけではなく全員のソースレビューをする(できる人材が居る)会社なら道具なんて尚更何でも良いです。

PHPに限っていえばis_string、is_intとかある時点で当初は?となりましたが。
それも入力値のバリデーション用と考えるか、functionで毎度、引数の型判定から例外を投げるようにするかで変わってきますし。
毎度書くとエラー処理が冗長化されるので最終的なDB処理のfunctionのみで書くのか、それすらせずにSQLエラーで返ってくるのを待つのか。

それは求めるモノによるので、使い分ければいいじゃないって元の話に戻るのでした。

RedmineをVPSに

なんかもうOS Xでredmine環境というよりruby環境を用意するのに疲れ果てたのと、外部に公開するにはドメインと固定IPが必要な訳で、サクッとVPSを借りました。
ドメインはサブドメインでも良いかなと思いましたが、大人の事情でプロジェクト毎に使い分けたい、年間数百円で買えるとあって新規取得。
VPSもほぼ真っさらなCentOSだったので、ブラウザ上の管理コンソールからアカウント作成、公開鍵認証にして、rootでのログイン不可に。
あとは作ったユーザーからSSH、sudoしてyumでひと通りインストール、iptablesで不要なポートを塞ぎ、robots.txtで検索エンジンのクローラを拒否に。
redmineが動くのを確認。1時間と掛からずサーバが用意できる時代とは恐ろしや。
またrapid sslという格安のサーバ証明書を発見。代理店により年1500円~2500円くらいと激安。
FQDN限定で暗号化の強度を下げて、認証手続きも簡単にしたお手軽SSLの模様。平文で流れるより100倍マシという事で。

あとはバックアップをどうするか。もう一台VPS借りてそっちにバックアップでも良いんだけど、自宅のミラーリングされてるNASでも良いかなと。
#VPSをバックアップにするにはデータセンターの場所を選択できる所で別の場所にするか、まったく別のVPSにした方が無難
Amazon S3に無料利用枠(1年間だけかも)があるので、個人利用くらいならこれで事足りそうな気もします。

DeadSeace3を始めてしまいました。相変わらずカッコイイ。
アイザックさん時計を買ってしまいそう。時計しないけど。