Akio's Log

ソフトウェア開発、プロジェクトマネジメント、プログラミング、ランニングなどなど

Linux/gccプログラミングをこれから始める人にお勧めしたい本

7月ももう終わりですね。
会社の新人研修も一通り修了し、新人達が現場にぼちぼち配属され始めた頃でしょうか。うちの会社はお盆明けからですが。
さて。プロジェクトに配属され、Linux上でのCプログラミングをしなければいけなくなった人達へ、お勧めしたい本を紹介します。本質的な内容の書籍よりは、読みやすいもの、平易なものを選んでみました。

導入編

新人達は、Linuxを触るのも初めて、という人も多いでしょう。という事で、まずは、Linuxとはどんなものなのかを理解してください。
Linux標準教科書 無料ダウンロード LPI-Japan LPICレベル1対応|Linux技術者認定機関 LPI-Japan [エルピーアイジャパン]

このたび、特定非営利活動法人エルピーアイジャパンは、Linux技術者教育に利用していただくことを目的とした教材、「Linux標準教科書(Ver1.1)」を開発し、インターネット上にて公開し、提供することとなりました。この「Linux標準教科書」は、多くの教育機関から、Linux を「基礎」から学習するための教材や学習環境の整備に対するご要望があり、開発したものです。公開にあたっては、「Linux標準教科書」に添付されたライセンス(クリエイティブ・コモンズ・ライセンス)の下に公開されています。本教材は、最新の技術動向に対応するため、随時アップデートを行っていきます。

なんと、こんなに素晴らしい教科書が無料で公開されてます。読むべきです。
Linuxの基礎に関しては、この教科書を読むだけで十分です。他にも「Linuxサーバ構築標準教科書」もあるので、こちらも併せて読みましょう。


もう一つ、手元にあると何かと重宝するコマンドリファレンス本も用意しておくと便利です。

【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)

【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)

この本の良いところは、大まかな機能別で「やりたい事」からコマンドを逆引きできるところでしょうか。あと、Emacsとviのショートカットキー一覧が地味に便利です。

gccプログラミングの第一歩

C言語の基礎を一通り学び、Linuxのコマンドも少し使えるようになったら、さっそくLinux上でプログラムを作り始めてみましょう。

Linux上でのgccプログラミングの初歩の初歩から説明してくれる本です。フォントもデカめで読み易さはダントツ。ファイル、プロセス、ストリーム、パイプ、システムコールAPIなど、図とともに噛み砕いた言葉で説明してくれます。コードも簡単な内容しか書いてないですが、必要最低限な機能だけ実装しているのでわかりやすいです。

C言語プログラミングテクニック

Linux/UNIXのコマンドのソースコードをもとに、プログラミングの実践的なテクニックを紹介しています。アルゴリズムやデータ構造を学ぶには、
定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)
みたいな書籍で学ぶのも良いのですが、こういったテクニック本で実際のソース上でどのように使われるのか、という視点から入るのも良いでしょう。両方勉強するのがベストではありますが。

Linuxシステムプログラミング

ここからが本番。

Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて

Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて

例解UNIXプログラミング教室

例解UNIXプログラミング教室

  • 作者: 冨永和人,権藤克彦
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2007/09/28
  • メディア: 単行本(ソフトカバー)
  • 購入: 6人 クリック: 185回
  • この商品を含むブログ (22件) を見る
「ふつうの〜」での内容を、実践的に、より深く説明されてます。
どちらも例題での実践的なプログラム作成を通して、システムコール/APIの使い方や、プロセス、シグナルの制御、ネットワークプログラミングなどを理解することができます。

本来は、
Linuxシステムプログラミング
詳解UNIXプログラミング
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
みたいな本を読むべきなんでしょうが、ある程度の知識が読み進めないですし、何よりブ厚すぎて、萎えてきます。必要な時に調べるリファレンス的な存在として、会社に一冊ずつ常備しておくような本ですね。

シェルスクリプト

VisualStudioとかEclipseみたいなリッチなIDEではなく、なぜエディタとコンソールで開発するのか。それはおそらく、シェルスクリプトがあるから、と答える人が多いんじゃないのでしょうか。
プログラミングするうえでの様々な(もしくは面倒な)作業を1つのコマンドにまとめて何度も実行したり、複数のファイルに対して同じ処理を繰り返し実行したり、という事が簡単に実現できます。

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

この本は、そんなシェルスクリプトの基礎から理解できるように書かれてますし、もちろん実践的でそのまま使えるようなコードもたくさん載ってます。サーバ構築やシステム管理をやる必要が出てきた人には是非読んでもらいたい本です。

デバッグ

VisualStuioにもEclipseにも高機能がデバッガが搭載されていて、一度使い始めるともうそれなしでは開発できないくらいになります。では、エディタ+コンソールだけの環境では、どうなのでしょうか。

Debug Hacks -デバッグを極めるテクニック&ツール

Debug Hacks -デバッグを極めるテクニック&ツール

基礎的なgdbを使ったデバッグ手法は、これまでの本にも載ってますが、この本はさらに突っ込んだデバッグテクニックを教えてくれます。例えばメモリリークを検出する場合に便利なmtraceやvalgrindといったツールの使い方や、そもそも、バグを作りこまないためにはどうするのか、セキュアなコードにするにはどうすれば良いのかなどが書かれてます。
内容はかなりレベルが高いのですが、セグメンテーション違反のバグが直せねーよー!と泣いているときに開いて読んでみると、かなりの確率で問題が解決できるんじゃないのかと思います。

エディタ

達人プログラマー―システム開発の職人から名匠への道に書かれてるのですが、生産性の高いプログラマになるには、エディタを使いこなす必要があるようです。それこそ「エディタは手の延長だ」とまで言えるようなレベルまで習得すべきでしょう。
UNIX/Linuxを代表するエディタといえば、Emacsとviです。

入門 GNU Emacs 第3版

入門 GNU Emacs 第3版

入門vi 第6版

入門vi 第6版

どちらを選ぶべきか迷いますが、両方使えるようになるのがベストですね。僕個人は、じっくりコーディングするときはEmacsを、設定ファイルの書き換えとか、リモート越しで何か作業しなくてはいけないときは、viを使うようにしています。
Emacsはカスタマイズをして自分好みのエディタに育てあげていくものなのですが、逆を言えば、カスタマイズしなければ非常に使いづらいという一面もあります。ですので、自社での自分の用意した環境で仕事をするときはEmacsを、よそ様の環境ではviという使い分けもしています。
あとは好みですので、自分にあったエディタを探してみてください。


以上になりますが、本を読むだけでは何にもならなくて、実際にソースを書く、動かしてみる、という事が何より大切です。
本物のプロフェッショナルになれるよう、まずは一歩目を踏み出してみてください。