2009年12月15日火曜日

プロのソフト開発者とは

プロのソフト開発者とはどのようなものでしょうか?
ちょっと思いつくことを述べれば以下の通りです。

(1)少なくとも数千万円のシステムをゼロから構築するチームのリーダーが出来る。
(2)1人か、助手程度を付けて、少なくとも数百万円のシステムをゼロから構築出来る。
(3)少なくとも数億円を売り上げるソフトウェア製品をゼロから構築するチームのリーダーが出来る。
(4)1人か、助手程度を付けて、少なくとも数千万円を売り上げるソフトウェア製品をゼロから構築出来る。

言うまでもなく、開発したソフトウェアが十分な機能、品質を持っていなければなりません。
その目安は、遅くとも、ユーザーは導入後3ヶ月が経過すれば、トラブルなく使用できることです。

尚、私の場合、単独活動がほとんどで、(2)や(4)の実績なら多数あります。
(1)や(3)の場合は、オブザーバーや管理者として参加したことはよくあります。
チーム開発の難しさ(煩わしさ)を避けたいという思いもあるのですが、現在は優れた開発ツールや手法が発達し、昔であればチームでないと不可能であった規模の開発も1人で行えるようになったということもあります。
ただ、開発会社としては、チームでの大型開発物件が欲しいところだと思います。

2009年10月27日火曜日

システムエンジニアとは何か

SE(システムエンジニア)という意味は実は曖昧なものです。
昔は、システムの設計者というのが、日本での認識の大勢だったかと思います。
それで、設計はできるがプログラミングはできないというSEも少なくありませんでした。そんなSEには、プログラミングは下々の仕事であるという言い方をする人もよくいたと思います。

私は、プログラミングのある程度の腕前を持たない者が良い設計者になれるとは思っていません。
そこで、SEとは、「設計もできるプログラマ」程度として良いのではないかと思います。
ただし、自分をプログラマだと言う者にだって、設計くらいできる人もいます。

早い話が、技術者としてSEとプログラマの区別なんて実際にはありません。

私が、実感として最も納得しやすいSEの仕事とは「お客様のわがままを聞くこと」です。
これは、企業の業務システムの開発の場合に特に当てはまります。
こういった仕事は技術者のものではなく営業の仕事だと言われるかもしれませんが、それは違います。システム開発の基本を知らない営業がお客様のわがままを聞いてきたら、プロジェクトは必ず破綻します。
理想を言えば、お客様のわがままを聞き、それをうまく調整できてこそ本物の技術者です。だって、お客様があってのシステムですからね。
でも、それはあくまで理想。
そして、システムの開発手法なんて、お客様のわがままの中の不要な部分を取り去るためのものではないかと思うことがあります。

2009年8月4日火曜日

流行に振り回されない

システムエンジニアやプログラマの世界では、新しい技術、流行の技術に取組むことが格好が良いという面は確かにある。
UMLで設計し、プログラムはC#か、少なくともJavaかC++で、Webシステムなら、PythonかRuby。
これが、COBOLだと最低で、PHPやPerlも、もう古いといった感じである。

C#やRubyの優れた点は確実にあるのだが、多くのシステムでこれらの言語のメリットが大きく生きるということはそんなに無い。
それよりも、熟練した言語を使うメリットの方がずっと大きいと思う。
COBOLは長く使ってないが、現在のCOBOLに不足な点など、ほとんどないと思う。

Visual Basicも、.Net版は以前はVB.NETと呼ばれたが、思ったほど人気が出ず、現在はVisual Basic2008といいう名称になっているようでややこしい。
例えVB.NETやVisual Basic2008を使っていても、以前のVisual Basicとほとんど変わらない使い方がされていると思う。
Visual Basicとの互換性を謳うReal Basicがもっと良かったら、さぞや普及したかもしれないが、所詮ブランド力やサポート力の差があると思う。

