プログラミングが難しいなら、まずこれ読もう

f:id:pontasensei:20190913220011p:plain

 

プログラミングが難しいです。。何からどう手をつければいいんでしょうか?

この疑問に答えます。

僕はいまSE歴7年目の会社員です。プログラミングは大学の頃から始めて、10年くらいやっています。すべて独学でやってきたので、何度も挫折しました。はっきりいって、プログラミングは難しいと思います。ですが、今となって思うのは「どう取り組むべきか」「どうやったら効率よく習得できるか」を理解できれば、あとは一歩ずつ行動していくだけです。本記事を読むことで、プログラミングが上達していくイメージをつかんでもらって、明日からの励みにしてほしいと思っています。

本記事の内容

 

プログラミングが難しい理由

f:id:pontasensei:20190913220716p:plainプログラミングってかなり難しいですよね。僕もそう思います。僕はプログラミングについて、今まで何度もつまずいてきました。なんでこんなに難しいのかについて、僕なりの考えをお話していきますね。

なぜプログラミングが難しいか、結論から言っちゃうと、「ネットで検索して自分で解決できないから」の一言につきます。

プログラミングが難しいのは、ネットで検索して自分で解決できないから。

いまの世の中、ネットで検索するだけで、かなりのことが理解できます。

  • 東京でおすすめのラーメン屋
  • ニキビの治し方
  • 転職のコツ

このあたりのことであれば、検索すればすぐに知ることができますよね。
じゃあ、プログラミングで上達するために、あなたはどのように検索しますか?

検索しようにも、なにをどう調べればいいの?

ってな感じだと思います。大丈夫です、気持ちはわかりますが、この記事を読んでいけば解決できます。

大事なことなので繰り返しますが、プログラミングが難しいのは、ネットで検索して自分で解決できないからです。
具体的に言うと、

  • 何から手をつけたらいいかわからないので、検索のしようがない
  • 知らないことや、難しいエラーが出たけど、どう検索したらいいかわからない
  • 検索したとしても、検索結果で出てきたページに書いてあることが理解できない

といったことです。

もっと具体的に、参考までに僕の経験をお話していこうかと思います。

何から手をつけたらいいかわからないので、検索のしようがない

プログラミングを習得したい気持ちはわかります。ですが、果たしてどこからどう勉強していけばいいのでしょうか。初心者の方が最初にぶつかる壁だと思います。
僕が初めてプログラミングをしたのは大学3年生の頃です。当時は物理学をやっていて、物の動きをシミュレーションするプログラムをC言語で作りました。
初めてのプログラミングだったので、右も左もわからず、研究室の先輩や教授に質問しまくってました。ネットで検索なんてほとんどしていません。

当時の学習サイクル↓

 

わけがわからないので、人から教えてもらう
 ↓
ある程度教えてもらったら、あとはC言語の本を参考にして書いていく
 ↓
エラーとか出るけど、わけがわからないので、やっぱり人に聞く

ということを繰り返していました。

この経験から言えることは、以下の2点です。

  • 人に聞ける環境があると良い。というか、人に聞けないとかなりきついです。
  • 自分でも進められるように、本は買った方がいい。

こうしていくうちに、だんだんとプログラミングの雰囲気をつかんでいくことができて、半年くらいかけて少しずつ自分でネットで検索して解決できるようになっていきました。

 

知らないことや、難しいエラーが出たけど、どう検索したらいいかわからない

どう検索したらいいのさ…!と、悲鳴をあげたくなることがあります。
僕が大学院の頃にやっていたプログラミングは、Facebookのデータ収集です。(物理学→社会工学に転向しました。)言語は主にPHPです。大学でC言語をやっていたときとは違って、すべてネット上でプログラムが動きます。しかもFacebookと連動しながら。
大学院で研究を進めるため、どうしてもFacebook上のデータ収集が必要になり、取り組みました。
レンタルサーバーを借りて、いろいろ設定し、そこにPHPで開発したアプリケーションをアップロード。収集するデータの出力結果も、キレイな形で出てこないと使い物になりません。
その時は、周りに同じことをやっている人がいなかったので、完全に独学で挑みました。C言語ができたんだから、きっと大丈夫だと思っていたんです。
PHP言語の入門書と、Facebookアプリの専門書を買って、あとはググりながらやっていきました。
その時にぶち当たった壁が、これです。↓

カツオ「ていうか、ネット上に情報なくね?」

