プログラミング入門—正しい学び方ガイド
¶ はじめに
情報が爆発的に増えたこの時代、「自分もプログラミングを学んでみたい」と思う人は多いはずです。理工系の学生にとって、プログラミングができることは英語が話せることと同じくらい重要で、科学データの処理にはプログラムが必要になる場面がよくあります。商学系・文系の学生にとっては必須ではないかもしれませんが、少しでも理解していると非常に役に立ちます。エンジニアが何を考えているかが分かりやすくなるだけでなく、日常的な事務作業でも小さなスクリプトを書いて面倒な作業を自動化できるかもしれません。

¶ どうやってプログラミングを始めればいい?
プログラミング言語を学びたいなら、次のような方法を検討するとよいと思います。
-
「XX 言語入門」の本を買う/借りる
これは私がいちばんおすすめする方法です。個人的な経験では、本で学ぶのが最も効率的でした。本は学習項目が体系的に整理されていて、入門書同士の差もそこまで大きくありません。自分が気に入った一冊を選べば十分です。 -
オンライン学習プラットフォームで「XX 言語入門」の講座を受ける
有名どころをいくつか挙げます。台大・清大・交大のオープンコースウェアには良い講義がたくさんあります。公開されている時点で良い授業であることが多いので、安心して学べます(台清交の学生もこうして学んでいます)。Coursera の講座は、教えるのが上手な海外大学の教授が担当していることが多く、基本的に英語ですが中国語字幕が付いています。証明書を買わなければ無料で学習できます。Hahow は中国語の商業講座プラットフォームで、業界の講師が授業を提供していることが多く、料金はだいたい 1,000〜2,000 元程度です。私は一度購入しましたが、内容と価格を比べるとコスパが高いと感じました。 -
スキル交換/誰かに教えてもらう
以前、私はデザイナーとスキル交換をしたことがあります。彼女が絵を教えてくれて、私がプログラミングを教えるという形です。こういう友人がいれば、とても面白い学び方になると思います。もちろん家庭教師を探したり、友人に教えてもらったりしても良いでしょう。お茶をご馳走して 1 回教えてもらうだけでも、エンジニアの友人は喜んでくれるはずです。 -
ネット上のさまざまな入門記事を読む
この方法はあまりおすすめしません。初心者にとってネット上の情報の質を見極めるのは難しく、しかも情報が散らばっているため、学習ルートも判断しづらいからです。ただ、知り合いに経験者がいるなら、その人に学習リソースを組み立ててもらうのは良いと思います。経験豊富なエンジニアなら「何を先に学ぶべきか」「何は後でいいか」「何は必須で何は必須ではないか」を判断できます。そのため、私は自分ひとりで Google して「Python 入門」を探すことはあまりおすすめしません。検索自体は悪いことではありませんが、見つかった情報が本当に役に立つとは限らず、逆に遠回りをしてしまう可能性もあります。最善の方法は、経験者にネットの情報をフィルタリングしてもらうことです。
¶ どのプログラミング言語を学ぶべき?
学ぶ言語は大きく 2 つのタイプに分けて考えると分かりやすいと思います。商学系・文系の場合、プログラミングで最も重要なのは「プログラミングの概念を理解すること」と「プログラムで日常の小さな問題を解決できること」です。たとえば簡単なデータ処理などです。簡単なプログラムが書けるようになると、エンジニアが何を言っているかも理解しやすくなり、コミュニケーションもしやすくなります。
一方、科学・工学系の場合は、プログラミングをより深く理解する必要があります。細部の理解が問題解決に根本的な影響を与えるからです。プログラム構造や性能の観点でも良い設計が求められますし、研究でも業界のプロダクトでもソフトウェアへの要求は高くなりがちです。
以上の 2 タイプを踏まえると、入門言語としておすすめなのは次の通りです。
- 商学系・文系:Python
- 科学・工学系:C/C++
¶ なぜ商学系・文系は Python なのか?
Python を選ぶ理由は、シンプルで複雑な文法が少なく、さらに(C++ を学ぶときに必要になるような)より高度な概念をいくつか省略できるからです。初心者にとってとても学びやすい言語です。
Python はインタプリタ言語です。つまり、1 行書いて 1 行実行できます。初心者にとってはとても便利で、プログラムを全部書き終えてからでないと動かせない、ということがありません。
たとえば Python では次のようなことができます。

