かとじゅんの技術日誌

技術の話をするところ

言語だけでなく文化も学ぶ

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

プログラマが知るべき97のこと

プログラマが知るべき97のこと


こんなことが述べられています。

 Andy Hunt とDave Thomas は、多くの人に影響を与えた著書『達人プログラマー』の中で、「毎年、新たなプログラミング言語を1 つは学ぶこと」と勧めています。私はそのアドバイスに従い、過去何年かの間に実際に数多くの言語を学んできました。そして、その中で「言語を学ぶというのは、ただ文法、構文を学ぶことではなく、その背景にある文化も学ぶこと」という重要な教訓を得ました。

「毎年、新たなプログラミング言語を1 つは学ぶこと」は有名な指針ではありますが、なかなか毎年 言語を習得するのは大変です。どうせ大変なら、楽しみながらやったほうがいいですね。さらに大変ですが、その背景にある文化まで学びなさいと言っているわけですね。でも、文化を学ぶことには大きな意味があります。

 どのような言語でもFORTRAN のように書くことはできます。しかし、言語にはその言語独自の文化というものがあり、真にその言語を知るには、その文化も正しく学ぶ必要があるのです。

どんな言語でもFORTRANのように手続き型言語のように記述できる。だからといって、それは設計として良い選択をしているのか。そこで疑問を感じたほうがよさそうです。その言語がどのように考えられて作られているか知ることが、文化を学ぶことではないかと思っています。難しい言葉で言い換えると言語設計の意図ってことですかね。
ちょっと前の経験ですが、他社のPHPプログラマが開発したAndroidアプリのソースを見たことがあります。それは、まるで手続き型というか、PHPのようなJavaプログラムでした。Javaの文化に馴染んだ私には難解でした。もはやJavaとは言い難い。
ということで、言語の機能だけ学んでも、その言語を使いこなすことは十分にできないと思うのです。まずは「郷に入っては郷に従え」で言語の背景にある文化も学ぶべきですね。

「なぜクラスというものが存在するのか」を学び理解する姿勢が重要です。関数型言語で使われるラムダ式が最初なかなか理解できないとしても、怖じ気づくことはありません。ひたむきに、分かるまで使うように努めるのです。
 新しい言語を学び、その勘所をつかんだら、前から知っていた言語の使い方がそれまでと変わっていることに気づき、自分で驚くことがよくあります。

クラスなんてありふれた存在ですが、「なぜ必要か」という視点で問われると案外まっとうな答えを返せないものです。でも、文化を学べばその答えにたどり着くことが可能です。私も、Scalaでイカしたコードを書くために、Haskellを始めることにしました。Scalaで少し関数型の文化を学んだおかげもあり、今 Haskell本を読んでも理解がスムーズにできます。Scalaを始める前に読んだことがありましたが、難解すぎて理解できなかった。今はスムーズに理解できるんです。文化を理解するって大きな意味があるんですね。
そういう意味では、「言語だけでなく文化も学ぶ」はよい習慣だと思います。

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング