NEOREX

プログラミング入門におすすめの本と、エンジニアとしてのあるべき姿勢

プログラミング入門におすすめの本と、エンジニアとしてのあるべき姿勢

はじめに:プログラミング初心者に向けて

プログラミングを始めたいと思っている人は多いと思います。しかし、いざプログラミングを始めようと思っても、覚えることが多くて、どこから手をつけていいのか分からないかも知れません。

この記事では、まだプログラミング初心者だけど本格的にプログラミングを学びたい人や、プログラミングを独学しようとしているが何から始めたらいいか分からない人に向けて、プログラミング入門におすすめの本や、エンジニアとしてあるべき姿勢を紹介します。

以下には、趣味でプログラミングをするだけなら必ずしも気にしなくてよい内容も含まれます。しかし、筆者が重要だと考えることは多少難しい内容でも書くことにしました。将来エンジニアになりたい方や、きちんとした技術を身につけたい方の参考になれば幸いです。

筆者について

筆者は、技術グループ開発チームに所属しており、2022年現在入社7年目です。現在は主に、クラウド勤怠管理システム キンタイミライの開発およびAWS (Amazon Web Service) の運用に携わっております。

大学時代は数学を専攻しており、プログラミングの経験は大学の授業程度でした。ネオレックスに入社してから、独学でプログラミングを勉強し始め、最初はJavaScriptやRubyで簡単なツール等を作っていました。入社2年目の途中から開発チームに異動になり、それ以降は業務でもプログラミングをしています。

仕事で使っている言語は主に、C# (キンタイミライのサーバーサイド) とJavaScript (キンタイミライのクライアントサイド) ですが、必要であればPythonなど他の言語も使います。

プログラミングの前に

プログラミングの入門書を紹介する前に、プログラミングを学ぶ際に意識した方がいいと筆者が思うことを述べます。

プログラミング ≠ プログラミング言語

まず強調しておきたいことは、プログラミングに必要な知識はプログラミング言語だけではない、ということです。

もちろん、プログラミング言語を習得することは重要です。むしろ、1つのプログラミング言語を極めるくらいのつもりで学習に臨むべきだと思います。しかし、それと同じくらい重要な技術が他にもたくさんあります。

たとえば、他の端末やサーバーと通信するプログラムを書くにはネットワークの知識が必要です。ユーザーの情報が第三者に公開されないようにしたり、不正なプログラムが実行されないようにするにはセキュリティの知識が必要です。作ったプログラムを動作させるサーバーやOS等の知識も必要です。

プログラミング言語以外の技術を知らないと、コーディング以外の部分はブラックボックスになっていたり、文法等は覚えたが実用的なソフトウェアを作るには何をすればいいのか分からなかったり、ものすごく非効率であったり脆弱なプログラムを生み出してしまったり、といったことが起こり得ます。

したがって、プログラミング言語は飽くまでもコンピュータの技術の一環であると捉えて欲しいと思います。もちろん、最初からすべての技術を知る必要はありませんが、プログラミング言語を学ぶ際も、背後にある仕組みや関連する技術を意識することが重要です。気になることが出てきたら、その都度調べたり他人に聞いたりして、幅広く知識を吸収するようにしましょう。

最初はスクリプト言語(PythonやJavaScriptなど)がおすすめ

プログラミングをやると決めたら、どのプログラミング言語を学ぶか選ばなければいけません。今日では非常に多くのプログラミング言語がありますが、最初はいわゆるスクリプト言語から始めるのがよいと思います。

プログラミング言語には、大まかに分ければ、ソースコードから実行可能なファイルを生成して実行するものと、ソースコードを変換せずに実行するものがあります。後者のうち、比較的簡易に記述できるよう設計されたものをスクリプト言語と呼びます。

一般的にスクリプト言語は、開発環境の構築が簡単で、ソースコードの記述量が少なく、書いてすぐに実行することができます。そのため、コーディング以外の部分でトラブルに陥ることが少なく、初心者でも挫折しにくいです。

スクリプト言語の例には、以下でも紹介するPythonやJavaScriptなどがあります。これらは初心者でも習得しやすい言語ですが、本格的なソフトウェア開発でも使われる言語であり、きちんと学べばプロでも通用する技術になります。

おすすめのプログラミング本

以下、プログラミング初心者向けの定番の入門書で、筆者おすすめの本を紹介します。

プログラミング言語の入門本

この節で紹介する2冊はどちらもプログラミング言語の入門書です。

PythonとJavaScriptの本を紹介しますが、プログラミング初心者はまず1つの言語を習得することをおすすめします。書店で本の実物を手にとったり、ネットで言語の特徴を調べたりして、興味を持った方を学んでみて下さい。