という問題。
世の中で、おんなじことをやっている人が、なかなか見つからないのです。
正確に言うと、PHPのことやFacebookアプリの解説記事はあっても、自分がやりたいことに対して、ズバリ教えてくれるサイトがなかったです。
とにかくはまり続けて、膨大な時間を費やしてしまいました。
このときに痛感したのは、

  • ズバリ自分と同じことをやっている人が、オンライン/オフラインのどこにもいない。
  • 検索してわかるのはパーツの部分だけ。サーバーの設定だけとか、PHPの書き方だけとか。
  • サーバー、Facebook、PHP…などを組み合わせたときに、体系的な知識が身についていないので、なにがなんだかわからない。

といったことです。

これらについては、かなり遠回りしてしまいましたが、仕組みを理解することから根本的に取り組んでいくことで解決していきました。具体的には、いきなり「Facebookアプリ 動かない」とか検索するのではなく、「レンタルサーバー 仕組み」とかのワードで、ひとつずつ理解を深めていった感じです。

検索したとしても、検索結果で出てきたページに書いてあることが理解できない

f:id:pontasensei:20190914013905p:plain

プログラミングについて、一般的なことであれば、ネット上に充実した解説記事が多くあります。でも、詳しいことやニッチな内容になってくると、とたんに検索結果が冷たくなっていきます。
なぜなら、そういった記事を書ける人が少ないのと、需要がないので書かれない、という2つの理由があるためです。
たとえば、僕の体験の続きで言うと、「Facebook データ収集 PHP」とかで検索したとします。すると、こんなかんじの記事がヒットします。

  • 「おう、よくきたな、おれが書いたプログラムはこれだぜ、ジャーン! →自分がやりたいこととずれている」
  • 「詳しいことは省略するが、いつも通りXAMPの構成で、DNSはお名前.comでOK!」 →難しい専門用語のオンパレードで、とても読めない
  • 「◯◯について参考にしたサイトはこれだぜ」 →見てもわからない

もう、どうしたらいいんでしょうか。悩んでしまいますよね。

こういったサイトたちは、「全く同じことをしたくて、かつ知識も十分にある人」にとっては、すごく意味があるんですが、初心者にはちょっと厳しいです。
どうすればいいかというと、知識をつけるしかありません。

 

プログラミングが難しい理由のまとめと対処法

今までの話をいったんまとめます。プログラミングが難しいのは、ネットで検索して自分で解決できないから。
なぜネットで解決できないかというと、

  1. 最初は人に聞かないと右も左もわからない
  2. おんなじことをやっている人がいない
  3. 専門用語や体系的な知識が足りない

というのが理由です。

それぞれどうやって解決するかと言うと、


1.最初は人に聞かないと右も左もわからない
→先輩や友人に教えてもらう。もしそういった環境がなくて、ある程度お金をかける余裕があるなら、スクールに通うことをおすすめします。スクールでは、プロの先生が手取り足取り教えてくれるので、成長速度をかなり速めることができます。比較的時間に余裕のある人は、ぶっちゃけ独学でもいいかなーと思いますが、どちらかというと時間に余裕がない人は、スクールに行ってしまう方がいいかもです。有名なのはこの3社です↓

2.おんなじことをやっている人がいない
ある程度プログラミングができるようになってくると、だんだん同じことをやっている人がネット上に存在しなくなります。
これは仕方のないことです。なぜなら、「まだ世の中にないからそのプログラムを書くんでしょ」と言いたい。
なので、自分で開拓していくしかないんです。その時に武器になるのは、体系的な知識です。知識の習得方法については、この記事を読んでいけば大丈夫です。

3.専門用語や体系的な知識が足りない
ネットでプログラミングのことを検索しても、内容が理解できないとどうしようもないです。なぜ理解できないかというと、これも体系的な知識が足りていないから。これについては次の章で解説します。

 

プログラミングについて最低限知っておくべきこと

プログラミングを始めるにあたり、最低限知っておいた方がいいことを書きます。というのも、ここを抑えておかないと多分すぐに挫折してしまうから。

 

覚えなきゃいけないこと、覚えなくていいこと

プログラミングについてこらから勉強するとき、気をつけてほしいことがあります。それは、言語の書き方ではなく、仕組みを理解することです。
プログラミングは、検索して自分で解決できるようになる、という状態になればあとはどーにでもなります。

  • 言語の書き方 →そんなことはググればわかる
  • 仕組み →これがわからないと、困ったときにググって解決できない