何かのIT情報サイトで、「最も開発効率の高い言語は?」との問題に、Excelを1つの答としているものがあったが、これがなかなか興味深かった。一流のITコンサルタントがそう言い、自らExcelでシステムを作っているという。
言うまでもないが、Excelは表計算のアプリケーションでプログラム言語ではないが、マクロやVBA(Visual Basic for Application)が内臓され、立派な開発ツールである。
表部分は誰でも使えるので、ユーザー参加型の開発に結びつけることも出来る。Excelの開発効率が高いのは当たり前だ。
Excelは表計算だけあって、データベース機能がやや弱いが、それなら外部データベースを使うという手もあるし、Accessを使えば、データベースも、そして、高性能データベースのフロントツールとしても十分だ。

私は、これから開発者になりたいが、あんまり難しいことも嫌だというなら、とりあえずExcelの開発者になるというのも手と思う。
本格的にやりたければ、私は今でもAccessを薦める。ただ、VBAは必須となる。
Webなら、今のポール・グレアムはどう考えているか知らないが、やはりPerlを薦める。
ただ、Webシステムというのは、不特定多数のユーザーが使うことが前提の場合が多く、デザインや手厚い心配りが必要で、私はあまりやる気がない。
流行に振り回されず、AccessとPerlでやっていけばどうかと思う。

2009年2月28日土曜日

オブジェクト指向は結果的に効率が悪い(?)

オブジェクト指向のメリットとして、昔から言われてきたことは、何と言ってもソフト開発効率の良さだった。
しかし、このことは、よく制限を考えないと、とんでもない思い違いとなる。

これが、かつてのSmalltalk(Smalltalk-80)のように、専用マシンの中で、パッケージされた固有のクラスライブラリのみ使うなら、ある程度はそうなのかもしれない。
現在、Javaでの開発で苦労させられるのは、クラスライブラリは何を使い、どう管理するかだ。.NET(ドットネット)では、クラスの集団である.Net Frameworkの理解が.NET の学習だと言うくらい大変である。いかに、.NETでは.NET Frameworkとしてクラスライブラリが既定で用意されているとはいえ、膨大な上、やはりかなり変化するのだ。
まして、自分でクラスを作成するとなると、最初こそ面白いが、やがて管理不能になる。
「ポリモーフィズム、継承、オーバーライドできないオブジェクト指向言語はオブジェクト指向でない」とよく言われるが、私には、そんな手法で作ったクラスなんか、作った途端に忘れてしまい、後はどうなっても知らない(笑)。

オブジェクト指向は本質的に高機能で贅沢なソフトウェアを作るためのものであり、ユーザーの要求は止まるところを知らない。
そんなものに付き合っていたら、開発者の心はやがて破綻してしまうであろう。

確かに、限度をわきまえたオブジェクト指向は便利だ。
しかし、今ではデメリットが多過ぎる。それなら、「オブジェクト指向なんていらない」と言ってしまいたい。
以前は、「オブジェクト指向って何?」って言われたら、「メモリ保護のための手法だよ」と答えていたが、こう答えられる範囲でやりたいものである。

2009年2月24日火曜日

ソフトウェアクライシスを呼ぶもの

ソフトウェアクライシス(ソフトウェア危機)とは、ソフトウェアの複雑化により、人が管理しきれなくなり、不測の事態が発生する可能性が高くなってきたことを言ったものと思います。もちろん、もっと広い意味で使われることもありますが、開発者としては、この考え方が最もぴったりすると思われます。
ソフトウェアというものは、十分に役に立つ限り、できるだけシンプルであることのメリットは強調してもし尽くせないほど大きなものがあります。
しかし、それが分るのは、おそらくはソフトウェア開発者だけでしょう。
そこで、ユーザーはソフトウェアに限りなく高い要求を持つことになります。その要求する者が、その権利のある顧客である場合は、開発者は要求を受け入れざるをえない場合も多く、それがクライシスを生みます。
この事態が改善される見込みは、まあ、ありません。今後もソフトウェアの中には得体の知れない部分が多く作られ、場合によっては、大きな被害(人命すら)を発生させる可能性があるのです。