Pythonは広く使われており、便利なライブラリもたくさんあるので、手軽にできることが多いです。そのため、とりあえず一つ習得したい場合にもおすすめです。

JavaScriptはChromeやFirefoxといったWebブラウザ上で動作させることができます。その場合は特別な環境構築は必要ありません。HTMLやCSSを書けて、Webページに動きをつけたい場合などにおすすめです。

 

退屈なことはPythonにやらせよう


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

よくある定型業務をPythonを用いて自動化する方法を紹介した本です。

前半はPythonの文法の解説になっているので、これ一冊でPythonの入門書としても使用できます。

後半では、ファイル操作やWebスクレイピングなど、実用的なトピックが豊富に載っています。本書を読めば、たとえば大量のファイルの移動やリネームをしたり、大量のテキストファイルから特定の文字列を含む行を取得したり、Webページを自動でダウンロードするプログラムが作れるようになると思います。

例が多く載っているので、「文法等は覚えたが、やりたいことがない」という人にもおすすめです。

 

JavaScript本格入門


改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScriptの定番の入門書です。

この本は、筆者が入社して初めて読んだプログラミングの本です。

データ型や制御構文などのプログラミング基礎から初めて、クラス、DOM操作、Ajaxなどの進んだ機能まで丁寧に解説しています。細かなところまで解説しているので、基礎をしっかり習得したい人におすすめです。

本書を読めば、自作のWebページに動きをつけたり、Webブラウザ上で動く簡単なゲームなどを作れるようになると思います。

プログラマ向けの読み物

この節で紹介するのは、プログラマー向けの読み物です。

2冊紹介しますが、どちらもコーディングに関わる本ですので、簡単なプログラムが書けるようになった段階で読むとよいでしょう。具体的には、条件分岐・繰り返し・関数定義などが使えるようになったくらいの段階です。

サンプルコードはC++、 Java、 JavaScript、 Python、 Rubyなどで書かれていますが、高度な機能には触れていないので、1つの言語を知っていればコードの意味は理解できます。

 

リーダブルコード


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

読みやすいソースコードを書くためのコツをまとめた本です。

この本は絶対に読んで欲しい本です。

一般的にソースコードは書く時間よりも読む時間の方が圧倒的に長いものです。したがって、ソースコードは他人が読んで最短で理解できるように書かれていなければいけません。この「他人」というのは、数ヶ月後のあなた自身かも知れません。

本書で特に詳しく論じられているのは、良い変数名や関数名の付け方です。たとえば、数値の合計を表す変数ならば、aresult よりも sumtotal の方が意味が伝わります。さらに、その変数が金額の合計を表しているならば、totalAmount などの方がより適切でしょう。

コードの読みやすさはプログラムの動作に直接影響は無いので、その重要性はあまりピンと来ないかも知れません。しかし、筆者はコードの読みやすさは、セキュリティやパフォーマンスなどと同じソフトウェアの品質であると思います。理解しにくいコードは、理解しやすいコードよりも変更に時間がかかり、変更時にバグも混入しやすくなるからです。

 

達人プログラマー


達人プログラマー(第2版): 熟達に向けたあなたの旅

より良いプログラマーを目指す人のための手引きです。

この本もすべてのページを熟読する価値がある名著だと思います。設計やコーディングの考え方、エンジニアの姿勢、プロジェクトの進め方など、幅広いトピックについて重要なことが書いてあります。

この本は「DRY原則」を提唱した本として有名です。DRYとは、Don’t Repeat Yourself (繰り返しを避けよ)の略で、同じ情報を複数の箇所に記述しない、という原則です。たとえば、同じ処理や値がソースコードの複数の箇所に書かれていると、その処理や値が変更されたとき、それが書いてあるすべての箇所を修正しなければいけません。この場合は、関数や定数を使うことで変更箇所を一箇所に減らすことができます。

DRY原則はソースコードの重複にのみ適用されるものではなく、システム全体で情報の二重化を避けるというものです。たとえば、ビルドやテストなどの作業の二重化、ドキュメントの二重化などにも適用されます。後の節に出てくる、ドメイン言語やテキスト操作などは二重化した作業やデータを一元管理し、作業実行やデータ生成を自動化するのに役立ちます。

本書にはDRY原則以外にも、プログラミングにとって普遍的な考え方や作法が載っています。初心者にはやや難しい内容もありますが、分からない用語は調べるなどして、是非最後まで読んでいただきたいです。

エンジニアとしてあるべき姿勢

最後に、プログラミングの際に意識するとよい、と筆者が思うことを紹介します。以下は筆者の個人的な意見ですので、万人が同意するものではないかも知れません。しかし、きちんとしたエンジニアを目指すのであれば、どれも出来るようになるべきだと思います。

