Back To Main

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┃ ◆Javaで珈琲ブレイク vol.020 12/09/2002 ◆
┃……………………………………………………………………………………………
┃ [不定期] まぐまぐ ID=0000088576 Melma! ID=m00061296
┃……………………………………………………………………………………………
┃ 今回からご覧になる方は、バックナンバーご活用下さい
┃ http://javacafebreak.tripod.com
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

◆目次◆

■Eclipseとは?
■Eclipse、日本語化パッケージのダウンロード
■Banksystemプロジェクトの作成
■BankAccount.java (1.0821)
■ちょっと珈琲ブレイク

皆さんこんにちは。

Mr.Hackです。

師走突入ですね。皆さんいかがお過ごしですか?僕の方は今週がんばれば、後は冬休み突入できそうです。今日は、来週から再開する『Javaで珈琲ブレイク』のウォーミングアップをかねて、今とてもホットな、Eclipseを使ってみましょう。
EclipseのようなIDE (Integrated Development Environment)に慣れますと、もう、Windows付属のNote P*dなんかでは、プログラムする気が無くなります。CPadも?いえいえ、これは、いまだすばらしい、エディタですよ。以前も述べたと思いますが、上手に使い分けてくださいね。ちょこっとプログラミング、javaファイル閲覧、ちょこっとコンパイルという使い方には、軽くて使いやすいエディタです。

今回からJavaで珈琲ブレイクを再開するに当たって、Eclipseというビジネスでも使えるIDEで、もう少し高度なエディタの使い方を皆さんに少しずつ紹介していこうと思います。

それでは、皆さんがんばっていきますよ。ウォーミングアップはいいですか。

今回は、

1.Eclipseのダウンロード
2.Eclipseのインストール
3.Eclipseの日本語化
4.Eclipseで、BankAccount.javaの作成

という順序でお話いたします。


■Eclipseとは?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Eclipseとは、なんぞや?という方に、簡単に説明致しますと、狭義では、JavaのIDEを提供してくれるツール、ということができます。では、IDE(Integrated Development Environment)とは、何なんでしょう?これは、ソフトウェア作成に当たって、総合開発環境を提供してくれるツールです。例えば、Javaのような言語の編集機能、プロジェクト単位での作成、コンパイル実行、デバッグ実行、など、総合的にプログラミングをサポートしてくれる環境(ツール)をいいます。

Eclipseは、実は、Javaだけのツールではないんです。ですから、先ほどは、狭義と述べましたが、Eclipseプロジェクトは、C/C++, C#というような他の言語でのIDEを提供したり、または、プログラミング言語とは全く関係無いような、ソフトウェア(例えば電子メールソフト)をも含め、総合的な環境を提供するというのが、広義の意味合いだと思います。それだけ、Eclipse Platformというのは、意味が広いのです。皆さんは、その全ての恩恵を預かるには、時間がかかるかもしれませんが、Javaに限ってEclipseを使用するだけでも、十分な恩恵を受けることができると思います。

でも、なんで、わざわざ、そんなIDEツールを使わないといけないの?JBuilderのEnterprise版は、40万近くもするのに。Personal版でさえ、覚えることもたくさんあって、どうやって使えばいいかもわからないし。

それは、プロジェクトチームの中で、ソフトウェア開発を迅速かつ予定通りに出荷できるように、また、バグを最小限に抑えられるように、するためです。企業でソフトウェア関係の職に就きたい方は、必須です(日本の場合はどうかわかりませんが)。

僕が受講しているクラス講義であつかった、あるHigh Techカンパニーの上級ソフトウェアディベロッパー兼人事担当の方のコメントをご紹介致しますと、

"My frist question to a potential new hire at an interview is "What editor would you like best for writing software?" If their answer is "Notepad" or "Wordpad", then the interview is efficiently over right then".

(新人採用面接で私がする最初の質問は、どのエディタが、ソフトウェア作成に当たって、最高だと思いますか?、です。もし、ノートパッド、ワードパットなる回答をすれば、その場で、手際よく面接は終わりです。)

これは、ある意味、米国でのソフトウェアディベロッパーのプログラマに求められている像ではないかなと思います。何十万桁のソースコード、何百クラスからなるプロジェクトをすべて、Notepadで管理するのは、不可能に近いです。もしできるとすれば、それは、ある意味、神業、神風的なプログラマなのかもしれません。最新技術に頼らず、職人的な、経験を元にした熟練された、間違い一つ無く、100%完成されたコードをかけるプログラマなら、そんなIDEは必要ないでしょうね。しかしながら、僕のような普通一般のプログラマには、最新技術(ソフトウェア工学)を駆使したIDEを効率よく使う方が、賢明のような気が致します。

前置きが長くなりましたが、早速Eclipseをダウンロードしてみましょう。


■Eclipse、日本語化パッケージのダウンロード
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Eclipse (2.0.2) のダウンロードは、こちらからできます。

http://download.eclipse.org/downloads/drops/R-2.0.2-200211071448/eclipse-SDK-2.0.2-win32.zip

現在の最新版は、2.0.2です。そのほか、M3(マイルストーン3)などのバージョンがありますが、安定したバージョンではないので、メルマガでは、2.0.2をつかっていこうと思います。

マックをお使いの方は、残念ながら、安定バージョンを利用できないようです。ただ、Mac OS Xをお使いの方は、M3バージョンが利用できるようです。こちらから、eclipse-SDK-M3-macosx-carbon.zipをダウンロードして試してみてください。

http://download.eclipse.org/downloads/drops/S-M3-200211151436/index.php

Eclipseの日本語化には、Eclipse SDK Translationパッケージを使います。

http://download.eclipse.org/downloads/drops/R-2.0.1-200208291828/NLS-SDK-2.0.1-Translations.zip

これの、バージンは、2.0.1となっていますが、Eclipse2.0.2で使用しても今のところは特に問題はありません。