まずターミナル(コマンドライン)を開きます。> python は Python を起動するという意味です。
>>> はユーザー入力を表します。1 行ずつ入力すると、その行がすぐに実行されます。print() を呼ぶと、数値が即座に出力されます。
この画像が何を意味しているか分からなくても問題ありません。一般的な教材で、コードの書き方や始め方は説明されます。ここで言いたいのは、開発インターフェースの「対話性」が高いということです。
Python を学ぶときは、本や講義動画に沿って実際に入力し、出力結果を観察しながら進められます。手を動かすことが理解に最も役立ちます。
本の構成に従って、「変数の宣言」「if/else による分岐」「for ループ」「関数の定義」「ライブラリの利用」「ファイル入出力」などの重要概念を 1 つずつ学びながら、途中で小さなプログラムを書いて練習してみてください。たとえば「1000 以下の素数をすべて求める」などです。
Python のもう 1 つの利点として、Jupyter Notebook のような可視化ツールを使ってプログラミングできる点があります。Jupyter は Web インターフェースで、対話的に Python を書けるため、ターミナル/コマンドラインを理解していなくても、より気軽に始められます。
Jupyter の画面は次のような感じです。

簡単な Python が書けるようになれば、たとえば複数ファイルの一括リネームや、CSV を読み込んで平均や標準偏差を計算する、といった作業ができます。さらに、現在のデータサイエンスや機械学習は Python を使うことが多いので、その方面に興味があれば関連資料も見つけやすいでしょう。
¶ なぜ理工系は C/C++ なのか?
C/C++ は C と C++ の両方を指します。C は早く生まれ、C++ は後から C を改良して作られました。どちらも現在広く使われています。
なぜ C/C++ をおすすめするのでしょうか?
最大の理由は、C/C++ を学ぶ過程でコンピュータの原理をより深く理解できることです。その中でも特に重要なのが、メモリを操作できること、つまりポインタ(Pointer)の概念です。Python や JavaScript のような言語はメモリ操作を隠しているため、このような低レイヤの理解には向きません。
工学的な問題を扱うとき、メモリ資源を効率よく使うことは重要な要素になることが多いです。メモリを扱えるからこそ、精密にメモリを制御できます。これが、C/C++ で書いたプログラムが Python で書いたプログラムより速くなりやすい理由でもあります。
学び方自体は Python と同じで、本の構成に従いながら「変数の宣言」「if/else による分岐」「for ループ」「関数の定義」「ライブラリの利用」「ファイル入出力」、そして重要な「ポインタ」などの概念を 1 つずつ学び、途中で小さなプログラムを書いて練習します。違いは、C/C++ はコンパイル言語なので、基本的には一度書き終えてからコンパイルし、コンパイル結果を実行する必要があることです。
なお、C++ にはオブジェクト指向(OOP)やテンプレート(Template)といった概念もあります。初心者は最初から無理に理解しなくても大丈夫です。
C は組込みシステムや OS の分野で広く使われているため、これらの分野に入門したい人には C をおすすめします。
そうでなければ、私は最初から C++ を学ぶことをおすすめします。C++ は長い時間を経ても廃れず、多くの大型アプリケーション(ブラウザ、ゲーム、動画編集ソフトなど)はほぼ C++ で書かれています。システムプログラミングでも C++ を使うことが多く、応用範囲の広さから、プログラミング言語とコンピュータ原理の入門言語として非常に適しています。
そして C/C++ を学んだ後には、Python も学んでおくべきです。C/C++ を使って小さな作業をするのは面倒ですから。C/C++ ができれば、Python もきっとスムーズに学べるはずです。
¶ Python や C++ から始めないといけない?
世の中にはたくさんの言語があります。「Java や Rust や JavaScript ではダメなの?」と思うかもしれません。
もちろん、Python と C++ はあくまで私のおすすめであり、他の言語を学んでも構いません。プログラミング言語の基本概念は共通しているからです。
ただ、私の見立てでは、最初に別の言語を選ぶと障壁が増えることがあります。Python に近い言語として JavaScript がありますが、JavaScript は多くの場合「同期/非同期」の概念を理解する必要があり、初心者にはすでに難しすぎる(つまり上級概念)という問題があります。
C++ に近い言語には Java や Rust があります。Java はコンパイル言語ではありますがポインタがなく、広く使われているもののメモリを扱う観点では C++ に劣ります。Rust はポインタに相当する概念を持っていますが、安全性を重視する設計のため、所有権(Ownership)やライフタイム(Lifetime)といった概念が出てきます。実際どの言語でも最終的には必要になる概念ですが、最初から理解する必要はなく、通常はもっと上達してから学びます。Rust はそれを最初から要求するため、初心者にはハードルが高すぎます。
そのため、最初の言語として他を選ぶことは、私はあまりおすすめしません。
¶ 入門の次にやること
私はよく「プログラミングを学ぶのは英語を学ぶのに似ている」とたとえます。必須スキルで、入門は簡単でも極めるのは難しい。プログラミング入門は英語でいえば初級レベルのようなもので、少しは話せるようになったけれど、まだ浅く、ここから大量の練習と努力が必要になります。
英語をどう学ぶかを考えてみてください。大量の読書と作文です。プログラミングも似ています。練習を積むだけでなく、さらに上に行くにはコンピュータサイエンスの基礎知識を学ぶ必要があります。
¶ コーディングの練習
練習は最も効率の良い学習方法です。本当に理解できたかを検証できます。私は 1 つの概念を学んだら「高中生解題系統」で練習することをおすすめします。中の「分類題庫」を選ぶと、学んだ概念に応じた問題を素早く探せます。

