全くの未経験者にプログラミングの本を薦めるなら

はじめに

僕が職業プログラマーになったのは今(2020年9月)から約2年前(2019年1月)で本格的にプログラミングを勉強し始めたのは約2年半前(2018年4月)です。

まだ自分が全くの未経験者だった頃のことを覚えているのでその頃に読んでとてもよかった本を紹介したいと思います。

オススメの対象は下記のような感じです。

  • 全くのプログラミング未経験者
  • 本格的にプログラマーを目指すかどうかも決まっていない
  • 作ってみたいものがあるわけではない

プログラミングで作りたいアプリがある!などの明確な目標がある場合はこの本ではなくアプリのために必要な本でも読んですぐにでも作り始めた方が良いと思います。

そうではなくて、プログラミングのための基礎体力を付けたいもしくはプログラミングに挑戦してみたいけど何からやったらわからない、というような方にはオススメです!

この本

プログラムはこうして作られる

優れていると思う点

この本をオススメしたいのは下記の観点から優れていると思われるからです。

  • 本一冊で全てが完結
  • 良い習慣を学ぶことができる
  • 試金石になる(と思う)

一つずつ説明してみたいと思います。

本一冊で全てが完結

この本のテーマは「Sunaba」というプログラミング言語を使用してテトリスを作ることです。 Sunabaはこの本のために使用される専用のプログラミング言語です。

Sunabaは初心者のために本の著者によってデザインされた言語です。この本の目標を達成するために必要な知識は全てこの本の中に書いてあります。

これによって読者は初心者の心を折る下記のような諸々の現象から守られます。

  • 言語の仕様を調べるために別の本を読まなければいけない
  • バージョンの違いによって予期せぬ動作に遭遇
  • 環境構築がうまく行かずに本題に入る前から途方にくれる

実際に仕事でプログラムを書くために必要なスキルは下記のようにいろいろあると思います。

この本では上に挙げたようなスキルにについては扱いません。 もっと大切なことに読者を集中させるようにデザインされています。 集中は何かを習得するのに最も大切な要素の一つだと思います。

それでは何に集中するのでしょうか?

もっと根本的・基礎的でかつ面白い部分です。 次のパートで説明してみたいと思います。

良い習慣を学ぶことができる

前述のようにこの本では「Sunaba」というプログラミング言語を使用します。これは実際に現場でプロが製品のために使用するプログラミング言語ではありません。あくまで練習用のプログラミング言語です。

なので仕事で使うようなプログラミング言語の使い方を学ぶ事はできません。

ではこの本から学べることは何なのでしょうか?

それは良いプログラミングのための精神的な習慣だと思います。 それはもちろん仕事でも使うことができる本物の思考法です。

僕は良い習慣を身につければ良いプログラマーに慣れると信じています。 習慣なのでIQ的な頭の良し悪しとは関係ありません。繰り返し訓練して身に付けてしまえば良いのです。

また、センスとか呼ばれている物とも関係ありません。というかこういう習慣こそがセンスと呼ばれているものの正体なのではないでしょうか? つまり訓練を積んで良い習慣を身につければセンスの良いプログラマーになれるとも言えると思います。

エンジニアリングの文脈ではベストプラクティスという言葉がよく使われます。

ベストプラクティスとは簡単にいうとその道の先人達が試行錯誤の末に築いた最良の方法という意味です。 ベストプラクティスを発明するのは天才的に「頭の良い」エンジニアだったり生まれながらに「センスの良い」プログラマだったりするのでしょう。

これはプログラミング自体のベストプラクティスが詰まった本とも言えると思います。 この本ではベストプラクティスに到るまでの思考を読者に再現させ繰り返し演習を行いその意味を解説します。

プログラミングのベストプラクティスを学んでそれを習慣化することができれば上記のようなすごいプログラマの思考を継承することができるということになると思います。

これは最高にワクワクするアイデアではないでしょうか?

試金石になる(と思う)

この本は初心者向けではありますが 簡単な本ではありません

分量もそこそこありますし、章が進むにつれ難易度も上がっていくように設計されています。 また、徹底的に自分の頭で考えさせることに重点を置いておりかなり難しい部分もあります(少なくとも僕にとってはそうでした)。

ただ、その分プログラミングについて深く考える機会が多く設定されており、頭を捻って考えたあとは学んできたことに対して新しい見方ができるようになってハッとすることがあります(アハ体験とかいうんですかね?)。

そういう体験が面白い!と感じられる人はプログラミングとかエンジニアリングとか言われるものにとても向いているんじゃないかと思います。そういうのが好きな人はそれを得るための努力を惜しまないと思います。

この本に対する反応は下記のどれかだと思います。

  1. 特に何とも思わずに読み終わる
  2. ひたすら楽しんで読み終わる
  3. 苦しみながらも楽しんで読み終わる
  4. ひたすら苦しんで読み終わる
  5. 途中で読むのをやめる

1は天才ですね。天才なのでプログラミングでもなんでもできると思います。

5の人もプログラミングに向いていないとは言えないと思います。ただ、この本では判断できないというだけです。 一冊の本のことを楽しめない理由なんていくらでもありそうですよね。例えばこのブログポストが気にいらないとか。

2と3の人にとってはプログラミングは真剣に取組む価値のあるものと言えると思います。

4の人も5の人と同じで向いていないとは言えないと思います。

ただ楽しいと思わないことをやり続けるのはやめた方が良いような気はします。 プログラマーは一生勉強し続けるようなところがあるので苦しいことをやり続けるのは不可能だと思うしそもそも意味がなさそうですよね。 そのような人にとってはプログラミングは取り組む価値のないものかもしれません。

終わりに

「良い習慣を学ぶことができる」という意味では他にも下記のような本も勉強になったと感じています。

また全体的なプログラミングへの考え方はハッカーになろうという文章から強い影響を受けていますので合わせてご紹介したいと思います。