ダウンロード致しましたら、Eclipse2.0.2とEclipse SDK Translationを解凍します。(zipの解凍の仕方がわからない方は、http://www.google.co.jpで『zip』、『解凍』、『フリー』等の入力をして、解凍ソフトを探してください。それでもわからない方は、僕宛にメールください。)

eclipse-SDK-2.0.2-win32.zipを解凍しますと、『eclipse』というフォルダができますので、そのフォルダを丸ごと、任意のフォルダにコピーします(例えば、C:\javacafebreak\以下)。eclipseフォルダをダブルクリックして中を見てみますと、plugins、featuresというフォルダがあると思います。そのフォルダをEclipse SDKTranlationパッケージで提供されているもので上書きすると、Eclipseが日本語になります。

日本語化パッケージ、NLS-SDK-2.0.1-Translations.zipを解凍すると、先ほどと同じように『eclipse』ができます。その下位のフォルダを全て(plugins、features)を先ほどのフォルダ(C:\javacafebreak\eclipse)に上書きします。

最後に、eclipse.exeをディスクトップ等にショートカットアイコンを作っておくと次回からの起動に便利だと思います。

これで準備が整いました。eclipse.exeまたは、そのショートカットをダブルクリック(または、シングルクリック)してください。

Eclipseが日本語のメニューで立ち上がりましたか?早速Eclipseを使ってみましょう。vol.018にあるBankAccount.javaと、BankUserInterface(次号収録予定)を使います。


■Banksystemプロジェクトの作成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Eclipseでは、必ず、プロジェクトを定義・作成しなければなりません。たとえ、HelloWorld.javaのような単体クラスを作成する場合でも、プロジェクトを定義します。次の手順に従ってBank Systemプロジェクトを作成します。

┌──────────────────────────────────┐
1.『ファイル』メニュー → 『新規』→ 『プロジェクト』を選択
2.『選択』ウィンドウで、左側は『Java』、右側は、『Javaプロジェクト』が選択されているのを確認後、『次へ』を選択
3.『Javaプロジェクト』のウィンドウで、『デフォルトの使用』のチェックをはずし、『ブラウザ』ボタンをクリックし、任意のディレクトリを選択する(例えば、C:\javacafebreak\banksystem)。任意のディレクトリ選択後、『プロジェクト名』のところにプロジェクト名を入力する(例えば、Bank System)。『次へ』を選択。
4.ポップアップウィンドウで『はい』を選択し、『Javaの設定』ウィンドウで、『ビルド出力フォルダ』に『/build/classes』を追加する(プロジェクト名が、Bank Systemなら、Bank System/build/classesとなる)。『終了』を選択し、終了。
└──────────────────────────────────┘

どうです?左の『パッケージ・エクスプローラ』pane(ペイン)にBank Systemと表示されましたか?これが、プロジェクトルートになります。そこには、デフォルトで、JRE_LIBが表示されているかと思います。Java SDKパッケージですね。

ためしに、JRE_LIBの左、『+』マークをクリックしてみましょう。SDKパッケージが展開されました。その中から、java.langパッケージを探してみましょう。そのパッケージの中のString.classファイルをダブルクリックしてみてください。

Stringクラスのソースコードが開きましたか?もっと簡単にこのStringクラスのソースコードを見ることができます。String.classのタグをいったん閉じた後(タグ右の『x』をクリック)、

Ctrl + Shift + T (CtrlとShiftキーを押しながらTを押す)

を押すと、『型を開く』というウィンドウが開きます、そこの『型を選択してください』というところに、『string』と入力するとリアルタイムに、その文字列にあったクラス名がリストされます。その中から、Stringを選択し、『OK』を押すと簡単に、Stringクラスのソースコードを見ることができます。

ちょっとだけ、IDEのパワーを実感できましたか?以前は、わざわざ、SDKをインストールしたフォルダ行き、rt.jarファイルを解凍し、クラスファイルを探しました。それが、Ctrl + Shift + Tで簡単に見つけることができます。

では、今までの成果である、vol.18のBankAccount.java (1.0821)をコピー&ペーストしてみましょう。

┌──────────────────────────────────┐
1.『ファイル』→『新規作成』→『クラス』を選択
2.『Javaクラス』のウィンドウの『名前』のフィールドに、『BankAccount.java』と入力し、他は変更せずに、『終了』を選択
3.『パッケージ・エクスプローラ』ペインの中の、『デフォルト・パッケージ』以下に、BankAccount.javaが作成されたのを確認後(BankAccount.javaのタグが選択されているのを確認)、BankAccount.java上のデフォルトで作成されたコードを全て削除後、下記の■BankAccount.java (1.0821)をコピーする(vol.18と同じコード)。
└──────────────────────────────────┘

コピーしましたら、Ctrl + Sで保存してくださいね。そうすると、右側に『アウトライン』ペイン(ウィンドウ)に、BankAccountクラスのメンバ(フィールド・メソッド)が表示されます(『アウトライン』ペインが表示されていない場合は、『ウインドウ』→『ビューの表示』→『アウトライン』を選択)。どうです?これで、どんなに長いコードでも、メソッド名等をクリックすることで、素早くソースコード上のメソッドにジャンプすることができます。これもIDEのパワーです。

これだけの機能だけでも、もう、Notepadには戻れませんね。

というわけで、来週は、引き続きEclipseの機能を見て、平行して、BankUserInterfaceを修正していきます。

それでは、皆さん、またあいましょう。

■BankAccount.java (1.0821)
━━━━━━━━━━━━━━ ここから ━━━━━━━━━━━━━━━━━
/**
* バンク預金口座クラス。顧客の口座の出し入れ、残高
* 照会をおこなう(通貨単位:円)。預入引き落とし時、
* Precondition(事前条件)をチェックし、条件に合わない場合は、
* 例外を発生させる。accountId、passwordをセットするコンストラク
* タ(預金をゼロとする)、accountId、password、預金額をセット
* できるコンストラクタがある。また、一度に引き出せる上限は
* 2万円、一度に預金できる上限は10万円としてある。
*
* 例:
*
* <PRE>
* BankAccount account = new BankAccount("MrHack", "mRha9", 2000);
* try {
* account.deposit(1000);
* account.withdraw(500);
* }
* catch (Exception e) {
* Sytem.out.println("例外が発生しました:" + e.getMessage());
* }
* double currentBalance = account.getBalance();
* </PRE>
*
* アカウントIDが"MrHack"、パスワードが"mRha9"、2000円で口座を開設し、1000円を預金
* 後、600円を引き出して、現在の残高400円を<CODE>currentBalance</CODE>に保持する。
*
* @version 1.0821
* @since 1.0511
* @author Mr.Hack
* @see BankAccountTest テストクラス:BankAccountTest
*/
public class BankAccount {

/**
* 口座の残高
*/
private double balance;
/**
* 一度に預け入れる上限額
*/
private final double MAX_DEPOSIT_AMOUNT = 100000.0;
/**
* 一度に引き落とせる上限額
*/
private final double MAX_WITHDRAW_AMOUNT = 20000.0;
/**
* アカウントID
*
* @since 1.0731
*/
private String accountId;
/**
* パスワード
*
* @since 1.0731
*/
private String password;

/**
* アカウントIDとパスワード、残高をセットするコンストラクタ。初期化時(新しい口座作成時)、
* <code>amount</code>は残高としてセットする。
*
* @since 1.0731
* @param accountId アカウントID
* @param password パスワード
* @param amount 口座に預け入れる金額(預金)
* @exception IllegalArgumentException
* <code>accountId</code>が不適切な文字列の場合、
* <code>password</code>が不適切な文字列の場合、
* <code>amount</code>がゼロかマイナスの場合、
* 定められた一度に預金できる金額を上回った場合、例外発生。
*/
public BankAccount(String accountId, String password, double amount) {
setAccountId(accountId); //不適切な文字列の時IllegalArgumentExceptoinをスロー
setPassword(password); //不適切な文字列の時IllegalArgumentExceptoinをスロー
if (amount < 0) {
throw new IllegalArgumentException("入力した金額はマイナスです。");
}
if (amount > MAX_DEPOSIT_AMOUNT) {
throw new IllegalArgumentException("一度に入金できる額の上限は" + MAX_DEPOSIT_AMOUNT + "です。");
}
this.balance = amount;
}


/**
* アカウントIDとパスワをセットするコンストラクタ
*
* @since 1.0731
* @param accountId アカウントID
* @param password パスワード
* @param amount 口座に預け入れる金額(預金)
* @exception IllegalArgumentException
* <code>accountId</code>が不適切な文字列の場合、
* <code>password</code>が不適切な文字列の場合、例外発生。
*/
public BankAccount(String accountId, String password) {
this(accountId, password, 0);
}

/**
* 残高をゼロにセットするデフォルトコンストラクタ。初期化時、
* 残高をゼロにセットする。
*
* @deprecated accountIdとpassword設置により、version 1.0731から{@link #BankAccount}を推奨。
* @see #BankAccount
*/
public BankAccount() {
this.balance = 0;
}

/**
* <code>amount</code>分を残高としてセットするコンストラクタ。初期化時(新しい口座作成時)、
* 預金額を残高としてセットする。
*
* @deprecated accountIdとpassword設置により、version 1.0731から{@link #BankAccount}を推奨。
* @see #BankAccount
* @param amount 口座に預け入れる金額(預金)
* @exception IllegalArgumentException <code>amount</code>がゼロかマイナスの場合、
* 定められた一度に預金できる金額を上回った場合
*/
public BankAccount(double amount) {
if (amount < 0) {
throw new IllegalArgumentException("入力した金額はマイナスです。");
}
if (amount > MAX_DEPOSIT_AMOUNT) {
throw new IllegalArgumentException("一度に入金できる額の上限は" + MAX_DEPOSIT_AMOUNT + "です。");
}
this.balance = amount;
}

/**
* <code>amount</code>分を預金として口座に預ける。<code>amount</code>がゼロかマイナスの時、
* 一度に預ける上限金額を上回った時、例外を発生させる。
*
* @param amount 口座に預け入れる金額(預金)
* @exception IllegalArgumentException <code>amount</code>がゼロかマイナスの場合、
* 定められた一度に預金できる金額を上回った場合
*/
public void deposit(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("入力した金額は0かマイナスです。");
}
if (amount > MAX_DEPOSIT_AMOUNT) {
throw new IllegalArgumentException("一度に入金できる額の上限は" + MAX_DEPOSIT_AMOUNT + "です。");
}
this.balance += amount;
}

/**
* <code>amount</code>分の金額を引き出す。<code>amount</code>がゼロかマイナスの時、
* 引き落とし金額が残高を上回った時、
* あるいは、一度に引き出せる上限金額を上回った時、例外発生。
*
* @param amount 引き出す金額
* @exception IllegalArgumentException <code>amount</code>がゼロかマイナスの場合、
* 引き出し額が残高を上回った場合、
* または、一度に引き出せる金額を上回った場合
*/
public void withdraw(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("入力した金額は0かマイナスです。");
}
if (balance < amount) {
throw new IllegalArgumentException("残高を超えています。");
}
if (amount > MAX_WITHDRAW_AMOUNT) {
throw new IllegalArgumentException("一度に引き落としできる額の上限は" +
MAX_WITHDRAW_AMOUNT + "です。");
}
this.balance -= amount;
}

