昨年、開発したシステムが本稼働に入った最近になって、ここを直してくれとか
こっちを直してくれと言う修正依頼が来ます。
本来、修正を行っている段階では、本稼働とは、言わないと思うのです。
お客さんが本格的に使ってからでないと、バグや不具合が出てこないというのは
どうなのでしょうね。
たとえば、このような状況になってから、この機能は、いらないとか、
もっとこんな機能を付けてくれ、とかいう話になったら、
開発側としては、大事です。
また、開発フェーズに入らなければならない。
まぁ、アジャイルでは、ウォーターフォールではないから、
そういうのを許容するのでしょうかね。。。。
そう考えるとアジャイル的には、このような状況は、しょうがない。
許容範囲。なのかもしれません。
定年まじかのプログラマー日記。
アジャイルソフトウェア開発プロセスに傾倒している定年まじか?いや、もう定年?のプログラマが日々、仕事をしていて感じる日本固有のソフトウェア開発プロジェクトの憤り(いきどおり)などについて書いているブログです。
2011年4月6日水曜日
2011年3月24日木曜日
最近 Ruby の試験勉強をしています。
今度、Ruby の認定試験のシルバーを受けようとしています。
その練習。
きれいに書けた気がするので公開します。
このコードのポイントは、階乗の計算をするメソッドと
階乗の式を出力するメソッドを分けたところです。
私も初めは、両方の機能を一つのメソッド内に収める設計だった
のですが、それを分割することでプログラムが読みやすく
なっているのでは、ないかと思います。
読みやすいプログラムを記述するというのは、プログラマの
腕の見せ所です。
皆さんも読みやすいプログラムの記述を心がけてください。
-------------------------------------------------------------
出力は、こんな感じです。
1 = 1
Please hit Enter key ! if you want continue. if not type 'exit'
2 * 1 = 2
Please hit Enter key ! if you want continue. if not type 'exit'
3 * 2 * 1 = 6
Please hit Enter key ! if you want continue. if not type 'exit'
4 * 3 * 2 * 1 = 24
Please hit Enter key ! if you want continue. if not type 'exit'
5 * 4 * 3 * 2 * 1 = 120
Please hit Enter key ! if you want continue. if not type 'exit'
6 * 5 * 4 * 3 * 2 * 1 = 720
Please hit Enter key ! if you want continue. if not type 'exit'
7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
Please hit Enter key ! if you want continue. if not type 'exit'
8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320
Please hit Enter key ! if you want continue. if not type 'exit'
9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
Please hit Enter key ! if you want continue. if not type 'exit'
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 3628800
Please hit Enter key ! if you want continue. if not type 'exit'
11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 39916800
Please hit Enter key ! if you want continue. if not type 'exit'
12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 479001600
Please hit Enter key ! if you want continue. if not type 'exit'
13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 6227020800
Please hit Enter key ! if you want continue. if not type 'exit'
14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 87178291200
Please hit Enter key ! if you want continue. if not type 'exit'
15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 1307674368000
Please hit Enter key ! if you want continue. if not type 'exit'
16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 20922789888000
Please hit Enter key ! if you want continue. if not type 'exit'
17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 355687428096000
Please hit Enter key ! if you want continue. if not type 'exit'
18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 6402373705728000
Please hit Enter key ! if you want continue. if not type 'exit'
19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 121645100408832000
Please hit Enter key ! if you want continue. if not type 'exit'
20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 2432902008176640000
Please hit Enter key ! if you want continue. if not type 'exit'
21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 51090942171709440000
Please hit Enter key ! if you want continue. if not type 'exit'
22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 1124000727777607680000
Please hit Enter key ! if you want continue. if not type 'exit'
23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 25852016738884976640000
Please hit Enter key ! if you want continue. if not type 'exit'
24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 620448401733239439360000
Please hit Enter key ! if you want continue. if not type 'exit'
25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 15511210043330985984000000
Please hit Enter key ! if you want continue. if not type 'exit'
26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 403291461126605635584000000
Please hit Enter key ! if you want continue. if not type 'exit'
27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 10888869450418352160768000000
Please hit Enter key ! if you want continue. if not type 'exit'
28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 304888344611713860501504000000
Please hit Enter key ! if you want continue. if not type 'exit'
29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 8841761993739701954543616000000
Please hit Enter key ! if you want continue. if not type 'exit'
30 * 29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 265252859812191058636308480000000
Please hit Enter key ! if you want continue. if not type 'exit'
31 * 30 * 29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 8222838654177922817725562880000000
Please hit Enter key ! if you want continue. if not type 'exit'
exit
ここまでやって疑問。。。。階乗って、×でいいんだっけ?
それとこのプログラムが間違っているかどうかの問題。
私の立場は、
・読みにくいがバグがないプログラム
と
・バグはあるかもしれないが、読みやすいプログラム
では、
後者を支持します。
なので、このプログラムにバグがないことは、保証しません。
それは、保証できないわけではありません。
私は、プログラムにバグがないことを保証するプロセスは、
計画的なテストによって解決すると考えています。
今回は、保証しない方針なので、計画的なテストとか、
そういう堅苦しいことは、していません。
このソースコードは、プログラミングという仕事が好きな人と
楽しみを共有するためのものです。
なのでバグがあったら恥ずかしいですが、
恥ずかしいからと言って、公開しないという選択肢は、
選びません。
私のブログは、プログラミングを仕事としているすべての人が
楽しく仕事をするための活動の一環です。
以上!
その練習。
きれいに書けた気がするので公開します。
このコードのポイントは、階乗の計算をするメソッドと
階乗の式を出力するメソッドを分けたところです。
私も初めは、両方の機能を一つのメソッド内に収める設計だった
のですが、それを分割することでプログラムが読みやすく
なっているのでは、ないかと思います。
読みやすいプログラムを記述するというのは、プログラマの
腕の見せ所です。
皆さんも読みやすいプログラムの記述を心がけてください。
if __FILE__ == $0
# ------------------------------------------
# exit が入力されるまで i の階乗を出力し続ける
# ------------------------------------------
# ******************************************
# calc_fractal
# ***
def calc_fractal(i)
if i == 1 then
return 1
else
return i * calc_fractal(i - 1)
end
end
# ******************************************
# fractal_expression
# ***
def fractal_expression(i)
if i == 1 then
return "1"
else
expression = i.to_s
return expression << " * "
+ fractal_expression(i - 1)
end
end
# //////////////////////////////////////////
# Main Process
# ///
i = 1
begin
puts fractal_expression(i) + " = "
+ calc_fractal(i).to_s
i += 1
puts "Please hit Enter key ! "
+ "if you want continue. "
+ "if not type 'exit'"
line = STDIN.gets.chop
end while line != "exit"
# //////////////////////////////////////////
end
-------------------------------------------------------------
出力は、こんな感じです。
1 = 1
Please hit Enter key ! if you want continue. if not type 'exit'
2 * 1 = 2
Please hit Enter key ! if you want continue. if not type 'exit'
3 * 2 * 1 = 6
Please hit Enter key ! if you want continue. if not type 'exit'
4 * 3 * 2 * 1 = 24
Please hit Enter key ! if you want continue. if not type 'exit'
5 * 4 * 3 * 2 * 1 = 120
Please hit Enter key ! if you want continue. if not type 'exit'
6 * 5 * 4 * 3 * 2 * 1 = 720
Please hit Enter key ! if you want continue. if not type 'exit'
7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
Please hit Enter key ! if you want continue. if not type 'exit'
8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320
Please hit Enter key ! if you want continue. if not type 'exit'
9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
Please hit Enter key ! if you want continue. if not type 'exit'
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 3628800
Please hit Enter key ! if you want continue. if not type 'exit'
11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 39916800
Please hit Enter key ! if you want continue. if not type 'exit'
12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 479001600
Please hit Enter key ! if you want continue. if not type 'exit'
13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 6227020800
Please hit Enter key ! if you want continue. if not type 'exit'
14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 87178291200
Please hit Enter key ! if you want continue. if not type 'exit'
15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 1307674368000
Please hit Enter key ! if you want continue. if not type 'exit'
16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 20922789888000
Please hit Enter key ! if you want continue. if not type 'exit'
17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 355687428096000
Please hit Enter key ! if you want continue. if not type 'exit'
18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 6402373705728000
Please hit Enter key ! if you want continue. if not type 'exit'
19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 121645100408832000
Please hit Enter key ! if you want continue. if not type 'exit'
20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 2432902008176640000
Please hit Enter key ! if you want continue. if not type 'exit'
21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 51090942171709440000
Please hit Enter key ! if you want continue. if not type 'exit'
22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 1124000727777607680000
Please hit Enter key ! if you want continue. if not type 'exit'
23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 25852016738884976640000
Please hit Enter key ! if you want continue. if not type 'exit'
24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 620448401733239439360000
Please hit Enter key ! if you want continue. if not type 'exit'
25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 15511210043330985984000000
Please hit Enter key ! if you want continue. if not type 'exit'
26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 403291461126605635584000000
Please hit Enter key ! if you want continue. if not type 'exit'
27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 10888869450418352160768000000
Please hit Enter key ! if you want continue. if not type 'exit'
28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 304888344611713860501504000000
Please hit Enter key ! if you want continue. if not type 'exit'
29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 8841761993739701954543616000000
Please hit Enter key ! if you want continue. if not type 'exit'
30 * 29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 265252859812191058636308480000000
Please hit Enter key ! if you want continue. if not type 'exit'
31 * 30 * 29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 8222838654177922817725562880000000
Please hit Enter key ! if you want continue. if not type 'exit'
exit
ここまでやって疑問。。。。階乗って、×でいいんだっけ?
それとこのプログラムが間違っているかどうかの問題。
私の立場は、
・読みにくいがバグがないプログラム
と
・バグはあるかもしれないが、読みやすいプログラム
では、
後者を支持します。
なので、このプログラムにバグがないことは、保証しません。
それは、保証できないわけではありません。
私は、プログラムにバグがないことを保証するプロセスは、
計画的なテストによって解決すると考えています。
今回は、保証しない方針なので、計画的なテストとか、
そういう堅苦しいことは、していません。
このソースコードは、プログラミングという仕事が好きな人と
楽しみを共有するためのものです。
なのでバグがあったら恥ずかしいですが、
恥ずかしいからと言って、公開しないという選択肢は、
選びません。
私のブログは、プログラミングを仕事としているすべての人が
楽しく仕事をするための活動の一環です。
以上!
2011年3月22日火曜日
自分の職業。
最近自分の職業がよくわからなくなってきた。
Webページを作ることもあるし、プログラムを作ることもある。
職業で言うと、Webデザイナー兼ソフトウェアエンジニアという
長ったらしい名称になってしまう。
一応、まとめて、ソフトウェアエンジニアということに
しているけど、それは、すべてを表していない気がする。
他に言うとすれば、Webエンジニアなのかな?
Webディレクターでもいいかも。。。。
でも、これでプログラマは、卒業できそうです。
これからどうしようかな。。。。
もともとプログラマになったのは、技術者になれば、
食いっぱぐれしないだろうというのと、
その時、付き合ってた彼女と結婚したいから、
ある程、手堅い職業に就きたかったというのが
理由なのです。
自分の今いる場所では、キャリアパスがあまり
はっきりしていない。
何を目指してもいいけど、何になれるかは、
はっきりしていない。
普通のある程度の規模の会社に勤めていれば、
次は、係長だとか、課長だとか、そういう
キャリアパスがはっきりしている。
その代り、自分が本当になりたいものという
こだわりは捨てて、その会社の役職を目指さなきゃ
けない。
自由でもあるけど、その分、自分の判断が
シビアに自分に返ってくる。
おもしろいけど、中途半端では、いけない。
果たして、どうしたものか。。。。
Webページを作ることもあるし、プログラムを作ることもある。
職業で言うと、Webデザイナー兼ソフトウェアエンジニアという
長ったらしい名称になってしまう。
一応、まとめて、ソフトウェアエンジニアということに
しているけど、それは、すべてを表していない気がする。
他に言うとすれば、Webエンジニアなのかな?
Webディレクターでもいいかも。。。。
でも、これでプログラマは、卒業できそうです。
これからどうしようかな。。。。
もともとプログラマになったのは、技術者になれば、
食いっぱぐれしないだろうというのと、
その時、付き合ってた彼女と結婚したいから、
ある程、手堅い職業に就きたかったというのが
理由なのです。
自分の今いる場所では、キャリアパスがあまり
はっきりしていない。
何を目指してもいいけど、何になれるかは、
はっきりしていない。
普通のある程度の規模の会社に勤めていれば、
次は、係長だとか、課長だとか、そういう
キャリアパスがはっきりしている。
その代り、自分が本当になりたいものという
こだわりは捨てて、その会社の役職を目指さなきゃ
けない。
自由でもあるけど、その分、自分の判断が
シビアに自分に返ってくる。
おもしろいけど、中途半端では、いけない。
果たして、どうしたものか。。。。
2011年2月24日木曜日
久々に日記更新してみる。。。
久々の日記更新。。。。7か月ぶりです。。。だいぶ放置したな。。。
最近の仕事は、去年の12月以来、ソフト開発の仕事はしていません。
今の主な業務内容は。。。。何と言ったらよいのでしょうか?
http://npocc.org/ ← このNPOに籍を置いてます。
最近の仕事は、去年の12月以来、ソフト開発の仕事はしていません。
今の主な業務内容は。。。。何と言ったらよいのでしょうか?
http://npocc.org/ ← このNPOに籍を置いてます。
2010年8月6日金曜日
怠惰であることは危険だ。
ソフトウェア開発プロジェクトにおいて、納期までまだ時間があるから
ゆっくりやって大丈夫だ。。。。という考えは、危険だ。
ソフトウェア開発プロジェクトがうまく行かなくなる原因は、
様々あると思う。
私がよく直面する問題は、実装方法の問題。特に新しいフレームワークや
開発環境で開発するとき、実装方法が分からず、進捗が極端に
悪くなる。
こういうリスクがあるのだから、納期まで時間があると高をくくって
いると、後で痛い目にあう。
ゆっくりやって大丈夫だ。。。。という考えは、危険だ。
ソフトウェア開発プロジェクトがうまく行かなくなる原因は、
様々あると思う。
私がよく直面する問題は、実装方法の問題。特に新しいフレームワークや
開発環境で開発するとき、実装方法が分からず、進捗が極端に
悪くなる。
こういうリスクがあるのだから、納期まで時間があると高をくくって
いると、後で痛い目にあう。
登録:
投稿 (Atom)