なので、仕組みを理解していくことが大切です。

プログラミングの仕組み

f:id:pontasensei:20190914020238p:plain

じゃあ、プログラミングの仕組みとはなんぞ、という話をしますね。
一言で言うと、プログラミングとは「人間が読める文章でコンピューターへの命令を書くこと」です。
そもそもコンピューターの中では、電気信号のON/OFF、つまり1か0でしか、物事を処理できません。

  • 数字はすべて2進数という0と1の羅列で表現されます。たとえば、13は1101です。
  • 文字データも0と1に変換されます。
  • 画像データも0と1の組み合わせでデータを持ちます。

こんな感じで、コンピューターはすべて0か1でしか理解できません。なので、突き詰めて考えると、コンピューターに命令するためには、0と1を並べて指示する必要があるのです。

カツオ「コンピュータ君!011001100010100011010101010101001をやって下さい」

みたいな。
そんなの無理ですよね!そこで発明されたのが「プログラミング言語」というものです。
コンピューターと人間の間に立ってくれて、言葉を翻訳してくれるヤツです。PHP君とか、Python君とか、Java君のことです。
彼らもまだまだ完璧ではないので、人間の言葉をちょっと工夫して、伝えてやる必要があります。それがプログラミング言語です。

 

プログラムが動く環境とは

プログラミング言語について、ざっくりと理解できたと思いますが、今度は「環境」という言葉についてお話します。
プログラムが動くためには、コンピューターが処理するためのツールが必要になってきます。そのツールたちのことを「環境」と言います。
それらのツールって何かって言うと、たとえば「サーバーOS」。フツーの人であればWindowsやmacのOSを使っています。でも、プログラムを処理するときにサーバー用のOSが必要になることもあります。たとえば、いま見ているこの記事は、はてなブログのサーバー上でサーバーOSが処理したデータを表示しています。
ほかにも、たとえば「データベース」とか。データベースとは、データを効率よく格納/取り出しできる仕組みです。たとえば、ググったときに検索結果がスパーんと出てくるのは、Google先生が持っている「データベース」にアクセスしているのです。
このように、プログラムが動くためにはいろんなツールたちが、力を合わせています。これらを理解し、そして準備してあげないと、プログラムは動きません。
初心者がいちばんつまずくのが、この「環境」だと思います。プログラミング言語を勉強したいと思ったとき、書いても書いても、「環境」が整っていないとまったく動いてくれず、なにがなんだかわからなくなってしまうのです。

 

"プログラミングを学ぶ"とは

プログラミング言語自体の書き方なんて、あとからどうにでもなります。大事なのは、プログラムがなぜ動くのか、どういう環境が必要なのかを理解していくことです。
プログラミングを学ぶとは、言語を学ぶのではなく、仕組みを学ぶことなんです。

 

プログラミングが難しいと思う人がやるべきこと

プログラミングは難しいです。でも、大丈夫です。ちゃんとステップを踏んでいけば、どんな人でもできるようになります。

言語を決める

プログラミングを始めるには、どのプログラミング言語をやるのか決める必要があります。というのも、言語によって作れるものや、準備しなければいけない環境が違うからです。
すでに仕事の関係などで習得すべき言語が決まっている方は迷うことないですが、もしどれにしようか決めなければならないなら、下の表を参考にしてみてください。

言語 難易度 作れるもの 環境キーワード
エクセルマクロ(VBA) ★★☆☆☆ 自動化ツール Excelのみ
C、C++ ★★★☆☆ シミュレーション パソコンのみ
HTML ★☆☆☆☆ 簡単なホームページ サーバーのみ
CSS ★★☆☆☆ キレイなホームページ サーバー、HTML
JavaScript ★★☆☆☆ 動きのあるホームページ サーバー、Apache、HTML、jQuery
Ruby、Ruby on Rails ★★★☆☆ Webスクレイピング、Webアプリケーション、人工知能など サーバー、HTML、Apache、SQLite、MySQL
Python ★★★☆☆ Webスクレイピング、Webアプリケーション、人工知能など サーバー、HTML、Apache、SQLite、MySQL
PHP ★★★★☆ Webアプリケーション(ECサイトとかWordpressとか) サーバー、HTML、Apache、MariaDB、Perl、XAMPP
Swift ★★★★☆ iOSアプリ Mac、Xcode、AppleDeveloper
Java ★★★★★ 業務アプリケーション(注文処理とか、在庫管理とか、夜間バッチも)、デスクトップアプリ サーバー、HTML、JRE、JDK、Oracle、MySQL

 