/**
* 現在の残高を戻り値として返す。
*
* @since 1.0518
* @return balance 口座にある現在の残高
*/
public double getBalance() {
return this.balance;
}


/**
* 現在の残高を戻り値として返す。
*
* @deprecated メソッド名が不適切なため、Version 1.0518から{@link #getBalance}に入れ替わり。
* @see #getBalance
* @return balance 口座にある現在の残高
*/
public double getBlance() {
return this.balance;
}

/**
* アカウントIDをセットする。アカウントIDが適切ではない場合は例外が発生する。
* 例外が発生する事前条件は{@link #checkAccountId}参照。
*
* @since 1.0731
* @see #checkAccountId
* @param accountId アカウントIDの文字列
* @exception IllegalArguementException アカウントIDの事前条件を満たしていない場合
*/
public void setAccountId(String accountId) {
if (!BankAccount.checkAccountId(accountId)) {
throw new IllegalArgumentException("アカウントIDが正しくありません。");
}
this.accountId = accountId;
}


/**
* アカウントIDを得る。
*
* @since 1.0731
* @return accountId アカウントIDの文字列
*/
public String getAccountId() {
return this.accountId;
}

/**
* パスワードをセットする。パスワードが適切ではない場合は例外が発生する。
* 例外が発生する事前条件は{@link #checkPassword}参照。
*
* @since 1.0731
* @see #checkPassword
* @param password パスワードの文字列
* @exception IllegalArguementException パスワードの事前条件を満たしていない場合
*/
public void setPassword(String password) {
if (!BankAccount.checkPassword(password)) {
throw new IllegalArgumentException("パスワードが正しくありません。");
}
this.password = password;
}

