# 目次
# はじめに
『プログラマが知るべき97のこと』
の中から1つのエッセイを選び,
そのエッセイを,クリエイティブコモンズ3.0の条件の元で転載したものです.
Creative Commons ― 表示 3.0 アメリカ合衆国 ― CC BY 3.0
本書の内容は,オープンソースモデルに従い,
ほぼ無制限で利用が可能です.
クリエイティブ・コモンズ表示3.0の条件下で,
自由に使用することができるのです.
つまり,どのエッセイも,
著者の名前を明記すれば,自由に転載,改変が可能であるということです.
ーー"はじめに"から抜粋 pXII
もし,他のエッセイを読みたい場合には,
記事末のリンクを辿るか,
以下のリンク先のTwitterアカウントのつぶやきからお探し下さい.
Twitter Account: 97 Things Bot
また,元の英文によるエッセイを読みたい方は,
こちらを参照して下さい.
Contributions Appearing in the Book - Programmer 97-things
26. 言語だけでなく文化も学ぶ アンダース・ノラス (Anders Noras):『プログラマが知るべき97のこと』:
高校時代の外国語の授業,
私はフランス語を選択していました.
ただ当時は
「自分は将来も英語だけでなんとかやっていく」
と思っていたので,
フランス語の授業では3年間ずっと寝続けてしまいました.
その何年か後,私はチュニジアに旅行しました.
チュニジアの公用語はアラビア語で,
かつてフランスの植民地であったことから,
フランス語も広く使われています.
英語が通じるのは,観光地になっている所だけです.
言葉が通じず,仕方がないので,
私はずっとプールサイドにいて,
ジェームズ・ジョイスの大作
『フィネガンズ・ウェイク』
河出書房新社
売り上げランキング: 90867
Penguin Classics
売り上げランキング: 24388
を読んでいました.
この小説は,文体という意味でも,言語という意味でも,
とてつもない作品です.
40ヶ国語を超える言語を駆使した言葉遊びの連続は
まさに驚異であり,読んでいて消耗もします.
そして,著者は外国語の単語やフレーズを多数織り交ぜることにより,
自分の表現の幅を大きく広げているとも感じます.
また,それはどこか,
プログラマである私がしてきたことにも通じます.
Andy HuntとDaveTomasは,
多くの人に影響を与えた著書
『達人プログラマ』
ピアソンエデュケーション
売り上げランキング: 10171
の中で,
「毎年,新たなプログラミング言語を一つは学ぶこと」
を勧めています.
私はそのアドバイスに従い,
過去何年かの間に実際に数多くの言語を学んできました.
そして,その中で
「言語を学ぶというのは,ただ文法,構文を学ぶことではなく,
その背景にある文化も学ぶこと」,
という重要な教訓を得ました.
どのような言語でもFORTRANのように書くことはできます.
しかし,言語にはその言語独特の文化というものがあり,
真にその言語を知るには,
その文化も正しく学ぶ必要があるのです.
C#を学び始めた時には,
長いMainメソッドと
静的なヘルパーメソッドばかりから成る.
コードを書いてしまうかも知れませんが,
恥ずかしく思わなくていいのです.
そのかわり
「なぜクラスというものが存在するのか」
を学び理解する姿勢が重要です.
関数型言語で使われるラムダ式が
最初なかなか理解できないとしても,
怖気づくことはありません.
ひたむきに,分かるまで使うように努めればいいのです.
新しい言語を学び,その勘所をつかんだら,
前から知っていた言語の使い方が
それまでと変わっていることに気づき,
自分で驚くことがよくあります.
私は,Rubyを学んだおかげで,
C#のdelegateをうまく利用できるようになりました.
また,.NETのGenericsの持つ潜在力を十分知ったことで,
JavaのGenericsの活かし方がわかるようになり,
LINQを学んだおかげで,
Scalaを楽に理解できるようになりました.
複数の言語について学ぶと,
デザインパターンについての理解も深まります
CプログラマがC#とJavaを学ぶと,
そこではIteratorパターンが一般化され,
普通に使われていることに気づくでしょう.
Rubyなどの動的言語を学べば,
動的言語でもやはりVisitorパターンは使うけれど,
その実装はいわゆる「GoF本」に
載せられた例とは違う見かけになることがわかるでしょう.
小説『フィネガンズ・ウェイク』に関しては,
「これは読めない」と非難する人もいれば,
その文体の美しさを絶賛する人もいます.
この本の場合,
翻訳版の方がかえって読みやすいかもしれません.
原書にあった40ヶ国語以上の言語が一ヶ国語に整理されるのだとすれば,
少しは読みやすいとも考えられます.
しかし,私にとって皮肉なことに,
最初に出た翻訳版はフランス語版でした.
コードにも同じようなことが言えます.
『フィネガンズ・ウェイク』
のようなコードを書くのだといって,
一部をPythonで,
一部をJava,
さらに一部をErlangで書いたとすれば,
プロジェクトは大混乱に陥るでしょう.
そうではなく,
新しい言語から新たな発想を得て,
同じ問題に対して違った解決策を,
見つけられるようになることが大事なのです.
新たな言語を学べば,
従来から使っていた言語でも,
より美しいコードがかけるようになることが多いのです.
■著者データ
[アンダース・ノラス (Anders Noras)]
プログラマとして経験豊富なだけでなく,
講演などの活動も積極的に行っている.
EJBの「エンタープライズ性」に辟易し,
2002年にMicrosoft .NETに宗旨替えをした.
Javaで経験があった分,
他のプログラマより一歩先を行っていたこともあり,
すぐにMicrosoftコミュニティでは有名人となった
2006年には,一旦は冷めていたJava熱も復活している.
現在では両方に精通しており,
より良いソフトウェアの実現のため
2つの世界の融合を図っている.
Quaereプロジェクトの創始者であり,
いくつかのオープンソースプロジェクトの
コントリビュータでもある.
カンファレンスやユーザグループミーティングでの
講演の機会も多い.
スライドをほとんど使わず,
大量のコードを見せて講演をすることで知られている.
ノルウェー在住で,Objectware社に勤務し,
チーフテクノロジーエヴァンジェリストを努める.
詳しくはブログを参照
関連記事
1.分別のある行動 Seb Rose:『プログラマが知るべき97のこと』 - MY ENIGMA
2.関数プログラミングを学ぶことの重要性 Edward Garson:『プログラマが知るべき97のこと』 - MY ENIGMA
3.ユーザが何をするかを観察する (あなたはユーザではない) Giles Colborne:『プログラマが知るべき97のこと』 - MY ENIGMA
4.コーディング規約を自動化する Filip van Laenen:『プログラマが知るべき97のこと』 - MY ENIGMA
5.美はシンプルさに宿る Jorn Olmheim:『プログラマが知るべき97のこと』 - MY ENIGMA
6.リファクタリングの際に注意すべきこと Rajith Attapattu:『プログラマが知るべき97のこと』 - MY ENIGMA
7.共有は慎重に Udi Dahan:『プログラマが知るべき97のこと』 - MY ENIGMA
8. ボーイスカウト・ルール Robert C. Martin:『プログラマが知るべき97のこと』 - MY ENIGMA
9. 他人よりまず自分を疑う Allan Kelly:『プログラマが知るべき97のこと』 - MY ENIGMA
10. ツールの選択は慎重に Giovanni Asproni:『プログラマが知るべき97のこと』 - MY ENIGMA
11. ドメインの言葉を使ったコード Dan North:『プログラマが知るべき97のこと』 - MY ENIGMA
12. コードは設計である Ryan Brush:『プログラマが知るべき97のこと』 - MY ENIGMA
13. コードレイアウトの重要性 Steve Freeman:『プログラマが知るべき97のこと』 - MY ENIGMA
14. コードレビュー Mattias Karlsson:『プログラマが知るべき97のこと』 - MY ENIGMA
13. コードレイアウトの重要性 Steve Freeman:『プログラマが知るべき97のこと』 - MY ENIGMA
14. コードレビュー Mattias Karlsson:『プログラマが知るべき97のこと』 - MY ENIGMA
15. コードの論理的検証 Yechiel Kimchi:『プログラマが知るべき97のこと』 - MY ENIGMA
16. コメントについてのコメント Cal Evans:『プログラマが知るべき97のこと』 - MY ENIGMA
17. コードに書けないことのみをコメントにする Kevlin Henney:『プログラマが知るべき97のこと』 - MY ENIGMA
18. 学び続ける姿勢 Clint Shank:『プログラマが知るべき97のこと』 - MY ENIGMA
19. 誰にとっての利便性か Gregor Hohpe:『プログラマが知るべき97のこと』 - MY ENIGMA
20. すばやくデプロイ,こまめにデプロイ Steve Berczuk:『プログラマが知るべき97のこと』 - MY ENIGMA
21. 技術的例外とビジネス例外を明確に区別する Dan Bergh Johnsson:『プログラマが知るべき97のこと』 - MY ENIGMA
22. 一万時間の訓練 Jon Jagger:『プログラマが知るべき97のこと』 - MY ENIGMA
23. ドメイン特化言語 Michael Hunger:『プログラマが知るべき97のこと』 - MY ENIGMA
24. 変更を恐れない Mike Lewis:『プログラマが知るべき97のこと』 - MY ENIGMA
25. 見られて恥ずかしいデータは使わないこと Rod Begbie:『プログラマが知るべき97のこと』 - MY ENIGMA
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。