2013年11月27日水曜日

マルチパラダイムデザイン

クラスや関数を設計するにあたって、「共通性」と「可変性」というものを分析する必要がある。

共通性(commonality)とは、あらゆる目的に同じ使い方ができる性質。
可変性(variability)とは、状況によって使い方が変わる性質。

これらを分析し、可変性を何らかの形でパラメータ化できれば、あらゆる目的に再利用可能なクラス・関数を設計できる。
書籍『マルチパラダイムデザイン』は、共通性と可変性の分析、設計、実装方法の解説に一冊を使っている。
これは設計の非常に重要な考え方なので、プログラマのみなさんには、ぜひ買って読んでもらいたい(ただし絶版)。

合わせて読みたい:
マルチパラダイムデザインに欠けているもの - Cry's Diary
Boost.Polygon.Voronoiライブラリを例に、堅牢かつ効率的多倍精度アルゴリズムの設計について


2013年11月23日土曜日

言語は思考を規定する

「言語は思考を規定する」

これは日本語や英語のような自然言語に対して言われた言葉ですが、プログラミング言語にも当てはまります。
私たちは普段自分が使っている言語で思考しているため、長く使っていると思考がその言語の常識範囲で規定されてしまいます。これは考えが偏ってしまう原因になるので、1年に1言語くらいは何か学ぶといいと思います。
似たような言語ばかりやっていても得られるものは多くないので、全然違う考え方の言語にするとなおよいです。

頭がやわらかいうちに、パラダイムシフトをどんどん経験しましょう。

普段C系言語を使っている人にお勧めの言語は、Haskell、Scala、Erlang、Ruby、Schemeあたりですね。
また、それらの言語の設計思想にも触れるとおもしろいですよ。『C++の設計と進化(a.k.a. D&E)』、『Masterminds of Programming (のHaskell、UML、SQL、Forth、AWK、C#、Perl)』、『Coders at Work (のHaskellとErlang)』あたりがとてもおもしろいのでオススメです。


2013年11月18日月曜日

Welcome broken Japanese

そういえば、長野に行ったとき、おもしろいことがありました。
Twitterに「長野さむい!」と書いたら、「温度は何ですか?」と知らない人からメンションがありました。びみょうにへんな日本語だなーと思いつつ何度かやりとりして、あとでその人のプロフィールを見たら、GCCという世界的に有名なオープンソースプロジェクトの開発者で、チェコ人でした。

https://twitter.com/cpp_akira/status/381541917273509888


「世界は壊れた英語でつながっている」
というようなことはよく言われていて、私自身も海外のオープンソースプロジェクトに拙い英語で参加しています。
しかしその逆に、英語ネイティブな人が拙い日本語で活動してるのはあまり見ません。私のブログにもたまに「おもしろそうな記事だね!英語で書いてほしい!」みたいな趣旨のコメントを英語でもらいますが、英語圏からの歩み寄りももっとあっていいんじゃないかと思います。

今回その歩み寄りの一つを体験でき、こういうのが増えてくれるといいなーと思いました。
壊れた日本語歓迎です。


参照:
Japanese for Programmers
Boost開発者MLに初投稿 - Faith and Brave - C++で遊ぼう
酷い英語をもっとお願いします

2013年11月11日月曜日

C++ポケットリファレンスの打ち上げをしました

2013/11/10(日)

5月に出版した書籍『C++ポケットリファレンス』の打ち上げをしました。


趣旨としては、お世話になったレビュアーさんたちに肉を奢ろう!ということで、渋谷でしゃぶしゃぶとすき焼きを食べに行きました。
なにげに、執筆が始まってから著者全員が集まることはなかったので、初の全員集合でした。

何度も会ってるメンバなので真新しい話はとくになかったですが、きちんとした形で打ち上げができてよかったです。C++ポケリもコミュニティも、私たちの情報発信もこれで終わりではないので、またちょくちょく成果を出して打ち上げしてーを何度でもやっていきましょう!
今回来れなかった方々も、また別の機会に!

プログラミングをはじめて10年目です

プログラミングを独習するには10年かかる

そういえば、今年で10年目かな。
10年かかるプログラミングレベルがどこなのか、というのが「特定領域で最大のパフォーマンスを発揮する」だとしたら、5年目くらいには本書いてたのでどうなんだろうなーという感じはする。
しかし幅も深さも広くて際限がないのがプログラミングなので、仮に10年勉強したとしても、仮に特定領域で最高の技術を身に付けたとしても、自分を常に成長させることを止めないのが最も大事なことだと思います。