/**
* 文字列accountIdが適切な値かどうかをチェックする。
* <PRE>
* 1.nullでもなく、3文字未満ではない
* 2.小文字、または、大文字である
*
* 上記の条件を満たした場合に、<code>true</code>を返す
* </PRE>
*
* @since 1.0731
* @param accountId アカウントIDの文字列
* @return <code>true</code> 事前条件を満たした場合
* <code>false</code> それ以外の場合
*/
public static boolean checkAccountId(String accountId) {
/**
* accountIdがnullか、3文字未満の場合
*/
if (accountId == null || accountId.length() < 3) {
return false;
}
char character;
/**
* 小文字ではなく、かつ、大文字ではない場合
* = NOT 'a' <= character <= 'z', AND NOT 'A' <= character <= 'Z'
* = 'a' > character, OR character > 'z', AND
* 'A' > character, OR character > 'z'
*/
for (int i = 0; i < accountId.length(); i++) {
character = accountId.charAt(i);
if ((character < 'a' || character > 'z') &&
(character < 'A' || character > 'Z')) {
return false;
}
}
/**
* 事前条件を全て満たした場合、return true
*/
return true;
}


/**
* 文字列passwordが適切な値かどうかをチェックする。
* <PRE>
* 1.nullでもなく、5文字未満ではない
* 2.大文字、小文字、または、数字である
* 3.大文字、小文字、数字それぞれ少なくとも一字ずつ含む
*
* 上記の条件を満たした場合に、<code>true</code>を返す
* </PRE>
*
* @since 1.0731
* @param password パスワードの文字列
* @return <code>true</code> 事前条件を満たした場合
* <code>false</code> それ以外の場合
*/
public static boolean checkPassword(String password) {
/**
* passwordがnullか、5文字未満の場合
*/
if (password == null || password.length() < 5) {
return false;
}
/**
* 小文字ではなく、大文字でもなく、かつ、数字でもない場合
*/
char character;
for (int i = 0; i < password.length(); i++) {
character = password.charAt(i);
if ((character < 'a' || character > 'z') &&
(character < 'A' || character > 'Z') &&
(character < '0' || character > '9')) {
return false;
}
}
/**
* 大文字を含まないか、小文字を含まないか、数字を含まないかのいずれかの場合
*/
if (!hasUpperLetter(password) || !hasLowerLetter(password) || !hasNumber(password)) {
return false;
}
/**
* 上記の条件を全てクリアーした場合
*/
return true;
}