プログラミングにおいて単に「動くコードを書く」ことは実はとても簡単です。しかし、作ったソフトウェアを公開したり、プログラミングを仕事にしたりする場合は、自分の書いたコードに責任を持たなければいけません。そのためには、以下のようなことが必要になると思います。

自分の書いたコードを説明できるようにする

自分が書いたコードは一行の例外も無く説明できるようにしましょう。

「何を目的とした処理なのか」「どのような入力に対してどのような出力を返すのか」といったことを曖昧さのないように説明できるようにしましょう。それらが歯切れよく説明できないとしたら、言語仕様の理解が不十分であったり、ひとつのクラスやメソッドが役割を持ちすぎている可能性があります。そのような時は、分からない機能を調べたり、プログラムを分割して見通しを良くしましょう。

「リーダブルコード」の節でも述べたように、ソースコードは書かれる機会よりも読まれる機会の方が圧倒的に多いものです。書いた本人が説明できないコードを他人が理解するのは無理です。これがもし会議資料、プレゼンテーション、メールなどの文書であれば、「それはなぜですか」「この用語はどういう意味ですか」「それは具体的にどういうことですか」などと尋ねられても答えられるように(そもそもそのような疑問がなるべく出ないように)準備するはずです。それと同じことをソースコードに対しても行って下さい。

ググって出てきた個人ブログのサンプルコードをコピペして、「よくわからんが、まぁ動いてるからヨシ」などは絶対にしてはいけません

公式のドキュメント読む

調べ物をする際は、公式またはそれに準ずる十分に信頼できる文献で情報を得ましょう。

公式(あるいは準公式)のドキュメントは、たとえば

などです。O’reillyなどの信頼できる出版社から出版されている書物を参考にするのもよいでしょう。

インターネットの二次情報は誤りが多いです。内容が不正確であったり、一応正しく動いたとしても非推奨なやり方であったり、本来別の目的に使う機能を裏ワザ的に用いているものが少なくありません。もちろん、調べ物をしている中で個人のブログ記事などを参考にすることもあるでしょうが、得られた情報は信頼できる情報源で真偽を確認するようにしましょう。

エラーメッセージ・ログ・デバッガ等の出力を確認する

プログラムが意図通りに動かない時、ソースコードを眺めていても問題は解決しません。

エラーが出た場合、エラーメッセージやログに直接的な原因が書いてあるので、まずそれを読みましょう。そうしても原因が分からないのであれば、手掛かりとなるデータを出力したり、デバッガで値を確認したりしましょう。

当然、データの詳細を確認するには、きちんと言語やライブラリの仕様を理解していることが必要です。また、不具合を調査するには「この関数の戻り値はこの値でなければならない」「この処理を行った段階で、この変数はこの値になっていなければならない」というように、自身が書いているプログラム自体を深く理解している必要もあります。

原因を特定せずに勘で「直す」のはやめましょう。「手当り次第にパラメータを弄る」「バグが報告されているケースだけ動くようにする」などはよくないです。それで上手く行ったように見えたとしても、原因は別のところにあるかも知れませんし、闇雲に修正することで思わぬところに影響が出ているかも知れません。

プログラミング言語以外の技術に関心を持つ

繰り返しになりますが、プログラミングにはプログラミング言語以外にも重要な技術がたくさんあります。たとえばアルゴリズムの知識はプログラムの実行速度を見積もる上で重要ですし、セキュリティの知識が無いと脆弱性のあるプログラムを作ってしまう可能性があります。

また、昨今のプログラミング学習は兎角、特定のツールやプラットフォームの「使い方」や「設定項目」を覚えるという側面が多いです。しかし、ネットワークやOSなどの基礎技術を理解していれば、それらを個別に暗記しなくても、体系的に理解できることが多くなります。

日々使っている技術についても、(たとえ今すぐその知識が必要でなくても)どういう仕組みで動いているのか関心を持つようにして欲しいです。たとえば「普段使っているライブラリはどういう実装になっているのか」「WebブラウザにURLを入力してページが表示されるまでにどのような仕組みが働いているのか」「コンパイラやインタプリタはどのような仕組みでソースコードを処理しているのか」など、気になったら調べたり他人に質問したりしてみて下さい。

おわりに

以上、プログラミング入門におすすめの本と、エンジニアとしてあるべき姿勢を紹介いたしました。

プログラミングの世界は非常に変化が激しく、学ぶことが多くて大変ですが、様々な技術に関心を持ち、着実にできることを増やしていくことが大切だと思います。

この記事が、本格的にプログラミングを身に着けたい方々の参考になれば幸いです。

2022.12.28

? ? ? ?
クラウド勤怠管理システム キンタイミライ
タブレットタイムレコーダー
新卒採用