【感想・ネタバレ】コーディングを支える技術――成り立ちから学ぶプログラミング作法のレビュー

あらすじ

本書は,プログラミング言語が持つ各種概念が「なぜ」存在するのかを解説する書籍です。
世の中にはたくさんのプログラミング言語があります。そしてプログラミングに関する概念も,関数,型,スコープ,クラス,継承など,さまざまなものがあります。多くの言語で共通して使われる概念もあれば,一部の言語でしか使われない概念もあります。これらの概念は,なぜ生まれたのでしょうか。本書のテーマは,その「なぜ」を理解することです。
そのために本書では,言語設計者の視点に立ち,複数の言語を比較し,そして言語がどう変化してきたのかを解説します。いろいろな概念が「なぜ」生まれたのかを理解することで,なぜ使うべきか,いつ使うべきか,どう使うべきかを判断できるようになるでしょう。そして,今後生まれてくる新しい概念も,よりいっそう理解しやすくなることでしょう。

...続きを読む
\ レビュー投稿でポイントプレゼント / ※購入済みの作品が対象となります
レビューを書く

感情タグBEST3

Posted by ブクログ

プログラミング言語の歴史と差分から今ある文法はなぜこのような発展を遂げたのかという観点で説明がなされていて面白かった
特に6章のエラーハンドリングとか7章のスコープの話が面白かった

0
2022年02月08日

Posted by ブクログ

大事なことは最初に書いてある
技術を学ぶやり方3通り
・比較から学ぶ
→例えば、他の言語ではどうなっているか知ることで違いがわかる。意味がわかる。
・歴史から学ぶ
→なぜそうなったのか?どういう問題があってどう解決しようとして至ったのかを知ることで意味がわかる。
・作って学ぶ
→とにかく手を動かして体でわかる。写経。

本に書いてあることはわかるけど、なんでそうなの?という根源的な疑問を抱きがちだったので、当たり前に使われているコトバを説明してくれてよかった。折に触れて読みたいなあと思えた本。

0
2019年03月08日

Posted by ブクログ

WEB+DBでオススメされていたのをみて購入しました。IDEまわりの話なのかなと思ってましたがそうではなく、言語についての本です。
この本のいいところはサブタイトルにあるように、

・なぜこういった言語設計になっているのか
・どういった経緯で今の機能になったのか

のように特定の言語に関係なくプログラミング言語を支える共通の知識、歴史がまとまっている点です。

個人的には特にオブジェクト指向に関する話がよかったと思っています。何冊もオブジェクト指向に関する書籍は読んできましたが僕にとってはこの本の説明が一番しっくりきました。

初学者というよりはコーディングを数年してきたエンジニアの方にはちょうどいい本かと思います。

0
2017年10月14日

Posted by ブクログ

プログラミング言語が備える機能(if/while/forといった制御構文、例外機構、クラス等)が、何故必要とされるようになったかを解説してくれる本。
歴史を紐解きながらの解説はよく納得できた。

0
2015年01月04日

Posted by ブクログ

ブログラマーのみならず、システム業界に身をおく人なら、必ず読むべき良書。

色々な言語を比較しながら、何故そうなっているのかの理由を背景と共に学べる。

0
2014年09月29日

Posted by ブクログ

ネタバレ

黄色のハイライト | 位置: 761
構文解析器(パーサ)は、ソースコードを文字列として読み込んで、それを解析し、構文木を作るプログラムです。FORTRANでプログラムがコンパイルされる際にも、この構文解析器がソースコードの文字列を構文木に変換する作業を行っている


黄色のハイライト | 位置: 773
情報は膨大です。「とにかく全部一通り勉強しよう」という戦略はもはや通用しません。必然的に「何を学ぶか、何を学ばないか」を決める必要が出てきます。そのときの指標になるのが「何を作りたいのか」目的を明確にすることです。そして目的を達成するために必要なことから学べばよいのか。