/**
* アルファベットの大文字が少なくとも一文字含まれているかチェックする。
*
* @since 1.0731
* @param stringValue チェックする文字列
* @return <code>true</code> 大文字が一文字でも含まれていた場合
* <code>false</code> それ以外の場合
*/
private static boolean hasUpperLetter(String stringValue) {
if (stringValue == null || stringValue.length() == 0) {
return false;
}
char character;
for (int i = 0; i < stringValue.length(); i++) {
character = stringValue.charAt(i);
if (character >= 'A' && character <= 'Z') {
return true;
}
}
return false;
}


/**
* アルファベットの小文字が少なくとも一文字含まれているかチェックする。
*
* @since 1.0731
* @param stringValue チェックする文字列
* @return <code>true</code> 小文字が一文字でも含まれていた場合
* <code>false</code> それ以外の場合
*/
private static boolean hasLowerLetter(String stringValue) {
if (stringValue == null || stringValue.length() == 0) {
return false;
}
char character;
for (int i = 0; i < stringValue.length(); i++) {
character = stringValue.charAt(i);
if (character >= 'a' && character <= 'z') {
return true;
}
}
return false;
}


/**
* 数字が少なくとも一文字含まれているかチェックする。
*
* @since 1.0731
* @param stringValue チェックする文字列
* @return <code>true</code> 数字が一文字でも含まれていた場合
* <code>false</code> それ以外の場合
*/
private static boolean hasNumber(String stringValue) {
if (stringValue == null || stringValue.length() == 0) {
return false;
}
char character;
for (int i = 0; i < stringValue.length(); i++) {
character = stringValue.charAt(i);
if (character >= '0' && character <= '9') {
return true;
}
}
return false;
}

/**
* ユーザーがログイン時入力したパスワード(<ccde>password</code>)と
* 口座のパスワード(<code>userPassword</code>)を比較して一致
* しているかどうかを確かめる。
*
* @since 1.0731
* @param userPassword ユーザーがログイン時に入力したパスワード
* @return <code>true</code> 口座のパスワードと一致した場合
* <code>false</code> それ以外の場合
*/
public boolean equalsToPassword(String userPassword) {
return this.password.equals(userPassword);
}
}
━━━━━━━━━━━━━━ ここまで ━━━━━━━━━━━━━━━━━


■ちょっと珈琲ブレイク
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

先日、ひょんなことから、通訳なるものを引き受けてしまいました。というのも、日本から、Technical Studentsがくるというのです。本来なら、僕の本業は通訳でもないので、I'm sorryと断ってしまうのですが、Technical Schoolという言葉が気になり、教授の依頼もあり、引き受けてしまいました。当日は、プログラミングとはほど遠いインターネットビジネスの発展というテーマだったわけですが、僕自身は、むしろTechnical Studentsの皆さんのことが気になってしょうがありませんでした。というのも、これからの日本のITとりわけ、ソフトウェアの分野で活躍する学生ならなおさら僕が興味わかない訳がありません。

僕自身、日本の大学は法学部法律学科卒という、まーったくソフトウェアの分野と関係のない学科を卒業したので、一からプログラムを始めるという壁を痛いほど経験しました。しかしながら、彼らは、幸にしろ不幸にしろ、二十歳という若さですでにプログラミングを経験しているのです。そのうち、ある方は、プログラミングやソフトウェア業界とは全く関係のない、分野で活躍するかもしれません。または、プログラミングの楽しさを学び、その技術を余すところ無く発揮し、日本のソフトウェア業界を担っていく人材になっていく人かもしれません。

僕としては、後者になってもらいたいなー、とおもって、コラムで取り上げました。