この中でおすすめの言語は、「Ruby」か「Python」です。難易度がそこまで高くなくて、いろんな種類のアプリケーションを作れる言語だからです。
初めてプログラミングをする方は、「Ruby」か「Python」で間違いないです。
また、すでにひとつの言語をすでにやったことがある人なら、次に取り組む言語は断然「Java」がおすすめです。
Javaは今のところ世界一需要がある言語なので、つぶしが効きます。
難易度が高いので初心者にはお勧めできませんが、自信があるならチャレンジしてみてもいいかと思います。

まずは一冊本を通す

先ほど紹介した通り、初心者におすすめの言語は「Ruby」か「Python」です。
体系的な知識をつけていくうえで、チュートリアルのように勉強していくのがおすすめです。
そのためには、順序だててクリアしていくような内容の本を買うのが良いです。

初心者がRubyを学ぶときにおすすめの本は、「3ステップでしっかり学ぶ Ruby入門」です。


初心者向けに丁寧に書かれています。
ただ文法を羅列して、サンプルコード羅列しておしまい。みたいな乱暴な本ではなく、ちゃんと環境構築のところから丁寧に解説されていて、順番に知識を身に着けていけるところが◎goodです。

また、初心者がPythonを学ぶときにおすすめなのは、「独学プログラマー Python言語の基本から仕事のやり方まで」です。


この本は、超ベストセラーです。正直なところ、すべてのプログラミング書籍において、この本の右に出るものはないと思います。
この本では、Pythonのことも勉強しつつ、プログラムの仕組みや、仕事の進め方まで解説されていて、非常にバランスのとれた本だなーと思います。
僕の会社は金融ですが、システムにまったく関係のない普通の社員向けのPython研修があって、その研修ではこの本を使っています。
Webスクレイピングによる働き方改革が狙いです。

 

なにがなんでもHelloWorldを表示する

f:id:pontasensei:20190914023330p:plain

プログラミング学習用の本を買ったら、あとはパソコンの前でひたすら手を動かしましょう。
まずは、環境を作るところが最初の難関です。これについては、まずは本に書いてあることを忠実に再現しましょう。
そして、プログラミングの世界では有名な、「HelloWorld」という言葉を画面に出しましょう。
「HelloWorld」が出せる=「環境構築ができた」ということになります。

 

コーディングを練習する

環境構築まで済ませてしまえば、あとはコーディングの練習をしていくだけです。
プログラミングを進めるには、決められたルール(文法)を守りながらコーディングしていく必要があります。
最初は何度もエラーが出てしまうと思いますが、一つずつ着実にすすめていけば、どんどん身についてきます。

 

プログラミングを理解するための最終ステップ

他の言語も試してみる

プログラミングというのは、ひとつの言語をつきつめて理解してしまえば、すぐにほかの言語に応用することができます。
ネットワーク、サーバー、データベース、文法、オブジェクト指向などの知識が一通り見についてしまえば、いままで経験したことのない言語に取り組む場合でも、すぐに習得できてしまいます。
僕が思うに、その「共通感」みたいなところは、二つ目の言語を習得するとよくわかります。
なので、ひとつ言語を習得したら、ぜひほかの言語にもチャレンジしてみてください。

初心者におすすめなのは「Ruby」か「Python」ですが、二つ目の言語では圧倒的に「Java」がおすすめです。
スッキリわかるJava入門 第2版 (スッキリシリーズ)
Javaは難易度が少し高めですが、世界一使われている言語なので、損はないです。

ぜひ、二つ目のプログラミング言語にもチャレンジして、共通しているところ共通していないところを理解してほしいです。
そしたら、未知の言語に「明日からよろしく!」と言われても、即戦力として活躍できるほどの力がつくと思います。
※実際の現場はそんなもんです。

 

まとめ

さて、冒頭の話にもどりますが、なぜプログラミングって難しいんでしたっけ?
それは、「ネットで検索して自分で解決できないから」でした。
ですが、本記事に書いた方法で取り組んでいただければ、必ず体系的な知識を身につけることができます。
そしたらどうなるかというと、

 

体系的な知識がある
 ↓
自分でネットで検索して、理解することができる
 ↓
プログラミングなんて、難しくないじゃん!

 という思考回路になります。
この状態になったら、プログラミングは一人前と言えるでしょう。
ぜひ、積極的に取り組んでみてくださいね。