読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

26. 言語だけでなく文化も学ぶ Anders Noras:『プログラマが知るべき97のこと』

以下の記事は,オライリージャパン社から出版された

プログラマが知るべき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年間ずっと寝続けてしまいました.

その何年か後,私はチュニジアに旅行しました.

チュニジア公用語アラビア語で,

かつてフランスの植民地であったことから,

フランス語も広く使われています.

英語が通じるのは,観光地になっている所だけです.

言葉が通じず,仕方がないので,

私はずっとプールサイドにいて,

ジェームズ・ジョイスの大作

フィネガンズ・ウェイク

を読んでいました.

この小説は,文体という意味でも,言語という意味でも,

とてつもない作品です.

40ヶ国語を超える言語を駆使した言葉遊びの連続は

まさに驚異であり,読んでいて消耗もします.

そして,著者は外国語の単語やフレーズを多数織り交ぜることにより,

自分の表現の幅を大きく広げているとも感じます.

また,それはどこか,

プログラマである私がしてきたことにも通じます.



Andy HuntとDaveTomasは,

多くの人に影響を与えた著書

『達人プログラマ

の中で,

「毎年,新たなプログラミング言語を一つは学ぶこと」

を勧めています.

私はそのアドバイスに従い,

過去何年かの間に実際に数多くの言語を学んできました.

そして,その中で

「言語を学ぶというのは,ただ文法,構文を学ぶことではなく,

 その背景にある文化も学ぶこと」,

という重要な教訓を得ました.



どのような言語でもFORTRANのように書くことはできます.

しかし,言語にはその言語独特の文化というものがあり,

真にその言語を知るには,

その文化も正しく学ぶ必要があるのです.



C#を学び始めた時には,

長いMainメソッド

静的なヘルパーメソッドばかりから成る.

コードを書いてしまうかも知れませんが,

恥ずかしく思わなくていいのです.

そのかわり

「なぜクラスというものが存在するのか」

を学び理解する姿勢が重要です.

関数型言語で使われるラムダ式

最初なかなか理解できないとしても,

怖気づくことはありません.

ひたむきに,分かるまで使うように努めればいいのです.



新しい言語を学び,その勘所をつかんだら,

前から知っていた言語の使い方が

それまでと変わっていることに気づき,

自分で驚くことがよくあります.



私は,Rubyを学んだおかげで,

C#delegateをうまく利用できるようになりました.

また,.NETのGenericsの持つ潜在力を十分知ったことで,

JavaGenericsの活かし方がわかるようになり,

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社に勤務し,

チーフテクノロジーエヴァンジェリストを努める.

詳しくはブログを参照

Anders Norås


関連記事

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