ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.04.10[土] プログラミング言語 ScalaでHelloWorldと駄文

ダンジョンRPGのマッピングツールを書く際にJavaを選択したのには、マルチプラットフォームで動作させる必要があったためです。

GUIを必要としないプログラムであれば、RubyやPythonなどのスクリプト言語も使えただろうし、各プラットフォームごとのバイナリを用意しておくか、ソースを公開しておけば、ユーザーがコンパイルして使うようにしておくこともできるけれど、GUIプログラムで、且つプラットフォームを選ばない(コードを環境ごとに用意しなくていい)ものってなかなかない。
動作させるときに、他の外部ライブラリを一緒にインストールさせる手間も考えると、Javaの動作環境さえあればSwingで作られたGUIが動いてくれる──というところだけでJavaを使う理由になる。

のですが、文法だけで考えたらRubyを使いたいのが本音。Ruby楽。

でもRubyには標準のGUIライブラリがない。Ruby/GTK+もRuby/Tkもあるけど、RubyのGUIは各GUIライブラリがインストールされていないと使うことができない。Ruby標準にTkは入っているが、元々のTcl/Tkがないと使うことができないので、ユーザーに「Tcl/Tkをインストールしてね」って言わないといけなくなる(何か良い方法あるだろうか。それとも自分が何か勘違いしているのだろうか)。

で、そんな折、Scalaというプログラミング言語の本を本屋さんで立ち読みしてたら、かなり面白そうなので触ってみることにする。
このScala、オブジェクト指向+関数型言語らしくって、関数型って、並列プログラミングで出てくる単語だよね? くらいの認識なんですが、新しい言語の考え方を学ぶのにも良い機会かもしれない。JavaVM上で動作する(JRubyのようなもの?)ので、Swingもバリバリ使えるらしい。

しかも、関数型言語。
詳しくはまだ知らないけど、すごくワクワクする響きじゃないか。

この言語、作者は文法をできるだけ簡潔にすることを心がけたらしく、その部分にも惹きつけられる。

XをやるにはAの手段
YをやるにはBの手段

となってるより、

XをやるにはAを~する
YをやるにはAを~する

のほうが好き(意味不明ならごめんなさい)。

最初に触ったプログラミング言語はCだった。GTK+を扱い、gccでコンパイルしてシューティングゲームっぽいのを作った。
次はC++だった。中級演習という授業で触ったけれど、どうにもなんか演算子のオーバーロードが嫌で(なんてわがままな学生だ)、代わりにJavaを触ったら肌に合ったので、採集課題はJavaで提出した。
で、その時にiBook(G3の800MHz)を買ったので、Cocoa APIを触りつつObjective-Cに触れる。
でも、InterfaceBuilderでインターフェースを作成する方法がすごくわかりにくくて、世間ではNextStepの開発環境は「革新的」と言われてるみたいでなんとか頑張ろうとするんだけど、MacOS上で動作するプログラムも素直にJavaで書くことにした。一番問題だったのは、描画フレームワークが他のOSやGUIライブラリと比べてものすごく先進的過ぎたことかもしれない。

そのあと、Cに戻って、Delphiを触る。正直、GUIアプリケーションを作るならDelphiが一番簡単だと思ってる今日この頃。でもObjectPascalはなんかあまり好きじゃない。配列の参照渡しするのがすごく面倒だった記憶がある(簡単な方法あるのだろうか)。始めてデータベースに触ったのもこの頃。「select~ ふーん。なにそれわかんね」って思いながら使い始めた……。
で、そのあとphpとかRubyとかを触る。言語的にはObjective-Cが一番好き。

でScalaに話を戻す。
Synapticパッケージマネージャでパッケージを探したらあったので、そのままscalaをインストール。

$vi HelloWorld.scala

とかでエディタ開いて、

object HelloWorld {
def main(args: Array[String]){
println("hello,world")
}
}


と書く。

$scalac HelloWorld.scala

でコンパイル。Javaと同じように .classファイルが作られる。

$scala HelloWorld

で実行。hello,worldと表示されればOK。

とりあえず、実は仕様に不満のあるダンジョンRPGマッピングツールの出てきた問題点を再設計しなおして、Scalaで実装しなおしてみることにする。今のJavaで書いたコードは、Cプログラミング診断室に送れば危篤状態と判断されそうなので……直さないでそのまま公開してみようかな……。

大学の教授が、1つの言語の習得にかかる時間は100時間と言っていた。

1日10時間すれば10日だな!


もうひとつ面白い本があったので立ち読みした(爆)。その名も

「プログラマーのジレンマ」

平積みされてた。売れてるのだろうか。
手に取らないわけにはいかない題名だ。

「なんでソフトウェア開発は、橋を建造するかのようにスムーズに開発できないんだ!」

みたいなことを言うプログラマーさんたちとその周辺の話みたい。
たとえばこんなエピソード。
「あるアプリケーションの開発で、ウインドウが一時的に点滅してしまうバグが発見され(致命的ではないが、気になる程度)、そのバグの修正にとあるプログラマーさんが3時間を見積もっていました。けれども、6ヶ月経ってもその不具合は解決されておらず、理由を尋ねると、原因はもっと深いところにあって、すぐには解決できそうにない。解決にどの程度の時間がかかるかも算出できないとの結論が」

文章の中でプログラマーは楽観的な人が多いと書かれていた。本当にそうなんだろうか?

少なくとも自分は、どっちかと言うと非観的だ。
それでも、「ウインドウが一時的になぜか点滅してしまう不具合」は3時間で終わるだろうという見積りを自分も出す(と思う)。

それは楽観的な考えから来るものではなくて……

(点滅する原因はわからない。原因を探り始めて10分で原因がわかり、20分でコードを書き直して解決できるかもしれないし、原因を探るのに1日費やすかもしれない。問題が深いところにあれば、コードを書き直すのにより多くの時間がかかるかもしれない。リリースまで何日だろうか。もしここで時間を食いつぶしてしまえば、リリースにも影響する。今自分は最高のアプリケーションを作っている。みんなを幸せにするために仕事をしている。こんな不具合を残したままリリースなどできないが、その問題を解決するための正確な時間は見積もれない。よし、とりあえず、3時間かかりますと言っておこう。プログラマーでない人種から見れば、点滅などすぐに直るだろうと思われているかもしれないし、第一既に時間はないのだ。よって3時間で直さなければならない。原因も取るべき対策もわかってない今結論を下すことはできないが、自分のプライドにかけて──)

「3時間くらいでできると思います」

と言ってしまうのではないだろうか。
本当だったら、原因も対策もわかってない今、時間の見積りは出せない。だから、

「かかる時間? わかるわけねーだろ! ∞だと思っておけ!」

と言いたい。言いたいけど、言えない。だって、リリース日は決まってるんです。
まぁ、実際は、

「あーあそこの処理かな。あれ怪しいよな。大体30分くらいかな」

って原因を特定しやすいものがほとんどかもしれませんが、↑この30分がもしかしたら∞になるかもしれないという……。
世のスーパーハッカーはどんな風に開発されているのでしょうか。
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/65-3bff680a

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。