この文書は正しくないSSLの使い方をしている状態、 俗に言う「オレオレ証明書」をパブリックなシステムで何の問題もないかのように使っている問題から 派生したものであり、オレオレエンジニアとはそのように問題因子を問題無しにすりかえてまう困った人のこ とを指す、はずである。
オレオレエンジニアになるには、自分は間違っていないと信じることが最重要項目。
オレオレエンジニアのヒントなど del.icio.usのoresign
エア新書にて オレオレエンジニア 日本にはびこる似非技術者が出版されています。
情報収集
- 全般
- 分厚い技術書を買っても数日は消化せずにそれだけで満足する。
- 技術書は最初の数章を読むだけでマスターしたことになる。
- 上級者なので、応用ばかり身につけようとする。基本に無頓着。
- 酒が入ると機密情報も喋る。
- カタカナ語と3文字英語をとにかく覚えようとする。
- 日本語の情報で満足しなかった時は詳しいと思ってる人に何らかの形で連絡してもっと聞き出す。
- 流行を鵜飲みにする。
- 内輪でしか使わないような略語を使って案件内容を困惑させる。
- なんでも略称アルファベットにし、PG、HPのように判別がしにくいものも混ぜこぜにする。
- インターネット
- まずは2ちゃんねるにスレが無いかを調べる。無ければ些細な質問を新スレッドを起して聞く。
- MLでは新スレッドを起さずどこかのスレッドに返信して自分の質問を書く。
- MLで関係ないカテゴリも含め満足するまで質問する。
- MLで巨大なファイルを添付する。
- MLで関係の無い話題でひっぱる。
- 自分以外のスレッドが短かく、もっと議論すべきだと感じる。
- Microsoftがインターネットを発明したことになっている。
- blogに仕事での陰口は欠かせない。
Wikiを立てれば何とかなると考える。(参考)Wiki病
メールのやりとり
- メール本文は1行ちょっとくらいか無し(!)で,テキストオンリーのワープロ文書やプレゼンデータを添付する。
- 添付ファイルは何も考えずに開く。
- 自分だけわかればいいような文書を送信する。
プログラミング
- 全般
- コードは長いほど良い。自分のより短かいコードを見ると「そんなので動くはずがない」と言う。
- 変数名は極端に短かいほうが良い。
- 実行速度はLFの数が少ないほど速い。
- グローバル変数が無いと関数は使えない。
- XMLのようなデータ処理ではifやwhileを駆使して複雑な処理を1から書く。
- 自分でもちょっと不確かな正規表現はテストデータで想定した動作になれば確信する。
- フラグの値のみで条件分岐があり、いつも5つくらいに分かれる。
似ている処理は新たにコピー&ペーストして書き替える。
拾ってきたコードを考え無しにコピー&ペーストで利用する。
- 自分でわかればいいのでコメントは書かない。
- 必要にせまられて書いたコメントには「aに10を入れる」のような記述をする。
- 定数の意味は脳内に保存する。
- スコープという概念がそもそもおかしいと言う。
- 関数名と変数名は「a1」や「a2」等で、自分だけわかれば問題ない。
- 世の中にはC・C++・CGI・PHP・Java・VB・C#・.NET言語が存在する。
- 正常終了するデータでしかテストしない。
- ワープロでコーディングする。またはさせる。
- 意味のわからないコメントアウトが残っている。
- バージョン管理は「foo.c」のマイナーアップデートという意味で「foo-.c」、2番目は「foo2.c」など
- コーディングはまず紙に書く。
- コーディング前に詳細なフローチャートを書く。
- データの順序に通し番号を入れていて余裕を見て10刻みになっているが、プログラム側は10刻みにしかみてくれない。
- foobarの改良、拡張はfoobar2やfoobarExになる。
- 汎用性をウリにしているのが謳い文句だが局所的な用途でしか使えない。
- プログラムを書いた時間がプログラミングスキルに比例する。
- やたら凝った書き型にこだわる。
- アルゴリズムとデータ構造という泥くさい話はよくわからない。
- ライフスパンが短かいものしか書かない。機能追加はそれをコピペして毛が生えたものである。
- RDBのまねごとをフルスクラッチで書いている。
- ソート処理は1からバブルソートを書く。
- 仕様の変更とはファイルを増やすことである。
- 明示的にコンパイル作業のいる言語
- 実行速度が遅いのをコンパイラのせいにする。
- 設定を替えるためにはソースの変更をしコンパイルをする必要がある。
- リファレンスにある関数を使っているのにコンパイルでwarningを出すのは出来の悪いコンパイラ。
- 日本語(Shift_JIS)でコメントを入れるとコンパイルを失敗することがあるのも出来の悪いコンパイラ。
- オブジェクト指向
- ファイルを分割できれば立派なオブジェクト指向。
- 1関数1ファイルがオブジェクト指向の基本。
- 仕様より先にデザインパターンを決める。
- 1クラスに1メソッドだけあり、やたら長い。
- 再利用性だけに拘る。
- コピペ、いわゆる再利用をする。
- とりあえず2世代くらい継承しておく。
- COBOLとCORBAは親戚だ。
- クラスもあるがグローバル変数に依存している。
- 例外処理
- 例外が発生する仕組に合点がいかないが、仕方ないのでおもむろに全ての例外を拾うようにして、正常終了とみなす。
- C/C++
- ヘッダファイルにUPPERCASE関数名の関数を書けばそれはマクロになり高速になる。
- 日本語は全角すなわち半角の倍だから2バイト。
- mallocは危険なので安全な配列を使うようにする、またはさせる。
- segmentation faultが出てもテストデータを入れた時の実行結果が1つでも正しければ問題なし。
- バッファサイズを気にせずバンバンstrcpy、strcat。
- 意外に小心者なのでバッファは余分に取る。そこ100バイトあれば足りる処理も1000バイトくらい確保。
- ポインタは恐いので使わない。
- まだポインタ変数しか存在しないのに*で実体に入出力する。
- 入力はfopen等は使わずにgetchar、gets、scanfで行う。
- 数百行以上のうち9割9分がmain関数の中にある。
- cc foo.c ; mv a.out foo
- 構造体はポインタが絡みやすいので使わない。若しくは、そもそも構造体を知らない。
- CCやg++のようなC++のコンパイラでコンパイルできるコードは全てC++。
- 「//」でコメントを書けるのがC++の特徴である。
- C++のコードはまずウィザードで作成するきまりになっている。
- C++の入出力はcoutとcin以外使わない。
- プリプロセッサに頼りすぎる。
- void main(void) や main() だけのプログラムから抜け出せないでいる。
- Java
- 何かすごいことができる革命がこの中にある。
- 自分の趣味のサイトには本で見付けたサンプルアプレットがいっぱい動作する。
- パスとクラスパスとパスワードの区別がつきにくいので難しく感じる。
- 何を作るにせよサーブレットじゃないと気がすまない。
- 商用サーブレットコンテナに憧れる。
- 商用IDEがないとコンパイルできない。
- Javaを採用する理由が「Write Once Run Anywhere」。
- Beanの数=画面 | Beanの数=テーブル (※Bean get/setメソッドが対になった構造体(ひとくくりしたデータ定義)のようなもの)
- Microsoft VisualJ++が100% pure Javaであることを疑わない。
- 巨大でモノリシックなクラスを用意する。
- 固有の例外クラスを作らずダウンキャストした例外クラス(生Exception)を投げる。
プロジェクトマネージメント
- クライアントが欲しいシステムは自分の思い描いたシステムに相違ない。
- 流行に乗っていないと自分は遅れているという危機感を感じてしまう。
- プロトタイプ段階から見た目を重視する。
- プログラマが得意な技術をいくら持っていても自分が知らなければ使わせないし、興味もない。
- 自分が興味のある技術だけでシステムを組ませる。
- 仕様がこぎれいだと物足りなさを感じて不満になり、勝手に仕様を追加する。
- テキストの入力は全て手で行なう仕様にする。
- 自分だけが欲しい機能を盛り込む。
- バグトラッキングは全て緊急レベルで且つ対応してもクローズしない。
- テストの自動化より人手を介したテストのほうが信頼できる。
- 機能は変更しても納期は変更しない。
- 実のところ何もやってない。
- プログラマをがんばらせればすぐできると思い込む。
- 「がんばれ」しか言わない。
- 銀の弾丸のような解決策が必ず存在する。
- 会議はいつも舌打ちと貧乏ゆすり。
- OJTと名うっていきなり仕事をひきつがせる。
- ドキュメントを書く工数がもったいないと言って書かない。
- 品質管理はせず、日曜プログラミングに毛が生えただけ。
システムインテグレーション
- サーバはあくまでハードウェアであってソフトウェアは違う何か。
- セキュリティを重視を謳いつつも、便利さだけを追及する。
- サーバをLAN接続したのにネットワークコンピュータに表示されていないので故障と判断する。
- ファイルはエクスプローラのネットワーク共有かブラウザの送信でしかアップロードできない。
- 商用ソフトウェアじゃないと落着かない。
- 商用データベースならばセキュリティは万全だ。
- 手間を増やしてでもパッケージを導入する。
- コンサルタントの言うことは全て正しい。
- オープンソースとフリーソフトウェアとフリーウェアとフリーソフトは全部同じもの。責任逃れのためそれらを使うことは許さない。
- P2Pとはファイル共有ツールのことであり、セキュリティも甘いため採用を見送る。
システムアドミニストレーション
- インターネットに接続できるのにもかかわらず1時間以上かけて出張。
- 自社製品を「海外の工場で作っているので対応できない」と言って放置する。
- ドキュメントが無いか、あったとしても役に立たない。
- *nixは手動でしか管理できない。
- GUIが無いと管理できない。あったとしてもマニュアルを見ないで勘でやる。
- 脆いパーミッションを設定する。
- コンパネがないと何もできない。
基盤システム
- OSが勝手にアップグレードされている。
- メモリやCPUが変わっている。
- ストレージがゲームとアダルトコンテンツで山盛りになっている。
- 幹部のPCが一番速く、技術部門のPCは数世代昔のスペック。
- 何にせよ手書きのドキュメントを提出しなければならない。
- マンマシンインターフェースをないがしろにする。
- バックアップが半年前。
- UPSのバッテリーが古いまま。
- ウイルス対策ソフトをインストールしておけばパッチをあてなくても良い。
- RAIDにしたのでバックアップ不要。
- ディスクI/Oを恒常的に行なう。
アプリケーション全般
- 機能は誰も使わない機能で山盛り。
- 前のバージョンより不安定。
- いい機能があったとしてもそれが何処にあるのか誰も知らないし、使い方も不明。
- パッチ地獄に陥っている。
- OSの制限を無視して一つのディレクトリに毎日ファイルやディレクトリが追加されていく。
- マシンスペックが良い(高い)ほどシステムは安定する。
基盤ネットワーク
- HTTPSとSSHは同じものであると判断する。
- 情報漏曳を気にする外向けサーバに対してログインだけSSHを使い、ファイル管理にはFTPを使う。
- 接続しているマシンが多いものはLANからWANにクラスチェンジする。
- サーバは契約上はデータセンタだが実際は社内の片隅にある。
- 100人規模のオフィスでも家庭用ルータが手放せない。
- LAN内はSSHである必要性が無いのでTelnet。
- 事前事後の連絡無しにLAN構成が変わったり、外向きの回線が増えている。
- 仕事用のファイルサーバが会社のネットワークから見えるのに自宅からは見えないので文句を言う。
- ファイアウォールさえあればセキュリティは完璧。
- ファイル共有ツールで回線が真っ黒になっている。
- spamやvirus対策は個人任せ。
- 無線LANが放置されていて、外部からアクセスし放題になっている。
- 理由もなくグローバルIPアドレスを振る。(いつかはこれが非常識になるかもしれんが)
- ループバックアドレス、サブネットマスク、ゲートウェイ等は知らない。
- ジメジメしたところにあるホームエレクターにサーバが置いてある。
Webシステム
JavaAppletやJavaScriptで現在時刻を表示する。
JavaScriptのことをJavaと言う。
- 毎回ようこそ画面を表示する。
- アクセスカウンタがついている。
- ところかまわずBGMが流れる。
- ログインに時間がやたらかかる。
- 実は特に何も認証しないでアクセスできる。
- 処理時間がかかるのをネットワークのせいにする。
- リンクを作るだけ作って工事中ページを全てに用意する。
- データ全件数がどんなに少なくてもキーワード検索をする必要がある。
- ユーザ認証は秘密のURLにアクセスすることでユーザと見なす。
- 10000件あったら10000件一度に表示する。
- SSLさえ動いていればセキュリティは万全だ。
- HTMLとCGIとPHPという言語を使わなければならない。
- Perlはラクダの名前。
- CGIやPHPは簡単だから安い。Javaはサーブレット言語で難しいので高い。
なりふりかまわずとりあえずMicrosoft IISとMicrosoft FrontPageExtensionが必須。
- httpdのバージョンや名前を出さないようにするとアタックされにくく安全である。
パブリックなシステムなのにシェアが一番多いという理由だけでMicrosoft InternetExplorer以外のブラウザのことは一切考えない。
- 自分とは直接関係のないサイトの画像を勝手に自分のサイトに貼り付ける。
- サーバーサイドスクリプトのソースはダウンロードツールで拾える。
- ページを遷移するごとにメガバイト級のデータが送受信される。
- 最新の情報は空キーワードで検索して表示する。
サーバーサイドスクリプトだろうがコメントは「<!-- ... -->」でくくる。
メールシステム
- Dateヘッダはつけない。
- SubjectヘッダはBase64等のエンコードをしない。
- 配送が成功しようが失敗しようが「動作している」ことになっている。
- 個人契約ISPのメールサーバで一度に数千件以上処理させる。
- SMTPポートが空いたままopen relayでも「ファイアウォール導入済」なので安全。
- sendmailとMicrosoft Exchange以外のMTAは使わないというか知らない。
GUI
- 何かをするたびに「OK」ボタンのみのダイアログが現れる。
- 色使いがヒドく厚化粧。
- ウインドウサイズが固定されて眺めづらい。
- ボタンの数が尋常じゃない。
- 入力を間違うとエラーで落ちる(仕様)。
- あるタスクが終了してもメッセージが出ない。
- 値の手入力はできるがファイル名からのファイル入出力はできない。
- アイコンにバルーンヘルプが出ない。
- GUIごときに特許を取りたがる。
- 似たような項目ばかりある。
- 何がおこってるかがわからない。
(リレーショナル)データベース
- スプレッドシートのイメージでテーブルを作る。
- 巨大なテーブルを1つ作ってそれを操作する。
- そこ数件のデータのために大掛りなシステムを作りたがる。
- 画面の数だけテーブルがある。
- ある1つの値を替えるたびに複数テーブルの値を変更する。
- データベース本体は円筒形をしている。
- システム全体の速度を上げるにはインデックスを貼り、正規化を崩せばよい。
- なりふりかまわず索引を貼る。
- ツールを盲目的に信用する。
- Microsoft Accessで生成したSQLをそのまま使う。
- 正規化するしないにかかわらずテーブルは分割するほうがかっこいい。
- グループ関数(UNION,INTERSECT等)や外部結合で10個はテーブルを合体する。
- クエリで戻ってくる値がたまにおかしいので受け側のロジックで誤魔化す。
- ページング処理はLIMIT句を使わずロジックで切り刻む。
- テーブルが時間を追うごとに増加される。
- 全文検索機能といっても中身は「LIKE '%someword%'」
Micorsoft Windows
- Micorosoft ActiveXもDLLもOLEもCOMも全て全く同じもの。
- Microsoft DirectXが使えれば人気者になれる。
Micorosoft VisualBasicでテキスト通りにできたことを友達に自慢する。
Micorosoft VisualBasicで作ったexeファイルからソースをそのまま読むことができると言う。
- 重箱の隅tipsをいちいち自慢する。
*nix
Fedora CoreはRedHat Linux。
- Microsoft Windowsのバイナリがそのまま動作するらしい。
- C:ドライブが無いので困惑する。
- どうしてコマンドラインが必要かわからない。
- デスクトップに「マイコンピュータ」「マイネットワーク」「マイドキュメント」アイコンが無いのが気に食わない。
- SGIのマシンなら夢の超大作ゲームが作れる。
- tar.gzファイルは展開できない。zipかlzhをMicrosoft Windowsで展開してアップロードする。
- フリーウェアが少ないのでつまらない。
- なんで秀○やTeraP○dをインストールしてないのか疑問に感じる。
- viが使えない。viをバカにする。
- 一般ユーザは作らないというかそもそもいらない。全部rootでやる。
OpenOffice.orgなんて邪道。
- なんとかしてMicrosoft WordやMicrosoft Excelをインストールしたい。(いちおう動かすことはできるけど)
- /tmpの中に添付ファイルがある。
- /usr/oreoreのようにユーザディレクトリを作る。
- /Program Filesがある。
- ひたすらGRUBに拘る。
- Linuxはインターネットができない。
- grepをせず目で検索する。sedをせず手で置換する。
- rpm -iしかインストール方法を知らない。
- 大きくとりすぎた/bootパーティションがもったいないせいかブーツフェチ画像を溜めている。
- SELinuxというセキュアなディストリビューションがある。
- 一般ユーザが変更できるスクリプトをroot権限で実行する。
オープンソース
- タダで使えることだけがメリットである。
- ソースとは「設計図」であると言う。
- 調味料(sauce)である。
- オープンソースの話題のときは「リナックス」しか言ってこない。
- オープンソースを採用すればハードウェアや人件費も安くなる。
コンボ
- アーキテクチャ
- Webシステムならブラウザさえあればできる→アーキテクチャ的な問題を抱える→使いにくいだけのシステム完成
- スプレッドシートをそのままDB化→正規化も何も無し→無駄ロジック増大
大量のコピー&ペースト→仕様変更での変更箇所増大
- マネージメント
- 予算をケチる→無理して受注→赤字→共倒れ
- HTMLがinvalid→議論発生→喧嘩→スタッフが抜ける
その他
- 会社の金で買うとき自分のポイントカードに加算する。
- 「初心に返る」と言うが、そもそも進歩してない。
- このガイドラインの内容がそもそもわからない。
