はるみちゃんのてっくぶろぐ

はるみちゃんのブログだよ。主に技術系の記事を書くよ。

プログラミング初心者が苦しみながら確実な基礎力を身につけるための技術書

確実な基礎力を身につけるために

初学者がいきなりサービス開発をはじめるのも良いと思う。
本をまずは見よう見まねで写経して、少しずつ理解を深めつつ、サンプルコードを改造して自分のサービスを作る。
それができたら一番いいと思うんだけど、そんな事できるのは才能があるやつだなんじゃない?って思う。自分は馬鹿だから無理だった。

というわけで、才能ないけどプログラミングしたい人が泥臭く基礎力を身につけるための技術書を紹介する。

新・明解C言語 入門編

初心者にCはオススメしないとよく言われるが、私はCを学ぶべきだと思う。 Cを一度書いておくと、他の言語に移った時も背後でどういう事が行われているのかを想像する事ができる。

さて、まずは環境を構築して基礎文法を学ばないといけない。そのための本がこれ。
正直この部分に関してはこの本以外でも良い。「苦しんで覚えるC言語」とかも良いかも。

新・解きながら学ぶC言語

文法を理解したところで、初学者はプログラムを書く事ができない。(才能のある人は書けるかもしれないけど)
なので、この本で「最小限のアルゴリズム」を勉強するのが良いと思う。
「最小限のアルゴリズム」とは、例えば

・変数aと変数bの値を交換する
・配列の中の数字で最大or最小のものを発見する
・3つの数字を昇順で並べ替える
・入力された文字列の中に「xxx」という文字列が存在するかを見つける

などが挙げられる。

何故最小限のアルゴリズムを学ぶのが大切かというと、実際のプログラムは最小限のアルゴリズムの組み合わせで出来ているからである。
因みに、これらのアルゴリズムは他の言語だと大体機能としてデフォルトで実装されている。
それを一度自分で実装する事で実装の基礎力が身につく上に、他の言語を書く時、背後で何が行われているか想像する事ができる。
この力はまともにプログラムが書けるようになるためには必須だと思う。

新・明解C言語中級編

解きながら学ぶC言語で最小限のアルゴリズムは理解できるようになると思う。
ただ、それだけではプログラムを書く事ができない。何故ならプログラムは最小限のアルゴリズムの組み合わせで出来ているから。
結局のところそれらを「どう組み合わせて良いか」がわからない。

この本では「じゃんけんゲーム」や「マスターマインド」「記憶力ゲーム」などを実際に作りながら最小限のアルゴリズムを「組み合わせる力」を身につける事ができる。

ここまでやれば、かなり自分で実装ができるようになっているはず。
いきなり便利な言語触ってる奴とは一線を画するアルゴリズム力がついてると思う。

スッキリわかるJava入門

ここまでで最小限のアルゴリズムを組み合わせて、1つのプログラムを実装する力を身につけることができると思う。
ただ、社会に出て扱うプログラムや、世に出ているアプリケーション、Webサービスのプログラムはもっと巨大である。
従って、次は複数のプログラムを構造的に組み合わせて1つの大きなプログラムにする方法、というのを学ばないといけない。

そこで、複数のプログラムを構造的に組み合わせて1つの大きなプログラムにする方法として「オブジェクト指向」というパラダイムが存在する。
この本はそのオブジェクト指向を学ぶのに対して最高の本である。
Webで検索して説明を読んだけどわからない、授業で教わったけどわからない、そんな人もこの本を読めば絶対理解できる。

因みにこの本には「実践編」も存在するが、初学者が基礎力を身につけるためには必要ない。

ここまで理解できたら

Rails入門だとか、iPhoneアプリ作成入門だとかのいわゆる「ハウツー本」に移って良いと思う。 もちろん、ハウツー本は上記の本と平行しながらでも良い。

ここまでやって基礎力を身に着けたら、他の言語、例えばRubyとかPythonも入門サイトで文法を眺めただけである程度書けるようになるし、
技術書はサンプルコードを読むだけでもまあまあ理解できるようになっているはず。

他にオススメな本

以下に紹介する本は私が個人的に読んで良かった!!と思った本。
但し、Railsの使い方!とかそういった本ではない。

Head Firstデザインパターン

オブジェクト指向を理解しても、オブジェクト指向を効果的に使うことは難しい。
その為に先人たちが蓄積した設計のノウハウをデザインパターンという。
この本はそのデザインパターンを最高にわかりやすく解説している。

因みに私は初学者の頃、Java言語で学ぶデザインパターン入門という本も読んだが意味がわからなかった。
初学者にはHead Firstデザインパターンがオススメである。

マスタリングTCP/IP 入門編

ネットワークの知識は何かとあった方が良い。業務で必要とかそういうの関係なしに。
これはC言語を学ぶのと同じ理由で、背後で何が起こっているのかを想像する事ができるようになるからである。

あと、最近は個人レベルでもインフラをクラウドサービスを使って構築することが多い。
その時に威力を発揮する。ドキュメントが理解できるのを実感できると思う。

達人に学ぶDB設計 徹底指南書

DB設計は我流でやっている人が多く、実際に業務レベルのアプリケーションを開発する時に困る人が結構居る。
個人レベルで開発する時もこの本の知識は間違いなく役に立つ。
自分の力になっていることが実感できる一冊。

あと「基礎からのデータベース設計(http://amzn.to/2deIUuZ)」も正規化に関してかなりわかりやすいのでコチラもオススメ。

リーダブルコード

言わずと知れた名著。ただ初学者がいきなりこの本でキレイなソースコードは何か、を学ぶべきではないと思っている。
美的感覚は実務やOSSのコードなどを読んで自然と身につける方が良いと思う。美的感覚といった抽象的な概念は初学者が本を読んでも理解が難しい。
この本は自分の美的感覚がズレていないかを確認する、もしくはたまに読んで自分の姿勢を正す、といった用途にかなり良い。

プログラマ脳を鍛える数学パズル

理屈抜きにアルゴリズム力を鍛えるのに良い本。
ポップな見た目な癖に、結構難しい問題も収録されている。

大規模サービス技術入門

独学では絶対に身につくことのないノウハウが詰まっている。
個人レベルで必要になる機会はほぼないが、読み物としても非常に面白いのでオススメ。
大規模サービスに携わる機会があるなら、事前に読んでおくととても役に立つと思う。