エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

2007-05-01から1ヶ月間の記事一覧

いつ学ぶか

2年近く前に書いたエントリです。 仕事でソフトウェア開発をするのでしたら、開発が始まる前に学習しておくのが本来でしょう。実際は…ある意味予想通り…開発の現場で学習する、という事態になっています。わたしは、当然のように、この事態は間違っていると…

POD

レビューにて。 試験の結果、不具合がいくつか見つかりました。初期化漏れで構造体に不定値が入っていた、という不具合がごろごろ。使っているプログラミング言語はC++です。この話が出るたびに「コンストラクタ書いとけ、クラスにしとけ!」と心の中で言って…

カプセル化と関数と名前づけ

註:ここでの関数はC言語の関数のことです。「オブジェクト指向のこころ」を読みながら。同書でカプセル化を「あらゆる種類の隠蔽」と説明しています。それをふまえて。仕事の現場で、最近思ったのが「関数ってのもカプセル化なんだな」と。 手続きのまとまり…

正規表現の使い方

正規表現の使い方を知ったので忘れないうちに。 grepっぽいの。 import System.Environment import Text.Regex grep ptn ss = [s| s <- ss, matchRegex (mkRegex ptn) s /= Nothing] main = do args <- getArgs s <- getContents mapM_ putStrLn $ grep (hea…

複数の言語で書く意義

わたしの場合。いくつかの言語でFizzBuzzを書いてみているのは、知的好奇心という側面と(この面がたしかに大きい)以外に、特定のやり方に捕われないようにするための練習だと思っています。 言語の特徴は同時に思考を制限する部分もあるわけで、同じ言語ばか…

C++でもFizzBuzz、ふたたび

C++

ちょっとひっかかっていたことがあって。先日Haskellで書いたFizzBuzz。この考え方のままC++に持ってこられないものか。で、書いてみました。Rangeクラスが無駄に大きくなってしまったのを除くと、意外に移し替えできた気分。 #include <iterator> #include <iostream> #include <algorithm></algorithm></iostream></iterator>…

ポリノミアルカウンタ

以前、仕事でIC設計に関わった時に使ったカウンタ。ふと思い出したので、記録。そのカウンタは次のような感じで定義されるものです。 Kビットからなる値xの各ビットをx[i]、つまりx=(x[K-1], x[K-2],...,x[0])として、 数列x0,x1,...,xnを次のように定義する…

引っ込み思案も損をしないように…

仕事の話。 成果主義、競争の世の中といわれても…メンバーの人が引っ込み思案であっても損をさせないリーダーに、なりたいなと、仕事をしながら思った。 自分が引っ込み思案で、損をしているから思ったのかもしれないけど。

合計を計算

ペーストボード(クリップボード)にあるテキストの中の数値を合計してみます。プロンプトから入力します。いわゆるワンライナー? $ pbpaste | grep -Eo [0-9]+ | ruby -e 'sum = 0.0; ARGF.each{ |x| sum += x.to_f }; puts sum' もっとスマートな解法がある…

名前、大事!

今日はコードレビュー。言語はC++。 関数の説明を求める。いろんなことをやっている関数。関数名はやっていることを表していますか?とたずねると、悩まれてしまった。コードレビューとしては失格だった−−コードをレビューしなくはいけないのに、書いた人の方…

安易に面倒なことを選択する

わたしの好きな言葉に「楽をするためには労を厭わず」というのがあります。この場合の「楽」というのは手抜きとか横着とかそういうのでなくて、うまく賢く苦労をせずにといった、そんな感じの意味です。ソフトウェア開発は複雑さとの戦いですから、いかに複…

集中力

ここ最近(この1年余り…?)集中力がなくて困っていたのだけれど。今日久々に、ひとつのことに没頭してみたら、そのあとの雑用がちゃっちゃと済んだ。充分使ったことで、脳みそも未練なく切り替えることができたのかも。脳みそを充分使ってやらないと、いつまで…

コーチング・トレーニング体験

最近コーチングに興味があり、それが長じて、コーチング・トレーニング体験に参加。参加といっても、このトレーニングは電話会議システムを使ったものなので、参加も自宅から電話するだけ。トレーニング・コーチもおっしゃっていましたが、電話を使うと聴く…

FizzBuzz

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm問題の定義が曖昧、という意見もありますが。そこんところはちょっと目をつぶって。 Haskellでこんな感じ? fizzBuzz x | x `mod` 15 == 0 = "FizzBuzz" | x `mod` 5 == 0 = "Buzz…

移設

ココログから移設。最近はコードを書くことが多いこともあって、コードの表現力のよい方に流れた結果になりました。ぽつぽつでありながら、この2年弱の間に書いたことを読み返してみると、「いろいろ考えてるんだな、オレ」という気分になります。こんなアイ…

C++でもFizzBuzz

C++

C++なら。Boost使って変態コード(笑)。 #include <boost/lambda/lambda.hpp> #include <boost/function.hpp> #include <iostream> int main(int, char* []) { boost::function<void(int)> f[] = { (std::cout << boost::lambda::_1 << '\n'), (std::cout << boost::lambda::constant("Fizz\n")), (std::cout << boost::lambda::c</void(int)></iostream></boost/function.hpp></boost/lambda/lambda.hpp>…

RubyでもFizzBuzz

Rubyでも書いてみた。こんな感じか? (1..100).map{|x| if x%15==0 then 'FizzBuzz' elsif x%5==0 then 'Buzz' elsif x%3==0 then 'Fizz' else x end }.each {|x|puts x} Rubyが、構文を変えたLisp(構文を変えた関数型言語)と言われることがあるのが分かる気…

selectを知った

今日になって、Rubyの配列やハッシュにselectというメソッドがあるのを知った。 Rubyを使い始めて何年目。Enumerableの存在は知っていたものの、きちんと調べたことがなかったなぁ。始めて使ったselectは、こんな感じ。 Info = Struct.new(:id, :name) infos…

ゲームになった…か?

amazon:入門Haskellを参考に、判定を追加してみたものの。スコア計算をどうしたものか。困った。スマートな方法が思いついていません。以下、コード。