Japan Blog
Google のサービスや技術に関する 最新情報が気になる方へ
Eng Japan Library より「 Beautiful Code 」
2008年2月8日金曜日
2008 年 2 月 8 日
Posted by 鵜飼 文敏 (
ソフトウェアエンジニア
)
Google 東京オフィスには、ソフトウェアエンジニアのための蔵書「 Eng Japan Library 」があります。エンジニアが書いた本を寄付したり、読んでみたい本を購入して徐々に増えてきています。
今回は「 Eng Japan Library 」の中から「
Beautiful Code
」を紹介したいと思いま
す。
Beautiful Code は、世界の第一線で活躍している 38人のプログラマによるエッセイ集です。
この本には、 Google Fellow である
Jeff Dean
、
Sanjay Ghemawat
をはじめ、何人かの Google のエンジニアが寄稿しています。日本人からは Ruby の作者まつもとゆきひろさんが寄稿されています。
さて、「美しいコード」とはどういうものなのでしょうか。コードの美しさというのはいろいろな観点で評価されます。見た目だけが整っているコードというのは美しいというには足りないでしょう。コードというのは鑑賞するためのものではなく、やはりその目的を実現してこそだからです。
コードが実現する目的というのは、そのコードが書かれた状況によって異なります。またそれを実現するためにはさまざまな制限が要求されます。そういった制限の中で問題を解決できるコードを書くことが大事だしおもしろいのです。
例 えば Chapter One では Brian Kernighan による 「 A Regular Expression Matcher 」では、 The Practice of Programming で紹介する正規表現の実装の美しさを説明しています。この場合は、本の中でプログラミングの技術を説明するために、機能を必要最小限に絞り、かつコードの 量自体もおさえる必要があります。普通使われている正規表現の実装はこの目的のためには大きすぎるのです。
Rob Pike
はその条件を満たすためのコードを数十行で記述しました。短いコードの中に正規表現の基本をつめこむという難しい要求を満たす美しいコードです。
Chapter Twenty-Three では、 Jeff Dean と Sanjay Ghemawat が Google で日常的に使われている MapReduce の設計と実装について説明しています。 MapReduce は非常に便利なフレームワークで、 Google クラスのスケールで大規模分散処理するうえで欠く ことができません。社内では MapReduce の実装も見ることができるわけですが、コードを読んでみると極めて興味深いところがたくさんあります。 MapReduce 内部には泥臭いコードもありますが、 MapReduce フレームワークで大規模分散システムを効率よく動かす上で大変なあたりを面倒み てくれているので、 MapReduce をつかったプログラムは非常に簡単に大規模なデータを扱うことができるのです。このように MapReduce は大規 模分散処理を扱うための美しい設計がなされています。
プログラマならやはり美しいコードを書けるようになりたいものです。しかし、美しい コードは一朝一夕で書けるようになるにはなりません。誰でも最初の頃はとりあえず動くコードを書くだけで精一杯でしょう。しかし、たくさんコードを書いた り読んだりしていくうちに、いい設計、いいコードとはどういうものか徐々にわかってくるようになります。また、他人に見てもらったりフィードバッ クをもらったりすることで自分のコードをさらによくしていくことができます。 Google 社内では、全てのコードは同僚によるコードレビューを行うことで コードをよりよいものにしています。オープンソースソフトウェアやフリーソフトウェアのコードを読んだり開発に参加することで、同じような経験ができるで しょう。
この本は、数多くの経験を積んできた熟練プログラマ達自らが美しいと思うコードとはどういうものかについて思うところをま とめたものです。すぐに役立つ知識というわけではありませんが、ソフトウェアを設計・実装する上でためになる教訓が沢山ふくまれています。 550 ページを 越えるかなり分厚い本ですが、各エッセイは独立しているので気になる人・気になるトピックだけを選んで読んでいけばいいでしょう。
ところで、この本の日本語訳はでるんでしょうか ?
ラベル
.org
Accessibility
AdSense
AdWords
AI
Android
Android One
Android Pay
API
AR
Blogger
Browser
campaign
Chrome ウェブストア
Chromecast
CM
COVID
CS Edu
Design
Developer
DevFest
Devices and Services
Doodle
Doodle 4 Google
DoubleClick
Driving Directions
Earth
Engineering
Enterprise
Fitbit
Gboard
Gears
GEO
Glass
Gmail
GNI
Google Account
Google Apps
Google Assistant
Google Buzz
Google Chrome
Google Cloud
Google Code Jam
Google Developer Day
Google Earth
Google for Work
Google Home
Google Home app
Google Maps
Google Now
Google One
Google Pay
Google Photo
Google Play
Google Science Fair
Google SketchUp
Google Translate
Google Wallet
Google アートプロジェクト
Google アシスタント
Google クライシスレスポンス
Google ショッピング
Google で、もっと
Google ニュース
Google プレイス
Google マップ
Google 検索
Google 日本語入力
Google+
Googleレンズ
gTLD
Hardware
HTC
iGoogle
JAXA
MBG
Meet
Motion Sense
MUM
Nest
news
Nexus 7
Nexus Player
OpenSocial
Picasa
Pixel
Pixel 4
Pixel Buds
Pixel Fold
Pixel portfolio
Pixel Tablet
Pixel Watch
Playground
Search
Security
SHARP
Soli
Sustainability
Tensor
Tool bar
toolbar
Trend
Women
Women Will
Work Smart
Workspace
YouTube
イノベーション東北、復興支援
イベント
インターンシップ
ウェブレンジャー
エンジニア
エンタープライズ
おみせフォト
カルチャー
クラブ活動
グループ
ごちそうフォト
さがそう
サンタ
ストリートビュー
スペシャルコレクション
スポーツ
セールス
セキュリティ
ツールバー
ディスプレイ
デスクトップ
デベロッパー
ドメイン
トレッカー
パートナー
パートナープログラム
ブラウザ
プログラミング
ヘルプ
マイマップ
モバイル
モバイル Google マップ
モバイル検索
ランキング
リッチ スニペット
音声検索
画像検索
学生
京セラ
教育
検索
広告
高校生
採用
女性の活躍
小笠原諸島
乗換案内
政治・選挙
節電
地図
中学生
東日本大震災
富士山
翻訳
未来へのキオク
未来への働き方コンソーシアム
過去の投稿
2023
6月
5月
4月
3月
2月
2022
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2021
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
2020
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2019
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2018
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2017
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2016
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2015
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2014
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2013
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2012
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2011
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2010
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2009
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2008
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2007
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
1月
2006
12月
11月
10月
9月
8月
7月
6月
5月
4月
3月
2月
Feed
Follow @googlejapan
Follow
メディア関係者向けお問い合わせ先
メールでのお問い合わせ:
pr-jp@google.com
メディア関係者以外からのお問い合わせにはお答えいたしかねます。
その他すべてのお問い合わせにつきましては、
ヘルプセンター
をご覧ください。