黄色のハイライト | 位置: 776
何を作るかを決めることができない? もしかして、最初から完璧なものを作ろうと考えていませんか? 誰も考えたことのないもの、みんなが絶賛してくれるものを作ろうと考えていませんか? 最初からすごいものを作ろうと考えて、そのせいで手が動かなくなっているのだとすると、いつまで経ってもすごいものは作れないでしょうね。まずは簡単なものでよいので何かを作りましょう。


黄色のハイライト | 位置: 888
今では「コンパイルしてアセンブリ言語に変換し、アセンブルして機械語に変換し、リンクしてつなぎあわせて1つの実行可能ファイルにする」という一連の作業をまとめてコンパイルと呼ぶことも多いかと思いますが、ここではアセンブリ言語に変換することを指してコンパイルと呼んでいる。


黄色のハイライト | 位置: 1,392
1975年にJohn Goodenoughは自らの論文( 注9)の中で、より良い例外処理の方法を提案しました( 注10)。彼の主張はこうです。“プログラマは「命令が例外を投げる可能性があることを忘れる」「適切でない場所、または適切でない種類の例外処理を書く」などの失敗をする可能性がある。この可能性を減らし、プログラマがした失敗をコンパイラが警告できるようにするには、2つのものが必要だ。一つは命令がどういう例外を投げる可能性があるかを明示的に宣言させること。そしてもう一つは字句的に「失敗しそうな処理」を囲む構文。


黄色のハイライト | 位置: 1,573
こういう「おかしくなったら処理を停止して速やかに報告すべき」という設計思想は「フェイルファースト」と呼ばれています。ソフトウェアの目的によっては簡単に停止してもらっては困る場合もあるでしょうが、少なくとも学習や開発の段階では、間違えたときにすぐに間違えたことに気付けることのメリットは大きいです。


黄色のハイライト | 位置: 1,666
本章では、プログラムも失敗することがあること、そしてその失敗をどうやって伝えるかを学びました。失敗を伝える方法は大きく分けて2通りあります。「返り値で伝える」と「失敗したらジャンプする」。


黄色のハイライト | 位置: 2,217
銀行や為替などのお金を扱う分野ではこの振る舞いが嫌われるので、そういう場合には固定小数点数やエクセス-3のような10進法での計算が使われます。


黄色のハイライト | 位置: 3,252
一つは「切りの良いところで交代」です。処理の区切りが良いところで処理が自発的に「交代していいよ」とする方法です。この方法で実現されているマルチタスク(並行処理)を協調的マルチタスクと言い


黄色のハイライト | 位置: 3,254
この方法では、どれか1つの処理が「交代していいよ」と言わずに実行を続けると、ほかの処理にいつまで経ってもチャンスが回ってこないという問題点があります。あくまで「すべての処理が、適度な間隔で『交代していいよ』と言う」という信頼のもとで成り立っているシステム


