カテゴリー: プログラミング全般

  • 【書評】プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則

    プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則 の書評です。

    結論から言うと、プログラミングをする上で必須となる多数の原理・原則を網羅的に取り上げて要約した書籍です。

    ■ 良い点
    ・ 多数の名著のエッセンスを要約で読める
    ・ プログラミングの有名な原理・原則がほぼ網羅されている
    ・ プログラミングの有名な思想・哲学を学習できる
    ・ 各節がコンパクトで読みやすい
    ・ 構成が一貫しているので読みやすい
    ・ 見出しを拾い読みするだけでも役立つ

    ■ 悪い点
    ・ 特になし

    ■ 総評
    プログラミングをする上で必須となる原理・原則を網羅的に多数取り上げて要約した書籍です。多くの名著からの引用的な紹介であり、難解な原著を読む手間が省け、コストパフォーマンスに優れた書籍です

    もっとも、各原理・原則は、抽象的な紹介となっているため、具体的なコードはほとんど紹介されていません。そのため、アマゾンのレビューなどを見るとこの点を不満に思う読者もいるようです。

    しかし、本書の肝要な点は、各原理・原則を抽象的に要約し、網羅的にエッセンス化した点にあるので、抽象的なスタイルで一貫しているのはとても評価できると思います。

    具体的なコードが無いから理解できないという人は、まだ学習が足りていないので、

    ・ リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
    ・ オブジェクト指向における再利用のためのデザインパターン
    ・ 新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

    などの代表的な名著の原作を併用しながら読むことをお勧めします。

    本書においては、引用された原理・原則の出典が明示されているので、より深く理解したい人は原著を求めて学習すればより効果的でしょう。ただ、各原著は難解なものが多いので、本書のようなまとめ的な書籍が価値の高いものになるのだと思います。

    プログラミングの初心者にもベテランにもお勧めの一冊です。ただし、オブジェクト指向とデザインパターン、リファクタリングあたりの前提知識は必要です。

    プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則

  • 【書評】基本がわかる安全設計のWebシステム

    基本がわかる安全設計のWebシステム の書評です。

    結論から言うと、非プログラマ向けの、言語に依存しない、Webセキュリティ要点本です。

    ■ 良い点
    ・ プログラミングの知識がなくても要点がつかめる
    ・ 必須知識のほぼ全般を押さえられる
    ・ 読みやすく短時間で読了できる
    ・ 「まとめ」がよくまとまっている

    ■ 悪い点
    ・ 開発者には若干物足りない

    ■ 総評
    本書は、Webシステムのセキュリティに関する本ですが、開発者向けというよりも、発注者やプロジェクト・マネージャーといった、プログラミングの知識があまり無い、非プログラマー向けのセキュリティ解説書となっています。

    プログラマー向けには、いわゆる徳丸本が有名ですが、徳丸本は難しくてよくわからないという人に本書はおすすめです。もっとも、プログラマーであるならば、本書の内容は必須知識であり、セキュリティの学習の総復習にはちょうどよい感じです。短時間でおさらいができます。

    【徳丸本】 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

    なお、非プログラマー向けであることから、特定のプログラミング言語での解説はほぼ無くて、具体的なコードはでてきません。言語に依存しない解説となっています。

    個人的に本書が役に立ったのは、「クリック・ジャッキング」に詳しい所や、セッションの扱い、ログの扱い、WEBにかかるインフラについての記述などです。徳丸本以外の有用な情報もあるので、セキュリティに関心があるならば、一度、本書に目を通すとよいと思います。

    基本がわかる安全設計のWebシステム

  • PHPプログラマが習得すべき技術10選

    これまで、PHPを中心にプログラミング関係の本を100冊ほど読んできたので、後学のために、どのような技術を、どの順番で、どれだけ深く学習したらよいかを簡単にですがまとめておきます。

    なお、各項で「比重」とあるのは、全体(100%)からみてどれだけの労力を学習に充てるべきかの比率を表しています。括弧書きは、100冊読んだ場合の冊数を表しています。

    それでは、学習すべきお勧め順に紹介していきます。

    ■ 1. PHP
    比重:20%(20/100冊)
    難度:普
    要点:文法、セッション、データベース連携、セキュリティ、フレームワーク
    概要:PHPプログラマであるならば、当然、PHPについて深く知る必要があります。文法はもちろん、クッキーやセッションの扱い、データベースとの連携、そして、セキュリティまで広範囲に技術をカバーする必要があります。レベル的には、会員制サイトを運営できるくらいになれば、まずまずでしょう。更に、CakePHP等の主要なフレームワークについても習得しておくことが望ましいです。
    おすすめのPHP入門書

    ■ 2. SQLおよびデータベース
    比重:15%(15/100冊)
    難度:普
    要点:文法、データベース設計
    概要:PHPでアプリケーションを制作する場合には、データベースとの連携がまず不可欠です。アプリを効率よく動作させるために、深いSQLの知識が必要です。また、データを効率よく取り扱うために、データベース設計の知識も必要です。データベースとの連携は、アプリの肝となるため、十分に学習することが求められます。なお、主にMySQLを中心に学習すると良いでしょう。
    おすすめのSQL・DB入門書

    ■ 3. HTML
    比重:5%(5/100冊)
    難度:易
    要点:文法、HTML5
    概要:PHPは、最終的にはHTMLを生成することが多いので、当然、HTML自体についても正確な知識が求められます。HTMLの構造として、正しく適切なマークアップができることが必要です。HTMLは比較的簡単なので、数冊ほどの入門書に目を通すくらいで良いでしょう。
    おすすめのHTML入門書

    ■ 4. CSS
    比重:5%(5/100冊)
    難度:易
    要点:文法、CSS3
    概要:HTMLを学習したならば、HTMLの装飾としての機能であるCSSもセットで学習しておきましょう。最近は、CSS3といって、CSSの多機能化も進んでいます。基礎から最新のCSS事情まで目を通すと良いでしょう。
    おすすめのCSS入門書

    ■ 5. JavaScript
    比重:15%(15/100冊)
    難度:普
    要点:文法、DOM、Ajax、ライブラリ
    概要:PHPがサーバーサイドの言語であるならば、JavaScriptはクライアントサイドの言語です。JavaScriptは従来、HTML及びCSSとセットで学習されてきましたが、PHPと連携させることで、表現の幅がとても広くなります。HTMLやCSSの操作であるDOMはもちろん、PHPとの連携であるAjax、そして、余力があれば、JQueryなどのライブラリまで学習すると良いでしょう。
    おすすめのJavaScript入門書

    ■ 6. Linux
    比重:5%(5/100冊)
    難度:普
    要点:基礎知識、Apache、Bash
    概要:PHPはサーバーで動作するものである以上、サーバー自体の知識も必要です。サーバーの構成そのものや、パーミッション、WEBサーバーであるApache、サーバーを操作するためのコマンド、そして、Bashといったプログラミングまで学習すると効率よく開発と保守ができるようになります。
    おすすめのLinux入門書

    ■ 7. Java
    比重:20%(20/100冊)
    難度:やや難
    要点:文法、オブジェクト指向、デザインパターン、リファクタリング
    概要:PHPの学習に際しては入門書等を利用するのですが、それだけだと、プログラミングの力が不足してしまいます。よりPHPの力を発揮させるには、オブジェクト指向やデザインパターン、そして、リファクタリングといった知識も必要です。こうしたステップアップのための学習をするには、Java言語が最適です。内訳としては、各分野の本を5冊ずつくらいを目途に学習すると良いでしょう。
    おすすめのJava入門書

    ■ 8. C言語
    比重:7%(7/100冊)
    難度:普
    要点:文法、ポインタ、構造体、アルゴリズム
    概要:Javaを学習したら、ついでにC言語も学習するのがお勧めです。理由は、プログラミングの定番コードの説明にはC言語がよく使われること、また、アルゴリズムといった分野ではC言語が多く利用されていることがあげられます。C言語の文法は、PHPやJavaと似ているため学習は比較的楽だと思います。ポインタや構造体などの知識も、あとあとプログラミングの理解を深めるので一通り学習するのが良いでしょう。また、C言語の学習に併せてアルゴリズム関係の本も数冊読んでおくのがお勧めです。
    おすすめのC言語入門書

    ■ 9. C++
    比重:3%(3/100冊)
    難度:難
    要点:文法
    概要:JavaとC言語を学習したら、ついでにC++の入門書にも目を通しておくのがお勧めです。プログラミング言語の中でも最も難しい言語とされているので深入りは不要ですが、簡単な入門書を数冊読んでおくと自信になります。同じオブジェクト指向の言語であるJavaとの比較や、C言語の構造体とC++のクラスの比較などをすると理解が深まります。C言語とC++を合わせて10%くらいを目途に学習すると良いでしょう。なお、最終的には、デザインパターンのGoF本(オブジェクト指向における再利用のためのデザインパターン)を読むのがおすすめです。
    おすすめのC++入門書

    ■ 10. その他
    比重:5%(5/100冊)
    難度:普
    要点:コーディングスタイル、アジャイル開発、テスト駆動開発、環境構築
    概要:主なプログラミング言語を上記で挙げましたが、その他にも、コーディングスタイルについてや、アジャイル開発やテスト駆動開発といった開発手法、そして、gitなどのバージョン管理システムなども学習する必要があります。ここらへんは、必要に応じ随時学習すると良いでしょう。

    以上で、PHPプログラマが習得すべき技術を10個ばかり簡単に解説しました。この他にも、関数型言語やPython、Ruby、perlといったスクリプト言語、そして、スマホ開発に必要なAndroidなどの分野もあります。IT技術はもちろん、プログラミングに限ってもとても広大な分野なので、学習は際限が無いとも言えます。しかし、自分に必要な知識を見極めて効率よく学習できたならそれに越したことはないと思います。この記事が後学の人のために少しでも役立てば嬉しく思います。

  • PHP学習者にお勧めの本10選

    これまで、WEBアプリ制作のために、PHPを中心としてプログラミングに関する本を100冊ほど読んできました。そこで、一つの区切りとして、その100冊の中からプログラミング力の向上に効果があり、実際に役立つと思う書籍を10冊ほどピックアップして紹介したいと思います。

    それでは、おすすめの読むべき順に、書籍の「目的、難度、効果、概要」等を簡単にですが紹介していきます。

    1.パーフェクトPHP (PERFECT SERIES 3)

    目的:PHP学習の総仕上げとして
    難度:難
    効果:大
    言語:PHP
    概要:PHPの文法の基礎から、フレームワークの制作まで。また、セキュリティについても学習できる盛りだくさんな一冊。PHP使いなら是非とも読んでおきたい書籍です。

    2.SQLアンチパターン

    目的:データベースとSQLの総仕上げとして
    難度:普
    効果:大
    言語:SQL、PHP
    概要:データベースとSQLの2つについて、誰もが疑問に思う躓き(つまづき)どころを、要点を絞って、かつ、必要十分に解説した貴重な一冊。データベースの設計は、あとから修正するのが困難なので、早い時期に学習しておきたい書籍です。

    3.体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

    目的:WEBアプリのセキュリティを万全にするために
    難度:普
    効果:大
    言語:PHP、JavaScript、Java等
    概要:WEBアプリの脆弱性とその防止策を網羅した貴重な一冊。WEBアプリの構築の際には、本書に書いてあるセキュリティ事項を常に意識してプログラミングすることが肝要です。

    4.リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

    目的:コーディングの適切なスタイルを習得するために
    難度:易
    効果:普
    言語:C、Java等
    概要:標準的なコーディングがどのようなものであるのかを学習し、そのスタイルを早い時期から意識することで、可読性の高いコーディングが可能となります。コーディング規約に縛られない、独学でプログラミングを学習している人におすすめの書籍です。サンプルコードは易しいので、言語を問わず読むことができます。

    5.増補改訂版Java言語で学ぶデザインパターン入門

    目的:デザインパターンの入り口として
    難度:普
    効果:大
    言語:Java
    概要:プログラミングの文法を学習した後の課題は、どのようにアプリケーションを制作するかです。それに答える設計の標準として「デザインパターン」が存在します。デザインパターンの習得は困難とも言われますが、本書は易しい解説となっているので、デザインパターンの入門として最適です。また、オブジェクト指向の理解が深まる効果も期待できます。

    6.PHPによるデザインパターン入門

    目的:デザインパターンをWEBアプリに活かすために
    難度:普
    効果:普
    言語:PHP
    概要:本書は、PHP言語を利用してデザインパターンを解説しています。デザインパターンの適用例がWEBアプリとなっているので、WEBアプリ制作者にとって貴重な一冊です。他のデザインパターン本と併せると理解が一段と深まります。

    7.新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

    目的:アプリケーションの改善力を高めるために
    難度:難
    効果:大
    言語:Java
    概要:既存のアプリケーションを改善する手法として「リファクタリング」が知られています。本書では、様々な改善手法が紹介されており、お手本がどのようなもであるかを意識して、一つひとつ実践することで、プログラミング力が向上します。その結果、よりよいコーディングとアプリケーションが一歩ずつ実現できるでしょう。

    8.Java言語で学ぶリファクタリング入門

    目的:リファクタリングの理解を深めるために
    難度:普
    効果:普
    言語:Java
    概要:書籍「リファクタリング」を、より簡単に易しく解説した書籍です。これら2冊を読み込むことで、リファクタリングの肝がよく見えてきます。要点を押さえるには本書が役に立つと思います。

    9.パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法

    目的:デザインパターンとリファクタリングの総合的な学習のために
    難度:難
    効果:普
    言語:Java
    概要:リファクタリングは、デザインパターンと密接に関連しています。そこで、両者を関連付けて総合的に理解することが重要です。よりよい設計のためにデザインパターンを学習し、それを実現するためにリファクタリングを学習します。

    10.オブジェクト指向における再利用のためのデザインパターン

    目的:デザインパターンを深く理解するために
    難度:難
    効果:大
    言語:C++
    概要:「デザインパターン」の原典です。いわゆる「GoF本」として知られる有名な書籍です。プログラミングの学習の一つの到達点として、是非とも読んでおきたい一冊です。ただ、惜しむべきは、C++でサンプルコードが書かれているため、学習のハードルが一段ほど高くなっています。もっとも、C言語とJavaの既習者であるならば、C++の基礎を学習するのは困難でないため、C++の入門書を片手に、本書を読んでも理解できるのではないかと思います。本書を読了すれば、自己のプログラミング力に大きな自信が付いているはずです。

    以上、これまでに読んだ本の中からおすすめの10冊をピックアップしました。もちろん、これら以外にも、良書はたくさんありますし、読んでいない本の中にも素晴らしい書籍があると思います。また、関数型言語等には手を出していないのでそれらの本も抜けています。

    ここで紹介した本については、後半からデザインパターンとリファクタリング関連の本に偏ってしまった感もありますが、これらの事項を理解すれば、多くの言語でも通用するプログラミング力がつくのではないかと思います。

    プログラミングを学習し始めた当初は、100冊以上読めばハッカーレベルの知識を獲得できると想像したものですが、現実には、それは妄想に過ぎませんでした。多少の自信は付きましたが、100冊を読了しても、まだまだスタートラインに立ったばかりという思いがします。

    今後、余力があれば、ネットワークの分野とサーバーの分野についても100冊ずつくらい読んでみたいとも思います。合計で300冊も読めばハッカーに少しは近づけるのでしょうか?想像、もとい妄想がまた捗ります。

    【注意】
    上記本の紹介はページ作成時点での最新版です。時間の経過とともに、新たな版が出る可能性があるのでご自身にてご確認ください。

  • 【書評】プログラマが知るべき97のこと

    プログラマが知るべき97のこと の書評です。

    結論から言うと、プログラマの上級者を目指すなら一度は目を通しておきたい、プログラミング技術のエッセイ集です。

    ■ 良い点
    ・ プログラマとして向上するためのヒントが豊富
    ・ 扱われるトピックの範囲が広い
    ・ 特定の言語に依存していない
    ・ カテゴリ別の目次がある
    ・ 翻訳が読みやすい

    ■ 悪い点
    ・ 並び順がバラバラ(一応、カテゴリ別の目次もある)
    ・ 文字が少し小さい

    ■ 総評
    プログラミング技術に関して、81人もの先達から貴重な教えを学ぶことができる一冊です。97のエッセイに、日本人による10のエッセイが加わり、全部で107となっています。

    各トピックは見開き2ページとなっており、好きなテーマ、興味のあるカテゴリから読むことが出来ます。個人的には、カテゴリ別の目次に従い、カテゴリ順に読むことをお勧めします。

    レベル的には、プログラミング暦が2~3年前後の中級者を想定している感じです。つまり、中級者から上級者への指針となっています。

    内容的には、基礎的なことから応用的なことまで、広い範囲のことが扱われています。本書の内容をほぼ消化できるなら、中級レベル以上にあると言ってよいでしょう。

    本書に一通り目を通すとプログラマとしての自分の立ち位置を知ることができ、今後の指針になると思います。

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