この問題には、私は長い間、うんざりするほど苦しめられてきました。
顧客がよく要求してくる高い機能の多くは、ユーザーインターフェース、つまり、ソフトウェアの使い勝手です。ソフトウェアのそれ以外の部分と違い、分りやすいからです。
漢字を入力すべきところでは、自動的に漢字モードになり、入力間違いをした時は、それを素早く親切にサポートしなくてはなりません。
前の入力項目に戻るのに、マウスを操作せず、矢印キーや、何か特定のキーでそれをやれなければなりません。
多くの場合、それがなくても特に不都合ないような操作でも、顧客は、それが無いと業務効率が悪くなると主張します。
そして、プログラミングで最も複雑でエラーの原因が入り込みやすいのが、この操作性、つまり、インターフェースです。
顧客は、贅沢なインターフェースを要求するほど、ソフトウェアの価格は上がり、しかも、トラブルを多くするのです。

もともと、Webシステムというのは、操作性が良くないどころか、それに関しては、非常に質素な機能しか持てませんでした。
ただ、最初は開発者側も「Webですから」という説明で顧客を納得させることができ、便利で、このことからWebシステムの開発がすっかり気に入ってしまった開発者も少なくありません。
ところが、最近では、リッチクライアントとかスマートクライアントとかいう、使い勝手の良いWebシステムが登場してきました。Ajax(エイジャックス)とか呼ばれる技術が代表的なものと思いますが、これもシフトウェアクライシスを増大させるでしょう。
何事によらず、贅沢を言っていてはみんなが不幸になるのです。

2009年2月14日土曜日

お薦めはAccess+VBAではないか?

人材紹介会社のワークポート社が、コンピュータプログラミング言語に関する、求人の多さと年収の高さのランキングを発表したらしい。
求人では、Java、C、C++、PHP、C#、VisualBasic、Perl、JavaScript、COBOL、VisualBasic.NETがベスト10。
年収では、C#、C、COBOL、ASP.NET、VisualBasic.NET、VBA、RPG、C++、JavaScript、Javaがベスト10である。

求人数はJava、年収はC#がトップ――ワークポートが調査

早い話が、こんな情報は信用しない方が良いのじゃないかと思う。
あくまで、トータルと平均だ。
経験的に、求人が多く、平均的に年収が高い仕事というのは、面白くない仕事が多いと思う。
求人が多いということは、雑魚でもいいってことだし、年収が高いということは気楽でない仕事だということだ。実に簡単なことだ。
それに、人材派遣会社での調査であり、かなり一面的な調査結果と思って間違いない。

JavaScriptが、一人前のプログラミング言語として扱われるようになったのはちょっと面白い。
確かに、近年、JavaScriptの用途は広がり、本格的な用途に適用できるよう(例えばデータ処理)な環境が出来てきたようだ。セールスフォースと並ぶ、エンタープライズ用クラウドコンピューティングの一方の雄、ネットスイートでも、JavaScriptが主力言語になっているくらいだ。
仕事があるなら、これをマスターしておいても良いのではと思う。

COBOLなんて、20年前から「化石」「時代遅れ」って言われているが、いずれも高ランクである。実際、地球上の業務システムの全コードの半分以上はいまだCOBOLだと言われている。多分、後10年や20年は、さほど変わらないと思う。

いずれにせよ、これらで上位になるということは、基本的に大規模プロジェクトかFA(ファクトリオートメーション)分野で使われるのだと思う。
大規模システムというのは、上流は大変に困難だし、下流はあまり面白くないものだ。つまり、プログラミング言語レベルで言うなら、それを使う者は、システムの全体は見えないので、面白さが感じられず、歯車感は強いかもしれない。

これらから考えて、案外良いと思ったのはVBAだ。VBAは、マイクロソフトオフィス製品に組み込まれたプログラミング言語で、主にはAccessでの開発ではないかと思う。
VBAは、現在、マイクロソフトの主力言語であるVisualBasic.NET(最新はVisualBasic2008)の旧タイプであるVisualBasic6.0とほぼ同じであるが、私はこのVisualBasic6.0程度の機能で良かったと思っている。VisualBasic.NETは複雑過ぎる。
Accessなら、2万円ちょいで買えるし、いまやランタイムは無料だ。SQL Serverもエクスプレス版とかがビジュアルインターフェース付きで無料で使えるので、勉強すれば、Accessと組み合わせた開発が出来、中規模システムであれば、開発効率は圧倒的に良い。
これから開発者を目指す人は、世間的には薦められることは少ないかもしれないが、Access+VBA(+SQL Server)が良いかもしれない。これは、今流行のWebシステムではないが、Webの問題は前回書いた通りである。

2009年2月12日木曜日

IT業界の奇妙さ

私は別のブログで、思想・芸術関連のエッセイを書いているのですが、こちらでは、仕事で行っているソフト開発やIT関係について、幅広くいろいろ書いていきます。

ソフト開発業界と言いますのは、昔から、嘘・・・と言いますか、独断と偏見の多い業界であり、専門家以外はもちろん、業界内部の人間ですら、何が本当か分らないことが多過ぎるように思います。
専門雑誌をよく読んで勉強すれば・・・間違いなく、いっそう分らなくなります。専門雑誌こそ独断と偏見の温床かもしれませんからね。
よって、ソフト開発の業界を志望する学生等や、ソフト開発を開発会社に依頼したい企業が、必要なことに関してまっとうな情報を得るなど、ほとんど不可能かもしれません。
ただ、それを私がこのブログで解決しようなどという気もないので、妙な期待はしないで欲しいのですが、少しはお役に立てるかもしれません。

ソフト開発業界は、例えば自動車産業などと比べると、当然、歴史は浅く、まだまだ未成熟という部分もあるのかもしれませんが、そのようなことを堂々と言えたのは10年以上前のことだったと思います。
今は、自動車産業が成熟を通り越して腐敗してきた雰囲気もありますので、ソフト開発業界がもう少しまともになれば良いのですが、成熟する前に腐敗しているのかもしれません。

どこから話を始めて良いものかまるで分かりませんので、その場での思いつき、いわゆる、いきあたりばったりでいこうと思います。

まず、Webシステム開発者を目指すなら、プログラム言語は何を憶えるかという話題でどうかと思います。
人によっては、「必要なもの全部」などと言うかもしれません。まあ、頭の良い人もいるのかもしれませんが、そんなに頭が良ければ、もっと儲かる業界に行く人が多いかもしれません。
で、解答ですが、「PHP」です。私なら、他は薦めません。あまりに平凡な解答というのは分っています。
「これからはRubyやPythonの時代だ。楽天はRubyを採用した」とか「本当はPerlが一番なんだぜ。はてなはPerlだ。ポール・グレアムが薦めているぞ」とか「プロはJavaだよ」という意見など、私もとおに存じてますし、私こそ、それらのことをよく言ってたのです。
でも、悪いことは言いません。PHPで間違いありません。

しかし、それ以前に、私はWebシステムがあまり好きでないのですよ。
「アメリカの開発者は、ブラウザで動く以外のシステムなど考えたこともないさ」などと言う者(専門雑誌だったりします)もいますが、無視しましょう。こんな連中のせいもあり、何でもかでもWebシステムにしないといけない、Webシステムにすべきだと思っている人が多くいます。
もちろん、インターネット上の、それも、不特定多数のユーザーが使うもの、例えば、Amazonや楽天ではWebシステム以外は考えられません。しかし、Amazonや楽天のシステムを作るのは大変です。私ならやりたくありません。その理由は・・・まあ、10や20、いや、30や40は軽くあります。
いっぺんに書くのも大変ですので、おいおいということで・・・(笑)。