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

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

プログラミング言語

「手続き的」と「宣言的」のはざまで

lis.py → lis.rb → lis.hs …ときたので、当然のように lis.cpp に挑戦している最中。 現在いささか苦戦中なので、C++のコードをポストするまでのあいだに気がついたことを、めも。 Haskellで書いたとき、関数を評価するコードではまったことはすでに書きまし…

あたらしい言語を学ぶ

ErlangとLuaをぼちぼちと学習中。 同時進行させると、案の定、言語仕様がゴッチャになります。ErlangもLuaも何ヶ月か前に初めて知った言語ですが、最初に見たときは何となく言語仕様がスッキリしない感じがあったので深入りしなかった(できなかった?)んです…

聴くことと話すこと、書くことと読むこと

このあいだ、仕事場の電話を取ったら英語で話しかけられました。相手がゆっくりと簡単な言い回しをしてくれたのと多少なりとも英語番組を聴いたりしていたおかげか、聞き取りにはなんの問題もなかったんですが…。如何せん言葉が出てこない。言っていることは…

言語学習の素地

Haskellを学んだとき。初めて本格的に関数型言語を学んだというの に、あんまり抵抗がなかったなぁ、と思い返してみて。ちょうど「ふつ うのHaskellプログラミング」という本が出た時期で、それを片 手に学んだからというのもあるのだけれど。思い返してみる…

プログラムを詩になぞらえる

「「脳」整理法 (ちくま新書)」を読書中。 こんな一節がありました。 科学が自然言語に依存しないでものごとを考える道筋を開いたということは、逆に、科学という方法の本質を一般の人に伝えるのを困難にしているともいえます。最良の科学は、自然言語で用い…

異質なC言語

その昔、行番号のない言語が異質でした。どうやって実行順序決めてるんだろう、と思った。 ある時期、Pascalが異質でした。ブロックを作るのにbegin〜endなんて。英単語が溢れている。 長い間、Perlが異質でした。数値を入れたつもりなのに文字列と連結でき…

どこまでも手続き的

わたしには珍しくPerlの話題。仕事で、とある人が作った、ログを整形するコードを見て「おや?」と思った次第。 コードは、時分秒ミリ秒をあらわす9桁の数字の列があって、それをHH:MM:SS.mmmの形に整形するというもの。気になった部分を抜き出してみるとこん…

Haskellのちから

必要に迫られて、タブを空白に展開する機能が必要になり、自分でコードを書く。行に分割すれば、改行を考えなくてよいので、単純に一行分の文字列を展開するものです。考えた手順はこんな感じ。 文字列から一文字ずつ読み込み、タブ文字でなかったらそのまま…

C++のイディオムは、バッドノウハウか?

vector<int> n; // do something ... vector<int>().swap(n); // n を空にする コンテナを空にする方法として、各所で紹介されているC++のSTLのイディオム。これはこれで、スマートかもしれないけれど、やっぱり自然ではないような。C++の習得の難しさは、言語仕様の難</int></int>…

C++のルール

「C++ Coding Standerds」を購入。副題に「101のルール、ガイドライン、ベスとプラクティス」。C++はわたしが好んで使っているプログラミング言語ですが、あまりに複雑過ぎる言語だとあらためて実感。「言語好き」としては、面白く読みつつも、これを仕事に…

C++の代入演算

知りませんでした。というか。勘違いしてました。C++では「代入式への代入」が可能なんですね。 int a = 0, b = 10, c = 20; (a = b) = c; // a:20, b:10, c:20 奇妙な式なので、代入演算子をオーバーロードするときは、代入式に代入できないように「const T…

言葉に左右される思考(2)

ソフトウェア開発をしていると、思考が、プログラミング言語によって左右される場面にでくわします。特に悪いという思いはありません。でも、そのことに気づかず、「プログラムはかくあるべし」という考えにとらわれてしまうときがあります。後になって、な…