以前も、メルマガのコラムで、全くプログラミングをしたことないひとが、プログラマとして、会社に就職していく現状を扱いました。これの是非は、おいておくにいたしましても、会社にとっても、日本の社会にとっても、ある意味、資源の無駄づかいがあるように思えてなりません。ソフトウェア会社は、一から文学部・法学部卒の人を教育するのです。将来の可能性を信じて。もちろん肌に合わない人もいるでしょう。ここアメリカのコンピュータサイエンス学科でも何人もメジャー変更を余儀なくされている人がいます。それだけ、人に会うあわないがあるのです。とてもIT業界・ソフトウェア業界なら『つぶしがきく』学問・キャリアではないのです。

すでに、そんなプログラミングの壁を少なからず経験されているTechnical Studentsの皆さんには、是非がんばってもらいたいな、と思いました。日本はやーっと、コンピューターサイエンス学科を大学レベルで設置しました。もちろん、情報工学や、電気工学でコンピューター学科なるものは、いままで、ありましたが、とりわけソフトウェア工学に力を入れている学科は、未だ数少ないようにに思います。ここが、日米の決定的差だと思います。大学の講義では、20人で一つのアプリケーションを作る方法を実習を交え、平然と教えています。その中には、Unit Testing、eXtreme Programming、quality assurance等の考え方・方法論をプログラミングを通して勉強します。こんな学生が、毎年たくさん卒業していくのです。皆さんも何となく、何でMicrosoftが、オラクルが、sun microsystemsがアメリカ?というのも、こういう現状をふまえて考えてみるとうなずけるところがあるかもしれません。

今回のTechnical schoolの学生さんや、もちろんいままで購読して頂いてる読者の方には、少なからず、こういう現状を考えて頂いた上で、さらなるプログラミングの技術を磨いて頂けたいいなと思っています。明日の日本のソフトウェア技術を担うのは読者である、あなた、だと信じております。

せっかくですので、もう一つ。読者の方には、まだ二十歳前後または、高校生の方もいらっしゃるかもしれません。英語が苦手な方?と質問したら、結構いらっしゃるかもしれませんね。僕も高校時代英語が大の苦手で、海外留学なんて考えても見ませんでした。しかしながら、世界の共通語は英語です。ソフトウェアの共通語も英語です。そのため、英語ができれば、インターネットタイムといわれている業界でさえ、3ヶ月から6ヶ月早く情報を入手できます。もしかしたら、それ以上かもしれません。是非がんばって習得してみてください。プログラミングができるあなたは、英語もきっとできるはずです。英語はプログラミングほど文法が複雑ではないですからね。

大学でソフトウェア工学が学びたい方は、是非海外に出てみることをおすすめします。僕はソフトウェア工学が、コンピューターサイエンス学科で一番ホットで、面白い科目ではないかな、と個人的に思います。そんな科目を学べる大学がアメリカのような海外にはたくさんあります。海外に出てしまえば、高校ほどの英語の知識を持ってる方なら、すぐに生活レベルの会話はできるようになると思います。その上で、あなたのしたい学問を学べるのであれば、願ったり叶ったりですね。もし、留学を考えていらっしゃる方がいらっしゃれば、僕が何かしら相談に乗れるかもしれませんので、連絡いただけると幸いです。

というわけで、今回は、これから日本のソフトウェア業界を担っていくであろう人を対象にかきました。日本のソフトウェア業界を担っていく方は、何も高校生・専門学校生・大学生だけではありません。すでにソフトウェア業界にいる方、いなくてもプログラミングに興味のある社会人から主婦をされている方まで、全ての人が当てはまると思います。このマガジンを通して少しでも、プログラミングの楽しさ、つらさ、そして、明日の日本のソフトウェアの発展を考える場になればいいなと思っています。

Mr.Hack


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆Javaで珈琲ブレイク◆
───────────────────────────────────
皆様からの激励・批判のメールをお待ちしております。
【発行者】 Mr.Hack - javacafebreak@hotmail.com
【掲示板】 https://javacafebreak.tripod.com/cafe_entrance.html
※質問は上記の掲示板からどうぞ。
【サイト】 http://javacafebreak.tripod.com
【発行数】 まぐまぐ[1166] Melma[197]
【解除】http://javacafebreak.tripod.com
※解除は上記のサイトからいつでもできます。
────────────────────────────────────
(c)2002 MR.HACK ALL RIGHTS RESERVED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

© 2002 MR.HACK ALL RIGHTS RESERVED