黄色のハイライト | 位置: 3,261
「どういうときに交代するか」のもう一つの決め方は「一定時間で交代」です。この方法では、個々のプログラムよりも偉い立場のプログラム(タスクスケジューラ)が存在します。それが一定時間ごとに今走っている処理を強制的に中断させ、ほかのプログラムが処理を実行できるようにします。 ゲームのたとえで言うならば、母が15分おきに「交代しなさい!」と命令するような状況です。コンピュータの場合は人間が見ても中断されたとわからないように、たとえば20ミリ秒(0.02秒)で交代しています。 この方法で実現されているマルチタスクをプリエンプティブマルチタスクと言います。プリエンプティブとは「他人の行動を阻止するための」という意味の単語で、この手法は協調的マルチタスクと違って「止められる側のプログラムの協力」がなくても強制的に処理を止めてしまうところが特徴です( 注


黄色のハイライト | 位置: 3,270
Windows 95、Mac OS X以降や、UNIX、LinuxなどはみんなOS自体がこの方法で複数のプログラムを並行実行してい


黄色のハイライト | 位置: 3,289
この良くない現象のことを「競合状態」(レースコンディション)と呼んだり、このプログラムを「スレッドセーフでない」と表現したりし


黄色のハイライト | 位置: 3,334
Bさんは「Aさんの書類トレー」に書類を入れてすぐに自分の仕事に戻ります。これがアクターモデルです。 処理は非同期に行われます。Aさんが書類トレーの中の書類をいつ処理するかはBさんにはわかりません。いつ処理が終わったのかも、書類に「終わったらBまで送り返してください」とでも書いておいて、いずれBさんが自分の書類トレーの中でAさんからの返事を発見したときにようやく「ああ、終わったんだな」とわかるしくみです。 この特徴が向いている処理として、まさにメッセージのやりとりそのものが挙げられます。TwitterやFacebookなどの「大量のユーザの間でのメッセージのやりとりを扱うサービス」では、おそらくアクターモデルが向いている処理が多いのでしょ


黄色のハイライト | 位置: 3,356
一つは、ファイバーやコルーチン、グリーンスレッドなどと呼ばれている手法です。スレッドがプリエンプティブなことが割り込まれてしまう原因なのだから、協調的なスレッドを作ればいいじゃないか、というアプローチです。RubyのFiberクラスや、PythonやJavaScriptのジェネレータがこれです( 注


黄色のハイライト | 位置: 3,369
この方法にはいろいろなバリエーションがあり、ロック、ミューテックス、セマフォなどいろいろな名前がありますが、コアのコンセプトは「使用中」の札と同じです( 注11)。「ロック」という名前のせいで「ロックを掛けておけばほかの人は入ってこられない」という勘違いをしがちですが、しかし実際は「使用中」の印を付けるだけ、印を確認しないで実行するスレッドがいると台無しになってしまいます。処理の流れの一部分だけ協調的に譲り合うしくみと言えるでしょ


黄色のハイライト | 位置: 3,411
共有されたXとYを書き換える処理AとBがあるとしましょう。Aが「Xをロックして、Yをロックする」という順でロックをかけていて、Bが「Yをロックして、Xをロックする」という順でロックをかけている場合、タイミングによっては問題が発生します。AがXをロックし、BがYをロックした状態で、お互いに相手がロックを解放するのを待ってしまうのです。 これがデッドロックと呼ばれる現象です。この問題を回避するためにプログラマは、プログラム全体でロックの順番が一貫するように気を付けなければいけません。「何をロックすべきか」だけではなく「どういう順でロックすべきか」も把握しなければいけないの


黄色のハイライト | 位置: 3,431
この問題を解決しようとしているのがトランザクショナルメモリというアプローチです( 注13)。データベースのトランザクションの考え方をメモリにも使う方法です。コンセプトは「手元で試しにやってみて、失敗だったら最初からやりなおし、成功だったら変更を共有する」です( 図10.2)。XやYを直接書き換えるのではなく、一時的に別のバージョンを作ってそれを書き換え、ひとかたまりの処理が終わってから反映するのがポイント


黄色のハイライト | 位置: 3,492
本章では、並行処理についての重要な概念を学びました。並行処理は昔から大勢の人を悩ませてきた問題で、いまだに多くの人を悩ませ続けている問題です。歴史を追うと、共有→非共有→共有、協調→非協調→協調、ハードウェア→ソフトウェア→ハードウェア、と振り子のように2つの解の間を揺れているように感じます。片方だけでなく両方を学び、バランス良く使うことが大事なのかもしれません


黄色のハイライト | 位置: 3,982
今では子クラスを作るときに気を付けるべきポイントとしてよく言及されるのが「リスコフの置換原則」です。 その原則はこうです──「T型のオブジェクトxに関してある属性q(x)が常に真であるとする。SがTの派生型であれば、S型のオブジェクトyの属性q(y)が常に真でなければならない。」( 注4)。 今の文脈で言い換えると、「あるクラスTのオブジェクトについて必ず成り立つ条件があるなら、その条件はTの子クラスSのオブジェクトについても必ず成り立たなければいけない」となるでしょう( 注5)。


黄色のハイライト | 位置: 4,193
そもそも、なぜ多重継承はこんなに問題になっているのでしょう? 2002年に発表された、トレイトに関する論文( 注17)では問題点がとてもよく整理されています。 クラスには2つの相反する役割があります。1つ目は「インスタンスを作るためのもの」という役割で、このためには「完結した、必要なものを全部持った、大きなクラス」である必要があります。2つ目は「再利用の単位」という役割で、このためには「機能ごとの、余計な物を持っていない、小さなクラス」である必要があります。 クラスが「インスタンスを作るためのもの」として使われているときには、再利用の単位としては大きすぎるのです。それならば、再利用の単位という役割に特化した、もっと小さい構造(トレイト=メソッドの束)を作ればよいのではないか?──これがトレイトの考え方です。再利用の単位をクラスと別に作るという点では、Rubyのモジュールに似ていますね。何が違うのでしょ

1
2020年05月24日

Posted by ブクログ

コーディングを支える技術

エンジニアの西尾泰和 氏の著書です。
現在のプログラミング言語で普通に使われている概念、仕様、機能が歴史的にどのような経緯で作られ、他の言語ではどのようになっているかについて書かれています。
冒頭に効率良く学ぶには、比較から学ぶ、歴史から学ぶ、作ることで学ぶと書かれていますが、その前者2つを学べる本になっています。
一つの言語で簡単なプログラムが書けるレベルの人が、レベルアップを目指すのに向いていると思います。

【本書で学べること・考えること】
- プログラミング言語が生まれた理由
- 文法が生まれた理由
- 構造化プログラミングが生まれた理由
- 関数が生まれた理由
- エラー処理が生まれた理由
- 名前とスコープが生まれた理由
- 型が生まれた理由
- コンテナと文字列の言語ごとの違い
- 並行処理の違い
- オブジェクトとクラスとは

読んでみての感想です。

普通の技術書とは異なるアプローチで、言語に共通する仕様を説明してくれる本です。
目的や成り立ちを知ることで、理解が深まるとともに他言語の学習コストを下げてくれます。良書だと思います。
「プログラムはなぜ動くのか」など、PCでのプログラム処理の仕組みを知った後で読むとより理解が深まると思います。(マシン語、アセンブラをイメージできていると良い。)文法、構造化、関数、エラー処理、名前、スコープ、型、コンテナは、すべて人が理解しやすい記述ができるように生み出されたものでるということが理解できます。
並行処理は、使い勝手の向上のためです。
オブジェクト指向は、少し難しいですが、多重継承の問題などはわかりやすいと思います。

0
2022年05月04日

Posted by ブクログ

プログラミング言語の成り立ち的な本かと思い購入
中身はコーディングのお作法等について書いてありびっくり

コーディングをする上で意識すべきもしくは注意すべきことが多く書かれている
真新しく斬新な事は書かれていない
ただわかっているつもりだったこと意外と分かっていなかったことに気づけた

RubyとPerlを書いたことがなかったので例で載っているコード読むのに少し苦労した

0
2021年03月17日

Posted by ブクログ

複数の言語を「比較」して言語の「歴史」から、プログラミング言語について学ぶ本。
僕がプログラミングをし始めたときすでに、C++もJavaもPythonもあって、その成り立ちについて気にしたことなかったので、新鮮な気持ちで読めた。確かにそういう仕組み(文法)があると便利そうやなと思えた。
もうちょい、いろんなプログラミング言語に浸かってからまた読み直してもいいかなと思う。

0
2020年02月09日

Posted by ブクログ

今月から始まった、今年の新入社員による新人読書会に混ぜてもらって手にした。

新人読書会のテーマ本としてはちょうどよい感じ。この本自体がかなり平易に要点を押さえて書かれているので、単に本の内容をサマってくるだけのまとめ方してくると、全く意味ない。彼ら彼女らには、そのあたりの膨らませ方の力量を期待。一方、自分は老害って言われないようにしないとな(^-^;

0
2019年01月20日

Posted by ブクログ

複数のプログラミング言語を学ぶと言語の違いでなんでこれはこうなっているんだろうか?と思うことがでてくる。言語間で共通な文法、概念を解説してくれている。ひとつの言語だけを知っているのでは面白さが分からないかも。PL/Iが出ていて、懐かしい♪と思った。

0
2018年10月20日

Posted by ブクログ

様々なプログラミング言語の歴史を紐解きながら、なぜこの文法や概念が生まれたか、を学ぶことができる。
言語の違いも面白いけど、コードを書きやすくするための概念や手法を取り入れながら成長していく過程は勉強になる。
言語拡張についていくのは大変だけどね。

この本を読んで、pythonこわいと感じたのはなぜだろう。

0
2018年10月07日

Posted by ブクログ

ブログラムがなぜ動くか、プログラミング言語の成り立ち、発展の仕方から学ぶことあ出来ました。
色々な言語が生まれた背景をしることによって、その言語の特性を理解することができると思います。リストの仕組みや継承、動的、静的型付けなどの特性を言語ごとの仕組みで丁寧に解説されていてわかりやすかったです。
個人的にコラムが言語勉強に役立ちそうとう印象が残ってます。

0
2017年05月06日

Posted by ブクログ

プログラミング言語の歴史を面白く読めた。筆者の物事をとことん調べてそれをわかりやすく説明しようと努める姿勢が読んでいて心地いい。欲を言えば関数型言語の話も知りたかった。

0
2016年11月02日

Posted by ブクログ

プログラム言語の歴史と基礎がわかりやすくまとめられている。これから何かしらのプログラム言語を学ぶ際に事前に読んでおくと理解が深まりそう。

0
2015年11月01日

Posted by ブクログ

・プログラミングを学びはじめて半年〜1年くらいの人におすすめ。
・今後新しい技術を学ぶときの学習方法や態度に良い影響を与えてくれそう
・読みやすさ◎

ぐぐるとたくさん良いレビューが見つかる。大体同意。

0
2015年07月12日

Posted by ブクログ

細かく章分けがされており、著者による説明のうまさも合わせてサクサクと読める。

説明は厳密さを追い求めるのではなく、分かりやすいように言葉を選んでいる。厳密さが必要な部分に関しては脚注にしっかりとした説明が書かれている。

説明は、if文やwhile文などの説明から始まり、多重継承に至るまで。今まで考えてなかったことを丁寧に行われている。

0
2014年08月17日

Posted by ブクログ

読み始めた時は、期待してたほどマニアックじゃないな、と思っていたのだが、読み進めるうちに、詳しくない分野の知識が得られ、通読した結果、広く知識が得られて満足度が高かった。

0
2014年08月07日

Posted by ブクログ

FORTRANから入ってC, Java, JavaScript をちょっとずつかじってきた自分にはちょうど良い本。

全体的に内容は浅めなんだろうけど
オブジェクト指向に対するなんとも言えないモヤモヤ感はある程度薄らいだかも。

0
2014年08月02日

Posted by ブクログ

どうして今まで、こういう本に出会わなかったんだろうか。プログラミング言語仕様の何故を、その歴史と絡めて語ってくれるなんて、どきどきしちゃう。けれど、終盤は少し難しくなった気がするので、理解度という点でちょっと微妙。HWやメモリ管理方式とか絡めて、同じ語り口で取り上げて欲しいトピックがまだあると思う。大学等でソフトウェア工学やプログラミング技術の講義で、扱って欲しい内容だ。

0
2014年07月19日

Posted by ブクログ

プログラミング言語を構築する過程を追体験させるような内容。なかなか良かった。クレバーで穏やかな語り口が気に入りました。
まぁ、内容の詳細はすぐに抜けてしまうだろうけど、いろいろな機会にふと思い出しそうなわりと本質的な話が書いてあったと思う。

0
2014年05月30日

Posted by ブクログ

【目的】 プログラミング言語が持つ各種概念について、それらが「なぜ」存在するのかを解説する。

【収穫】 変化の速い言語という領域においては、他との比較や歴史からの学習を通じて、応用可能な知識を身に付けることが重要と理解できた。

【概要】 本書はプログラミング言語が持つ各種概念、例えば関数や例外処理、コンテナ等について、以下の2つの観点を中心として解説している。
①複数の言語の比較 : 例えば各言語の文法を考えた時に、FORTHやLISPではルールを少なくしてシンプル化することを図ったが、FORTRANは決め打ちルールを大量に導入してとっつきやすい書き方をできるようにした、等。
②歴史上の成立過程 : 例えばコードの継承を考えた時に、最初は実装の再利用性の観点から多重継承が採用されていたが、呼び出し時の衝突などの問題が発生したことから、多重継承を禁止にする流れが出てくるようになった、等。

【感想】 ちょうど新たなプログラミング言語の学習を開始するところだったため、興味が湧いて読んでみた。著者が強調しているように、どのようにコーディングするべきかといった特定のハウツーではなく、背景から解説するため、比較的読み物として入りやすい。一方で、言語の知識が乏しい状態で通り一遍読んだくらいだと深い理解は難しいと感じた。

0
2014年03月04日

Posted by ブクログ

プログラムの成り立ちを知ることができます。

様々な言語には目的があって作られたということも知ることができました。

プログラムはいかに楽をしたいかという観点から生まれているので、これからもどんどんいろんな言語が出てくるんだろうな。

0
2021年09月23日

Posted by ブクログ

過去の言語の成り立ちから、言語仕様について学べる本。何らかの言語の知識があれば読み進められる。言語によるオブジェクト思考の考え方の違いが参考になった。

0
2018年03月10日

Posted by ブクログ

時間軸(縦軸)と言語同士(横軸)の比較を織り交ぜながらの説明の角度は分かりやすかったが、既知の情報が多かったのが残念。

0
2017年03月25日

Posted by ブクログ

プログラム言語の機能がどういった目的で存在しているかをわかりやすく解説した。かなり基本的な内容なので実用的ではなく読書的。

0
2015年09月22日

Posted by ブクログ

プログラム言語仕様の歴史が記されている。
言語設計者の思想を紹介しつつ、なぜこの様な発展を遂げたのかを、様々な言語でプログラミングされた例を挙げて説明している。
多くの言語に精通しているプログラマーならスイスイ読めるかも知れないが、普通のプログラマーにとっては難解な部分も多いと思う。
プログラム言語仕様の成り立ちを知りたいプログラマーにオススメです。そうじゃない人は読んでも意味ないです。

0
2015年01月24日

Posted by ブクログ

なんかこういうことをその昔一生懸命勉強した時期があったな、コンパイラコンパイラとか。
あれは何だったのだろう?
言語は単なる道具だけど、思想を持った道具だということは、何となく感じられる。

0
2015年01月09日

Posted by ブクログ

過去の歴史を紐解きながら、プログラミング言語横断的にコーディングのための基本的な概念や技術を紹介するという、今までありそうでなかった一冊。
その意味で非常に面白く読めたし、あまり自分に関わりのない言語の特徴なども知れて勉強になった。
ただ、勉強という意味では自分の期待は後半の「クロージャ」「クラス」あたりからが本番だったので、ぜひ続編を期待したい。

0
2014年08月16日

Posted by ブクログ

コーディングする上で学ぶ概念を
開発言語を改良してきた歴史の面から説明している本です。
結構初歩的な内容で、さらっと読めるがそれゆえに頭に残らない内容だった気もします。

0
2014年04月02日

「IT・コンピュータ」ランキング