たとえば「a006: 一元二次方程式」は二次方程式を解く問題で、中学で習った解の公式を使います。途中で平方根を計算するために数学ライブラリを使う必要があり、また $4ac-b^2 >= 0$ を if で判定して実数解が存在するかを確認する必要があります。
初心者にとっては、a で始まる系列の問題を一通り練習すれば、だいたいプログラミング入門レベルに到達したと考えてよいでしょう。
¶ さらにプログラミング力を伸ばす
入門を終えてさらに強くなりたいなら、次に学ぶべき 3 つの科目があると私は思います。それは「アルゴリズムとデータ構造」「オペレーティングシステム」「コンピュータアーキテクチャ」です。私は「軟體工程師必修的三門課」で詳しく紹介しました。
ざっくり言うと、データ構造とアルゴリズムはプログラムを効率よく書く助けになりますが、システムレベルの問題は解決できません。システムレベルの問題には OS の原理が必要で、Windows や Linux が内部でどう動いているかを理解することで、プログラムをそのシステム上でより速く動かすことができます。OS でも解決できない問題はコンピュータアーキテクチャの理解が必要になり、アセンブリ、メモリ機構、CPU 設計など、ハードウェア寄りの知識が関わります。ハードウェアを理解してこそソフトウェアを速くできます。
これらの講義は台大・清大・交大のオープンコースでも提供されています。私は台大の 張智星 教授の「資料結構與演算法」を特におすすめします。各回の録画があり参考になります。また、台大の 陳蘊農 教授の「演算法設計與分析」もおすすめで、アルゴリズムの上級版です。
将来 CS に進みたい、またはソフトウェアエンジニアになりたいなら、CS の基本素養を育てる必要があります。デバッグ技術、良いコーディング習慣とスタイル、コードを読む力、開発の協調とプロセス、コンピュータに関する基本知識などです。これらについては「資工系所學生的基本素養」で詳しく議論しています。
¶ アプリケーション開発
簡単なスクリプトだけでなく、アプリケーションを作りたいと思うかもしれません。プログラミングの基本概念(関数、ループ、ファイル処理など)が分かれば、Web サイト、アプリ、チャットボットなどの開発を学ぶのも良いでしょう。これには新しい言語が必要になることがあります。たとえば Web なら HTML、JavaScript、CSS が必要ですが、すでにプログラミングができるなら入門は難しくありません。Android なら Java や Kotlin が必要になるかもしれませんが、基本的なロジックは同じなので学びやすいはずです。
データサイエンスに興味があるなら、Python を学んだ後に NumPy を理解すると良いでしょう。Python 上で数学計算をしやすくするライブラリで、簡単な数学モデルを実装し、機械学習、深層学習、NLP などの問題に取り組めます。O’REILLY のデータサイエンス関連の本は良いものが多いと思います。基本的にはプログラミングの概念が分かれば十分で、残りは数学の理解です。つまり、数学をコードに落とし込める能力さえあれば、データサイエンス学習においてプログラミングは障壁になりません。
¶ 結論
本記事では、プログラミング言語を学ぶ具体的な方法を提案しました。正しい方法で学ぶことは重要で、無駄な試行錯誤を減らせるはずです。「3 時間で Python を理解する」「Python 超速入門」といった本や記事を信じないでください。多くの場合、読んでも結局分からないままです。体系的に概念を学び、学んだ概念を使って実際にプログラムを書く練習をすることこそが、習得の鍵です。
本記事の方法は、読書でも動画でも人に教わるでも、どれも良い選択肢です。初心者の 2 タイプに対して、私はそれぞれ Python と C/C++ を最もおすすめしました。基本概念を理解した後は、アプリ開発に進むこともできますし、引き続きプログラミング力を高めることもできます。